diff --git a/packages/replace/src/index.js b/packages/replace/src/index.js index cd1ff5563..acfb91990 100755 --- a/packages/replace/src/index.js +++ b/packages/replace/src/index.js @@ -74,7 +74,7 @@ export default function replace(options = {}) { if (objectGuards) expandTypeofReplacements(replacements); const functionValues = mapToFunctions(replacements); const keys = Object.keys(functionValues).sort(longest).map(escape); - const lookahead = preventAssignment ? '(?!\\s*=[^=])' : ''; + const lookahead = preventAssignment ? '(?!\\s*(=[^=]|:[^:]))' : ''; const pattern = new RegExp( `${delimiters[0]}(${keys.join('|')})${delimiters[1]}${lookahead}`, 'g' diff --git a/packages/replace/test/fixtures/form/typescript-declare/_config.js b/packages/replace/test/fixtures/form/typescript-declare/_config.js new file mode 100755 index 000000000..859fe5f64 --- /dev/null +++ b/packages/replace/test/fixtures/form/typescript-declare/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: "doesn't replace lvalue in typescript declare", + isTypescript: true, + options: { + 'NAME': 'replaced', + preventAssignment: true + } +}; diff --git a/packages/replace/test/fixtures/form/typescript-declare/input.ts b/packages/replace/test/fixtures/form/typescript-declare/input.ts new file mode 100755 index 000000000..1e39e3e8c --- /dev/null +++ b/packages/replace/test/fixtures/form/typescript-declare/input.ts @@ -0,0 +1,2 @@ +declare const NAME: string +console.log(NAME) diff --git a/packages/replace/test/fixtures/form/typescript-declare/output.ts b/packages/replace/test/fixtures/form/typescript-declare/output.ts new file mode 100755 index 000000000..ea8a01a4f --- /dev/null +++ b/packages/replace/test/fixtures/form/typescript-declare/output.ts @@ -0,0 +1,3 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +declare const NAME: string +console.log('replaced') diff --git a/packages/replace/test/form.js b/packages/replace/test/form.js index 9685dcc99..287a1d508 100644 --- a/packages/replace/test/form.js +++ b/packages/replace/test/form.js @@ -21,10 +21,11 @@ readdirSync('./fixtures/form').forEach((dir) => { test(`${dir}: ${config.description}`, (t) => { const { transform } = replace(config.options); - const input = readFileSync(`fixtures/form/${dir}/input.js`, 'utf-8'); + const extname = config.isTypescript ? 'ts' : 'js'; + const input = readFileSync(`fixtures/form/${dir}/input.${extname}`, 'utf-8'); return Promise.resolve( - transform.call(transformContext, input, `${__dirname}/fixtures/form/${dir}/input.js`) + transform.call(transformContext, input, `${__dirname}/fixtures/form/${dir}/input.${extname}`) ).then((transformed) => { const actual = (transformed ? transformed.code : input).trim(); t.snapshot(actual); diff --git a/packages/replace/test/snapshots/form.js.md b/packages/replace/test/snapshots/form.js.md index 0f2bae2c6..cc254b516 100644 --- a/packages/replace/test/snapshots/form.js.md +++ b/packages/replace/test/snapshots/form.js.md @@ -86,3 +86,10 @@ Generated by [AVA](https://avajs.dev). especial␊ replaced.doSomething()␊ \`);` + +## typescript-declare: doesn't replace lvalue in typescript declare + +> Snapshot 1 + + `declare const NAME: string␊ + console.log(replaced)` diff --git a/packages/replace/test/snapshots/form.js.snap b/packages/replace/test/snapshots/form.js.snap index 050826daa..e907e7442 100644 Binary files a/packages/replace/test/snapshots/form.js.snap and b/packages/replace/test/snapshots/form.js.snap differ