Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/proto-list')
-rw-r--r--node_modules/proto-list/LICENSE15
-rw-r--r--node_modules/proto-list/README.md3
-rw-r--r--node_modules/proto-list/package.json73
-rw-r--r--node_modules/proto-list/proto-list.js88
-rw-r--r--node_modules/proto-list/test/basic.js61
5 files changed, 240 insertions, 0 deletions
diff --git a/node_modules/proto-list/LICENSE b/node_modules/proto-list/LICENSE
new file mode 100644
index 000000000..19129e315
--- /dev/null
+++ b/node_modules/proto-list/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.
diff --git a/node_modules/proto-list/README.md b/node_modules/proto-list/README.md
new file mode 100644
index 000000000..43cfa3589
--- /dev/null
+++ b/node_modules/proto-list/README.md
@@ -0,0 +1,3 @@
+A list of objects, bound by their prototype chain.
+
+Used in npm's config stuff.
diff --git a/node_modules/proto-list/package.json b/node_modules/proto-list/package.json
new file mode 100644
index 000000000..ff0b6b605
--- /dev/null
+++ b/node_modules/proto-list/package.json
@@ -0,0 +1,73 @@
+{
+ "_args": [
+ [
+ "proto-list@~1.2.1",
+ "/Users/rebecca/code/npm/node_modules/config-chain"
+ ]
+ ],
+ "_from": "proto-list@>=1.2.1 <1.3.0",
+ "_id": "proto-list@1.2.4",
+ "_inCache": true,
+ "_location": "/proto-list",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "email": "isaacs@npmjs.com",
+ "name": "isaacs"
+ },
+ "_npmVersion": "2.10.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "name": "proto-list",
+ "raw": "proto-list@~1.2.1",
+ "rawSpec": "~1.2.1",
+ "scope": null,
+ "spec": ">=1.2.1 <1.3.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/config-chain"
+ ],
+ "_resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "_shasum": "212d5bfe1318306a420f6402b8e26ff39647a849",
+ "_shrinkwrap": null,
+ "_spec": "proto-list@~1.2.1",
+ "_where": "/Users/rebecca/code/npm/node_modules/config-chain",
+ "author": {
+ "email": "i@izs.me",
+ "name": "Isaac Z. Schlueter",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/proto-list/issues"
+ },
+ "dependencies": {},
+ "description": "A utility for managing a prototype chain",
+ "devDependencies": {
+ "tap": "0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "212d5bfe1318306a420f6402b8e26ff39647a849",
+ "tarball": "http://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"
+ },
+ "gitHead": "9e4af12d4dddee2fd531f0fe0c21c9cfacb78ac0",
+ "homepage": "https://github.com/isaacs/proto-list#readme",
+ "license": "ISC",
+ "main": "./proto-list.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "name": "proto-list",
+ "optionalDependencies": {},
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/proto-list.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "1.2.4"
+}
diff --git a/node_modules/proto-list/proto-list.js b/node_modules/proto-list/proto-list.js
new file mode 100644
index 000000000..b55c25c05
--- /dev/null
+++ b/node_modules/proto-list/proto-list.js
@@ -0,0 +1,88 @@
+
+module.exports = ProtoList
+
+function setProto(obj, proto) {
+ if (typeof Object.setPrototypeOf === "function")
+ return Object.setPrototypeOf(obj, proto)
+ else
+ obj.__proto__ = proto
+}
+
+function ProtoList () {
+ this.list = []
+ var root = null
+ Object.defineProperty(this, 'root', {
+ get: function () { return root },
+ set: function (r) {
+ root = r
+ if (this.list.length) {
+ setProto(this.list[this.list.length - 1], r)
+ }
+ },
+ enumerable: true,
+ configurable: true
+ })
+}
+
+ProtoList.prototype =
+ { get length () { return this.list.length }
+ , get keys () {
+ var k = []
+ for (var i in this.list[0]) k.push(i)
+ return k
+ }
+ , get snapshot () {
+ var o = {}
+ this.keys.forEach(function (k) { o[k] = this.get(k) }, this)
+ return o
+ }
+ , get store () {
+ return this.list[0]
+ }
+ , push : function (obj) {
+ if (typeof obj !== "object") obj = {valueOf:obj}
+ if (this.list.length >= 1) {
+ setProto(this.list[this.list.length - 1], obj)
+ }
+ setProto(obj, this.root)
+ return this.list.push(obj)
+ }
+ , pop : function () {
+ if (this.list.length >= 2) {
+ setProto(this.list[this.list.length - 2], this.root)
+ }
+ return this.list.pop()
+ }
+ , unshift : function (obj) {
+ setProto(obj, this.list[0] || this.root)
+ return this.list.unshift(obj)
+ }
+ , shift : function () {
+ if (this.list.length === 1) {
+ setProto(this.list[0], this.root)
+ }
+ return this.list.shift()
+ }
+ , get : function (key) {
+ return this.list[0][key]
+ }
+ , set : function (key, val, save) {
+ if (!this.length) this.push({})
+ if (save && this.list[0].hasOwnProperty(key)) this.push({})
+ return this.list[0][key] = val
+ }
+ , forEach : function (fn, thisp) {
+ for (var key in this.list[0]) fn.call(thisp, key, this.list[0][key])
+ }
+ , slice : function () {
+ return this.list.slice.apply(this.list, arguments)
+ }
+ , splice : function () {
+ // handle injections
+ var ret = this.list.splice.apply(this.list, arguments)
+ for (var i = 0, l = this.list.length; i < l; i++) {
+ setProto(this.list[i], this.list[i + 1] || this.root)
+ }
+ return ret
+ }
+ }
diff --git a/node_modules/proto-list/test/basic.js b/node_modules/proto-list/test/basic.js
new file mode 100644
index 000000000..5cd66bef1
--- /dev/null
+++ b/node_modules/proto-list/test/basic.js
@@ -0,0 +1,61 @@
+var tap = require("tap")
+ , test = tap.test
+ , ProtoList = require("../proto-list.js")
+
+tap.plan(1)
+
+tap.test("protoList tests", function (t) {
+ var p = new ProtoList
+ p.push({foo:"bar"})
+ p.push({})
+ p.set("foo", "baz")
+ t.equal(p.get("foo"), "baz")
+
+ var p = new ProtoList
+ p.push({foo:"bar"})
+ p.set("foo", "baz")
+ t.equal(p.get("foo"), "baz")
+ t.equal(p.length, 1)
+ p.pop()
+ t.equal(p.length, 0)
+ p.set("foo", "asdf")
+ t.equal(p.length, 1)
+ t.equal(p.get("foo"), "asdf")
+ p.push({bar:"baz"})
+ t.equal(p.length, 2)
+ t.equal(p.get("foo"), "asdf")
+ p.shift()
+ t.equal(p.length, 1)
+ t.equal(p.get("foo"), undefined)
+
+
+ p.unshift({foo:"blo", bar:"rab"})
+ p.unshift({foo:"boo"})
+ t.equal(p.length, 3)
+ t.equal(p.get("foo"), "boo")
+ t.equal(p.get("bar"), "rab")
+
+ var ret = p.splice(1, 1, {bar:"bar"})
+ t.same(ret, [{foo:"blo", bar:"rab"}])
+ t.equal(p.get("bar"), "bar")
+
+ // should not inherit default object properties
+ t.equal(p.get('hasOwnProperty'), undefined)
+
+ // unless we give it those.
+ p.root = {}
+ t.equal(p.get('hasOwnProperty'), {}.hasOwnProperty)
+
+ p.root = {default:'monkey'}
+ t.equal(p.get('default'), 'monkey')
+
+ p.push({red:'blue'})
+ p.push({red:'blue'})
+ p.push({red:'blue'})
+ while (p.length) {
+ t.equal(p.get('default'), 'monkey')
+ p.shift()
+ }
+
+ t.end()
+})