WIP: bootstrap and partial real Solana watcher implementation
This commit is contained in:
@@ -0,0 +1 @@
|
||||
export { _ as default } from "../esm/_apply_decs_2203_r.js";
|
||||
@@ -0,0 +1,7 @@
|
||||
function _skipFirstGeneratorNext(t) {
|
||||
return function () {
|
||||
var r = t.apply(this, arguments);
|
||||
return r.next(), r;
|
||||
};
|
||||
}
|
||||
module.exports = _skipFirstGeneratorNext, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"scriptTarget.enum.d.ts","sourceRoot":"","sources":["../../src/enums/scriptTarget.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IACpB,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,KAAK;IACX,MAAM,KAAK;IACX,MAAM,KAAK;IACX,MAAM,KAAK;IACX,IAAI,MAAM;IACV,MAAM,KAAS;CAClB"}
|
||||
@@ -0,0 +1,24 @@
|
||||
"use strict";
|
||||
// THIS CODE WAS AUTOMATICALLY GENERATED
|
||||
// DO NOT EDIT THIS CODE BY HAND
|
||||
// RUN THE FOLLOWING COMMAND FROM THE WORKSPACE ROOT TO REGENERATE:
|
||||
// npx nx generate-lib repo
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.es2019_full = void 0;
|
||||
const dom_1 = require("./dom");
|
||||
const dom_asynciterable_1 = require("./dom.asynciterable");
|
||||
const dom_iterable_1 = require("./dom.iterable");
|
||||
const es2019_1 = require("./es2019");
|
||||
const scripthost_1 = require("./scripthost");
|
||||
const webworker_importscripts_1 = require("./webworker.importscripts");
|
||||
exports.es2019_full = {
|
||||
libs: [
|
||||
es2019_1.es2019,
|
||||
dom_1.dom,
|
||||
webworker_importscripts_1.webworker_importscripts,
|
||||
scripthost_1.scripthost,
|
||||
dom_iterable_1.dom_iterable,
|
||||
dom_asynciterable_1.dom_asynciterable,
|
||||
],
|
||||
variables: [],
|
||||
};
|
||||
@@ -0,0 +1,165 @@
|
||||
/**
|
||||
* @fileoverview Rule to disallow `parseInt()` in favor of binary, octal, and hexadecimal literals
|
||||
* @author Annie Zhang, Henry Zhu
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
const astUtils = require("./utils/ast-utils");
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Helpers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
const radixMap = new Map([
|
||||
[2, { system: "binary", literalPrefix: "0b" }],
|
||||
[8, { system: "octal", literalPrefix: "0o" }],
|
||||
[16, { system: "hexadecimal", literalPrefix: "0x" }],
|
||||
]);
|
||||
|
||||
/**
|
||||
* Checks to see if a CallExpression's callee node is `parseInt` or
|
||||
* `Number.parseInt`.
|
||||
* @param {ASTNode} calleeNode The callee node to evaluate.
|
||||
* @param {SourceCode} sourceCode The source code object.
|
||||
* @returns {boolean} True if the callee is `parseInt` or `Number.parseInt`,
|
||||
* false otherwise.
|
||||
*/
|
||||
function isParseInt(calleeNode, sourceCode) {
|
||||
if (astUtils.isSpecificId(calleeNode, "parseInt")) {
|
||||
return sourceCode.isGlobalReference(calleeNode);
|
||||
}
|
||||
|
||||
if (astUtils.isSpecificMemberAccess(calleeNode, "Number", "parseInt")) {
|
||||
const objectNode = astUtils.skipChainExpression(calleeNode).object;
|
||||
|
||||
return sourceCode.isGlobalReference(objectNode);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Rule Definition
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** @type {import('../types').Rule.RuleModule} */
|
||||
module.exports = {
|
||||
meta: {
|
||||
type: "suggestion",
|
||||
|
||||
docs: {
|
||||
description:
|
||||
"Disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals",
|
||||
recommended: false,
|
||||
frozen: true,
|
||||
url: "https://eslint.org/docs/latest/rules/prefer-numeric-literals",
|
||||
},
|
||||
|
||||
schema: [],
|
||||
|
||||
messages: {
|
||||
useLiteral:
|
||||
"Use {{system}} literals instead of {{functionName}}().",
|
||||
},
|
||||
|
||||
fixable: "code",
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const sourceCode = context.sourceCode;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Public
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
return {
|
||||
"CallExpression[arguments.length=2]"(node) {
|
||||
const [strNode, radixNode] = node.arguments,
|
||||
str = astUtils.getStaticStringValue(strNode),
|
||||
radix = radixNode.value;
|
||||
|
||||
if (
|
||||
str !== null &&
|
||||
astUtils.isStringLiteral(strNode) &&
|
||||
radixNode.type === "Literal" &&
|
||||
typeof radix === "number" &&
|
||||
radixMap.has(radix) &&
|
||||
isParseInt(node.callee, sourceCode)
|
||||
) {
|
||||
const { system, literalPrefix } = radixMap.get(radix);
|
||||
|
||||
context.report({
|
||||
node,
|
||||
messageId: "useLiteral",
|
||||
data: {
|
||||
system,
|
||||
functionName: sourceCode.getText(node.callee),
|
||||
},
|
||||
fix(fixer) {
|
||||
if (sourceCode.getCommentsInside(node).length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const replacement = `${literalPrefix}${str}`;
|
||||
|
||||
if (+replacement !== parseInt(str, radix)) {
|
||||
/*
|
||||
* If the newly-produced literal would be invalid, (e.g. 0b1234),
|
||||
* or it would yield an incorrect parseInt result for some other reason, don't make a fix.
|
||||
*
|
||||
* If `str` had numeric separators, `+replacement` will evaluate to `NaN` because unary `+`
|
||||
* per the specification doesn't support numeric separators. Thus, the above condition will be `true`
|
||||
* (`NaN !== anything` is always `true`) regardless of the `parseInt(str, radix)` value.
|
||||
* Consequently, no autofixes will be made. This is correct behavior because `parseInt` also
|
||||
* doesn't support numeric separators, but it does parse part of the string before the first `_`,
|
||||
* so the autofix would be invalid:
|
||||
*
|
||||
* parseInt("1_1", 2) // === 1
|
||||
* 0b1_1 // === 3
|
||||
*/
|
||||
return null;
|
||||
}
|
||||
|
||||
const tokenBefore = sourceCode.getTokenBefore(node),
|
||||
tokenAfter = sourceCode.getTokenAfter(node);
|
||||
let prefix = "",
|
||||
suffix = "";
|
||||
|
||||
if (
|
||||
tokenBefore &&
|
||||
tokenBefore.range[1] === node.range[0] &&
|
||||
!astUtils.canTokensBeAdjacent(
|
||||
tokenBefore,
|
||||
replacement,
|
||||
)
|
||||
) {
|
||||
prefix = " ";
|
||||
}
|
||||
|
||||
if (
|
||||
tokenAfter &&
|
||||
node.range[1] === tokenAfter.range[0] &&
|
||||
!astUtils.canTokensBeAdjacent(
|
||||
replacement,
|
||||
tokenAfter,
|
||||
)
|
||||
) {
|
||||
suffix = " ";
|
||||
}
|
||||
|
||||
return fixer.replaceText(
|
||||
node,
|
||||
`${prefix}${replacement}${suffix}`,
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
import uuid from "./index.js";
|
||||
export import v1 = uuid.v1;
|
||||
export import v1ToV6 = uuid.v1ToV6;
|
||||
export import v3 = uuid.v3;
|
||||
export import v4 = uuid.v4;
|
||||
export import v5 = uuid.v5;
|
||||
export import v6 = uuid.v6;
|
||||
export import v6ToV1 = uuid.v6ToV1;
|
||||
export import v7 = uuid.v7;
|
||||
export import NIL = uuid.NIL;
|
||||
export import MAX = uuid.MAX;
|
||||
export import version = uuid.version;
|
||||
export import validate = uuid.validate;
|
||||
export import stringify = uuid.stringify;
|
||||
export import parse = uuid.parse;
|
||||
export import V1Options = uuid.V1Options;
|
||||
export import V4Options = uuid.V4Options;
|
||||
export import V6Options = uuid.V6Options;
|
||||
export import V7Options = uuid.V7Options;
|
||||
@@ -0,0 +1,19 @@
|
||||
Copyright (C) 2012-2017 by Ingvar Stepanyan
|
||||
|
||||
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.
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.isNullLiteral = isNullLiteral;
|
||||
const utils_1 = require("@typescript-eslint/utils");
|
||||
function isNullLiteral(i) {
|
||||
return i.type === utils_1.AST_NODE_TYPES.Literal && i.value == null;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/sync/client.ts"],"names":[],"mappings":"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"}
|
||||
@@ -0,0 +1,4 @@
|
||||
import * as z from "./external.js";
|
||||
export * from "./external.js";
|
||||
export { z };
|
||||
export default z;
|
||||
@@ -0,0 +1 @@
|
||||
export declare function getStringLength(value: string): number;
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs');
|
||||
var name = process.argv[2] || '.';
|
||||
var property = process.argv[3] || 'version';
|
||||
if (name != '.') name = 'node_modules/' + name;
|
||||
var json = JSON.parse(fs.readFileSync(name + '/package.json', 'utf8'));
|
||||
console.log(json[property]);
|
||||
@@ -0,0 +1,12 @@
|
||||
'use strict'
|
||||
|
||||
const fs = require('fs')
|
||||
const { once } = require('events')
|
||||
|
||||
async function run (opts) {
|
||||
const stream = fs.createWriteStream(opts.dest)
|
||||
await once(stream, 'open')
|
||||
return stream
|
||||
}
|
||||
|
||||
module.exports = run
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"name": "sonic-boom",
|
||||
"version": "4.2.1",
|
||||
"description": "Extremely fast utf8 only stream implementation",
|
||||
"main": "index.js",
|
||||
"type": "commonjs",
|
||||
"types": "types/index.d.ts",
|
||||
"scripts": {
|
||||
"test": "npm run test:types && standard && npm run test:unit",
|
||||
"test:unit": "tap",
|
||||
"test:types": "tsc && tsd"
|
||||
},
|
||||
"pre-commit": [
|
||||
"test"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/pinojs/sonic-boom.git"
|
||||
},
|
||||
"keywords": [
|
||||
"stream",
|
||||
"fs",
|
||||
"net",
|
||||
"fd",
|
||||
"file",
|
||||
"descriptor",
|
||||
"fast"
|
||||
],
|
||||
"author": "Matteo Collina <hello@matteocollina.com>",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/pinojs/sonic-boom/issues"
|
||||
},
|
||||
"homepage": "https://github.com/pinojs/sonic-boom#readme",
|
||||
"devDependencies": {
|
||||
"@fastify/pre-commit": "^2.1.0",
|
||||
"@sinonjs/fake-timers": "^15.0.0",
|
||||
"@types/node": "^25.0.3",
|
||||
"fastbench": "^1.0.1",
|
||||
"proxyquire": "^2.1.3",
|
||||
"standard": "^17.0.0",
|
||||
"tap": "^18.2.0",
|
||||
"tsd": "^0.31.0",
|
||||
"typescript": "~5.9.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"atomic-sleep": "^1.0.0"
|
||||
},
|
||||
"tsd": {
|
||||
"directory": "./types"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Code generated by Herebyfile.mjs generate:enums from internal/ast/utilities.go. DO NOT EDIT.
|
||||
export var OuterExpressionKinds;
|
||||
(function (OuterExpressionKinds) {
|
||||
OuterExpressionKinds[OuterExpressionKinds["Parentheses"] = 1] = "Parentheses";
|
||||
OuterExpressionKinds[OuterExpressionKinds["TypeAssertions"] = 2] = "TypeAssertions";
|
||||
OuterExpressionKinds[OuterExpressionKinds["NonNullAssertions"] = 4] = "NonNullAssertions";
|
||||
OuterExpressionKinds[OuterExpressionKinds["PartiallyEmittedExpressions"] = 8] = "PartiallyEmittedExpressions";
|
||||
OuterExpressionKinds[OuterExpressionKinds["ExpressionsWithTypeArguments"] = 16] = "ExpressionsWithTypeArguments";
|
||||
OuterExpressionKinds[OuterExpressionKinds["Satisfies"] = 32] = "Satisfies";
|
||||
OuterExpressionKinds[OuterExpressionKinds["ExcludeJSDocTypeAssertion"] = 64] = "ExcludeJSDocTypeAssertion";
|
||||
OuterExpressionKinds[OuterExpressionKinds["Assignments"] = 128] = "Assignments";
|
||||
OuterExpressionKinds[OuterExpressionKinds["Comma"] = 256] = "Comma";
|
||||
OuterExpressionKinds[OuterExpressionKinds["Assertions"] = 38] = "Assertions";
|
||||
OuterExpressionKinds[OuterExpressionKinds["All"] = 63] = "All";
|
||||
OuterExpressionKinds[OuterExpressionKinds["AllExceptAssertionsOrExpressionsWithTypeArguments"] = 9] = "AllExceptAssertionsOrExpressionsWithTypeArguments";
|
||||
OuterExpressionKinds[OuterExpressionKinds["ExpressionTypePassthrough"] = 385] = "ExpressionTypePassthrough";
|
||||
})(OuterExpressionKinds || (OuterExpressionKinds = {}));
|
||||
//# sourceMappingURL=outerExpressionKinds.enum.js.map
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,24 @@
|
||||
'use strict'
|
||||
|
||||
const { register } = require('../..')
|
||||
const assert = require('assert')
|
||||
|
||||
function setup () {
|
||||
let obj = { foo: 'bar' }
|
||||
register(obj, shutdown)
|
||||
setImmediate(function () {
|
||||
obj = undefined
|
||||
gc() // eslint-disable-line
|
||||
})
|
||||
}
|
||||
|
||||
let shutdownCalled = false
|
||||
function shutdown (obj) {
|
||||
shutdownCalled = true
|
||||
}
|
||||
|
||||
setup()
|
||||
|
||||
process.on('exit', function () {
|
||||
assert.strictEqual(shutdownCalled, false)
|
||||
})
|
||||
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* @fileoverview Define the cursor which ignores specified tokens.
|
||||
* @author Toru Nagashima
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
const DecorativeCursor = require("./decorative-cursor");
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exports
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* The decorative cursor which ignores specified tokens.
|
||||
*/
|
||||
module.exports = class FilterCursor extends DecorativeCursor {
|
||||
/**
|
||||
* Initializes this cursor.
|
||||
* @param {Cursor} cursor The cursor to be decorated.
|
||||
* @param {Function} predicate The predicate function to decide tokens this cursor iterates.
|
||||
*/
|
||||
constructor(cursor, predicate) {
|
||||
super(cursor);
|
||||
this.predicate = predicate;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
moveNext() {
|
||||
const predicate = this.predicate;
|
||||
|
||||
while (super.moveNext()) {
|
||||
if (predicate(this.current)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
# @vitest/mocker
|
||||
|
||||
[](https://npmx.dev/package/@vitest/mocker)
|
||||
|
||||
Vitest's module mocker implementation.
|
||||
|
||||
[GitHub](https://github.com/vitest-dev/vitest/blob/main/packages/mocker/) | [Documentation](https://github.com/vitest-dev/vitest/blob/main/packages/mocker/EXPORTS.md)
|
||||
@@ -0,0 +1,73 @@
|
||||
import { join, dirname, basename, isAbsolute, resolve } from 'pathe';
|
||||
|
||||
class SnapshotManager {
|
||||
summary;
|
||||
extension = ".snap";
|
||||
constructor(options) {
|
||||
this.options = options;
|
||||
this.clear();
|
||||
}
|
||||
clear() {
|
||||
this.summary = emptySummary(this.options);
|
||||
}
|
||||
add(result) {
|
||||
addSnapshotResult(this.summary, result);
|
||||
}
|
||||
resolvePath(testPath, context) {
|
||||
const resolver = this.options.resolveSnapshotPath || (() => {
|
||||
return join(join(dirname(testPath), "__snapshots__"), `${basename(testPath)}${this.extension}`);
|
||||
});
|
||||
const path = resolver(testPath, this.extension, context);
|
||||
return path;
|
||||
}
|
||||
resolveRawPath(testPath, rawPath) {
|
||||
return isAbsolute(rawPath) ? rawPath : resolve(dirname(testPath), rawPath);
|
||||
}
|
||||
}
|
||||
function emptySummary(options) {
|
||||
const summary = {
|
||||
added: 0,
|
||||
failure: false,
|
||||
filesAdded: 0,
|
||||
filesRemoved: 0,
|
||||
filesRemovedList: [],
|
||||
filesUnmatched: 0,
|
||||
filesUpdated: 0,
|
||||
matched: 0,
|
||||
total: 0,
|
||||
unchecked: 0,
|
||||
uncheckedKeysByFile: [],
|
||||
unmatched: 0,
|
||||
updated: 0,
|
||||
didUpdate: options.updateSnapshot === "all"
|
||||
};
|
||||
return summary;
|
||||
}
|
||||
function addSnapshotResult(summary, result) {
|
||||
if (result.added) {
|
||||
summary.filesAdded++;
|
||||
}
|
||||
if (result.fileDeleted) {
|
||||
summary.filesRemoved++;
|
||||
}
|
||||
if (result.unmatched) {
|
||||
summary.filesUnmatched++;
|
||||
}
|
||||
if (result.updated) {
|
||||
summary.filesUpdated++;
|
||||
}
|
||||
summary.added += result.added;
|
||||
summary.matched += result.matched;
|
||||
summary.unchecked += result.unchecked;
|
||||
if (result.uncheckedKeys && result.uncheckedKeys.length > 0) {
|
||||
summary.uncheckedKeysByFile.push({
|
||||
filePath: result.filepath,
|
||||
keys: result.uncheckedKeys
|
||||
});
|
||||
}
|
||||
summary.unmatched += result.unmatched;
|
||||
summary.updated += result.updated;
|
||||
summary.total += result.added + result.matched + result.unmatched + result.updated;
|
||||
}
|
||||
|
||||
export { SnapshotManager, addSnapshotResult, emptySummary };
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* @version 1.4.0
|
||||
* @date 2015-10-26
|
||||
* @stability 3 - Stable
|
||||
* @author Lauri Rooden (https://github.com/litejs/natural-compare-lite)
|
||||
* @license MIT License
|
||||
*/
|
||||
|
||||
|
||||
var naturalCompare = function(a, b) {
|
||||
var i, codeA
|
||||
, codeB = 1
|
||||
, posA = 0
|
||||
, posB = 0
|
||||
, alphabet = String.alphabet
|
||||
|
||||
function getCode(str, pos, code) {
|
||||
if (code) {
|
||||
for (i = pos; code = getCode(str, i), code < 76 && code > 65;) ++i;
|
||||
return +str.slice(pos - 1, i)
|
||||
}
|
||||
code = alphabet && alphabet.indexOf(str.charAt(pos))
|
||||
return code > -1 ? code + 76 : ((code = str.charCodeAt(pos) || 0), code < 45 || code > 127) ? code
|
||||
: code < 46 ? 65 // -
|
||||
: code < 48 ? code - 1
|
||||
: code < 58 ? code + 18 // 0-9
|
||||
: code < 65 ? code - 11
|
||||
: code < 91 ? code + 11 // A-Z
|
||||
: code < 97 ? code - 37
|
||||
: code < 123 ? code + 5 // a-z
|
||||
: code - 63
|
||||
}
|
||||
|
||||
|
||||
if ((a+="") != (b+="")) for (;codeB;) {
|
||||
codeA = getCode(a, posA++)
|
||||
codeB = getCode(b, posB++)
|
||||
|
||||
if (codeA < 76 && codeB < 76 && codeA > 66 && codeB > 66) {
|
||||
codeA = getCode(a, posA, posA)
|
||||
codeB = getCode(b, posB, posA = i)
|
||||
posB = i
|
||||
}
|
||||
|
||||
if (codeA != codeB) return (codeA < codeB) ? -1 : 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
try {
|
||||
module.exports = naturalCompare;
|
||||
} catch (e) {
|
||||
String.naturalCompare = naturalCompare;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
Copyright (c) Microsoft Corporation
|
||||
|
||||
All rights reserved.
|
||||
|
||||
MIT License
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,96 @@
|
||||
import type { TSESTree } from '@typescript-eslint/types';
|
||||
import type { Definition } from '../definition';
|
||||
import type { ReferenceImplicitGlobal } from '../referencer/Reference';
|
||||
import type { ScopeManager } from '../ScopeManager';
|
||||
import type { FunctionScope } from './FunctionScope';
|
||||
import type { GlobalScope } from './GlobalScope';
|
||||
import type { ModuleScope } from './ModuleScope';
|
||||
import type { Scope } from './Scope';
|
||||
import type { TSModuleScope } from './TSModuleScope';
|
||||
import { Reference, ReferenceFlag } from '../referencer/Reference';
|
||||
import { Variable } from '../variable';
|
||||
import { ScopeType } from './ScopeType';
|
||||
type VariableScope = FunctionScope | GlobalScope | ModuleScope | TSModuleScope;
|
||||
export declare abstract class ScopeBase<Type extends ScopeType, Block extends TSESTree.Node, Upper extends Scope | null> {
|
||||
#private;
|
||||
/**
|
||||
* A unique ID for this instance - primarily used to help debugging and testing
|
||||
*/
|
||||
readonly $id: number;
|
||||
/**
|
||||
* The AST node which created this scope.
|
||||
* @public
|
||||
*/
|
||||
readonly block: Block;
|
||||
/**
|
||||
* The array of child scopes. This does not include grandchild scopes.
|
||||
* @public
|
||||
*/
|
||||
readonly childScopes: Scope[];
|
||||
/**
|
||||
* Whether this scope is created by a FunctionExpression.
|
||||
* @public
|
||||
*/
|
||||
readonly functionExpressionScope: boolean;
|
||||
/**
|
||||
* Whether 'use strict' is in effect in this scope.
|
||||
* @public
|
||||
*/
|
||||
isStrict: boolean;
|
||||
/**
|
||||
* List of {@link Reference}s that are left to be resolved (i.e. which
|
||||
* need to be linked to the variable they refer to).
|
||||
*/
|
||||
protected leftToResolve: Reference[] | null;
|
||||
/**
|
||||
* Any variable {@link Reference} found in this scope.
|
||||
* This includes occurrences of local variables as well as variables from parent scopes (including the global scope).
|
||||
* For local variables this also includes defining occurrences (like in a 'var' statement).
|
||||
* In a 'function' scope this does not include the occurrences of the formal parameter in the parameter list.
|
||||
* @public
|
||||
*/
|
||||
readonly references: Reference[];
|
||||
/**
|
||||
* The map from variable names to variable objects.
|
||||
* @public
|
||||
*/
|
||||
readonly set: Map<string, Variable>;
|
||||
/**
|
||||
* The {@link Reference}s that are not resolved with this scope.
|
||||
* @public
|
||||
*/
|
||||
through: Reference[];
|
||||
readonly type: Type;
|
||||
/**
|
||||
* Reference to the parent {@link Scope}.
|
||||
* @public
|
||||
*/
|
||||
readonly upper: Upper;
|
||||
/**
|
||||
* The scoped {@link Variable}s of this scope.
|
||||
* In the case of a 'function' scope this includes the automatic argument `arguments` as its first element, as well
|
||||
* as all further formal arguments.
|
||||
* This does not include variables which are defined in child scopes.
|
||||
* @public
|
||||
*/
|
||||
readonly variables: Variable[];
|
||||
readonly variableScope: VariableScope;
|
||||
constructor(scopeManager: ScopeManager, type: Type, upperScope: Upper, block: Block, isMethodDefinition: boolean);
|
||||
private isVariableScope;
|
||||
close(_scopeManager: ScopeManager): Scope | null;
|
||||
shouldStaticallyClose(): boolean;
|
||||
/**
|
||||
* To override by function scopes.
|
||||
* References in default parameters isn't resolved to variables which are in their function body.
|
||||
*/
|
||||
protected defineVariable(nameOrVariable: string | Variable, set: Map<string, Variable>, variables: Variable[], node: TSESTree.Identifier | null, def: Definition | null): void;
|
||||
protected delegateToUpperScope(ref: Reference): void;
|
||||
protected isValidResolution(_ref: Reference, _variable: Variable): boolean;
|
||||
private addDeclaredVariablesOfNode;
|
||||
defineIdentifier(node: TSESTree.Identifier, def: Definition): void;
|
||||
defineLiteralIdentifier(node: TSESTree.StringLiteral, def: Definition): void;
|
||||
referenceDualValueType(node: TSESTree.Identifier): void;
|
||||
referenceType(node: TSESTree.Identifier): void;
|
||||
referenceValue(node: TSESTree.Identifier | TSESTree.JSXIdentifier, assign?: ReferenceFlag, writeExpr?: TSESTree.Expression | null, maybeImplicitGlobal?: ReferenceImplicitGlobal | null, init?: boolean): void;
|
||||
}
|
||||
export {};
|
||||
@@ -0,0 +1,3 @@
|
||||
var stringify = require('../');
|
||||
var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 };
|
||||
console.log(stringify(obj));
|
||||
@@ -0,0 +1,39 @@
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABILITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
/// <reference lib="es2015.iterable" />
|
||||
/// <reference lib="es2015.symbol" />
|
||||
|
||||
interface SymbolConstructor {
|
||||
/**
|
||||
* A regular expression method that matches the regular expression against a string. Called
|
||||
* by the String.prototype.matchAll method.
|
||||
*/
|
||||
readonly matchAll: unique symbol;
|
||||
}
|
||||
|
||||
interface RegExpStringIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
|
||||
[Symbol.iterator](): RegExpStringIterator<T>;
|
||||
}
|
||||
|
||||
interface RegExp {
|
||||
/**
|
||||
* Matches a string with this regular expression, and returns an iterable of matches
|
||||
* containing the results of that search.
|
||||
* @param string A string to search within.
|
||||
*/
|
||||
[Symbol.matchAll](str: string): RegExpStringIterator<RegExpExecArray>;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
// THIS CODE WAS AUTOMATICALLY GENERATED
|
||||
// DO NOT EDIT THIS CODE BY HAND
|
||||
// RUN THE FOLLOWING COMMAND FROM THE WORKSPACE ROOT TO REGENERATE:
|
||||
// npx nx generate-lib repo
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.dom_iterable = void 0;
|
||||
exports.dom_iterable = {
|
||||
libs: [],
|
||||
variables: [],
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
const file6 = require("./file6.js")
|
||||
|
||||
module.exports = function () {
|
||||
file6()
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
Copyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
'use strict'
|
||||
|
||||
const { Transform } = require('stream')
|
||||
const { StringDecoder } = require('string_decoder')
|
||||
const kLast = Symbol('last')
|
||||
const kDecoder = Symbol('decoder')
|
||||
|
||||
function transform (chunk, enc, cb) {
|
||||
let list
|
||||
if (this.overflow) { // Line buffer is full. Skip to start of next line.
|
||||
const buf = this[kDecoder].write(chunk)
|
||||
list = buf.split(this.matcher)
|
||||
|
||||
if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.
|
||||
|
||||
// Line ending found. Discard trailing fragment of previous line and reset overflow state.
|
||||
list.shift()
|
||||
this.overflow = false
|
||||
} else {
|
||||
this[kLast] += this[kDecoder].write(chunk)
|
||||
list = this[kLast].split(this.matcher)
|
||||
}
|
||||
|
||||
this[kLast] = list.pop()
|
||||
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
try {
|
||||
push(this, this.mapper(list[i]))
|
||||
} catch (error) {
|
||||
return cb(error)
|
||||
}
|
||||
}
|
||||
|
||||
this.overflow = this[kLast].length > this.maxLength
|
||||
if (this.overflow && !this.skipOverflow) {
|
||||
cb(new Error('maximum buffer reached'))
|
||||
return
|
||||
}
|
||||
|
||||
cb()
|
||||
}
|
||||
|
||||
function flush (cb) {
|
||||
// forward any gibberish left in there
|
||||
this[kLast] += this[kDecoder].end()
|
||||
|
||||
if (this[kLast]) {
|
||||
try {
|
||||
push(this, this.mapper(this[kLast]))
|
||||
} catch (error) {
|
||||
return cb(error)
|
||||
}
|
||||
}
|
||||
|
||||
cb()
|
||||
}
|
||||
|
||||
function push (self, val) {
|
||||
if (val !== undefined) {
|
||||
self.push(val)
|
||||
}
|
||||
}
|
||||
|
||||
function noop (incoming) {
|
||||
return incoming
|
||||
}
|
||||
|
||||
function split (matcher, mapper, options) {
|
||||
// Set defaults for any arguments not supplied.
|
||||
matcher = matcher || /\r?\n/
|
||||
mapper = mapper || noop
|
||||
options = options || {}
|
||||
|
||||
// Test arguments explicitly.
|
||||
switch (arguments.length) {
|
||||
case 1:
|
||||
// If mapper is only argument.
|
||||
if (typeof matcher === 'function') {
|
||||
mapper = matcher
|
||||
matcher = /\r?\n/
|
||||
// If options is only argument.
|
||||
} else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {
|
||||
options = matcher
|
||||
matcher = /\r?\n/
|
||||
}
|
||||
break
|
||||
|
||||
case 2:
|
||||
// If mapper and options are arguments.
|
||||
if (typeof matcher === 'function') {
|
||||
options = mapper
|
||||
mapper = matcher
|
||||
matcher = /\r?\n/
|
||||
// If matcher and options are arguments.
|
||||
} else if (typeof mapper === 'object') {
|
||||
options = mapper
|
||||
mapper = noop
|
||||
}
|
||||
}
|
||||
|
||||
options = Object.assign({}, options)
|
||||
options.autoDestroy = true
|
||||
options.transform = transform
|
||||
options.flush = flush
|
||||
options.readableObjectMode = true
|
||||
|
||||
const stream = new Transform(options)
|
||||
|
||||
stream[kLast] = ''
|
||||
stream[kDecoder] = new StringDecoder('utf8')
|
||||
stream.matcher = matcher
|
||||
stream.mapper = mapper
|
||||
stream.maxLength = options.maxLength
|
||||
stream.skipOverflow = options.skipOverflow || false
|
||||
stream.overflow = false
|
||||
stream._destroy = function (err, cb) {
|
||||
// Weird Node v12 bug that we need to work around
|
||||
this._writableState.errorEmitted = false
|
||||
cb(err)
|
||||
}
|
||||
|
||||
return stream
|
||||
}
|
||||
|
||||
module.exports = split
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,83 @@
|
||||
# json-schema-traverse
|
||||
Traverse JSON Schema passing each schema object to callback
|
||||
|
||||
[](https://travis-ci.org/epoberezkin/json-schema-traverse)
|
||||
[](https://www.npmjs.com/package/json-schema-traverse)
|
||||
[](https://coveralls.io/github/epoberezkin/json-schema-traverse?branch=master)
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
npm install json-schema-traverse
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```javascript
|
||||
const traverse = require('json-schema-traverse');
|
||||
const schema = {
|
||||
properties: {
|
||||
foo: {type: 'string'},
|
||||
bar: {type: 'integer'}
|
||||
}
|
||||
};
|
||||
|
||||
traverse(schema, {cb});
|
||||
// cb is called 3 times with:
|
||||
// 1. root schema
|
||||
// 2. {type: 'string'}
|
||||
// 3. {type: 'integer'}
|
||||
|
||||
// Or:
|
||||
|
||||
traverse(schema, {cb: {pre, post}});
|
||||
// pre is called 3 times with:
|
||||
// 1. root schema
|
||||
// 2. {type: 'string'}
|
||||
// 3. {type: 'integer'}
|
||||
//
|
||||
// post is called 3 times with:
|
||||
// 1. {type: 'string'}
|
||||
// 2. {type: 'integer'}
|
||||
// 3. root schema
|
||||
|
||||
```
|
||||
|
||||
Callback function `cb` is called for each schema object (not including draft-06 boolean schemas), including the root schema, in pre-order traversal. Schema references ($ref) are not resolved, they are passed as is. Alternatively, you can pass a `{pre, post}` object as `cb`, and then `pre` will be called before traversing child elements, and `post` will be called after all child elements have been traversed.
|
||||
|
||||
Callback is passed these parameters:
|
||||
|
||||
- _schema_: the current schema object
|
||||
- _JSON pointer_: from the root schema to the current schema object
|
||||
- _root schema_: the schema passed to `traverse` object
|
||||
- _parent JSON pointer_: from the root schema to the parent schema object (see below)
|
||||
- _parent keyword_: the keyword inside which this schema appears (e.g. `properties`, `anyOf`, etc.)
|
||||
- _parent schema_: not necessarily parent object/array; in the example above the parent schema for `{type: 'string'}` is the root schema
|
||||
- _index/property_: index or property name in the array/object containing multiple schemas; in the example above for `{type: 'string'}` the property name is `'foo'`
|
||||
|
||||
|
||||
## Traverse objects in all unknown keywords
|
||||
|
||||
```javascript
|
||||
const traverse = require('json-schema-traverse');
|
||||
const schema = {
|
||||
mySchema: {
|
||||
minimum: 1,
|
||||
maximum: 2
|
||||
}
|
||||
};
|
||||
|
||||
traverse(schema, {allKeys: true, cb});
|
||||
// cb is called 2 times with:
|
||||
// 1. root schema
|
||||
// 2. mySchema
|
||||
```
|
||||
|
||||
Without option `allKeys: true` callback will be called only with root schema.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
[MIT](https://github.com/epoberezkin/json-schema-traverse/blob/master/LICENSE)
|
||||
@@ -0,0 +1,20 @@
|
||||
module.exports = function (query, force) {
|
||||
var isAttached = false
|
||||
if (process.stderr.isTTY || force === true) {
|
||||
isAttached = true
|
||||
process.on('SIGINFO', onsiginfo)
|
||||
process.on('SIGUSR1', onsiginfo)
|
||||
}
|
||||
|
||||
return function () {
|
||||
if (isAttached === true) {
|
||||
process.removeListener('SIGINFO', onsiginfo)
|
||||
process.removeListener('SIGUSR1', onsiginfo)
|
||||
isAttached = false
|
||||
}
|
||||
}
|
||||
|
||||
function onsiginfo () {
|
||||
query()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* @deprecated
|
||||
* @module
|
||||
*/
|
||||
import { jubjub_findGroupHash, jubjub_groupHash, jubjub as jubjubn } from "./misc.js";
|
||||
/** @deprecated use `import { jubjub } from '@noble/curves/misc.js';` */
|
||||
export const jubjub = jubjubn;
|
||||
/** @deprecated use `import { jubjub_findGroupHash } from '@noble/curves/misc.js';` */
|
||||
export const findGroupHash = jubjub_findGroupHash;
|
||||
/** @deprecated use `import { jubjub_groupHash } from '@noble/curves/misc.js';` */
|
||||
export const groupHash = jubjub_groupHash;
|
||||
//# sourceMappingURL=jubjub.js.map
|
||||
@@ -0,0 +1,151 @@
|
||||
import test from 'node:test'
|
||||
import assert from 'node:assert'
|
||||
import * as os from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
import fs from 'node:fs'
|
||||
import * as url from 'node:url'
|
||||
|
||||
import { watchFileCreated } from '../helper.js'
|
||||
|
||||
const readFile = fs.promises.readFile
|
||||
|
||||
const { pid } = process
|
||||
const hostname = os.hostname()
|
||||
|
||||
// Check if Node.js supports native type stripping (Node.js 22+)
|
||||
function supportsTypeStripping () {
|
||||
const major = parseInt(process.versions.node.split('.')[0], 10)
|
||||
return major >= 22
|
||||
}
|
||||
|
||||
// Only run these tests on Node.js 22+
|
||||
const skipTests = !supportsTypeStripping()
|
||||
const skipMessage = 'Native TypeScript type stripping not supported (requires Node.js 22+)'
|
||||
|
||||
test('pino.transport with native TypeScript file', { skip: skipTests ? skipMessage : false }, async (t) => {
|
||||
const destination = join(
|
||||
os.tmpdir(),
|
||||
'_' + Math.random().toString(36).substr(2, 9)
|
||||
)
|
||||
|
||||
// We need to dynamically import pino to ensure worker thread inherits flags
|
||||
const { default: pino } = await import('../../pino.js')
|
||||
|
||||
const transport = pino.transport({
|
||||
target: join(import.meta.dirname || url.fileURLToPath(new URL('.', import.meta.url)), '..', 'fixtures', 'ts', 'to-file-transport-native.mts'),
|
||||
options: { destination }
|
||||
})
|
||||
|
||||
t.after(() => {
|
||||
transport.end()
|
||||
try {
|
||||
fs.unlinkSync(destination)
|
||||
} catch {}
|
||||
})
|
||||
|
||||
const instance = pino(transport)
|
||||
instance.info('hello from native TypeScript transport')
|
||||
|
||||
await watchFileCreated(destination)
|
||||
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
||||
delete result.time
|
||||
|
||||
assert.deepEqual(result, {
|
||||
pid,
|
||||
hostname,
|
||||
level: 30,
|
||||
msg: 'hello from native TypeScript transport'
|
||||
})
|
||||
})
|
||||
|
||||
test('pino.transport with native TypeScript file URL', { skip: skipTests ? skipMessage : false }, async (t) => {
|
||||
const destination = join(
|
||||
os.tmpdir(),
|
||||
'_' + Math.random().toString(36).substr(2, 9)
|
||||
)
|
||||
|
||||
const { default: pino } = await import('../../pino.js')
|
||||
|
||||
const transport = pino.transport({
|
||||
target: url.pathToFileURL(join(import.meta.dirname || url.fileURLToPath(new URL('.', import.meta.url)), '..', 'fixtures', 'ts', 'to-file-transport-native.mts')).href,
|
||||
options: { destination }
|
||||
})
|
||||
|
||||
t.after(() => {
|
||||
transport.end()
|
||||
try {
|
||||
fs.unlinkSync(destination)
|
||||
} catch {}
|
||||
})
|
||||
|
||||
const instance = pino(transport)
|
||||
instance.info('hello from file URL transport')
|
||||
|
||||
await watchFileCreated(destination)
|
||||
const result = JSON.parse(await readFile(destination, { encoding: 'utf8' }))
|
||||
delete result.time
|
||||
|
||||
assert.deepEqual(result, {
|
||||
pid,
|
||||
hostname,
|
||||
level: 30,
|
||||
msg: 'hello from file URL transport'
|
||||
})
|
||||
})
|
||||
|
||||
test('pino.transport with multiple native TypeScript targets', { skip: skipTests ? skipMessage : false }, async (t) => {
|
||||
const dest1 = join(
|
||||
os.tmpdir(),
|
||||
'_' + Math.random().toString(36).substr(2, 9)
|
||||
)
|
||||
const dest2 = join(
|
||||
os.tmpdir(),
|
||||
'_' + Math.random().toString(36).substr(2, 9)
|
||||
)
|
||||
|
||||
const { default: pino } = await import('../../pino.js')
|
||||
const fixtureDir = join(import.meta.dirname || url.fileURLToPath(new URL('.', import.meta.url)), '..', 'fixtures', 'ts')
|
||||
|
||||
const transport = pino.transport({
|
||||
targets: [{
|
||||
level: 'info',
|
||||
target: join(fixtureDir, 'to-file-transport-native.mts'),
|
||||
options: { destination: dest1 }
|
||||
}, {
|
||||
level: 'info',
|
||||
target: join(fixtureDir, 'to-file-transport-native.mts'),
|
||||
options: { destination: dest2 }
|
||||
}]
|
||||
})
|
||||
|
||||
t.after(() => {
|
||||
transport.end()
|
||||
try {
|
||||
fs.unlinkSync(dest1)
|
||||
fs.unlinkSync(dest2)
|
||||
} catch {}
|
||||
})
|
||||
|
||||
const instance = pino(transport)
|
||||
instance.info('hello from multiple targets')
|
||||
|
||||
await Promise.all([watchFileCreated(dest1), watchFileCreated(dest2)])
|
||||
|
||||
const result1 = JSON.parse(await readFile(dest1, { encoding: 'utf8' }))
|
||||
delete result1.time
|
||||
assert.deepEqual(result1, {
|
||||
pid,
|
||||
hostname,
|
||||
level: 30,
|
||||
msg: 'hello from multiple targets'
|
||||
})
|
||||
|
||||
const result2 = JSON.parse(await readFile(dest2, { encoding: 'utf8' }))
|
||||
delete result2.time
|
||||
assert.deepEqual(result2, {
|
||||
pid,
|
||||
hostname,
|
||||
level: 30,
|
||||
msg: 'hello from multiple targets'
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,118 @@
|
||||
import type { $ZodStringFormats } from "../core/checks.js";
|
||||
import type * as errors from "../core/errors.js";
|
||||
import * as util from "../core/util.js";
|
||||
|
||||
const error: () => errors.$ZodErrorMap = () => {
|
||||
const Sizable: Record<string, { unit: string; verb: string }> = {
|
||||
string: { unit: "znaků", verb: "mít" },
|
||||
file: { unit: "bajtů", verb: "mít" },
|
||||
array: { unit: "prvků", verb: "mít" },
|
||||
set: { unit: "prvků", verb: "mít" },
|
||||
};
|
||||
|
||||
function getSizing(origin: string): { unit: string; verb: string } | null {
|
||||
return Sizable[origin] ?? null;
|
||||
}
|
||||
|
||||
const FormatDictionary: {
|
||||
[k in $ZodStringFormats | (string & {})]?: string;
|
||||
} = {
|
||||
regex: "regulární výraz",
|
||||
email: "e-mailová adresa",
|
||||
url: "URL",
|
||||
emoji: "emoji",
|
||||
uuid: "UUID",
|
||||
uuidv4: "UUIDv4",
|
||||
uuidv6: "UUIDv6",
|
||||
nanoid: "nanoid",
|
||||
guid: "GUID",
|
||||
cuid: "cuid",
|
||||
cuid2: "cuid2",
|
||||
ulid: "ULID",
|
||||
xid: "XID",
|
||||
ksuid: "KSUID",
|
||||
datetime: "datum a čas ve formátu ISO",
|
||||
date: "datum ve formátu ISO",
|
||||
time: "čas ve formátu ISO",
|
||||
duration: "doba trvání ISO",
|
||||
ipv4: "IPv4 adresa",
|
||||
ipv6: "IPv6 adresa",
|
||||
cidrv4: "rozsah IPv4",
|
||||
cidrv6: "rozsah IPv6",
|
||||
base64: "řetězec zakódovaný ve formátu base64",
|
||||
base64url: "řetězec zakódovaný ve formátu base64url",
|
||||
json_string: "řetězec ve formátu JSON",
|
||||
e164: "číslo E.164",
|
||||
jwt: "JWT",
|
||||
template_literal: "vstup",
|
||||
};
|
||||
|
||||
const TypeDictionary: {
|
||||
[k in errors.$ZodInvalidTypeExpected | (string & {})]?: string;
|
||||
} = {
|
||||
nan: "NaN",
|
||||
number: "číslo",
|
||||
string: "řetězec",
|
||||
function: "funkce",
|
||||
array: "pole",
|
||||
};
|
||||
|
||||
return (issue) => {
|
||||
switch (issue.code) {
|
||||
case "invalid_type": {
|
||||
const expected = TypeDictionary[issue.expected] ?? issue.expected;
|
||||
const receivedType = util.parsedType(issue.input);
|
||||
const received = TypeDictionary[receivedType] ?? receivedType;
|
||||
if (/^[A-Z]/.test(issue.expected)) {
|
||||
return `Neplatný vstup: očekáváno instanceof ${issue.expected}, obdrženo ${received}`;
|
||||
}
|
||||
return `Neplatný vstup: očekáváno ${expected}, obdrženo ${received}`;
|
||||
}
|
||||
case "invalid_value":
|
||||
if (issue.values.length === 1) return `Neplatný vstup: očekáváno ${util.stringifyPrimitive(issue.values[0])}`;
|
||||
return `Neplatná možnost: očekávána jedna z hodnot ${util.joinValues(issue.values, "|")}`;
|
||||
case "too_big": {
|
||||
const adj = issue.inclusive ? "<=" : "<";
|
||||
const sizing = getSizing(issue.origin);
|
||||
if (sizing) {
|
||||
return `Hodnota je příliš velká: ${issue.origin ?? "hodnota"} musí mít ${adj}${issue.maximum.toString()} ${sizing.unit ?? "prvků"}`;
|
||||
}
|
||||
return `Hodnota je příliš velká: ${issue.origin ?? "hodnota"} musí být ${adj}${issue.maximum.toString()}`;
|
||||
}
|
||||
case "too_small": {
|
||||
const adj = issue.inclusive ? ">=" : ">";
|
||||
const sizing = getSizing(issue.origin);
|
||||
if (sizing) {
|
||||
return `Hodnota je příliš malá: ${issue.origin ?? "hodnota"} musí mít ${adj}${issue.minimum.toString()} ${sizing.unit ?? "prvků"}`;
|
||||
}
|
||||
return `Hodnota je příliš malá: ${issue.origin ?? "hodnota"} musí být ${adj}${issue.minimum.toString()}`;
|
||||
}
|
||||
case "invalid_format": {
|
||||
const _issue = issue as errors.$ZodStringFormatIssues;
|
||||
if (_issue.format === "starts_with") return `Neplatný řetězec: musí začínat na "${_issue.prefix}"`;
|
||||
if (_issue.format === "ends_with") return `Neplatný řetězec: musí končit na "${_issue.suffix}"`;
|
||||
if (_issue.format === "includes") return `Neplatný řetězec: musí obsahovat "${_issue.includes}"`;
|
||||
if (_issue.format === "regex") return `Neplatný řetězec: musí odpovídat vzoru ${_issue.pattern}`;
|
||||
return `Neplatný formát ${FormatDictionary[_issue.format] ?? issue.format}`;
|
||||
}
|
||||
case "not_multiple_of":
|
||||
return `Neplatné číslo: musí být násobkem ${issue.divisor}`;
|
||||
case "unrecognized_keys":
|
||||
return `Neznámé klíče: ${util.joinValues(issue.keys, ", ")}`;
|
||||
case "invalid_key":
|
||||
return `Neplatný klíč v ${issue.origin}`;
|
||||
case "invalid_union":
|
||||
return "Neplatný vstup";
|
||||
case "invalid_element":
|
||||
return `Neplatná hodnota v ${issue.origin}`;
|
||||
default:
|
||||
return `Neplatný vstup`;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
export default function (): { localeError: errors.$ZodErrorMap } {
|
||||
return {
|
||||
localeError: error(),
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", [], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
||||
name: string;
|
||||
};
|
||||
export default _default;
|
||||
@@ -0,0 +1,54 @@
|
||||
# end-of-stream
|
||||
|
||||
A node module that calls a callback when a readable/writable/duplex stream has completed or failed.
|
||||
|
||||
npm install end-of-stream
|
||||
|
||||
[](https://travis-ci.org/mafintosh/end-of-stream)
|
||||
|
||||
## Usage
|
||||
|
||||
Simply pass a stream and a callback to the `eos`.
|
||||
Both legacy streams, streams2 and stream3 are supported.
|
||||
|
||||
``` js
|
||||
var eos = require('end-of-stream');
|
||||
|
||||
eos(readableStream, function(err) {
|
||||
// this will be set to the stream instance
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has ended', this === readableStream);
|
||||
});
|
||||
|
||||
eos(writableStream, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has finished', this === writableStream);
|
||||
});
|
||||
|
||||
eos(duplexStream, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has ended and finished', this === duplexStream);
|
||||
});
|
||||
|
||||
eos(duplexStream, {readable:false}, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has finished but might still be readable');
|
||||
});
|
||||
|
||||
eos(duplexStream, {writable:false}, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has ended but might still be writable');
|
||||
});
|
||||
|
||||
eos(readableStream, {error:false}, function(err) {
|
||||
// do not treat emit('error', err) as a end-of-stream
|
||||
});
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Related
|
||||
|
||||
`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
|
||||
@@ -0,0 +1,214 @@
|
||||
/**
|
||||
* bn254, previously known as alt_bn_128, when it had 128-bit security.
|
||||
|
||||
Barbulescu-Duquesne 2017 shown it's weaker: just about 100 bits,
|
||||
so the naming has been adjusted to its prime bit count:
|
||||
https://hal.science/hal-01534101/file/main.pdf.
|
||||
Compatible with EIP-196 and EIP-197.
|
||||
|
||||
There are huge compatibility issues in the ecosystem:
|
||||
|
||||
1. Different libraries call it in different ways: "bn254", "bn256", "alt_bn128", "bn128".
|
||||
2. libff has bn128, but it's a different curve with different G2:
|
||||
https://github.com/scipr-lab/libff/blob/a44f482e18b8ac04d034c193bd9d7df7817ad73f/libff/algebra/curves/bn128/bn128_init.cpp#L166-L169
|
||||
3. halo2curves bn256 is also incompatible and returns different outputs
|
||||
|
||||
We don't implement Point methods toHex / toBytes.
|
||||
To work around this limitation, has to initialize points on their own from BigInts.
|
||||
Reason it's not implemented is because [there is no standard](https://github.com/privacy-scaling-explorations/halo2curves/issues/109).
|
||||
Points of divergence:
|
||||
|
||||
- Endianness: LE vs BE (byte-swapped)
|
||||
- Flags as first hex bits (similar to BLS) vs no-flags
|
||||
- Imaginary part last in G2 vs first (c0, c1 vs c1, c0)
|
||||
|
||||
The goal of our implementation is to support "Ethereum" variant of the curve,
|
||||
because it at least has specs:
|
||||
|
||||
- EIP196 (https://eips.ethereum.org/EIPS/eip-196) describes bn254 ECADD and ECMUL opcodes for EVM
|
||||
- EIP197 (https://eips.ethereum.org/EIPS/eip-197) describes bn254 pairings
|
||||
- It's hard: EIPs don't have proper tests. EIP-197 returns boolean output instead of Fp12
|
||||
- The existing implementations are bad. Some are deprecated:
|
||||
- https://github.com/paritytech/bn (old version)
|
||||
- https://github.com/ewasm/ethereum-bn128.rs (uses paritytech/bn)
|
||||
- https://github.com/zcash-hackworks/bn
|
||||
- https://github.com/arkworks-rs/curves/blob/master/bn254/src/lib.rs
|
||||
- Python implementations use different towers and produce different Fp12 outputs:
|
||||
- https://github.com/ethereum/py_pairing
|
||||
- https://github.com/ethereum/execution-specs/blob/master/src/ethereum/crypto/alt_bn128.py
|
||||
- Points are encoded differently in different implementations
|
||||
|
||||
### Params
|
||||
Seed (X): 4965661367192848881
|
||||
Fr: (36x⁴+36x³+18x²+6x+1)
|
||||
Fp: (36x⁴+36x³+24x²+6x+1)
|
||||
(E / Fp ): Y² = X³+3
|
||||
(Et / Fp²): Y² = X³+3/(u+9) (D-type twist)
|
||||
Ate loop size: 6x+2
|
||||
|
||||
### Towers
|
||||
- Fp²[u] = Fp/u²+1
|
||||
- Fp⁶[v] = Fp²/v³-9-u
|
||||
- Fp¹²[w] = Fp⁶/w²-v
|
||||
|
||||
* @module
|
||||
*/
|
||||
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
||||
import { sha256 } from '@noble/hashes/sha2.js';
|
||||
import { bls, } from "./abstract/bls.js";
|
||||
import { Field } from "./abstract/modular.js";
|
||||
import { psiFrobenius, tower12 } from "./abstract/tower.js";
|
||||
import { weierstrass } from "./abstract/weierstrass.js";
|
||||
import { bitLen, notImplemented } from "./utils.js";
|
||||
// prettier-ignore
|
||||
const _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);
|
||||
const _6n = BigInt(6);
|
||||
const BN_X = BigInt('4965661367192848881');
|
||||
const BN_X_LEN = bitLen(BN_X);
|
||||
const SIX_X_SQUARED = _6n * BN_X ** _2n;
|
||||
const bn254_G1_CURVE = {
|
||||
p: BigInt('0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47'),
|
||||
n: BigInt('0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001'),
|
||||
h: _1n,
|
||||
a: _0n,
|
||||
b: _3n,
|
||||
Gx: _1n,
|
||||
Gy: BigInt(2),
|
||||
};
|
||||
// r == n
|
||||
// Finite field over r. It's for convenience and is not used in the code below.
|
||||
export const bn254_Fr = Field(bn254_G1_CURVE.n);
|
||||
// Fp2.div(Fp2.mul(Fp2.ONE, _3n), Fp2.NONRESIDUE)
|
||||
const Fp2B = {
|
||||
c0: BigInt('19485874751759354771024239261021720505790618469301721065564631296452457478373'),
|
||||
c1: BigInt('266929791119991161246907387137283842545076965332900288569378510910307636690'),
|
||||
};
|
||||
const { Fp, Fp2, Fp6, Fp12 } = tower12({
|
||||
ORDER: bn254_G1_CURVE.p,
|
||||
X_LEN: BN_X_LEN,
|
||||
FP2_NONRESIDUE: [BigInt(9), _1n],
|
||||
Fp2mulByB: (num) => Fp2.mul(num, Fp2B),
|
||||
Fp12finalExponentiate: (num) => {
|
||||
const powMinusX = (num) => Fp12.conjugate(Fp12._cyclotomicExp(num, BN_X));
|
||||
const r0 = Fp12.mul(Fp12.conjugate(num), Fp12.inv(num));
|
||||
const r = Fp12.mul(Fp12.frobeniusMap(r0, 2), r0);
|
||||
const y1 = Fp12._cyclotomicSquare(powMinusX(r));
|
||||
const y2 = Fp12.mul(Fp12._cyclotomicSquare(y1), y1);
|
||||
const y4 = powMinusX(y2);
|
||||
const y6 = powMinusX(Fp12._cyclotomicSquare(y4));
|
||||
const y8 = Fp12.mul(Fp12.mul(Fp12.conjugate(y6), y4), Fp12.conjugate(y2));
|
||||
const y9 = Fp12.mul(y8, y1);
|
||||
return Fp12.mul(Fp12.frobeniusMap(Fp12.mul(Fp12.conjugate(r), y9), 3), Fp12.mul(Fp12.frobeniusMap(y8, 2), Fp12.mul(Fp12.frobeniusMap(y9, 1), Fp12.mul(Fp12.mul(y8, y4), r))));
|
||||
},
|
||||
});
|
||||
// END OF CURVE FIELDS
|
||||
const { G2psi, psi } = psiFrobenius(Fp, Fp2, Fp2.NONRESIDUE);
|
||||
/*
|
||||
No hashToCurve for now (and signatures):
|
||||
|
||||
- RFC 9380 doesn't mention bn254 and doesn't provide test vectors
|
||||
- Overall seems like nobody is using BLS signatures on top of bn254
|
||||
- Seems like it can utilize SVDW, which is not implemented yet
|
||||
*/
|
||||
const htfDefaults = Object.freeze({
|
||||
// DST: a domain separation tag defined in section 2.2.5
|
||||
DST: 'BN254G2_XMD:SHA-256_SVDW_RO_',
|
||||
encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_',
|
||||
p: Fp.ORDER,
|
||||
m: 2,
|
||||
k: 128,
|
||||
expand: 'xmd',
|
||||
hash: sha256,
|
||||
});
|
||||
export const _postPrecompute = (Rx, Ry, Rz, Qx, Qy, pointAdd) => {
|
||||
const q = psi(Qx, Qy);
|
||||
({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1]));
|
||||
const q2 = psi(q[0], q[1]);
|
||||
pointAdd(Rx, Ry, Rz, q2[0], Fp2.neg(q2[1]));
|
||||
};
|
||||
// cofactor: (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1
|
||||
const bn254_G2_CURVE = {
|
||||
p: Fp2.ORDER,
|
||||
n: bn254_G1_CURVE.n,
|
||||
h: BigInt('0x30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d'),
|
||||
a: Fp2.ZERO,
|
||||
b: Fp2B,
|
||||
Gx: Fp2.fromBigTuple([
|
||||
BigInt('10857046999023057135944570762232829481370756359578518086990519993285655852781'),
|
||||
BigInt('11559732032986387107991004021392285783925812861821192530917403151452391805634'),
|
||||
]),
|
||||
Gy: Fp2.fromBigTuple([
|
||||
BigInt('8495653923123431417604973247489272438418190587263600148770280649306958101930'),
|
||||
BigInt('4082367875863433681332203403145435568316851327593401208105741076214120093531'),
|
||||
]),
|
||||
};
|
||||
/**
|
||||
* bn254 (a.k.a. alt_bn128) pairing-friendly curve.
|
||||
* Contains G1 / G2 operations and pairings.
|
||||
*/
|
||||
export const bn254 = bls({
|
||||
// Fields
|
||||
fields: { Fp, Fp2, Fp6, Fp12, Fr: bn254_Fr },
|
||||
G1: {
|
||||
...bn254_G1_CURVE,
|
||||
Fp,
|
||||
htfDefaults: { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' },
|
||||
wrapPrivateKey: true,
|
||||
allowInfinityPoint: true,
|
||||
mapToCurve: notImplemented,
|
||||
fromBytes: notImplemented,
|
||||
toBytes: notImplemented,
|
||||
ShortSignature: {
|
||||
fromBytes: notImplemented,
|
||||
fromHex: notImplemented,
|
||||
toBytes: notImplemented,
|
||||
toRawBytes: notImplemented,
|
||||
toHex: notImplemented,
|
||||
},
|
||||
},
|
||||
G2: {
|
||||
...bn254_G2_CURVE,
|
||||
Fp: Fp2,
|
||||
hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),
|
||||
htfDefaults: { ...htfDefaults },
|
||||
wrapPrivateKey: true,
|
||||
allowInfinityPoint: true,
|
||||
isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P
|
||||
mapToCurve: notImplemented,
|
||||
fromBytes: notImplemented,
|
||||
toBytes: notImplemented,
|
||||
Signature: {
|
||||
fromBytes: notImplemented,
|
||||
fromHex: notImplemented,
|
||||
toBytes: notImplemented,
|
||||
toRawBytes: notImplemented,
|
||||
toHex: notImplemented,
|
||||
},
|
||||
},
|
||||
params: {
|
||||
ateLoopSize: BN_X * _6n + _2n,
|
||||
r: bn254_Fr.ORDER,
|
||||
xNegative: false,
|
||||
twistType: 'divisive',
|
||||
},
|
||||
htfDefaults,
|
||||
hash: sha256,
|
||||
postPrecompute: _postPrecompute,
|
||||
});
|
||||
/**
|
||||
* bn254 weierstrass curve with ECDSA.
|
||||
* This is very rare and probably not used anywhere.
|
||||
* Instead, you should use G1 / G2, defined above.
|
||||
* @deprecated
|
||||
*/
|
||||
export const bn254_weierstrass = weierstrass({
|
||||
a: BigInt(0),
|
||||
b: BigInt(3),
|
||||
Fp,
|
||||
n: BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'),
|
||||
Gx: BigInt(1),
|
||||
Gy: BigInt(2),
|
||||
h: BigInt(1),
|
||||
hash: sha256,
|
||||
});
|
||||
//# sourceMappingURL=bn254.js.map
|
||||
@@ -0,0 +1,260 @@
|
||||
declare module 'cluster' {
|
||||
import * as child from 'child_process';
|
||||
import EventEmitter = require('events');
|
||||
import * as net from 'net';
|
||||
|
||||
// interfaces
|
||||
interface ClusterSettings {
|
||||
execArgv?: string[] | undefined; // default: process.execArgv
|
||||
exec?: string | undefined;
|
||||
args?: string[] | undefined;
|
||||
silent?: boolean | undefined;
|
||||
stdio?: any[] | undefined;
|
||||
uid?: number | undefined;
|
||||
gid?: number | undefined;
|
||||
inspectPort?: number | (() => number) | undefined;
|
||||
}
|
||||
|
||||
interface Address {
|
||||
address: string;
|
||||
port: number;
|
||||
addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6"
|
||||
}
|
||||
|
||||
class Worker extends EventEmitter {
|
||||
id: number;
|
||||
process: child.ChildProcess;
|
||||
send(message: any, sendHandle?: any, callback?: (error: Error | null) => void): boolean;
|
||||
kill(signal?: string): void;
|
||||
destroy(signal?: string): void;
|
||||
disconnect(): void;
|
||||
isConnected(): boolean;
|
||||
isDead(): boolean;
|
||||
exitedAfterDisconnect: boolean;
|
||||
|
||||
/**
|
||||
* events.EventEmitter
|
||||
* 1. disconnect
|
||||
* 2. error
|
||||
* 3. exit
|
||||
* 4. listening
|
||||
* 5. message
|
||||
* 6. online
|
||||
*/
|
||||
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||
addListener(event: "disconnect", listener: () => void): this;
|
||||
addListener(event: "error", listener: (error: Error) => void): this;
|
||||
addListener(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||
addListener(event: "listening", listener: (address: Address) => void): this;
|
||||
addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
addListener(event: "online", listener: () => void): this;
|
||||
|
||||
emit(event: string | symbol, ...args: any[]): boolean;
|
||||
emit(event: "disconnect"): boolean;
|
||||
emit(event: "error", error: Error): boolean;
|
||||
emit(event: "exit", code: number, signal: string): boolean;
|
||||
emit(event: "listening", address: Address): boolean;
|
||||
emit(event: "message", message: any, handle: net.Socket | net.Server): boolean;
|
||||
emit(event: "online"): boolean;
|
||||
|
||||
on(event: string, listener: (...args: any[]) => void): this;
|
||||
on(event: "disconnect", listener: () => void): this;
|
||||
on(event: "error", listener: (error: Error) => void): this;
|
||||
on(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||
on(event: "listening", listener: (address: Address) => void): this;
|
||||
on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
on(event: "online", listener: () => void): this;
|
||||
|
||||
once(event: string, listener: (...args: any[]) => void): this;
|
||||
once(event: "disconnect", listener: () => void): this;
|
||||
once(event: "error", listener: (error: Error) => void): this;
|
||||
once(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||
once(event: "listening", listener: (address: Address) => void): this;
|
||||
once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
once(event: "online", listener: () => void): this;
|
||||
|
||||
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||
prependListener(event: "disconnect", listener: () => void): this;
|
||||
prependListener(event: "error", listener: (error: Error) => void): this;
|
||||
prependListener(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||
prependListener(event: "listening", listener: (address: Address) => void): this;
|
||||
prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
prependListener(event: "online", listener: () => void): this;
|
||||
|
||||
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||
prependOnceListener(event: "disconnect", listener: () => void): this;
|
||||
prependOnceListener(event: "error", listener: (error: Error) => void): this;
|
||||
prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this;
|
||||
prependOnceListener(event: "listening", listener: (address: Address) => void): this;
|
||||
prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
prependOnceListener(event: "online", listener: () => void): this;
|
||||
}
|
||||
|
||||
interface Cluster extends EventEmitter {
|
||||
Worker: Worker;
|
||||
disconnect(callback?: () => void): void;
|
||||
fork(env?: any): Worker;
|
||||
isMaster: boolean;
|
||||
isWorker: boolean;
|
||||
// TODO: cluster.schedulingPolicy
|
||||
settings: ClusterSettings;
|
||||
setupMaster(settings?: ClusterSettings): void;
|
||||
worker?: Worker | undefined;
|
||||
workers?: {
|
||||
[index: string]: Worker | undefined
|
||||
} | undefined;
|
||||
|
||||
/**
|
||||
* events.EventEmitter
|
||||
* 1. disconnect
|
||||
* 2. exit
|
||||
* 3. fork
|
||||
* 4. listening
|
||||
* 5. message
|
||||
* 6. online
|
||||
* 7. setup
|
||||
*/
|
||||
addListener(event: string, listener: (...args: any[]) => void): this;
|
||||
addListener(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||
addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||
addListener(event: "fork", listener: (worker: Worker) => void): this;
|
||||
addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||
addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
addListener(event: "online", listener: (worker: Worker) => void): this;
|
||||
addListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||
|
||||
emit(event: string | symbol, ...args: any[]): boolean;
|
||||
emit(event: "disconnect", worker: Worker): boolean;
|
||||
emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
|
||||
emit(event: "fork", worker: Worker): boolean;
|
||||
emit(event: "listening", worker: Worker, address: Address): boolean;
|
||||
emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
|
||||
emit(event: "online", worker: Worker): boolean;
|
||||
emit(event: "setup", settings: ClusterSettings): boolean;
|
||||
|
||||
on(event: string, listener: (...args: any[]) => void): this;
|
||||
on(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||
on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||
on(event: "fork", listener: (worker: Worker) => void): this;
|
||||
on(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||
on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
on(event: "online", listener: (worker: Worker) => void): this;
|
||||
on(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||
|
||||
once(event: string, listener: (...args: any[]) => void): this;
|
||||
once(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||
once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||
once(event: "fork", listener: (worker: Worker) => void): this;
|
||||
once(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||
once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
once(event: "online", listener: (worker: Worker) => void): this;
|
||||
once(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||
|
||||
prependListener(event: string, listener: (...args: any[]) => void): this;
|
||||
prependListener(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||
prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||
prependListener(event: "fork", listener: (worker: Worker) => void): this;
|
||||
prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||
prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
prependListener(event: "online", listener: (worker: Worker) => void): this;
|
||||
prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||
|
||||
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
||||
prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this;
|
||||
prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
|
||||
prependOnceListener(event: "fork", listener: (worker: Worker) => void): this;
|
||||
prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
|
||||
// the handle is a net.Socket or net.Server object, or undefined.
|
||||
prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;
|
||||
prependOnceListener(event: "online", listener: (worker: Worker) => void): this;
|
||||
prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
|
||||
}
|
||||
|
||||
function disconnect(callback?: () => void): void;
|
||||
function fork(env?: any): Worker;
|
||||
const isMaster: boolean;
|
||||
const isWorker: boolean;
|
||||
// TODO: cluster.schedulingPolicy
|
||||
const settings: ClusterSettings;
|
||||
function setupMaster(settings?: ClusterSettings): void;
|
||||
const worker: Worker;
|
||||
const workers: {
|
||||
[index: string]: Worker | undefined
|
||||
};
|
||||
|
||||
/**
|
||||
* events.EventEmitter
|
||||
* 1. disconnect
|
||||
* 2. exit
|
||||
* 3. fork
|
||||
* 4. listening
|
||||
* 5. message
|
||||
* 6. online
|
||||
* 7. setup
|
||||
*/
|
||||
function addListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||
function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||
function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||
function addListener(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||
function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||
// the handle is a net.Socket or net.Server object, or undefined.
|
||||
function addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
|
||||
function addListener(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||
function addListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||
|
||||
function emit(event: string | symbol, ...args: any[]): boolean;
|
||||
function emit(event: "disconnect", worker: Worker): boolean;
|
||||
function emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
|
||||
function emit(event: "fork", worker: Worker): boolean;
|
||||
function emit(event: "listening", worker: Worker, address: Address): boolean;
|
||||
function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
|
||||
function emit(event: "online", worker: Worker): boolean;
|
||||
function emit(event: "setup", settings: ClusterSettings): boolean;
|
||||
|
||||
function on(event: string, listener: (...args: any[]) => void): Cluster;
|
||||
function on(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||
function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||
function on(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||
function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||
function on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
function on(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||
function on(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||
|
||||
function once(event: string, listener: (...args: any[]) => void): Cluster;
|
||||
function once(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||
function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||
function once(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||
function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||
function once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
|
||||
function once(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||
function once(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||
|
||||
function removeListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||
function removeAllListeners(event?: string): Cluster;
|
||||
function setMaxListeners(n: number): Cluster;
|
||||
function getMaxListeners(): number;
|
||||
function listeners(event: string): Function[];
|
||||
function listenerCount(type: string): number;
|
||||
|
||||
function prependListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||
function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||
function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||
function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||
function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||
// the handle is a net.Socket or net.Server object, or undefined.
|
||||
function prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
|
||||
function prependListener(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||
function prependListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||
|
||||
function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster;
|
||||
function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
|
||||
function prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
|
||||
function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster;
|
||||
function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
|
||||
// the handle is a net.Socket or net.Server object, or undefined.
|
||||
function prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
|
||||
function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster;
|
||||
function prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
|
||||
|
||||
function eventNames(): string[];
|
||||
}
|
||||
Reference in New Issue
Block a user