Comparing version 2.0.0 to 2.0.1
@@ -0,1 +1,9 @@ | ||
### [2.0.1](https://github.com/estools/espurify/releases/tag/v2.0.1) (2019-02-15) | ||
#### Bug Fixes | ||
* [Fix cloning when the same object instance is referenced from multiple nodes (and introduce structural cloning)](https://github.com/estools/espurify/pull/13) by [@papandreou](https://github.com/papandreou) | ||
## [2.0.0](https://github.com/estools/espurify/releases/tag/v2.0.0) (2018-11-23) | ||
@@ -2,0 +10,0 @@ |
@@ -6,3 +6,3 @@ /** | ||
* | ||
* Copyright (c) 2014-2018 Takuto Wada | ||
* Copyright (c) 2014-2019 Takuto Wada | ||
* Licensed under the MIT license. | ||
@@ -9,0 +9,0 @@ * https://github.com/estools/espurify/blob/master/MIT-LICENSE.txt |
@@ -11,16 +11,19 @@ 'use strict'; | ||
function cloneNodeOrObject (obj, seen) { | ||
function cloneNodeOrObject (clone, obj, seen) { | ||
var props = obj.type ? whitelist[obj.type] : null; | ||
if (props) { | ||
return cloneNode(obj, props, seen); | ||
return cloneNode(clone, obj, props, seen); | ||
} else { | ||
return cloneObject(obj, seen); | ||
return cloneObject(clone, obj, seen); | ||
} | ||
} | ||
function cloneArray (ary, seen) { | ||
function cloneArray (clone, ary, seen) { | ||
var i = ary.length; | ||
var clone = []; | ||
while (i--) { | ||
clone[i] = cloneOf(ary[i], seen); | ||
if (seen.has(ary[i])) { | ||
clone[i] = seen.get(ary[i]); | ||
} else { | ||
clone[i] = cloneOf(ary[i], seen); | ||
} | ||
} | ||
@@ -30,9 +33,12 @@ return clone; | ||
function cloneNode (node, props, seen) { | ||
function cloneNode (clone, node, props, seen) { | ||
var i, len, key; | ||
var clone = {}; | ||
for (i = 0, len = props.length; i < len; i += 1) { | ||
key = props[i]; | ||
if (node.hasOwnProperty(key)) { | ||
clone[key] = cloneOf(node[key], seen); | ||
if (seen.has(node[key])) { | ||
clone[key] = seen.get(node[key]); | ||
} else { | ||
clone[key] = cloneOf(node[key], seen); | ||
} | ||
} | ||
@@ -43,6 +49,5 @@ } | ||
function cloneObject (obj, seen) { | ||
function cloneObject (clone, obj, seen) { | ||
var props = Object.keys(obj); | ||
var i, len, key, value; | ||
var clone = {}; | ||
for (i = 0, len = props.length; i < len; i += 1) { | ||
@@ -52,5 +57,6 @@ key = props[i]; | ||
if (seen.has(value)) { | ||
continue; | ||
clone[key] = seen.get(value); | ||
} else { | ||
clone[key] = cloneOf(value, seen); | ||
} | ||
clone[key] = cloneOf(value, seen); | ||
} | ||
@@ -62,9 +68,12 @@ return clone; | ||
if (typeof val === 'object' && val !== null) { | ||
seen.set(val, true); | ||
if (val instanceof RegExp) { | ||
return new RegExp(val); | ||
} else if (Array.isArray(val)) { | ||
return cloneArray(val, seen); | ||
var clone = []; | ||
seen.set(val, clone); | ||
return cloneArray(clone, val, seen); | ||
} else { | ||
return cloneNodeOrObject(val, seen); | ||
var clone = {}; | ||
seen.set(val, clone); | ||
return cloneNodeOrObject(clone, val, seen); | ||
} | ||
@@ -78,4 +87,5 @@ } else { | ||
var seen = new Map(); | ||
seen.set(obj, true); | ||
return cloneNodeOrObject(obj, seen); | ||
var clone = {}; | ||
seen.set(obj, clone); | ||
return cloneNodeOrObject(clone, obj, seen); | ||
} | ||
@@ -82,0 +92,0 @@ |
@@ -1,2 +0,2 @@ | ||
Copyright (c) 2014-2018 Takuto Wada, https://github.com/estools/espurify | ||
Copyright (c) 2014-2019 Takuto Wada, https://github.com/estools/espurify | ||
@@ -3,0 +3,0 @@ Permission is hereby granted, free of charge, to any person obtaining |
{ | ||
"name": "espurify", | ||
"description": "Clone new AST without extra properties", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"author": { | ||
@@ -15,2 +15,6 @@ "name": "Takuto Wada", | ||
"url": "https://github.com/goto-bus-stop" | ||
}, | ||
{ | ||
"name": "Andreas Lind", | ||
"url": "https://github.com/papandreou" | ||
} | ||
@@ -17,0 +21,0 @@ ], |
@@ -21,5 +21,12 @@ espurify | ||
`espurify` supports [ES5](https://github.com/estree/estree/blob/master/es5.md), [ES2015](https://github.com/estree/estree/blob/master/es2015.md), and [ES2017](https://github.com/estree/estree/blob/master/es2017.md) properties. | ||
#### Supported ECMAScript versions | ||
- [ES5](https://github.com/estree/estree/blob/master/es5.md) | ||
- [ES2015](https://github.com/estree/estree/blob/master/es2015.md) | ||
- [ES2016](https://github.com/estree/estree/blob/master/es2016.md) | ||
- [ES2017](https://github.com/estree/estree/blob/master/es2017.md) | ||
- [ES2018](https://github.com/estree/estree/blob/master/es2018.md) | ||
- [ES2019](https://github.com/estree/estree/blob/master/es2019.md) | ||
### var customizedCloneFunctionWithWhiteList = espurify.cloneWithWhitelist(whiteList) | ||
@@ -244,2 +251,3 @@ | ||
* [Renée Kooi](https://github.com/goto-bus-stop) | ||
* [Andreas Lind](https://github.com/papandreou) | ||
@@ -246,0 +254,0 @@ |
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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
20091
180
256
0