mirror of
https://github.com/gradle/gradle-build-action.git
synced 2025-06-06 08:16:11 +02:00
publishing v1 of action
This commit is contained in:
parent
91baa89272
commit
2d5ca45eab
569 changed files with 61688 additions and 2 deletions
1
node_modules/traverse/.npmignore
generated
vendored
Normal file
1
node_modules/traverse/.npmignore
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
node_modules
|
24
node_modules/traverse/LICENSE
generated
vendored
Normal file
24
node_modules/traverse/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
Copyright 2010 James Halliday (mail@substack.net)
|
||||
|
||||
This project is free software released under the MIT/X11 license:
|
||||
http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
Copyright 2010 James Halliday (mail@substack.net)
|
||||
|
||||
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.
|
247
node_modules/traverse/README.markdown
generated
vendored
Normal file
247
node_modules/traverse/README.markdown
generated
vendored
Normal file
|
@ -0,0 +1,247 @@
|
|||
traverse
|
||||
========
|
||||
|
||||
Traverse and transform objects by visiting every node on a recursive walk.
|
||||
|
||||
examples
|
||||
========
|
||||
|
||||
transform negative numbers in-place
|
||||
-----------------------------------
|
||||
|
||||
negative.js
|
||||
|
||||
````javascript
|
||||
var traverse = require('traverse');
|
||||
var obj = [ 5, 6, -3, [ 7, 8, -2, 1 ], { f : 10, g : -13 } ];
|
||||
|
||||
traverse(obj).forEach(function (x) {
|
||||
if (x < 0) this.update(x + 128);
|
||||
});
|
||||
|
||||
console.dir(obj);
|
||||
````
|
||||
|
||||
Output:
|
||||
|
||||
[ 5, 6, 125, [ 7, 8, 126, 1 ], { f: 10, g: 115 } ]
|
||||
|
||||
collect leaf nodes
|
||||
------------------
|
||||
|
||||
leaves.js
|
||||
|
||||
````javascript
|
||||
var traverse = require('traverse');
|
||||
|
||||
var obj = {
|
||||
a : [1,2,3],
|
||||
b : 4,
|
||||
c : [5,6],
|
||||
d : { e : [7,8], f : 9 },
|
||||
};
|
||||
|
||||
var leaves = traverse(obj).reduce(function (acc, x) {
|
||||
if (this.isLeaf) acc.push(x);
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
console.dir(leaves);
|
||||
````
|
||||
|
||||
Output:
|
||||
|
||||
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
|
||||
|
||||
context
|
||||
=======
|
||||
|
||||
Each method that takes a callback has a context (its `this` object) with these
|
||||
attributes:
|
||||
|
||||
this.node
|
||||
---------
|
||||
|
||||
The present node on the recursive walk
|
||||
|
||||
this.path
|
||||
---------
|
||||
|
||||
An array of string keys from the root to the present node
|
||||
|
||||
this.parent
|
||||
-----------
|
||||
|
||||
The context of the node's parent.
|
||||
This is `undefined` for the root node.
|
||||
|
||||
this.key
|
||||
--------
|
||||
|
||||
The name of the key of the present node in its parent.
|
||||
This is `undefined` for the root node.
|
||||
|
||||
this.isRoot, this.notRoot
|
||||
-------------------------
|
||||
|
||||
Whether the present node is the root node
|
||||
|
||||
this.isLeaf, this.notLeaf
|
||||
-------------------------
|
||||
|
||||
Whether or not the present node is a leaf node (has no children)
|
||||
|
||||
this.level
|
||||
----------
|
||||
|
||||
Depth of the node within the traversal
|
||||
|
||||
this.circular
|
||||
-------------
|
||||
|
||||
If the node equals one of its parents, the `circular` attribute is set to the
|
||||
context of that parent and the traversal progresses no deeper.
|
||||
|
||||
this.update(value)
|
||||
------------------
|
||||
|
||||
Set a new value for the present node.
|
||||
|
||||
this.remove()
|
||||
-------------
|
||||
|
||||
Remove the current element from the output. If the node is in an Array it will
|
||||
be spliced off. Otherwise it will be deleted from its parent.
|
||||
|
||||
this.delete()
|
||||
-------------
|
||||
|
||||
Delete the current element from its parent in the output. Calls `delete` even on
|
||||
Arrays.
|
||||
|
||||
this.before(fn)
|
||||
---------------
|
||||
|
||||
Call this function before any of the children are traversed.
|
||||
|
||||
this.after(fn)
|
||||
--------------
|
||||
|
||||
Call this function after any of the children are traversed.
|
||||
|
||||
this.pre(fn)
|
||||
------------
|
||||
|
||||
Call this function before each of the children are traversed.
|
||||
|
||||
this.post(fn)
|
||||
-------------
|
||||
|
||||
Call this function after each of the children are traversed.
|
||||
|
||||
methods
|
||||
=======
|
||||
|
||||
.map(fn)
|
||||
--------
|
||||
|
||||
Execute `fn` for each node in the object and return a new object with the
|
||||
results of the walk. To update nodes in the result use `this.update(value)`.
|
||||
|
||||
.forEach(fn)
|
||||
------------
|
||||
|
||||
Execute `fn` for each node in the object but unlike `.map()`, when
|
||||
`this.update()` is called it updates the object in-place.
|
||||
|
||||
.reduce(fn, acc)
|
||||
----------------
|
||||
|
||||
For each node in the object, perform a
|
||||
[left-fold](http://en.wikipedia.org/wiki/Fold_(higher-order_function))
|
||||
with the return value of `fn(acc, node)`.
|
||||
|
||||
If `acc` isn't specified, `acc` is set to the root object for the first step
|
||||
and the root element is skipped.
|
||||
|
||||
.deepEqual(obj)
|
||||
---------------
|
||||
|
||||
Returns a boolean, whether the instance value is equal to the supplied object
|
||||
along a deep traversal using some opinionated choices.
|
||||
|
||||
Some notes:
|
||||
|
||||
* RegExps are equal if their .toString()s match, but not functions since
|
||||
functions can close over different variables.
|
||||
|
||||
* Date instances are compared using `.getTime()` just like `assert.deepEqual()`.
|
||||
|
||||
* Circular references must refer to the same paths within the data structure for
|
||||
both objects. For instance, in this snippet:
|
||||
|
||||
````javascript
|
||||
var a = [1];
|
||||
a.push(a); // a = [ 1, *a ]
|
||||
|
||||
var b = [1];
|
||||
b.push(a); // b = [ 1, [ 1, *a ] ]
|
||||
````
|
||||
|
||||
`a` is not the same as `b` since even though the expansion is the same, the
|
||||
circular references in each refer to different paths into the data structure.
|
||||
|
||||
However, in:
|
||||
|
||||
````javascript
|
||||
var c = [1];
|
||||
c.push(c); // c = [ 1, *c ];
|
||||
````
|
||||
|
||||
`c` is equal to `a` in a `deepEqual()` because they have the same terminal node
|
||||
structure.
|
||||
|
||||
* Arguments objects are not arrays and neither are they the same as regular
|
||||
objects.
|
||||
|
||||
* Instances created with `new` of String, Boolean, and Number types are never
|
||||
equal to the native versions.
|
||||
|
||||
.paths()
|
||||
--------
|
||||
|
||||
Return an `Array` of every possible non-cyclic path in the object.
|
||||
Paths are `Array`s of string keys.
|
||||
|
||||
.nodes()
|
||||
--------
|
||||
|
||||
Return an `Array` of every node in the object.
|
||||
|
||||
.clone()
|
||||
--------
|
||||
|
||||
Create a deep clone of the object.
|
||||
|
||||
installation
|
||||
============
|
||||
|
||||
Using npm:
|
||||
npm install traverse
|
||||
|
||||
Or check out the repository and link your development copy:
|
||||
git clone http://github.com/substack/js-traverse.git
|
||||
cd js-traverse
|
||||
npm link .
|
||||
|
||||
You can test traverse with "expresso":http://github.com/visionmedia/expresso
|
||||
(`npm install expresso`):
|
||||
js-traverse $ expresso
|
||||
|
||||
100% wahoo, your stuff is not broken!
|
||||
|
||||
hash transforms
|
||||
===============
|
||||
|
||||
This library formerly had a hash transformation component. It has been
|
||||
[moved to the hashish package](https://github.com/substack/node-hashish).
|
16
node_modules/traverse/examples/json.js
generated
vendored
Executable file
16
node_modules/traverse/examples/json.js
generated
vendored
Executable file
|
@ -0,0 +1,16 @@
|
|||
var Traverse = require('traverse');
|
||||
|
||||
var id = 54;
|
||||
var callbacks = {};
|
||||
var obj = { moo : function () {}, foo : [2,3,4, function () {}] };
|
||||
|
||||
var scrubbed = Traverse(obj).map(function (x) {
|
||||
if (typeof x === 'function') {
|
||||
callbacks[id] = { id : id, f : x, path : this.path };
|
||||
this.update('[Function]');
|
||||
id++;
|
||||
}
|
||||
});
|
||||
|
||||
console.dir(scrubbed);
|
||||
console.dir(callbacks);
|
15
node_modules/traverse/examples/leaves.js
generated
vendored
Executable file
15
node_modules/traverse/examples/leaves.js
generated
vendored
Executable file
|
@ -0,0 +1,15 @@
|
|||
var Traverse = require('traverse');
|
||||
|
||||
var obj = {
|
||||
a : [1,2,3],
|
||||
b : 4,
|
||||
c : [5,6],
|
||||
d : { e : [7,8], f : 9 },
|
||||
};
|
||||
|
||||
var leaves = Traverse(obj).reduce(function (acc, x) {
|
||||
if (this.isLeaf) acc.push(x);
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
console.dir(leaves);
|
8
node_modules/traverse/examples/negative.js
generated
vendored
Executable file
8
node_modules/traverse/examples/negative.js
generated
vendored
Executable file
|
@ -0,0 +1,8 @@
|
|||
var Traverse = require('traverse');
|
||||
var obj = [ 5, 6, -3, [ 7, 8, -2, 1 ], { f : 10, g : -13 } ];
|
||||
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (x < 0) this.update(x + 128);
|
||||
});
|
||||
|
||||
console.dir(obj);
|
38
node_modules/traverse/examples/stringify.js
generated
vendored
Executable file
38
node_modules/traverse/examples/stringify.js
generated
vendored
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env node
|
||||
var Traverse = require('traverse');
|
||||
|
||||
var obj = [ 'five', 6, -3, [ 7, 8, -2, 1 ], { f : 10, g : -13 } ];
|
||||
|
||||
var s = '';
|
||||
Traverse(obj).forEach(function to_s (node) {
|
||||
if (Array.isArray(node)) {
|
||||
this.before(function () { s += '[' });
|
||||
this.post(function (child) {
|
||||
if (!child.isLast) s += ',';
|
||||
});
|
||||
this.after(function () { s += ']' });
|
||||
}
|
||||
else if (typeof node == 'object') {
|
||||
this.before(function () { s += '{' });
|
||||
this.pre(function (x, key) {
|
||||
to_s(key);
|
||||
s += ':';
|
||||
});
|
||||
this.post(function (child) {
|
||||
if (!child.isLast) s += ',';
|
||||
});
|
||||
this.after(function () { s += '}' });
|
||||
}
|
||||
else if (typeof node == 'string') {
|
||||
s += '"' + node.toString().replace(/"/g, '\\"') + '"';
|
||||
}
|
||||
else if (typeof node == 'function') {
|
||||
s += 'null';
|
||||
}
|
||||
else {
|
||||
s += node.toString();
|
||||
}
|
||||
});
|
||||
|
||||
console.log('JSON.stringify: ' + JSON.stringify(obj));
|
||||
console.log('this stringify: ' + s);
|
322
node_modules/traverse/index.js
generated
vendored
Executable file
322
node_modules/traverse/index.js
generated
vendored
Executable file
|
@ -0,0 +1,322 @@
|
|||
module.exports = Traverse;
|
||||
function Traverse (obj) {
|
||||
if (!(this instanceof Traverse)) return new Traverse(obj);
|
||||
this.value = obj;
|
||||
}
|
||||
|
||||
Traverse.prototype.get = function (ps) {
|
||||
var node = this.value;
|
||||
for (var i = 0; i < ps.length; i ++) {
|
||||
var key = ps[i];
|
||||
if (!Object.hasOwnProperty.call(node, key)) {
|
||||
node = undefined;
|
||||
break;
|
||||
}
|
||||
node = node[key];
|
||||
}
|
||||
return node;
|
||||
};
|
||||
|
||||
Traverse.prototype.set = function (ps, value) {
|
||||
var node = this.value;
|
||||
for (var i = 0; i < ps.length - 1; i ++) {
|
||||
var key = ps[i];
|
||||
if (!Object.hasOwnProperty.call(node, key)) node[key] = {};
|
||||
node = node[key];
|
||||
}
|
||||
node[ps[i]] = value;
|
||||
return value;
|
||||
};
|
||||
|
||||
Traverse.prototype.map = function (cb) {
|
||||
return walk(this.value, cb, true);
|
||||
};
|
||||
|
||||
Traverse.prototype.forEach = function (cb) {
|
||||
this.value = walk(this.value, cb, false);
|
||||
return this.value;
|
||||
};
|
||||
|
||||
Traverse.prototype.reduce = function (cb, init) {
|
||||
var skip = arguments.length === 1;
|
||||
var acc = skip ? this.value : init;
|
||||
this.forEach(function (x) {
|
||||
if (!this.isRoot || !skip) {
|
||||
acc = cb.call(this, acc, x);
|
||||
}
|
||||
});
|
||||
return acc;
|
||||
};
|
||||
|
||||
Traverse.prototype.deepEqual = function (obj) {
|
||||
if (arguments.length !== 1) {
|
||||
throw new Error(
|
||||
'deepEqual requires exactly one object to compare against'
|
||||
);
|
||||
}
|
||||
|
||||
var equal = true;
|
||||
var node = obj;
|
||||
|
||||
this.forEach(function (y) {
|
||||
var notEqual = (function () {
|
||||
equal = false;
|
||||
//this.stop();
|
||||
return undefined;
|
||||
}).bind(this);
|
||||
|
||||
//if (node === undefined || node === null) return notEqual();
|
||||
|
||||
if (!this.isRoot) {
|
||||
/*
|
||||
if (!Object.hasOwnProperty.call(node, this.key)) {
|
||||
return notEqual();
|
||||
}
|
||||
*/
|
||||
if (typeof node !== 'object') return notEqual();
|
||||
node = node[this.key];
|
||||
}
|
||||
|
||||
var x = node;
|
||||
|
||||
this.post(function () {
|
||||
node = x;
|
||||
});
|
||||
|
||||
var toS = function (o) {
|
||||
return Object.prototype.toString.call(o);
|
||||
};
|
||||
|
||||
if (this.circular) {
|
||||
if (Traverse(obj).get(this.circular.path) !== x) notEqual();
|
||||
}
|
||||
else if (typeof x !== typeof y) {
|
||||
notEqual();
|
||||
}
|
||||
else if (x === null || y === null || x === undefined || y === undefined) {
|
||||
if (x !== y) notEqual();
|
||||
}
|
||||
else if (x.__proto__ !== y.__proto__) {
|
||||
notEqual();
|
||||
}
|
||||
else if (x === y) {
|
||||
// nop
|
||||
}
|
||||
else if (typeof x === 'function') {
|
||||
if (x instanceof RegExp) {
|
||||
// both regexps on account of the __proto__ check
|
||||
if (x.toString() != y.toString()) notEqual();
|
||||
}
|
||||
else if (x !== y) notEqual();
|
||||
}
|
||||
else if (typeof x === 'object') {
|
||||
if (toS(y) === '[object Arguments]'
|
||||
|| toS(x) === '[object Arguments]') {
|
||||
if (toS(x) !== toS(y)) {
|
||||
notEqual();
|
||||
}
|
||||
}
|
||||
else if (x instanceof Date || y instanceof Date) {
|
||||
if (!(x instanceof Date) || !(y instanceof Date)
|
||||
|| x.getTime() !== y.getTime()) {
|
||||
notEqual();
|
||||
}
|
||||
}
|
||||
else {
|
||||
var kx = Object.keys(x);
|
||||
var ky = Object.keys(y);
|
||||
if (kx.length !== ky.length) return notEqual();
|
||||
for (var i = 0; i < kx.length; i++) {
|
||||
var k = kx[i];
|
||||
if (!Object.hasOwnProperty.call(y, k)) {
|
||||
notEqual();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return equal;
|
||||
};
|
||||
|
||||
Traverse.prototype.paths = function () {
|
||||
var acc = [];
|
||||
this.forEach(function (x) {
|
||||
acc.push(this.path);
|
||||
});
|
||||
return acc;
|
||||
};
|
||||
|
||||
Traverse.prototype.nodes = function () {
|
||||
var acc = [];
|
||||
this.forEach(function (x) {
|
||||
acc.push(this.node);
|
||||
});
|
||||
return acc;
|
||||
};
|
||||
|
||||
Traverse.prototype.clone = function () {
|
||||
var parents = [], nodes = [];
|
||||
|
||||
return (function clone (src) {
|
||||
for (var i = 0; i < parents.length; i++) {
|
||||
if (parents[i] === src) {
|
||||
return nodes[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof src === 'object' && src !== null) {
|
||||
var dst = copy(src);
|
||||
|
||||
parents.push(src);
|
||||
nodes.push(dst);
|
||||
|
||||
Object.keys(src).forEach(function (key) {
|
||||
dst[key] = clone(src[key]);
|
||||
});
|
||||
|
||||
parents.pop();
|
||||
nodes.pop();
|
||||
return dst;
|
||||
}
|
||||
else {
|
||||
return src;
|
||||
}
|
||||
})(this.value);
|
||||
};
|
||||
|
||||
function walk (root, cb, immutable) {
|
||||
var path = [];
|
||||
var parents = [];
|
||||
var alive = true;
|
||||
|
||||
return (function walker (node_) {
|
||||
var node = immutable ? copy(node_) : node_;
|
||||
var modifiers = {};
|
||||
|
||||
var state = {
|
||||
node : node,
|
||||
node_ : node_,
|
||||
path : [].concat(path),
|
||||
parent : parents.slice(-1)[0],
|
||||
key : path.slice(-1)[0],
|
||||
isRoot : path.length === 0,
|
||||
level : path.length,
|
||||
circular : null,
|
||||
update : function (x) {
|
||||
if (!state.isRoot) {
|
||||
state.parent.node[state.key] = x;
|
||||
}
|
||||
state.node = x;
|
||||
},
|
||||
'delete' : function () {
|
||||
delete state.parent.node[state.key];
|
||||
},
|
||||
remove : function () {
|
||||
if (Array.isArray(state.parent.node)) {
|
||||
state.parent.node.splice(state.key, 1);
|
||||
}
|
||||
else {
|
||||
delete state.parent.node[state.key];
|
||||
}
|
||||
},
|
||||
before : function (f) { modifiers.before = f },
|
||||
after : function (f) { modifiers.after = f },
|
||||
pre : function (f) { modifiers.pre = f },
|
||||
post : function (f) { modifiers.post = f },
|
||||
stop : function () { alive = false }
|
||||
};
|
||||
|
||||
if (!alive) return state;
|
||||
|
||||
if (typeof node === 'object' && node !== null) {
|
||||
state.isLeaf = Object.keys(node).length == 0;
|
||||
|
||||
for (var i = 0; i < parents.length; i++) {
|
||||
if (parents[i].node_ === node_) {
|
||||
state.circular = parents[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
state.isLeaf = true;
|
||||
}
|
||||
|
||||
state.notLeaf = !state.isLeaf;
|
||||
state.notRoot = !state.isRoot;
|
||||
|
||||
// use return values to update if defined
|
||||
var ret = cb.call(state, state.node);
|
||||
if (ret !== undefined && state.update) state.update(ret);
|
||||
if (modifiers.before) modifiers.before.call(state, state.node);
|
||||
|
||||
if (typeof state.node == 'object'
|
||||
&& state.node !== null && !state.circular) {
|
||||
parents.push(state);
|
||||
|
||||
var keys = Object.keys(state.node);
|
||||
keys.forEach(function (key, i) {
|
||||
path.push(key);
|
||||
|
||||
if (modifiers.pre) modifiers.pre.call(state, state.node[key], key);
|
||||
|
||||
var child = walker(state.node[key]);
|
||||
if (immutable && Object.hasOwnProperty.call(state.node, key)) {
|
||||
state.node[key] = child.node;
|
||||
}
|
||||
|
||||
child.isLast = i == keys.length - 1;
|
||||
child.isFirst = i == 0;
|
||||
|
||||
if (modifiers.post) modifiers.post.call(state, child);
|
||||
|
||||
path.pop();
|
||||
});
|
||||
parents.pop();
|
||||
}
|
||||
|
||||
if (modifiers.after) modifiers.after.call(state, state.node);
|
||||
|
||||
return state;
|
||||
})(root).node;
|
||||
}
|
||||
|
||||
Object.keys(Traverse.prototype).forEach(function (key) {
|
||||
Traverse[key] = function (obj) {
|
||||
var args = [].slice.call(arguments, 1);
|
||||
var t = Traverse(obj);
|
||||
return t[key].apply(t, args);
|
||||
};
|
||||
});
|
||||
|
||||
function copy (src) {
|
||||
if (typeof src === 'object' && src !== null) {
|
||||
var dst;
|
||||
|
||||
if (Array.isArray(src)) {
|
||||
dst = [];
|
||||
}
|
||||
else if (src instanceof Date) {
|
||||
dst = new Date(src);
|
||||
}
|
||||
else if (src instanceof Boolean) {
|
||||
dst = new Boolean(src);
|
||||
}
|
||||
else if (src instanceof Number) {
|
||||
dst = new Number(src);
|
||||
}
|
||||
else if (src instanceof String) {
|
||||
dst = new String(src);
|
||||
}
|
||||
else {
|
||||
dst = Object.create(Object.getPrototypeOf(src));
|
||||
}
|
||||
|
||||
Object.keys(src).forEach(function (key) {
|
||||
dst[key] = src[key];
|
||||
});
|
||||
return dst;
|
||||
}
|
||||
else return src;
|
||||
}
|
52
node_modules/traverse/package.json
generated
vendored
Normal file
52
node_modules/traverse/package.json
generated
vendored
Normal file
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"_args": [
|
||||
[
|
||||
"traverse@0.3.9",
|
||||
"/Users/paul/src/codeartisans/gradle-command-action"
|
||||
]
|
||||
],
|
||||
"_from": "traverse@0.3.9",
|
||||
"_id": "traverse@0.3.9",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
|
||||
"_location": "/traverse",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "version",
|
||||
"registry": true,
|
||||
"raw": "traverse@0.3.9",
|
||||
"name": "traverse",
|
||||
"escapedName": "traverse",
|
||||
"rawSpec": "0.3.9",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "0.3.9"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/chainsaw"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
|
||||
"_spec": "0.3.9",
|
||||
"_where": "/Users/paul/src/codeartisans/gradle-command-action",
|
||||
"author": {
|
||||
"name": "James Halliday"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/substack/js-traverse/issues"
|
||||
},
|
||||
"description": "Traverse and transform objects by visiting every node on a recursive walk",
|
||||
"devDependencies": {
|
||||
"expresso": "0.7.x"
|
||||
},
|
||||
"homepage": "https://github.com/substack/js-traverse#readme",
|
||||
"license": "MIT/X11",
|
||||
"main": "./index",
|
||||
"name": "traverse",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/substack/js-traverse.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "expresso"
|
||||
},
|
||||
"version": "0.3.9"
|
||||
}
|
114
node_modules/traverse/test/circular.js
generated
vendored
Normal file
114
node_modules/traverse/test/circular.js
generated
vendored
Normal file
|
@ -0,0 +1,114 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
var util = require('util');
|
||||
|
||||
exports.circular = function () {
|
||||
var obj = { x : 3 };
|
||||
obj.y = obj;
|
||||
var foundY = false;
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (this.path.join('') == 'y') {
|
||||
assert.equal(
|
||||
util.inspect(this.circular.node),
|
||||
util.inspect(obj)
|
||||
);
|
||||
foundY = true;
|
||||
}
|
||||
});
|
||||
assert.ok(foundY);
|
||||
};
|
||||
|
||||
exports.deepCirc = function () {
|
||||
var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
|
||||
obj.y[2] = obj;
|
||||
|
||||
var times = 0;
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (this.circular) {
|
||||
assert.deepEqual(this.circular.path, []);
|
||||
assert.deepEqual(this.path, [ 'y', 2 ]);
|
||||
times ++;
|
||||
}
|
||||
});
|
||||
|
||||
assert.deepEqual(times, 1);
|
||||
};
|
||||
|
||||
exports.doubleCirc = function () {
|
||||
var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
|
||||
obj.y[2] = obj;
|
||||
obj.x.push(obj.y);
|
||||
|
||||
var circs = [];
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (this.circular) {
|
||||
circs.push({ circ : this.circular, self : this, node : x });
|
||||
}
|
||||
});
|
||||
|
||||
assert.deepEqual(circs[0].self.path, [ 'x', 3, 2 ]);
|
||||
assert.deepEqual(circs[0].circ.path, []);
|
||||
|
||||
assert.deepEqual(circs[1].self.path, [ 'y', 2 ]);
|
||||
assert.deepEqual(circs[1].circ.path, []);
|
||||
|
||||
assert.deepEqual(circs.length, 2);
|
||||
};
|
||||
|
||||
exports.circDubForEach = function () {
|
||||
var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
|
||||
obj.y[2] = obj;
|
||||
obj.x.push(obj.y);
|
||||
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (this.circular) this.update('...');
|
||||
});
|
||||
|
||||
assert.deepEqual(obj, { x : [ 1, 2, 3, [ 4, 5, '...' ] ], y : [ 4, 5, '...' ] });
|
||||
};
|
||||
|
||||
exports.circDubMap = function () {
|
||||
var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
|
||||
obj.y[2] = obj;
|
||||
obj.x.push(obj.y);
|
||||
|
||||
var c = Traverse(obj).map(function (x) {
|
||||
if (this.circular) {
|
||||
this.update('...');
|
||||
}
|
||||
});
|
||||
|
||||
assert.deepEqual(c, { x : [ 1, 2, 3, [ 4, 5, '...' ] ], y : [ 4, 5, '...' ] });
|
||||
};
|
||||
|
||||
exports.circClone = function () {
|
||||
var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
|
||||
obj.y[2] = obj;
|
||||
obj.x.push(obj.y);
|
||||
|
||||
var clone = Traverse.clone(obj);
|
||||
assert.ok(obj !== clone);
|
||||
|
||||
assert.ok(clone.y[2] === clone);
|
||||
assert.ok(clone.y[2] !== obj);
|
||||
assert.ok(clone.x[3][2] === clone);
|
||||
assert.ok(clone.x[3][2] !== obj);
|
||||
assert.deepEqual(clone.x.slice(0,3), [1,2,3]);
|
||||
assert.deepEqual(clone.y.slice(0,2), [4,5]);
|
||||
};
|
||||
|
||||
exports.circMapScrub = function () {
|
||||
var obj = { a : 1, b : 2 };
|
||||
obj.c = obj;
|
||||
|
||||
var scrubbed = Traverse(obj).map(function (node) {
|
||||
if (this.circular) this.remove();
|
||||
});
|
||||
assert.deepEqual(
|
||||
Object.keys(scrubbed).sort(),
|
||||
[ 'a', 'b' ]
|
||||
);
|
||||
assert.ok(Traverse.deepEqual(scrubbed, { a : 1, b : 2 }));
|
||||
|
||||
assert.equal(obj.c, obj);
|
||||
};
|
35
node_modules/traverse/test/date.js
generated
vendored
Normal file
35
node_modules/traverse/test/date.js
generated
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
|
||||
exports.dateEach = function () {
|
||||
var obj = { x : new Date, y : 10, z : 5 };
|
||||
|
||||
var counts = {};
|
||||
|
||||
Traverse(obj).forEach(function (node) {
|
||||
var t = (node instanceof Date && 'Date') || typeof node;
|
||||
counts[t] = (counts[t] || 0) + 1;
|
||||
});
|
||||
|
||||
assert.deepEqual(counts, {
|
||||
object : 1,
|
||||
Date : 1,
|
||||
number : 2,
|
||||
});
|
||||
};
|
||||
|
||||
exports.dateMap = function () {
|
||||
var obj = { x : new Date, y : 10, z : 5 };
|
||||
|
||||
var res = Traverse(obj).map(function (node) {
|
||||
if (typeof node === 'number') this.update(node + 100);
|
||||
});
|
||||
|
||||
assert.ok(obj.x !== res.x);
|
||||
assert.deepEqual(res, {
|
||||
x : obj.x,
|
||||
y : 110,
|
||||
z : 105,
|
||||
});
|
||||
};
|
||||
|
219
node_modules/traverse/test/equal.js
generated
vendored
Normal file
219
node_modules/traverse/test/equal.js
generated
vendored
Normal file
|
@ -0,0 +1,219 @@
|
|||
var assert = require('assert');
|
||||
var traverse = require('traverse');
|
||||
|
||||
exports.deepDates = function () {
|
||||
assert.ok(
|
||||
traverse.deepEqual(
|
||||
{ d : new Date, x : [ 1, 2, 3 ] },
|
||||
{ d : new Date, x : [ 1, 2, 3 ] }
|
||||
),
|
||||
'dates should be equal'
|
||||
);
|
||||
|
||||
var d0 = new Date;
|
||||
setTimeout(function () {
|
||||
assert.ok(
|
||||
!traverse.deepEqual(
|
||||
{ d : d0, x : [ 1, 2, 3 ], },
|
||||
{ d : new Date, x : [ 1, 2, 3 ] }
|
||||
),
|
||||
'microseconds should count in date equality'
|
||||
);
|
||||
}, 5);
|
||||
};
|
||||
|
||||
exports.deepCircular = function () {
|
||||
var a = [1];
|
||||
a.push(a); // a = [ 1, *a ]
|
||||
|
||||
var b = [1];
|
||||
b.push(a); // b = [ 1, [ 1, *a ] ]
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(a, b),
|
||||
'circular ref mount points count towards equality'
|
||||
);
|
||||
|
||||
var c = [1];
|
||||
c.push(c); // c = [ 1, *c ]
|
||||
assert.ok(
|
||||
traverse.deepEqual(a, c),
|
||||
'circular refs are structurally the same here'
|
||||
);
|
||||
|
||||
var d = [1];
|
||||
d.push(a); // c = [ 1, [ 1, *d ] ]
|
||||
assert.ok(
|
||||
traverse.deepEqual(b, d),
|
||||
'non-root circular ref structural comparison'
|
||||
);
|
||||
};
|
||||
|
||||
exports.deepInstances = function () {
|
||||
assert.ok(
|
||||
!traverse.deepEqual([ new Boolean(false) ], [ false ]),
|
||||
'boolean instances are not real booleans'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual([ new String('x') ], [ 'x' ]),
|
||||
'string instances are not real strings'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual([ new Number(4) ], [ 4 ]),
|
||||
'number instances are not real numbers'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
traverse.deepEqual([ new RegExp('x') ], [ /x/ ]),
|
||||
'regexp instances are real regexps'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual([ new RegExp(/./) ], [ /../ ]),
|
||||
'these regexps aren\'t the same'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(
|
||||
[ function (x) { return x * 2 } ],
|
||||
[ function (x) { return x * 2 } ]
|
||||
),
|
||||
'functions with the same .toString() aren\'t necessarily the same'
|
||||
);
|
||||
|
||||
var f = function (x) { return x * 2 };
|
||||
assert.ok(
|
||||
traverse.deepEqual([ f ], [ f ]),
|
||||
'these functions are actually equal'
|
||||
);
|
||||
};
|
||||
|
||||
exports.deepEqual = function () {
|
||||
assert.ok(
|
||||
!traverse.deepEqual([ 1, 2, 3 ], { 0 : 1, 1 : 2, 2 : 3 }),
|
||||
'arrays are not objects'
|
||||
);
|
||||
};
|
||||
|
||||
exports.falsy = function () {
|
||||
assert.ok(
|
||||
!traverse.deepEqual([ undefined ], [ null ]),
|
||||
'null is not undefined!'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual([ null ], [ undefined ]),
|
||||
'undefined is not null!'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(
|
||||
{ a : 1, b : 2, c : [ 3, undefined, 5 ] },
|
||||
{ a : 1, b : 2, c : [ 3, null, 5 ] }
|
||||
),
|
||||
'undefined is not null, however deeply!'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(
|
||||
{ a : 1, b : 2, c : [ 3, undefined, 5 ] },
|
||||
{ a : 1, b : 2, c : [ 3, null, 5 ] }
|
||||
),
|
||||
'null is not undefined, however deeply!'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(
|
||||
{ a : 1, b : 2, c : [ 3, undefined, 5 ] },
|
||||
{ a : 1, b : 2, c : [ 3, null, 5 ] }
|
||||
),
|
||||
'null is not undefined, however deeply!'
|
||||
);
|
||||
};
|
||||
|
||||
exports.deletedArrayEqual = function () {
|
||||
var xs = [ 1, 2, 3, 4 ];
|
||||
delete xs[2];
|
||||
|
||||
var ys = Object.create(Array.prototype);
|
||||
ys[0] = 1;
|
||||
ys[1] = 2;
|
||||
ys[3] = 4;
|
||||
|
||||
assert.ok(
|
||||
traverse.deepEqual(xs, ys),
|
||||
'arrays with deleted elements are only equal to'
|
||||
+ ' arrays with similarly deleted elements'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(xs, [ 1, 2, undefined, 4 ]),
|
||||
'deleted array elements cannot be undefined'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(xs, [ 1, 2, null, 4 ]),
|
||||
'deleted array elements cannot be null'
|
||||
);
|
||||
};
|
||||
|
||||
exports.deletedObjectEqual = function () {
|
||||
var obj = { a : 1, b : 2, c : 3 };
|
||||
delete obj.c;
|
||||
|
||||
assert.ok(
|
||||
traverse.deepEqual(obj, { a : 1, b : 2 }),
|
||||
'deleted object elements should not show up'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(obj, { a : 1, b : 2, c : undefined }),
|
||||
'deleted object elements are not undefined'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
!traverse.deepEqual(obj, { a : 1, b : 2, c : null }),
|
||||
'deleted object elements are not null'
|
||||
);
|
||||
};
|
||||
|
||||
exports.emptyKeyEqual = function () {
|
||||
assert.ok(!traverse.deepEqual(
|
||||
{ a : 1 }, { a : 1, '' : 55 }
|
||||
));
|
||||
};
|
||||
|
||||
exports.deepArguments = function () {
|
||||
assert.ok(
|
||||
!traverse.deepEqual(
|
||||
[ 4, 5, 6 ],
|
||||
(function () { return arguments })(4, 5, 6)
|
||||
),
|
||||
'arguments are not arrays'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
traverse.deepEqual(
|
||||
(function () { return arguments })(4, 5, 6),
|
||||
(function () { return arguments })(4, 5, 6)
|
||||
),
|
||||
'arguments should equal'
|
||||
);
|
||||
};
|
||||
|
||||
exports.deepUn = function () {
|
||||
assert.ok(!traverse.deepEqual({ a : 1, b : 2 }, undefined));
|
||||
assert.ok(!traverse.deepEqual({ a : 1, b : 2 }, {}));
|
||||
assert.ok(!traverse.deepEqual(undefined, { a : 1, b : 2 }));
|
||||
assert.ok(!traverse.deepEqual({}, { a : 1, b : 2 }));
|
||||
assert.ok(traverse.deepEqual(undefined, undefined));
|
||||
assert.ok(traverse.deepEqual(null, null));
|
||||
assert.ok(!traverse.deepEqual(undefined, null));
|
||||
};
|
||||
|
||||
exports.deepLevels = function () {
|
||||
var xs = [ 1, 2, [ 3, 4, [ 5, 6 ] ] ];
|
||||
assert.ok(!traverse.deepEqual(xs, []));
|
||||
};
|
17
node_modules/traverse/test/instance.js
generated
vendored
Normal file
17
node_modules/traverse/test/instance.js
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
exports['check instanceof on node elems'] = function () {
|
||||
|
||||
var counts = { emitter : 0 };
|
||||
|
||||
Traverse([ new EventEmitter, 3, 4, { ev : new EventEmitter }])
|
||||
.forEach(function (node) {
|
||||
if (node instanceof EventEmitter) counts.emitter ++;
|
||||
})
|
||||
;
|
||||
|
||||
assert.equal(counts.emitter, 2);
|
||||
};
|
||||
|
42
node_modules/traverse/test/interface.js
generated
vendored
Normal file
42
node_modules/traverse/test/interface.js
generated
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
|
||||
exports['interface map'] = function () {
|
||||
var obj = { a : [ 5,6,7 ], b : { c : [8] } };
|
||||
|
||||
assert.deepEqual(
|
||||
Traverse.paths(obj)
|
||||
.sort()
|
||||
.map(function (path) { return path.join('/') })
|
||||
.slice(1)
|
||||
.join(' ')
|
||||
,
|
||||
'a a/0 a/1 a/2 b b/c b/c/0'
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
Traverse.nodes(obj),
|
||||
[
|
||||
{ a: [ 5, 6, 7 ], b: { c: [ 8 ] } },
|
||||
[ 5, 6, 7 ], 5, 6, 7,
|
||||
{ c: [ 8 ] }, [ 8 ], 8
|
||||
]
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
Traverse.map(obj, function (node) {
|
||||
if (typeof node == 'number') {
|
||||
return node + 1000;
|
||||
}
|
||||
else if (Array.isArray(node)) {
|
||||
return node.join(' ');
|
||||
}
|
||||
}),
|
||||
{ a: '5 6 7', b: { c: '8' } }
|
||||
);
|
||||
|
||||
var nodes = 0;
|
||||
Traverse.forEach(obj, function (node) { nodes ++ });
|
||||
assert.deepEqual(nodes, 8);
|
||||
};
|
||||
|
47
node_modules/traverse/test/json.js
generated
vendored
Normal file
47
node_modules/traverse/test/json.js
generated
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
|
||||
exports['json test'] = function () {
|
||||
var id = 54;
|
||||
var callbacks = {};
|
||||
var obj = { moo : function () {}, foo : [2,3,4, function () {}] };
|
||||
|
||||
var scrubbed = Traverse(obj).map(function (x) {
|
||||
if (typeof x === 'function') {
|
||||
callbacks[id] = { id : id, f : x, path : this.path };
|
||||
this.update('[Function]');
|
||||
id++;
|
||||
}
|
||||
});
|
||||
|
||||
assert.equal(
|
||||
scrubbed.moo, '[Function]',
|
||||
'obj.moo replaced with "[Function]"'
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
scrubbed.foo[3], '[Function]',
|
||||
'obj.foo[3] replaced with "[Function]"'
|
||||
);
|
||||
|
||||
assert.deepEqual(scrubbed, {
|
||||
moo : '[Function]',
|
||||
foo : [ 2, 3, 4, "[Function]" ]
|
||||
}, 'Full JSON string matches');
|
||||
|
||||
assert.deepEqual(
|
||||
typeof obj.moo, 'function',
|
||||
'Original obj.moo still a function'
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
typeof obj.foo[3], 'function',
|
||||
'Original obj.foo[3] still a function'
|
||||
);
|
||||
|
||||
assert.deepEqual(callbacks, {
|
||||
54: { id: 54, f : obj.moo, path: [ 'moo' ] },
|
||||
55: { id: 55, f : obj.foo[3], path: [ 'foo', '3' ] },
|
||||
}, 'Check the generated callbacks list');
|
||||
};
|
||||
|
21
node_modules/traverse/test/leaves.js
generated
vendored
Normal file
21
node_modules/traverse/test/leaves.js
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
|
||||
exports['leaves test'] = function () {
|
||||
var acc = [];
|
||||
Traverse({
|
||||
a : [1,2,3],
|
||||
b : 4,
|
||||
c : [5,6],
|
||||
d : { e : [7,8], f : 9 }
|
||||
}).forEach(function (x) {
|
||||
if (this.isLeaf) acc.push(x);
|
||||
});
|
||||
|
||||
assert.equal(
|
||||
acc.join(' '),
|
||||
'1 2 3 4 5 6 7 8 9',
|
||||
'Traversal in the right(?) order'
|
||||
);
|
||||
};
|
||||
|
203
node_modules/traverse/test/mutability.js
generated
vendored
Normal file
203
node_modules/traverse/test/mutability.js
generated
vendored
Normal file
|
@ -0,0 +1,203 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
|
||||
exports.mutate = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse(obj).forEach(function (x) {
|
||||
if (typeof x === 'number' && x % 2 === 0) {
|
||||
this.update(x * 10);
|
||||
}
|
||||
});
|
||||
assert.deepEqual(obj, res);
|
||||
assert.deepEqual(obj, { a : 1, b : 20, c : [ 3, 40 ] });
|
||||
};
|
||||
|
||||
exports.mutateT = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse.forEach(obj, function (x) {
|
||||
if (typeof x === 'number' && x % 2 === 0) {
|
||||
this.update(x * 10);
|
||||
}
|
||||
});
|
||||
assert.deepEqual(obj, res);
|
||||
assert.deepEqual(obj, { a : 1, b : 20, c : [ 3, 40 ] });
|
||||
};
|
||||
|
||||
exports.map = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse(obj).map(function (x) {
|
||||
if (typeof x === 'number' && x % 2 === 0) {
|
||||
this.update(x * 10);
|
||||
}
|
||||
});
|
||||
assert.deepEqual(obj, { a : 1, b : 2, c : [ 3, 4 ] });
|
||||
assert.deepEqual(res, { a : 1, b : 20, c : [ 3, 40 ] });
|
||||
};
|
||||
|
||||
exports.mapT = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse.map(obj, function (x) {
|
||||
if (typeof x === 'number' && x % 2 === 0) {
|
||||
this.update(x * 10);
|
||||
}
|
||||
});
|
||||
assert.deepEqual(obj, { a : 1, b : 2, c : [ 3, 4 ] });
|
||||
assert.deepEqual(res, { a : 1, b : 20, c : [ 3, 40 ] });
|
||||
};
|
||||
|
||||
exports.clone = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse(obj).clone();
|
||||
assert.deepEqual(obj, res);
|
||||
assert.ok(obj !== res);
|
||||
obj.a ++;
|
||||
assert.deepEqual(res.a, 1);
|
||||
obj.c.push(5);
|
||||
assert.deepEqual(res.c, [ 3, 4 ]);
|
||||
};
|
||||
|
||||
exports.cloneT = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse.clone(obj);
|
||||
assert.deepEqual(obj, res);
|
||||
assert.ok(obj !== res);
|
||||
obj.a ++;
|
||||
assert.deepEqual(res.a, 1);
|
||||
obj.c.push(5);
|
||||
assert.deepEqual(res.c, [ 3, 4 ]);
|
||||
};
|
||||
|
||||
exports.reduce = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse(obj).reduce(function (acc, x) {
|
||||
if (this.isLeaf) acc.push(x);
|
||||
return acc;
|
||||
}, []);
|
||||
assert.deepEqual(obj, { a : 1, b : 2, c : [ 3, 4 ] });
|
||||
assert.deepEqual(res, [ 1, 2, 3, 4 ]);
|
||||
};
|
||||
|
||||
exports.reduceInit = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse(obj).reduce(function (acc, x) {
|
||||
if (this.isRoot) assert.fail('got root');
|
||||
return acc;
|
||||
});
|
||||
assert.deepEqual(obj, { a : 1, b : 2, c : [ 3, 4 ] });
|
||||
assert.deepEqual(res, obj);
|
||||
};
|
||||
|
||||
exports.remove = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (this.isLeaf && x % 2 == 0) this.remove();
|
||||
});
|
||||
|
||||
assert.deepEqual(obj, { a : 1, c : [ 3 ] });
|
||||
};
|
||||
|
||||
exports.removeMap = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse(obj).map(function (x) {
|
||||
if (this.isLeaf && x % 2 == 0) this.remove();
|
||||
});
|
||||
|
||||
assert.deepEqual(obj, { a : 1, b : 2, c : [ 3, 4 ] });
|
||||
assert.deepEqual(res, { a : 1, c : [ 3 ] });
|
||||
};
|
||||
|
||||
exports.delete = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (this.isLeaf && x % 2 == 0) this.delete();
|
||||
});
|
||||
|
||||
assert.ok(!Traverse.deepEqual(
|
||||
obj, { a : 1, c : [ 3, undefined ] }
|
||||
));
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
obj, { a : 1, c : [ 3 ] }
|
||||
));
|
||||
|
||||
assert.ok(!Traverse.deepEqual(
|
||||
obj, { a : 1, c : [ 3, null ] }
|
||||
));
|
||||
};
|
||||
|
||||
exports.deleteRedux = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4, 5 ] };
|
||||
Traverse(obj).forEach(function (x) {
|
||||
if (this.isLeaf && x % 2 == 0) this.delete();
|
||||
});
|
||||
|
||||
assert.ok(!Traverse.deepEqual(
|
||||
obj, { a : 1, c : [ 3, undefined, 5 ] }
|
||||
));
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
obj, { a : 1, c : [ 3 ,, 5 ] }
|
||||
));
|
||||
|
||||
assert.ok(!Traverse.deepEqual(
|
||||
obj, { a : 1, c : [ 3, null, 5 ] }
|
||||
));
|
||||
|
||||
assert.ok(!Traverse.deepEqual(
|
||||
obj, { a : 1, c : [ 3, 5 ] }
|
||||
));
|
||||
};
|
||||
|
||||
exports.deleteMap = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4 ] };
|
||||
var res = Traverse(obj).map(function (x) {
|
||||
if (this.isLeaf && x % 2 == 0) this.delete();
|
||||
});
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
obj,
|
||||
{ a : 1, b : 2, c : [ 3, 4 ] }
|
||||
));
|
||||
|
||||
var xs = [ 3, 4 ];
|
||||
delete xs[1];
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
res, { a : 1, c : xs }
|
||||
));
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
res, { a : 1, c : [ 3, ] }
|
||||
));
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
res, { a : 1, c : [ 3 ] }
|
||||
));
|
||||
};
|
||||
|
||||
exports.deleteMapRedux = function () {
|
||||
var obj = { a : 1, b : 2, c : [ 3, 4, 5 ] };
|
||||
var res = Traverse(obj).map(function (x) {
|
||||
if (this.isLeaf && x % 2 == 0) this.delete();
|
||||
});
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
obj,
|
||||
{ a : 1, b : 2, c : [ 3, 4, 5 ] }
|
||||
));
|
||||
|
||||
var xs = [ 3, 4, 5 ];
|
||||
delete xs[1];
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
res, { a : 1, c : xs }
|
||||
));
|
||||
|
||||
assert.ok(!Traverse.deepEqual(
|
||||
res, { a : 1, c : [ 3, 5 ] }
|
||||
));
|
||||
|
||||
assert.ok(Traverse.deepEqual(
|
||||
res, { a : 1, c : [ 3 ,, 5 ] }
|
||||
));
|
||||
};
|
20
node_modules/traverse/test/negative.js
generated
vendored
Normal file
20
node_modules/traverse/test/negative.js
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
var Traverse = require('traverse');
|
||||
var assert = require('assert');
|
||||
|
||||
exports['negative update test'] = function () {
|
||||
var obj = [ 5, 6, -3, [ 7, 8, -2, 1 ], { f : 10, g : -13 } ];
|
||||
var fixed = Traverse.map(obj, function (x) {
|
||||
if (x < 0) this.update(x + 128);
|
||||
});
|
||||
|
||||
assert.deepEqual(fixed,
|
||||
[ 5, 6, 125, [ 7, 8, 126, 1 ], { f: 10, g: 115 } ],
|
||||
'Negative values += 128'
|
||||
);
|
||||
|
||||
assert.deepEqual(obj,
|
||||
[ 5, 6, -3, [ 7, 8, -2, 1 ], { f: 10, g: -13 } ],
|
||||
'Original references not modified'
|
||||
);
|
||||
}
|
||||
|
15
node_modules/traverse/test/obj.js
generated
vendored
Normal file
15
node_modules/traverse/test/obj.js
generated
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
|
||||
exports['traverse an object with nested functions'] = function () {
|
||||
var to = setTimeout(function () {
|
||||
assert.fail('never ran');
|
||||
}, 1000);
|
||||
|
||||
function Cons (x) {
|
||||
clearTimeout(to);
|
||||
assert.equal(x, 10);
|
||||
};
|
||||
Traverse(new Cons(10));
|
||||
};
|
||||
|
41
node_modules/traverse/test/stop.js
generated
vendored
Normal file
41
node_modules/traverse/test/stop.js
generated
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
var assert = require('assert');
|
||||
var traverse = require('traverse');
|
||||
|
||||
exports.stop = function () {
|
||||
var visits = 0;
|
||||
traverse('abcdefghij'.split('')).forEach(function (node) {
|
||||
if (typeof node === 'string') {
|
||||
visits ++;
|
||||
if (node === 'e') this.stop()
|
||||
}
|
||||
});
|
||||
|
||||
assert.equal(visits, 5);
|
||||
};
|
||||
|
||||
exports.stopMap = function () {
|
||||
var s = traverse('abcdefghij'.split('')).map(function (node) {
|
||||
if (typeof node === 'string') {
|
||||
if (node === 'e') this.stop()
|
||||
return node.toUpperCase();
|
||||
}
|
||||
}).join('');
|
||||
|
||||
assert.equal(s, 'ABCDEfghij');
|
||||
};
|
||||
|
||||
exports.stopReduce = function () {
|
||||
var obj = {
|
||||
a : [ 4, 5 ],
|
||||
b : [ 6, [ 7, 8, 9 ] ]
|
||||
};
|
||||
var xs = traverse(obj).reduce(function (acc, node) {
|
||||
if (this.isLeaf) {
|
||||
if (node === 7) this.stop();
|
||||
else acc.push(node)
|
||||
}
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
assert.deepEqual(xs, [ 4, 5, 6 ]);
|
||||
};
|
36
node_modules/traverse/test/stringify.js
generated
vendored
Normal file
36
node_modules/traverse/test/stringify.js
generated
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
var assert = require('assert');
|
||||
var Traverse = require('traverse');
|
||||
|
||||
exports.stringify = function () {
|
||||
var obj = [ 5, 6, -3, [ 7, 8, -2, 1 ], { f : 10, g : -13 } ];
|
||||
|
||||
var s = '';
|
||||
Traverse(obj).forEach(function (node) {
|
||||
if (Array.isArray(node)) {
|
||||
this.before(function () { s += '[' });
|
||||
this.post(function (child) {
|
||||
if (!child.isLast) s += ',';
|
||||
});
|
||||
this.after(function () { s += ']' });
|
||||
}
|
||||
else if (typeof node == 'object') {
|
||||
this.before(function () { s += '{' });
|
||||
this.pre(function (x, key) {
|
||||
s += '"' + key + '"' + ':';
|
||||
});
|
||||
this.post(function (child) {
|
||||
if (!child.isLast) s += ',';
|
||||
});
|
||||
this.after(function () { s += '}' });
|
||||
}
|
||||
else if (typeof node == 'function') {
|
||||
s += 'null';
|
||||
}
|
||||
else {
|
||||
s += node.toString();
|
||||
}
|
||||
});
|
||||
|
||||
assert.equal(s, JSON.stringify(obj));
|
||||
}
|
||||
|
54
node_modules/traverse/test/super_deep.js
generated
vendored
Normal file
54
node_modules/traverse/test/super_deep.js
generated
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
var assert = require('assert');
|
||||
var traverse = require('traverse');
|
||||
|
||||
exports.super_deep = function () {
|
||||
var util = require('util');
|
||||
var a0 = make();
|
||||
var a1 = make();
|
||||
assert.ok(traverse.deepEqual(a0, a1));
|
||||
|
||||
a0.c.d.moo = true;
|
||||
assert.ok(!traverse.deepEqual(a0, a1));
|
||||
|
||||
a1.c.d.moo = true;
|
||||
assert.ok(traverse.deepEqual(a0, a1));
|
||||
|
||||
// TODO: this one
|
||||
//a0.c.a = a1;
|
||||
//assert.ok(!traverse.deepEqual(a0, a1));
|
||||
};
|
||||
|
||||
function make () {
|
||||
var a = { self : 'a' };
|
||||
var b = { self : 'b' };
|
||||
var c = { self : 'c' };
|
||||
var d = { self : 'd' };
|
||||
var e = { self : 'e' };
|
||||
|
||||
a.a = a;
|
||||
a.b = b;
|
||||
a.c = c;
|
||||
|
||||
b.a = a;
|
||||
b.b = b;
|
||||
b.c = c;
|
||||
|
||||
c.a = a;
|
||||
c.b = b;
|
||||
c.c = c;
|
||||
c.d = d;
|
||||
|
||||
d.a = a;
|
||||
d.b = b;
|
||||
d.c = c;
|
||||
d.d = d;
|
||||
d.e = e;
|
||||
|
||||
e.a = a;
|
||||
e.b = b;
|
||||
e.c = c;
|
||||
e.d = d;
|
||||
e.e = e;
|
||||
|
||||
return a;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue