Socket
Socket
Sign inDemoInstall

@rollup/plugin-replace

Package Overview
Dependencies
Maintainers
4
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rollup/plugin-replace - npm Package Compare versions

Comparing version 3.0.1 to 3.1.0

8

CHANGELOG.md
# @rollup/plugin-replace ChangeLog
## v3.1.0
_2022-02-11_
### Features
- feat: typeofReplacements option (#1084)
## v3.0.1

@@ -4,0 +12,0 @@

36

dist/rollup-plugin-replace.cjs.js

@@ -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*=[^=])' : '';

2

package.json
{
"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*=[^=])' : '';

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc