diff --git a/src/index.js b/src/index.js index fcce588..4d3290f 100644 --- a/src/index.js +++ b/src/index.js @@ -33,6 +33,11 @@ const toReplacementExpression = (value, name) => { return [JSON.stringify(matches[2]), name]; } + // --define @assign=Object.assign replaces expressions with expressions: + if (name[0] === '@') { + return [value, name.substring(1)]; + } + // --define A=1,B=true produces int/boolean literal: if (/^(true|false|\d+)$/i.test(value)) { return [value, name]; diff --git a/test/__snapshots__/index.test.js.snap b/test/__snapshots__/index.test.js.snap index 8d8f6a0..fe31181 100644 --- a/test/__snapshots__/index.test.js.snap +++ b/test/__snapshots__/index.test.js.snap @@ -1469,6 +1469,30 @@ exports[`fixtures build define with microbundle 5`] = ` " `; +exports[`fixtures build define-expression with microbundle 1`] = ` +"Used script: microbundle -f esm --no-sourcemap --define @Object.freeze=Object + +Directory tree: + +define-expression + dist + define-expression.js + index.js + package.json + + +Build \\"defineExpression\\" to dist: +56 B: define-expression.js.gz +40 B: define-expression.js.br" +`; + +exports[`fixtures build define-expression with microbundle 2`] = `1`; + +exports[`fixtures build define-expression with microbundle 3`] = ` +"console.log(Object({a:\\"b\\",c:\\"d\\"})); +" +`; + exports[`fixtures build esnext-ts with microbundle 1`] = ` "Used script: microbundle --raw diff --git a/test/fixtures/define-expression/index.js b/test/fixtures/define-expression/index.js new file mode 100644 index 0000000..6387670 --- /dev/null +++ b/test/fixtures/define-expression/index.js @@ -0,0 +1 @@ +console.log(Object.freeze({ a: 'b', c: 'd' })); diff --git a/test/fixtures/define-expression/package.json b/test/fixtures/define-expression/package.json new file mode 100644 index 0000000..d540b39 --- /dev/null +++ b/test/fixtures/define-expression/package.json @@ -0,0 +1,6 @@ +{ + "name": "define-expression", + "scripts": { + "build": "microbundle -f esm --no-sourcemap --define @Object.freeze=Object" + } +} diff --git a/test/index.test.js b/test/index.test.js index ad6baab..dc4c428 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -8,6 +8,8 @@ const FIXTURES_DIR = `${__dirname}/fixtures`; const DEFAULT_SCRIPT = 'microbundle'; const TEST_TIMEOUT = 11000; +const sleep = ms => new Promise(r => setTimeout(r, ms)); + const join = (arr, delimiter = '') => arr.join(delimiter); const printTree = (nodes, indentLevel = 0) => { @@ -39,8 +41,12 @@ describe('fixtures', () => { fixturePath = resolve(fixturePath, fixtureDir.replace('-with-cwd', '')); } + await sleep(1); + const output = await buildDirectory(fixtureDir); + await sleep(1); + const printedDir = printTree([dirTree(fixturePath)]); expect(