forked from enviPath/enviPy
Current Dev State
This commit is contained in:
19
static/js/ketcher2/node_modules/circular-json/LICENSE.txt
generated
vendored
Normal file
19
static/js/ketcher2/node_modules/circular-json/LICENSE.txt
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
Copyright (C) 2013-2017 by Andrea Giammarchi - @WebReflection
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
135
static/js/ketcher2/node_modules/circular-json/README.md
generated
vendored
Normal file
135
static/js/ketcher2/node_modules/circular-json/README.md
generated
vendored
Normal file
@ -0,0 +1,135 @@
|
||||
CircularJSON
|
||||
============
|
||||
|
||||
 [](https://travis-ci.org/WebReflection/circular-json) [](https://coveralls.io/github/WebReflection/circular-json?branch=master) [](https://github.com/WebReflection/donate)
|
||||
|
||||
Serializes and deserializes otherwise valid JSON objects containing circular references into and from a specialized JSON format.
|
||||
|
||||
- - -
|
||||
|
||||
### A Working Solution To A Common Problem
|
||||
A usage example:
|
||||
|
||||
```JavaScript
|
||||
var object = {};
|
||||
object.arr = [
|
||||
object, object
|
||||
];
|
||||
object.arr.push(object.arr);
|
||||
object.obj = object;
|
||||
|
||||
var serialized = CircularJSON.stringify(object);
|
||||
// '{"arr":["~","~","~arr"],"obj":"~"}'
|
||||
// NOTE: CircularJSON DOES NOT parse JS
|
||||
// it handles receiver and reviver callbacks
|
||||
|
||||
var unserialized = CircularJSON.parse(serialized);
|
||||
// { arr: [ [Circular], [Circular] ],
|
||||
// obj: [Circular] }
|
||||
|
||||
unserialized.obj === unserialized;
|
||||
unserialized.arr[0] === unserialized;
|
||||
unserialized.arr.pop() === unserialized.arr;
|
||||
```
|
||||
|
||||
A quick summary:
|
||||
|
||||
* uses `~` as a special prefix symbol to denote which parent the reference belongs to (i.e. `~root~child1~child2`)
|
||||
* reasonably fast in both serialization and deserialization
|
||||
* compact serialization for easier and slimmer transportation across environments
|
||||
* [tested and covered](test/circular-json.js) over nasty structures too
|
||||
* compatible with all JavaScript engines
|
||||
|
||||
Node Installation & Usage
|
||||
============
|
||||
|
||||
```bash
|
||||
npm install --save circular-json
|
||||
```
|
||||
|
||||
```javascript
|
||||
'use strict';
|
||||
|
||||
var
|
||||
CircularJSON = require('circular-json'),
|
||||
obj = { foo: 'bar' },
|
||||
str
|
||||
;
|
||||
|
||||
obj.self = obj;
|
||||
str = CircularJSON.stringify(obj);
|
||||
```
|
||||
|
||||
There are no dependencies.
|
||||
|
||||
Browser Installation & Usage
|
||||
================
|
||||
|
||||
* Global: <build/circular-json.js>
|
||||
* AMD: <build/circular-json.amd.js>
|
||||
* CommonJS: <build/circular-json.node.js>
|
||||
|
||||
(generated via [gitstrap](https://github.com/WebReflection/gitstrap))
|
||||
|
||||
```html
|
||||
<script src="build/circular-json.js"></script>
|
||||
```
|
||||
|
||||
```javascript
|
||||
'use strict';
|
||||
|
||||
var CircularJSON = window.CircularJSON
|
||||
, obj = { foo: 'bar' }
|
||||
, str
|
||||
;
|
||||
|
||||
obj.self = obj;
|
||||
str = CircularJSON.stringify(obj);
|
||||
```
|
||||
|
||||
NOTE: Platforms without native JSON (i.e. MSIE <= 8) requires `json3.js` or similar.
|
||||
|
||||
It is also *a bad idea* to `CircularJSON.parse(JSON.stringify(object))` because of those manipulation used in `CircularJSON.stringify()` able to make parsing safe and secure.
|
||||
|
||||
As summary: `CircularJSON.parse(CircularJSON.stringify(object))` is the way to go, same is for `JSON.parse(JSON.stringify(object))`.
|
||||
|
||||
API
|
||||
===
|
||||
|
||||
It's the same as native JSON, except the fourth parameter `placeholder`, which circular references to be replaced with `"[Circular]"` (i.e. for logging).
|
||||
|
||||
* CircularJSON.stringify(object, replacer, spacer, placeholder)
|
||||
* CircularJSON.parse(string, reviver)
|
||||
|
||||
Bear in mind `JSON.parse(CircularJSON.stringify(object))` will work but not produce the expected output.
|
||||
|
||||
Similar Libraries
|
||||
=======
|
||||
|
||||
### Why Not the [@izs](https://twitter.com/izs) One
|
||||
The module [json-stringify-safe](https://github.com/isaacs/json-stringify-safe) seems to be for `console.log()` but it's completely pointless for `JSON.parse()`, being latter one unable to retrieve back the initial structure. Here an example:
|
||||
|
||||
```JavaScript
|
||||
// a logged object with circular references
|
||||
{
|
||||
"circularRef": "[Circular]",
|
||||
"list": [
|
||||
"[Circular]",
|
||||
"[Circular]"
|
||||
]
|
||||
}
|
||||
// what do we do with above output ?
|
||||
```
|
||||
|
||||
Just type this in your `node` console: `var o = {}; o.a = o; console.log(o);`. The output will be `{ a: [Circular] }` ... good, but that ain't really solving the problem.
|
||||
|
||||
However, if that's all you need, the function used to create that kind of output is probably faster than `CircularJSON` and surely fits in less lines of code.
|
||||
|
||||
|
||||
### Why Not {{put random name}} Solution
|
||||
So here the thing: circular references can be wrong but, if there is a need for them, any attempt to ignore them or remove them can be considered just a failure.
|
||||
|
||||
Not because the method is bad or it's not working, simply because the circular info, the one we needed and used in the first place, is lost!
|
||||
|
||||
In this case, `CircularJSON` does even more than just solve circular and recursions: it maps all same objects so that less memory is used as well on deserialization as less bandwidth too!
|
||||
It's able to redefine those references back later on so the way we store is the way we retrieve and in a reasonably performant way, also trusting the snappy and native `JSON` methods to iterate.
|
||||
2
static/js/ketcher2/node_modules/circular-json/build/circular-json.js
generated
vendored
Normal file
2
static/js/ketcher2/node_modules/circular-json/build/circular-json.js
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/*! (C) WebReflection Mit Style License */
|
||||
var CircularJSON=function(e,t){function l(e,t,o){var u=[],f=[e],l=[e],c=[o?n:"[Circular]"],h=e,p=1,d;return function(e,v){return t&&(v=t.call(this,e,v)),e!==""&&(h!==this&&(d=p-a.call(f,this)-1,p-=d,f.splice(p,f.length),u.splice(p-1,u.length),h=this),typeof v=="object"&&v?(a.call(f,v)<0&&f.push(h=v),p=f.length,d=a.call(l,v),d<0?(d=l.push(v)-1,o?(u.push((""+e).replace(s,r)),c[d]=n+u.join(n)):c[d]=c[0]):v=c[d]):typeof v=="string"&&o&&(v=v.replace(r,i).replace(n,r))),v}}function c(e,t){for(var r=0,i=t.length;r<i;e=e[t[r++].replace(o,n)]);return e}function h(e){return function(t,s){var o=typeof s=="string";return o&&s.charAt(0)===n?new f(s.slice(1)):(t===""&&(s=v(s,s,{})),o&&(s=s.replace(u,"$1"+n).replace(i,r)),e?e.call(this,t,s):s)}}function p(e,t,n){for(var r=0,i=t.length;r<i;r++)t[r]=v(e,t[r],n);return t}function d(e,t,n){for(var r in t)t.hasOwnProperty(r)&&(t[r]=v(e,t[r],n));return t}function v(e,t,r){return t instanceof Array?p(e,t,r):t instanceof f?t.length?r.hasOwnProperty(t)?r[t]:r[t]=c(e,t.split(n)):e:t instanceof Object?d(e,t,r):t}function m(t,n,r,i){return e.stringify(t,l(t,n,!i),r)}function g(t,n){return e.parse(t,h(n))}var n="~",r="\\x"+("0"+n.charCodeAt(0).toString(16)).slice(-2),i="\\"+r,s=new t(r,"g"),o=new t(i,"g"),u=new t("(?:^|([^\\\\]))"+i),a=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},f=String;return{stringify:m,parse:g}}(JSON,RegExp);
|
||||
189
static/js/ketcher2/node_modules/circular-json/build/circular-json.max.js
generated
vendored
Normal file
189
static/js/ketcher2/node_modules/circular-json/build/circular-json.max.js
generated
vendored
Normal file
@ -0,0 +1,189 @@
|
||||
/*!
|
||||
Copyright (C) 2013 by WebReflection
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
var CircularJSON = (function(JSON, RegExp){
|
||||
var
|
||||
// should be a not so common char
|
||||
// possibly one JSON does not encode
|
||||
// possibly one encodeURIComponent does not encode
|
||||
// right now this char is '~' but this might change in the future
|
||||
specialChar = '~',
|
||||
safeSpecialChar = '\\x' + (
|
||||
'0' + specialChar.charCodeAt(0).toString(16)
|
||||
).slice(-2),
|
||||
escapedSafeSpecialChar = '\\' + safeSpecialChar,
|
||||
specialCharRG = new RegExp(safeSpecialChar, 'g'),
|
||||
safeSpecialCharRG = new RegExp(escapedSafeSpecialChar, 'g'),
|
||||
|
||||
safeStartWithSpecialCharRG = new RegExp('(?:^|([^\\\\]))' + escapedSafeSpecialChar),
|
||||
|
||||
indexOf = [].indexOf || function(v){
|
||||
for(var i=this.length;i--&&this[i]!==v;);
|
||||
return i;
|
||||
},
|
||||
$String = String // there's no way to drop warnings in JSHint
|
||||
// about new String ... well, I need that here!
|
||||
// faked, and happy linter!
|
||||
;
|
||||
|
||||
function generateReplacer(value, replacer, resolve) {
|
||||
var
|
||||
path = [],
|
||||
all = [value],
|
||||
seen = [value],
|
||||
mapp = [resolve ? specialChar : '[Circular]'],
|
||||
last = value,
|
||||
lvl = 1,
|
||||
i
|
||||
;
|
||||
return function(key, value) {
|
||||
// the replacer has rights to decide
|
||||
// if a new object should be returned
|
||||
// or if there's some key to drop
|
||||
// let's call it here rather than "too late"
|
||||
if (replacer) value = replacer.call(this, key, value);
|
||||
|
||||
// did you know ? Safari passes keys as integers for arrays
|
||||
// which means if (key) when key === 0 won't pass the check
|
||||
if (key !== '') {
|
||||
if (last !== this) {
|
||||
i = lvl - indexOf.call(all, this) - 1;
|
||||
lvl -= i;
|
||||
all.splice(lvl, all.length);
|
||||
path.splice(lvl - 1, path.length);
|
||||
last = this;
|
||||
}
|
||||
// console.log(lvl, key, path);
|
||||
if (typeof value === 'object' && value) {
|
||||
// if object isn't referring to parent object, add to the
|
||||
// object path stack. Otherwise it is already there.
|
||||
if (indexOf.call(all, value) < 0) {
|
||||
all.push(last = value);
|
||||
}
|
||||
lvl = all.length;
|
||||
i = indexOf.call(seen, value);
|
||||
if (i < 0) {
|
||||
i = seen.push(value) - 1;
|
||||
if (resolve) {
|
||||
// key cannot contain specialChar but could be not a string
|
||||
path.push(('' + key).replace(specialCharRG, safeSpecialChar));
|
||||
mapp[i] = specialChar + path.join(specialChar);
|
||||
} else {
|
||||
mapp[i] = mapp[0];
|
||||
}
|
||||
} else {
|
||||
value = mapp[i];
|
||||
}
|
||||
} else {
|
||||
if (typeof value === 'string' && resolve) {
|
||||
// ensure no special char involved on deserialization
|
||||
// in this case only first char is important
|
||||
// no need to replace all value (better performance)
|
||||
value = value .replace(safeSpecialChar, escapedSafeSpecialChar)
|
||||
.replace(specialChar, safeSpecialChar);
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
};
|
||||
}
|
||||
|
||||
function retrieveFromPath(current, keys) {
|
||||
for(var i = 0, length = keys.length; i < length; current = current[
|
||||
// keys should be normalized back here
|
||||
keys[i++].replace(safeSpecialCharRG, specialChar)
|
||||
]);
|
||||
return current;
|
||||
}
|
||||
|
||||
function generateReviver(reviver) {
|
||||
return function(key, value) {
|
||||
var isString = typeof value === 'string';
|
||||
if (isString && value.charAt(0) === specialChar) {
|
||||
return new $String(value.slice(1));
|
||||
}
|
||||
if (key === '') value = regenerate(value, value, {});
|
||||
// again, only one needed, do not use the RegExp for this replacement
|
||||
// only keys need the RegExp
|
||||
if (isString) value = value .replace(safeStartWithSpecialCharRG, '$1' + specialChar)
|
||||
.replace(escapedSafeSpecialChar, safeSpecialChar);
|
||||
return reviver ? reviver.call(this, key, value) : value;
|
||||
};
|
||||
}
|
||||
|
||||
function regenerateArray(root, current, retrieve) {
|
||||
for (var i = 0, length = current.length; i < length; i++) {
|
||||
current[i] = regenerate(root, current[i], retrieve);
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
function regenerateObject(root, current, retrieve) {
|
||||
for (var key in current) {
|
||||
if (current.hasOwnProperty(key)) {
|
||||
current[key] = regenerate(root, current[key], retrieve);
|
||||
}
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
function regenerate(root, current, retrieve) {
|
||||
return current instanceof Array ?
|
||||
// fast Array reconstruction
|
||||
regenerateArray(root, current, retrieve) :
|
||||
(
|
||||
current instanceof $String ?
|
||||
(
|
||||
// root is an empty string
|
||||
current.length ?
|
||||
(
|
||||
retrieve.hasOwnProperty(current) ?
|
||||
retrieve[current] :
|
||||
retrieve[current] = retrieveFromPath(
|
||||
root, current.split(specialChar)
|
||||
)
|
||||
) :
|
||||
root
|
||||
) :
|
||||
(
|
||||
current instanceof Object ?
|
||||
// dedicated Object parser
|
||||
regenerateObject(root, current, retrieve) :
|
||||
// value as it is
|
||||
current
|
||||
)
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
function stringifyRecursion(value, replacer, space, doNotResolve) {
|
||||
return JSON.stringify(value, generateReplacer(value, replacer, !doNotResolve), space);
|
||||
}
|
||||
|
||||
function parseRecursion(text, reviver) {
|
||||
return JSON.parse(text, generateReviver(reviver));
|
||||
}
|
||||
return {
|
||||
stringify: stringifyRecursion,
|
||||
parse: parseRecursion
|
||||
};
|
||||
}(JSON, RegExp));
|
||||
185
static/js/ketcher2/node_modules/circular-json/build/circular-json.node.js
generated
vendored
Normal file
185
static/js/ketcher2/node_modules/circular-json/build/circular-json.node.js
generated
vendored
Normal file
@ -0,0 +1,185 @@
|
||||
/*!
|
||||
Copyright (C) 2013 by WebReflection
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
var
|
||||
// should be a not so common char
|
||||
// possibly one JSON does not encode
|
||||
// possibly one encodeURIComponent does not encode
|
||||
// right now this char is '~' but this might change in the future
|
||||
specialChar = '~',
|
||||
safeSpecialChar = '\\x' + (
|
||||
'0' + specialChar.charCodeAt(0).toString(16)
|
||||
).slice(-2),
|
||||
escapedSafeSpecialChar = '\\' + safeSpecialChar,
|
||||
specialCharRG = new RegExp(safeSpecialChar, 'g'),
|
||||
safeSpecialCharRG = new RegExp(escapedSafeSpecialChar, 'g'),
|
||||
|
||||
safeStartWithSpecialCharRG = new RegExp('(?:^|([^\\\\]))' + escapedSafeSpecialChar),
|
||||
|
||||
indexOf = [].indexOf || function(v){
|
||||
for(var i=this.length;i--&&this[i]!==v;);
|
||||
return i;
|
||||
},
|
||||
$String = String // there's no way to drop warnings in JSHint
|
||||
// about new String ... well, I need that here!
|
||||
// faked, and happy linter!
|
||||
;
|
||||
|
||||
function generateReplacer(value, replacer, resolve) {
|
||||
var
|
||||
path = [],
|
||||
all = [value],
|
||||
seen = [value],
|
||||
mapp = [resolve ? specialChar : '[Circular]'],
|
||||
last = value,
|
||||
lvl = 1,
|
||||
i
|
||||
;
|
||||
return function(key, value) {
|
||||
// the replacer has rights to decide
|
||||
// if a new object should be returned
|
||||
// or if there's some key to drop
|
||||
// let's call it here rather than "too late"
|
||||
if (replacer) value = replacer.call(this, key, value);
|
||||
|
||||
// did you know ? Safari passes keys as integers for arrays
|
||||
// which means if (key) when key === 0 won't pass the check
|
||||
if (key !== '') {
|
||||
if (last !== this) {
|
||||
i = lvl - indexOf.call(all, this) - 1;
|
||||
lvl -= i;
|
||||
all.splice(lvl, all.length);
|
||||
path.splice(lvl - 1, path.length);
|
||||
last = this;
|
||||
}
|
||||
// console.log(lvl, key, path);
|
||||
if (typeof value === 'object' && value) {
|
||||
// if object isn't referring to parent object, add to the
|
||||
// object path stack. Otherwise it is already there.
|
||||
if (indexOf.call(all, value) < 0) {
|
||||
all.push(last = value);
|
||||
}
|
||||
lvl = all.length;
|
||||
i = indexOf.call(seen, value);
|
||||
if (i < 0) {
|
||||
i = seen.push(value) - 1;
|
||||
if (resolve) {
|
||||
// key cannot contain specialChar but could be not a string
|
||||
path.push(('' + key).replace(specialCharRG, safeSpecialChar));
|
||||
mapp[i] = specialChar + path.join(specialChar);
|
||||
} else {
|
||||
mapp[i] = mapp[0];
|
||||
}
|
||||
} else {
|
||||
value = mapp[i];
|
||||
}
|
||||
} else {
|
||||
if (typeof value === 'string' && resolve) {
|
||||
// ensure no special char involved on deserialization
|
||||
// in this case only first char is important
|
||||
// no need to replace all value (better performance)
|
||||
value = value .replace(safeSpecialChar, escapedSafeSpecialChar)
|
||||
.replace(specialChar, safeSpecialChar);
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
};
|
||||
}
|
||||
|
||||
function retrieveFromPath(current, keys) {
|
||||
for(var i = 0, length = keys.length; i < length; current = current[
|
||||
// keys should be normalized back here
|
||||
keys[i++].replace(safeSpecialCharRG, specialChar)
|
||||
]);
|
||||
return current;
|
||||
}
|
||||
|
||||
function generateReviver(reviver) {
|
||||
return function(key, value) {
|
||||
var isString = typeof value === 'string';
|
||||
if (isString && value.charAt(0) === specialChar) {
|
||||
return new $String(value.slice(1));
|
||||
}
|
||||
if (key === '') value = regenerate(value, value, {});
|
||||
// again, only one needed, do not use the RegExp for this replacement
|
||||
// only keys need the RegExp
|
||||
if (isString) value = value .replace(safeStartWithSpecialCharRG, '$1' + specialChar)
|
||||
.replace(escapedSafeSpecialChar, safeSpecialChar);
|
||||
return reviver ? reviver.call(this, key, value) : value;
|
||||
};
|
||||
}
|
||||
|
||||
function regenerateArray(root, current, retrieve) {
|
||||
for (var i = 0, length = current.length; i < length; i++) {
|
||||
current[i] = regenerate(root, current[i], retrieve);
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
function regenerateObject(root, current, retrieve) {
|
||||
for (var key in current) {
|
||||
if (current.hasOwnProperty(key)) {
|
||||
current[key] = regenerate(root, current[key], retrieve);
|
||||
}
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
function regenerate(root, current, retrieve) {
|
||||
return current instanceof Array ?
|
||||
// fast Array reconstruction
|
||||
regenerateArray(root, current, retrieve) :
|
||||
(
|
||||
current instanceof $String ?
|
||||
(
|
||||
// root is an empty string
|
||||
current.length ?
|
||||
(
|
||||
retrieve.hasOwnProperty(current) ?
|
||||
retrieve[current] :
|
||||
retrieve[current] = retrieveFromPath(
|
||||
root, current.split(specialChar)
|
||||
)
|
||||
) :
|
||||
root
|
||||
) :
|
||||
(
|
||||
current instanceof Object ?
|
||||
// dedicated Object parser
|
||||
regenerateObject(root, current, retrieve) :
|
||||
// value as it is
|
||||
current
|
||||
)
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
function stringifyRecursion(value, replacer, space, doNotResolve) {
|
||||
return JSON.stringify(value, generateReplacer(value, replacer, !doNotResolve), space);
|
||||
}
|
||||
|
||||
function parseRecursion(text, reviver) {
|
||||
return JSON.parse(text, generateReviver(reviver));
|
||||
}
|
||||
this.stringify = stringifyRecursion;
|
||||
this.parse = parseRecursion;
|
||||
65
static/js/ketcher2/node_modules/circular-json/package.json
generated
vendored
Normal file
65
static/js/ketcher2/node_modules/circular-json/package.json
generated
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
{
|
||||
"_from": "circular-json@^0.3.1",
|
||||
"_id": "circular-json@0.3.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
|
||||
"_location": "/circular-json",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "circular-json@^0.3.1",
|
||||
"name": "circular-json",
|
||||
"escapedName": "circular-json",
|
||||
"rawSpec": "^0.3.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^0.3.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/flat-cache"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
|
||||
"_shasum": "815c99ea84f6809529d2f45791bdf82711352d66",
|
||||
"_spec": "circular-json@^0.3.1",
|
||||
"_where": "/home/manfred/enviPath/ketcher2/ketcher/node_modules/flat-cache",
|
||||
"author": {
|
||||
"name": "Andrea Giammarchi",
|
||||
"url": "http://webreflection.blogspot.com/"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/WebReflection/circular-json/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "JSON does not handle circular references. This version does",
|
||||
"devDependencies": {
|
||||
"coveralls": "^2.13.0",
|
||||
"istanbul": "^0.4.5",
|
||||
"tiny-cdn": "^0.7.0",
|
||||
"tressa": "^0.3.1"
|
||||
},
|
||||
"generator": "https://github.com/WebReflection/gitstrap",
|
||||
"homepage": "https://github.com/WebReflection/circular-json",
|
||||
"keywords": [
|
||||
"JSON",
|
||||
"circular",
|
||||
"reference",
|
||||
"recursive",
|
||||
"recursion",
|
||||
"parse",
|
||||
"stringify"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "./build/circular-json.node.js",
|
||||
"name": "circular-json",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/WebReflection/circular-json.git"
|
||||
},
|
||||
"scripts": {
|
||||
"coveralls": "cat ./coverage/lcov.info | coveralls",
|
||||
"test": "istanbul cover test/circular-json.js",
|
||||
"web": "$(sleep 2 && open http://0.0.0.0:7151/) & tiny-cdn run ./"
|
||||
},
|
||||
"version": "0.3.3"
|
||||
}
|
||||
2
static/js/ketcher2/node_modules/circular-json/template/license.after
generated
vendored
Normal file
2
static/js/ketcher2/node_modules/circular-json/template/license.after
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
*/
|
||||
1
static/js/ketcher2/node_modules/circular-json/template/license.before
generated
vendored
Normal file
1
static/js/ketcher2/node_modules/circular-json/template/license.before
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
/*!
|
||||
Reference in New Issue
Block a user