/script-kiddie/002_script_kiddie/script-kiddie/node_modules/pseudomap/LICENSE |
@@ -0,0 +1,15 @@ |
The ISC License |
|
Copyright (c) Isaac Z. Schlueter and Contributors |
|
Permission to use, copy, modify, and/or distribute this software for any |
purpose with or without fee is hereby granted, provided that the above |
copyright notice and this permission notice appear in all copies. |
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR |
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/pseudomap/README.md |
@@ -0,0 +1,60 @@ |
# pseudomap |
|
A thing that is a lot like ES6 `Map`, but without iterators, for use |
in environments where `for..of` syntax and `Map` are not available. |
|
If you need iterators, or just in general a more faithful polyfill to |
ES6 Maps, check out [es6-map](http://npm.im/es6-map). |
|
If you are in an environment where `Map` is supported, then that will |
be returned instead, unless `process.env.TEST_PSEUDOMAP` is set. |
|
You can use any value as keys, and any value as data. Setting again |
with the identical key will overwrite the previous value. |
|
Internally, data is stored on an `Object.create(null)` style object. |
The key is coerced to a string to generate the key on the internal |
data-bag object. The original key used is stored along with the data. |
|
In the event of a stringified-key collision, a new key is generated by |
appending an increasing number to the stringified-key until finding |
either the intended key or an empty spot. |
|
Note that because object traversal order of plain objects is not |
guaranteed to be identical to insertion order, the insertion order |
guarantee of `Map.prototype.forEach` is not guaranteed in this |
implementation. However, in all versions of Node.js and V8 where this |
module works, `forEach` does traverse data in insertion order. |
|
## API |
|
Most of the [Map |
API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), |
with the following exceptions: |
|
1. A `Map` object is not an iterator. |
2. `values`, `keys`, and `entries` methods are not implemented, |
because they return iterators. |
3. The argument to the constructor can be an Array of `[key, value]` |
pairs, or a `Map` or `PseudoMap` object. But, since iterators |
aren't used, passing any plain-old iterator won't initialize the |
map properly. |
|
## USAGE |
|
Use just like a regular ES6 Map. |
|
```javascript |
var PseudoMap = require('pseudomap') |
|
// optionally provide a pseudomap, or an array of [key,value] pairs |
// as the argument to initialize the map with |
var myMap = new PseudoMap() |
|
myMap.set(1, 'number 1') |
myMap.set('1', 'string 1') |
var akey = {} |
var bkey = {} |
myMap.set(akey, { some: 'data' }) |
myMap.set(bkey, { some: 'other data' }) |
``` |
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/pseudomap/package.json |
@@ -0,0 +1,85 @@ |
{ |
"_args": [ |
[ |
{ |
"raw": "pseudomap@^1.0.1", |
"scope": null, |
"escapedName": "pseudomap", |
"name": "pseudomap", |
"rawSpec": "^1.0.1", |
"spec": ">=1.0.1 <2.0.0", |
"type": "range" |
}, |
"/Users/evacomaroski/Documents/Development/corrade-nucleus-nucleons/script-kiddie/002_script_kiddie/script-kiddie/node_modules/lru-cache" |
] |
], |
"_from": "pseudomap@>=1.0.1 <2.0.0", |
"_id": "pseudomap@1.0.2", |
"_inCache": true, |
"_location": "/pseudomap", |
"_nodeVersion": "4.0.0", |
"_npmUser": { |
"name": "isaacs", |
"email": "i@izs.me" |
}, |
"_npmVersion": "3.3.2", |
"_phantomChildren": {}, |
"_requested": { |
"raw": "pseudomap@^1.0.1", |
"scope": null, |
"escapedName": "pseudomap", |
"name": "pseudomap", |
"rawSpec": "^1.0.1", |
"spec": ">=1.0.1 <2.0.0", |
"type": "range" |
}, |
"_requiredBy": [ |
"/lru-cache" |
], |
"_resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", |
"_shasum": "f052a28da70e618917ef0a8ac34c1ae5a68286b3", |
"_shrinkwrap": null, |
"_spec": "pseudomap@^1.0.1", |
"_where": "/Users/evacomaroski/Documents/Development/corrade-nucleus-nucleons/script-kiddie/002_script_kiddie/script-kiddie/node_modules/lru-cache", |
"author": { |
"name": "Isaac Z. Schlueter", |
"email": "i@izs.me", |
"url": "http://blog.izs.me/" |
}, |
"bugs": { |
"url": "https://github.com/isaacs/pseudomap/issues" |
}, |
"dependencies": {}, |
"description": "A thing that is a lot like ES6 `Map`, but without iterators, for use in environments where `for..of` syntax and `Map` are not available.", |
"devDependencies": { |
"tap": "^2.3.1" |
}, |
"directories": { |
"test": "test" |
}, |
"dist": { |
"shasum": "f052a28da70e618917ef0a8ac34c1ae5a68286b3", |
"tarball": "http://grimore.org:4873/pseudomap/-/pseudomap-1.0.2.tgz" |
}, |
"gitHead": "b6dc728207a0321ede6479e34506d3e0e13a940b", |
"homepage": "https://github.com/isaacs/pseudomap#readme", |
"license": "ISC", |
"main": "map.js", |
"maintainers": [ |
{ |
"name": "isaacs", |
"email": "i@izs.me" |
} |
], |
"name": "pseudomap", |
"optionalDependencies": {}, |
"readme": "ERROR: No README data found!", |
"repository": { |
"type": "git", |
"url": "git+https://github.com/isaacs/pseudomap.git" |
}, |
"scripts": { |
"test": "tap test/*.js" |
}, |
"version": "1.0.2" |
} |
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/pseudomap/pseudomap.js |
@@ -0,0 +1,113 @@ |
var hasOwnProperty = Object.prototype.hasOwnProperty |
|
module.exports = PseudoMap |
|
function PseudoMap (set) { |
if (!(this instanceof PseudoMap)) // whyyyyyyy |
throw new TypeError("Constructor PseudoMap requires 'new'") |
|
this.clear() |
|
if (set) { |
if ((set instanceof PseudoMap) || |
(typeof Map === 'function' && set instanceof Map)) |
set.forEach(function (value, key) { |
this.set(key, value) |
}, this) |
else if (Array.isArray(set)) |
set.forEach(function (kv) { |
this.set(kv[0], kv[1]) |
}, this) |
else |
throw new TypeError('invalid argument') |
} |
} |
|
PseudoMap.prototype.forEach = function (fn, thisp) { |
thisp = thisp || this |
Object.keys(this._data).forEach(function (k) { |
if (k !== 'size') |
fn.call(thisp, this._data[k].value, this._data[k].key) |
}, this) |
} |
|
PseudoMap.prototype.has = function (k) { |
return !!find(this._data, k) |
} |
|
PseudoMap.prototype.get = function (k) { |
var res = find(this._data, k) |
return res && res.value |
} |
|
PseudoMap.prototype.set = function (k, v) { |
set(this._data, k, v) |
} |
|
PseudoMap.prototype.delete = function (k) { |
var res = find(this._data, k) |
if (res) { |
delete this._data[res._index] |
this._data.size-- |
} |
} |
|
PseudoMap.prototype.clear = function () { |
var data = Object.create(null) |
data.size = 0 |
|
Object.defineProperty(this, '_data', { |
value: data, |
enumerable: false, |
configurable: true, |
writable: false |
}) |
} |
|
Object.defineProperty(PseudoMap.prototype, 'size', { |
get: function () { |
return this._data.size |
}, |
set: function (n) {}, |
enumerable: true, |
configurable: true |
}) |
|
PseudoMap.prototype.values = |
PseudoMap.prototype.keys = |
PseudoMap.prototype.entries = function () { |
throw new Error('iterators are not implemented in this version') |
} |
|
// Either identical, or both NaN |
function same (a, b) { |
return a === b || a !== a && b !== b |
} |
|
function Entry (k, v, i) { |
this.key = k |
this.value = v |
this._index = i |
} |
|
function find (data, k) { |
for (var i = 0, s = '_' + k, key = s; |
hasOwnProperty.call(data, key); |
key = s + i++) { |
if (same(data[key].key, k)) |
return data[key] |
} |
} |
|
function set (data, k, v) { |
for (var i = 0, s = '_' + k, key = s; |
hasOwnProperty.call(data, key); |
key = s + i++) { |
if (same(data[key].key, k)) { |
data[key].value = v |
return |
} |
} |
data.size++ |
data[key] = new Entry(k, v, key) |
} |
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/pseudomap/test/basic.js |
@@ -0,0 +1,86 @@ |
var t = require('tap') |
|
process.env.TEST_PSEUDOMAP = 'true' |
|
var PM = require('../') |
runTests(PM) |
|
// if possible, verify that Map also behaves the same way |
if (typeof Map === 'function') |
runTests(Map) |
|
|
function runTests (Map) { |
t.throws(Map) |
|
var m = new Map() |
|
t.equal(m.size, 0) |
|
m.set(1, '1 string') |
t.equal(m.get(1), '1 string') |
t.equal(m.size, 1) |
m.size = 1000 |
t.equal(m.size, 1) |
m.size = 0 |
t.equal(m.size, 1) |
|
m = new Map([[1, 'number 1'], ['1', 'string 1']]) |
t.equal(m.get(1), 'number 1') |
t.equal(m.get('1'), 'string 1') |
t.equal(m.size, 2) |
|
m = new Map(m) |
t.equal(m.get(1), 'number 1') |
t.equal(m.get('1'), 'string 1') |
t.equal(m.size, 2) |
|
var akey = {} |
var bkey = {} |
m.set(akey, { some: 'data' }) |
m.set(bkey, { some: 'other data' }) |
t.same(m.get(akey), { some: 'data' }) |
t.same(m.get(bkey), { some: 'other data' }) |
t.equal(m.size, 4) |
|
var x = /x/ |
var y = /x/ |
m.set(x, 'x regex') |
m.set(y, 'y regex') |
t.equal(m.get(x), 'x regex') |
m.set(x, 'x again') |
t.equal(m.get(x), 'x again') |
t.equal(m.size, 6) |
|
m.set(NaN, 'not a number') |
t.equal(m.get(NaN), 'not a number') |
m.set(NaN, 'it is a ' + typeof NaN) |
t.equal(m.get(NaN), 'it is a number') |
m.set('NaN', 'stringie nan') |
t.equal(m.get(NaN), 'it is a number') |
t.equal(m.get('NaN'), 'stringie nan') |
t.equal(m.size, 8) |
|
m.delete(NaN) |
t.equal(m.get(NaN), undefined) |
t.equal(m.size, 7) |
|
var expect = [ |
{ value: 'number 1', key: 1 }, |
{ value: 'string 1', key: '1' }, |
{ value: { some: 'data' }, key: {} }, |
{ value: { some: 'other data' }, key: {} }, |
{ value: 'x again', key: /x/ }, |
{ value: 'y regex', key: /x/ }, |
{ value: 'stringie nan', key: 'NaN' } |
] |
var actual = [] |
|
m.forEach(function (value, key) { |
actual.push({ value: value, key: key }) |
}) |
t.same(actual, expect) |
|
m.clear() |
t.equal(m.size, 0) |
} |