1111
This commit is contained in:
113
.output/server/node_modules/side-channel-list/index.js
generated
vendored
Normal file
113
.output/server/node_modules/side-channel-list/index.js
generated
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
'use strict';
|
||||
|
||||
var inspect = require('object-inspect');
|
||||
|
||||
var $TypeError = require('es-errors/type');
|
||||
|
||||
/*
|
||||
* This function traverses the list returning the node corresponding to the given key.
|
||||
*
|
||||
* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.
|
||||
* By doing so, all the recently used nodes can be accessed relatively quickly.
|
||||
*/
|
||||
/** @type {import('./list.d.ts').listGetNode} */
|
||||
// eslint-disable-next-line consistent-return
|
||||
var listGetNode = function (list, key, isDelete) {
|
||||
/** @type {typeof list | NonNullable<(typeof list)['next']>} */
|
||||
var prev = list;
|
||||
/** @type {(typeof list)['next']} */
|
||||
var curr;
|
||||
// eslint-disable-next-line eqeqeq
|
||||
for (; (curr = prev.next) != null; prev = curr) {
|
||||
if (curr.key === key) {
|
||||
prev.next = curr.next;
|
||||
if (!isDelete) {
|
||||
// eslint-disable-next-line no-extra-parens
|
||||
curr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);
|
||||
list.next = curr; // eslint-disable-line no-param-reassign
|
||||
}
|
||||
return curr;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** @type {import('./list.d.ts').listGet} */
|
||||
var listGet = function (objects, key) {
|
||||
if (!objects) {
|
||||
return void undefined;
|
||||
}
|
||||
var node = listGetNode(objects, key);
|
||||
return node && node.value;
|
||||
};
|
||||
/** @type {import('./list.d.ts').listSet} */
|
||||
var listSet = function (objects, key, value) {
|
||||
var node = listGetNode(objects, key);
|
||||
if (node) {
|
||||
node.value = value;
|
||||
} else {
|
||||
// Prepend the new node to the beginning of the list
|
||||
objects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens
|
||||
key: key,
|
||||
next: objects.next,
|
||||
value: value
|
||||
});
|
||||
}
|
||||
};
|
||||
/** @type {import('./list.d.ts').listHas} */
|
||||
var listHas = function (objects, key) {
|
||||
if (!objects) {
|
||||
return false;
|
||||
}
|
||||
return !!listGetNode(objects, key);
|
||||
};
|
||||
/** @type {import('./list.d.ts').listDelete} */
|
||||
// eslint-disable-next-line consistent-return
|
||||
var listDelete = function (objects, key) {
|
||||
if (objects) {
|
||||
return listGetNode(objects, key, true);
|
||||
}
|
||||
};
|
||||
|
||||
/** @type {import('.')} */
|
||||
module.exports = function getSideChannelList() {
|
||||
/** @typedef {ReturnType<typeof getSideChannelList>} Channel */
|
||||
/** @typedef {Parameters<Channel['get']>[0]} K */
|
||||
/** @typedef {Parameters<Channel['set']>[1]} V */
|
||||
|
||||
/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;
|
||||
|
||||
/** @type {Channel} */
|
||||
var channel = {
|
||||
assert: function (key) {
|
||||
if (!channel.has(key)) {
|
||||
throw new $TypeError('Side channel does not contain ' + inspect(key));
|
||||
}
|
||||
},
|
||||
'delete': function (key) {
|
||||
var root = $o && $o.next;
|
||||
var deletedNode = listDelete($o, key);
|
||||
if (deletedNode && root && root === deletedNode) {
|
||||
$o = void undefined;
|
||||
}
|
||||
return !!deletedNode;
|
||||
},
|
||||
get: function (key) {
|
||||
return listGet($o, key);
|
||||
},
|
||||
has: function (key) {
|
||||
return listHas($o, key);
|
||||
},
|
||||
set: function (key, value) {
|
||||
if (!$o) {
|
||||
// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head
|
||||
$o = {
|
||||
next: void undefined
|
||||
};
|
||||
}
|
||||
// eslint-disable-next-line no-extra-parens
|
||||
listSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);
|
||||
}
|
||||
};
|
||||
// @ts-expect-error TODO: figure out why this is erroring
|
||||
return channel;
|
||||
};
|
||||
80
.output/server/node_modules/side-channel-list/package.json
generated
vendored
Normal file
80
.output/server/node_modules/side-channel-list/package.json
generated
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"name": "side-channel-list",
|
||||
"version": "1.0.0",
|
||||
"description": "Store information about any JS value in a side channel, using a linked list",
|
||||
"main": "index.js",
|
||||
"exports": {
|
||||
".": "./index.js",
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"types": "./index.d.ts",
|
||||
"scripts": {
|
||||
"prepack": "npmignore --auto --commentLines=autogenerated",
|
||||
"prepublishOnly": "safe-publish-latest",
|
||||
"prepublish": "not-in-publish || npm run prepublishOnly",
|
||||
"prelint": "evalmd README.md && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')",
|
||||
"lint": "eslint --ext=js,mjs .",
|
||||
"postlint": "tsc -p . && attw -P",
|
||||
"pretest": "npm run lint",
|
||||
"tests-only": "nyc tape 'test/**/*.js'",
|
||||
"test": "npm run tests-only",
|
||||
"posttest": "npx npm@'>= 10.2' audit --production",
|
||||
"version": "auto-changelog && git add CHANGELOG.md",
|
||||
"postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/ljharb/side-channel-list.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "Jordan Harband <ljharb@gmail.com>",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
},
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/ljharb/side-channel-list/issues"
|
||||
},
|
||||
"homepage": "https://github.com/ljharb/side-channel-list#readme",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"object-inspect": "^1.13.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@arethetypeswrong/cli": "^0.17.1",
|
||||
"@ljharb/eslint-config": "^21.1.1",
|
||||
"@ljharb/tsconfig": "^0.2.2",
|
||||
"@types/object-inspect": "^1.13.0",
|
||||
"@types/tape": "^5.6.5",
|
||||
"auto-changelog": "^2.5.0",
|
||||
"eclint": "^2.8.1",
|
||||
"encoding": "^0.1.13",
|
||||
"eslint": "=8.8.0",
|
||||
"evalmd": "^0.0.19",
|
||||
"in-publish": "^2.0.1",
|
||||
"npmignore": "^0.3.1",
|
||||
"nyc": "^10.3.2",
|
||||
"safe-publish-latest": "^2.0.0",
|
||||
"tape": "^5.9.0",
|
||||
"typescript": "next"
|
||||
},
|
||||
"auto-changelog": {
|
||||
"output": "CHANGELOG.md",
|
||||
"template": "keepachangelog",
|
||||
"unreleased": false,
|
||||
"commitLimit": false,
|
||||
"backfillLimit": false,
|
||||
"hideCredit": true
|
||||
},
|
||||
"publishConfig": {
|
||||
"ignore": [
|
||||
".github/workflows"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"__npminstall_done": true,
|
||||
"_from": "side-channel-list@1.0.0",
|
||||
"_resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz"
|
||||
}
|
||||
Reference in New Issue
Block a user