From 4b370a54d50ebdd48b0e3350c5b786dfddf029fb Mon Sep 17 00:00:00 2001 From: Steve Workman Date: Mon, 4 Mar 2019 11:33:24 +0000 Subject: [PATCH] feat(cli): Added makeJSOnlyValue to generator API. Provides convenience method for passing JS into config files. Issue #3535 --- docs/dev-guide/generator-api.md | 8 ++++++++ packages/@vue/cli/__tests__/Generator.spec.js | 20 +++++++++++++++++++ packages/@vue/cli/lib/GeneratorAPI.js | 10 ++++++++++ 3 files changed, 38 insertions(+) diff --git a/docs/dev-guide/generator-api.md b/docs/dev-guide/generator-api.md index c71e1a0355..889b44bba5 100644 --- a/docs/dev-guide/generator-api.md +++ b/docs/dev-guide/generator-api.md @@ -97,6 +97,14 @@ Add a message to be printed when the generator exits (after any other standard m - **Usage**: Convenience method for generating a JS config file from JSON +## makeJSOnlyValue + +- **Arguments** + - `{any} str` - JS expression as a string + +- **Usage**: +Turns a string expression into executable JS for .js config files + ## injectImports - **Arguments** diff --git a/packages/@vue/cli/__tests__/Generator.spec.js b/packages/@vue/cli/__tests__/Generator.spec.js index 0bc823872f..3ae81ed220 100644 --- a/packages/@vue/cli/__tests__/Generator.spec.js +++ b/packages/@vue/cli/__tests__/Generator.spec.js @@ -656,3 +656,23 @@ test('extract config files', async () => { expect(fs.readFileSync('/jest.config.js', 'utf-8')).toMatch(js(configs.jest)) expect(fs.readFileSync('/.browserslistrc', 'utf-8')).toMatch('> 1%\nnot <= IE8') }) + +test('generate a JS-Only value from a string', async () => { + const jsAsString = 'true ? "alice" : "bob"' + + const generator = new Generator('/', { plugins: [ + { + id: 'test', + apply: api => { + api.extendPackage({ + testScript: api.makeJSOnlyValue(jsAsString) + }) + } + } + ] }) + + await generator.generate({}) + + expect(generator.pkg).toHaveProperty('testScript') + expect(typeof generator.pkg.testScript).toBe('function') +}) diff --git a/packages/@vue/cli/lib/GeneratorAPI.js b/packages/@vue/cli/lib/GeneratorAPI.js index 8a39bb4f06..35ca1a36bf 100644 --- a/packages/@vue/cli/lib/GeneratorAPI.js +++ b/packages/@vue/cli/lib/GeneratorAPI.js @@ -240,6 +240,16 @@ class GeneratorAPI { return `module.exports = ${stringifyJS(value, null, 2)}` } + /** + * Turns a string expression into executable JS for JS configs. + * @param {*} str JS expression as a string + */ + makeJSOnlyValue (str) { + const fn = () => {} + fn.__expression = str + return fn + } + /** * Add import statements to a file. */