@rollup/plugin-replace
Advanced tools
Comparing version 3.0.1 to 3.1.0
# @rollup/plugin-replace ChangeLog | ||
## v3.1.0 | ||
_2022-02-11_ | ||
### Features | ||
- feat: typeofReplacements option (#1084) | ||
## v3.0.1 | ||
@@ -4,0 +12,0 @@ |
@@ -33,2 +33,3 @@ 'use strict'; | ||
delete values.sourceMap; | ||
delete values.objectGuards; | ||
return values; | ||
@@ -45,2 +46,32 @@ } | ||
var objKeyRegEx = /^([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)(\.([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*))+$/; | ||
function expandTypeofReplacements(replacements) { | ||
Object.keys(replacements).forEach(function (key) { | ||
var objMatch = key.match(objKeyRegEx); | ||
if (!objMatch) { return; } | ||
var dotIndex = objMatch[1].length; | ||
var lastIndex = 0; | ||
do { | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " ===")] = '"object" ==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " !==")] = '"object" !=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "===")] = '"object"==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "!==")] = '"object"!=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " ==")] = '"object" ==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " !=")] = '"object" !=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "==")] = '"object"==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "!=")] = '"object"!=='; | ||
lastIndex = dotIndex + 1; | ||
dotIndex = key.indexOf('.', lastIndex); | ||
} while (dotIndex !== -1); | ||
}); | ||
} | ||
function replace(options) { | ||
@@ -52,3 +83,6 @@ if ( options === void 0 ) options = {}; | ||
var preventAssignment = options.preventAssignment; | ||
var functionValues = mapToFunctions(getReplacements(options)); | ||
var objectGuards = options.objectGuards; | ||
var replacements = getReplacements(options); | ||
if (objectGuards) { expandTypeofReplacements(replacements); } | ||
var functionValues = mapToFunctions(replacements); | ||
var keys = Object.keys(functionValues).sort(longest).map(escape); | ||
@@ -55,0 +89,0 @@ var lookahead = preventAssignment ? '(?!\\s*=[^=])' : ''; |
@@ -27,2 +27,3 @@ import MagicString from 'magic-string'; | ||
delete values.sourceMap; | ||
delete values.objectGuards; | ||
return values; | ||
@@ -39,2 +40,32 @@ } | ||
var objKeyRegEx = /^([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)(\.([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*))+$/; | ||
function expandTypeofReplacements(replacements) { | ||
Object.keys(replacements).forEach(function (key) { | ||
var objMatch = key.match(objKeyRegEx); | ||
if (!objMatch) { return; } | ||
var dotIndex = objMatch[1].length; | ||
var lastIndex = 0; | ||
do { | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " ===")] = '"object" ==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " !==")] = '"object" !=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "===")] = '"object"==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "!==")] = '"object"!=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " ==")] = '"object" ==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + " !=")] = '"object" !=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "==")] = '"object"==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[("typeof " + (key.slice(lastIndex, dotIndex)) + "!=")] = '"object"!=='; | ||
lastIndex = dotIndex + 1; | ||
dotIndex = key.indexOf('.', lastIndex); | ||
} while (dotIndex !== -1); | ||
}); | ||
} | ||
function replace(options) { | ||
@@ -46,3 +77,6 @@ if ( options === void 0 ) options = {}; | ||
var preventAssignment = options.preventAssignment; | ||
var functionValues = mapToFunctions(getReplacements(options)); | ||
var objectGuards = options.objectGuards; | ||
var replacements = getReplacements(options); | ||
if (objectGuards) { expandTypeofReplacements(replacements); } | ||
var functionValues = mapToFunctions(replacements); | ||
var keys = Object.keys(functionValues).sort(longest).map(escape); | ||
@@ -49,0 +83,0 @@ var lookahead = preventAssignment ? '(?!\\s*=[^=])' : ''; |
{ | ||
"name": "@rollup/plugin-replace", | ||
"version": "3.0.1", | ||
"version": "3.1.0", | ||
"publishConfig": { | ||
@@ -5,0 +5,0 @@ "access": "public" |
@@ -73,2 +73,35 @@ [npm]: https://img.shields.io/npm/v/@rollup/plugin-replace | ||
### `objectGuards` | ||
Type: `Boolean`<br> | ||
Default: `false` | ||
When replacing dot-separated object properties like `process.env.NODE_ENV`, will also replace `typeof process` object guard | ||
checks against the objects with the string `"object"`. | ||
For example: | ||
```js | ||
replace({ | ||
values: { | ||
'process.env.NODE_ENV': '"production"' | ||
} | ||
}); | ||
``` | ||
```js | ||
// Input | ||
if (typeof process !== 'undefined' && process.env.NODE_ENV === 'production') { | ||
console.log('production'); | ||
} | ||
// Without `objectGuards` | ||
if (typeof process !== 'undefined' && 'production' === 'production') { | ||
console.log('production'); | ||
} | ||
// With `objectGuards` | ||
if ('object' !== 'undefined' && 'production' === 'production') { | ||
console.log('production'); | ||
} | ||
``` | ||
### `preventAssignment` | ||
@@ -75,0 +108,0 @@ |
@@ -27,2 +27,3 @@ import MagicString from 'magic-string'; | ||
delete values.sourceMap; | ||
delete values.objectGuards; | ||
return values; | ||
@@ -39,6 +40,38 @@ } | ||
const objKeyRegEx = /^([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)(\.([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*))+$/; | ||
function expandTypeofReplacements(replacements) { | ||
Object.keys(replacements).forEach((key) => { | ||
const objMatch = key.match(objKeyRegEx); | ||
if (!objMatch) return; | ||
let dotIndex = objMatch[1].length; | ||
let lastIndex = 0; | ||
do { | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)} ===`] = '"object" ==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)} !==`] = '"object" !=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)}===`] = '"object"==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)}!==`] = '"object"!=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)} ==`] = '"object" ==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)} !=`] = '"object" !=='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)}==`] = '"object"==='; | ||
// eslint-disable-next-line no-param-reassign | ||
replacements[`typeof ${key.slice(lastIndex, dotIndex)}!=`] = '"object"!=='; | ||
lastIndex = dotIndex + 1; | ||
dotIndex = key.indexOf('.', lastIndex); | ||
} while (dotIndex !== -1); | ||
}); | ||
} | ||
export default function replace(options = {}) { | ||
const filter = createFilter(options.include, options.exclude); | ||
const { delimiters, preventAssignment } = options; | ||
const functionValues = mapToFunctions(getReplacements(options)); | ||
const { delimiters, preventAssignment, objectGuards } = options; | ||
const replacements = getReplacements(options); | ||
if (objectGuards) expandTypeofReplacements(replacements); | ||
const functionValues = mapToFunctions(replacements); | ||
const keys = Object.keys(functionValues).sort(longest).map(escape); | ||
@@ -45,0 +78,0 @@ const lookahead = preventAssignment ? '(?!\\s*=[^=])' : ''; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
27051
432
226