From dd004a2b2033015f2f6cc38dc3319013b8a282ef Mon Sep 17 00:00:00 2001 From: Ryan Westerberg Date: Wed, 21 Feb 2024 15:13:19 -1000 Subject: [PATCH 1/2] convert buffer --- .vscode/settings.json | 3 + lib/http.js | 2 +- lib/protocol/compressor.js | 14 +- lib/protocol/connection.js | 2 +- lib/protocol/endpoint.js | 2 +- lib/protocol/framer.js | 32 +- lib/protocol/stream.js | 2 +- package-lock.json | 1584 ++++++++++++++++++++++++++++++++++++ package.json | 3 +- test/compressor.js | 76 +- test/connection.js | 10 +- test/flow.js | 12 +- test/framer.js | 70 +- test/stream.js | 34 +- test/util.js | 2 +- 15 files changed, 1718 insertions(+), 130 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 package-lock.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7c2feb7e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": false +} diff --git a/lib/http.js b/lib/http.js index 4c4234c5..4b3ed367 100644 --- a/lib/http.js +++ b/lib/http.js @@ -1104,7 +1104,7 @@ OutgoingRequest.prototype._start = function _start(stream, options) { delete headers.host; if (options.auth) { - headers.authorization = 'Basic ' + new Buffer(options.auth).toString('base64'); + headers.authorization = 'Basic ' + Buffer.from(options.auth).toString('base64'); } headers[':scheme'] = options.protocol.slice(0, -1); diff --git a/lib/protocol/compressor.js b/lib/protocol/compressor.js index 3923a910..49846840 100644 --- a/lib/protocol/compressor.js +++ b/lib/protocol/compressor.js @@ -66,7 +66,7 @@ function entryFromPair(pair) { var DEFAULT_HEADER_TABLE_LIMIT = 4096; function size(entry) { - return (new Buffer(entry[0] + entry[1], 'utf8')).length + 32; + return (Buffer.from(entry[0] + entry[1], 'utf8')).length + 32; } // The `add(index, entry)` can be used to [manage the header table][tablemgmt]: @@ -396,7 +396,7 @@ HeaderSetCompressor.prototype._flush = function _flush(callback) { HeaderSetCompressor.integer = function writeInteger(I, N) { var limit = Math.pow(2,N) - 1; if (I < limit) { - return [new Buffer([I])]; + return [Buffer.from([I])]; } var bytes = []; @@ -418,7 +418,7 @@ HeaderSetCompressor.integer = function writeInteger(I, N) { I = Q; } - return [new Buffer(bytes)]; + return [Buffer.from(bytes)]; }; // The inverse algorithm: @@ -530,7 +530,7 @@ HuffmanTable.prototype.encode = function encode(buffer) { add(this.codes[256] >> (this.lengths[256] - space)); } - return new Buffer(result); + return Buffer.from(result); }; HuffmanTable.prototype.decode = function decode(buffer) { @@ -552,7 +552,7 @@ HuffmanTable.prototype.decode = function decode(buffer) { } } - return new Buffer(result); + return Buffer.from(result); }; // The initializer arrays for the Huffman tables are generated with feeding the tables from the @@ -852,7 +852,7 @@ HuffmanTable.huffmanTable = new HuffmanTable([ // +---+---+---+---+---+---+---+---+ HeaderSetCompressor.string = function writeString(str) { - str = new Buffer(str, 'utf8'); + str = Buffer.from(str, 'utf8'); var huffman = HuffmanTable.huffmanTable.encode(str); if (huffman.length < str.length) { @@ -1341,7 +1341,7 @@ function concat(buffers) { size += buffers[i].length; } - var concatenated = new Buffer(size); + var concatenated = Buffer.alloc(size); for (var cursor = 0, j = 0; j < buffers.length; cursor += buffers[j].length, j++) { buffers[j].copy(concatenated, cursor); } diff --git a/lib/protocol/connection.js b/lib/protocol/connection.js index a552d2cf..1201ff1f 100644 --- a/lib/protocol/connection.js +++ b/lib/protocol/connection.js @@ -531,7 +531,7 @@ Connection.prototype._generatePingId = function _generatePingId() { // Sending a ping and calling `callback` when the answer arrives Connection.prototype.ping = function ping(callback) { var id = this._generatePingId(); - var data = new Buffer(id, 'hex'); + var data = Buffer.from(id, 'hex'); this._pings[id] = callback; this._log.debug({ data: data }, 'Sending PING.'); diff --git a/lib/protocol/endpoint.js b/lib/protocol/endpoint.js index a218db04..127f4c4c 100644 --- a/lib/protocol/endpoint.js +++ b/lib/protocol/endpoint.js @@ -78,7 +78,7 @@ Endpoint.prototype = Object.create(Duplex.prototype, { constructor: { value: End // Handshake // --------- -var CLIENT_PRELUDE = new Buffer('PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n'); +var CLIENT_PRELUDE = Buffer.from('PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n'); // Writing the client header is simple and synchronous. Endpoint.prototype._writePrelude = function _writePrelude() { diff --git a/lib/protocol/framer.js b/lib/protocol/framer.js index 4e273dfe..0b282110 100644 --- a/lib/protocol/framer.js +++ b/lib/protocol/framer.js @@ -81,7 +81,7 @@ Deserializer.prototype = Object.create(Transform.prototype, { constructor: { val // payload). The `_cursor` is used to track the progress. Deserializer.prototype._next = function(size) { this._cursor = 0; - this._buffer = new Buffer(size); + this._buffer = Buffer.alloc(size); this._waitingForHeader = !this._waitingForHeader; if (this._waitingForHeader) { this._frame = {}; @@ -204,7 +204,7 @@ var genericAttributes = ['type', 'flags', 'stream']; var typeSpecificAttributes = {}; Serializer.commonHeader = function writeCommonHeader(frame, buffers) { - var headerBuffer = new Buffer(COMMON_HEADER_SIZE); + var headerBuffer = Buffer.alloc(COMMON_HEADER_SIZE); var size = 0; for (var i = 0; i < buffers.length; i++) { @@ -363,7 +363,7 @@ typeSpecificAttributes.HEADERS = ['priorityDependency', 'priorityWeight', 'exclu Serializer.HEADERS = function writeHeadersPriority(frame, buffers) { if (frame.flags.PRIORITY) { - var buffer = new Buffer(5); + var buffer = Buffer.alloc(5); assert((0 <= frame.priorityDependency) && (frame.priorityDependency <= 0x7fffffff), frame.priorityDependency); buffer.writeUInt32BE(frame.priorityDependency, 0); if (frame.exclusiveDependency) { @@ -397,7 +397,7 @@ Deserializer.HEADERS = function readHeadersPriority(buffer, frame) { } if (frame.flags.PRIORITY) { - var dependencyData = new Buffer(4); + var dependencyData = Buffer.alloc(4); buffer.copy(dependencyData, 0, dataOffset, dataOffset + 4); dataOffset += 4; frame.exclusiveDependency = !!(dependencyData[0] & 0x80); @@ -442,7 +442,7 @@ typeSpecificAttributes.PRIORITY = ['priorityDependency', 'priorityWeight', 'excl // The payload of a PRIORITY frame contains an exclusive bit, a 31-bit dependency, and an 8-bit weight Serializer.PRIORITY = function writePriority(frame, buffers) { - var buffer = new Buffer(5); + var buffer = Buffer.alloc(5); assert((0 <= frame.priorityDependency) && (frame.priorityDependency <= 0x7fffffff), frame.priorityDependency); buffer.writeUInt32BE(frame.priorityDependency, 0); if (frame.exclusiveDependency) { @@ -459,7 +459,7 @@ Deserializer.PRIORITY = function readPriority(buffer, frame) { // PRIORITY frames are 5 bytes long. Bad peer! return 'FRAME_SIZE_ERROR'; } - var dependencyData = new Buffer(4); + var dependencyData = Buffer.alloc(4); buffer.copy(dependencyData, 0, 0, 4); frame.exclusiveDependency = !!(dependencyData[0] & 0x80); dependencyData[0] &= 0x7f; @@ -490,7 +490,7 @@ typeSpecificAttributes.RST_STREAM = ['error']; // code (see Error Codes). The error code indicates why the stream is being terminated. Serializer.RST_STREAM = function writeRstStream(frame, buffers) { - var buffer = new Buffer(4); + var buffer = Buffer.alloc(4); var code = errorCodes.indexOf(frame.error); assert((0 <= code) && (code <= 0xffffffff), code); buffer.writeUInt32BE(code, 0); @@ -555,7 +555,7 @@ Serializer.SETTINGS = function writeSettings(frame, buffers) { }); assert(settingsLeft.length === 0, 'Unknown settings: ' + settingsLeft.join(', ')); - var buffer = new Buffer(settings.length * 6); + var buffer = Buffer.alloc(settings.length * 6); for (var i = 0; i < settings.length; i++) { buffer.writeUInt16BE(settings[i].id & 0xffff, i*6); buffer.writeUInt32BE(settings[i].value, i*6 + 2); @@ -651,7 +651,7 @@ typeSpecificAttributes.PUSH_PROMISE = ['promised_stream', 'headers', 'data']; // additional context for the stream. Serializer.PUSH_PROMISE = function writePushPromise(frame, buffers) { - var buffer = new Buffer(4); + var buffer = Buffer.alloc(4); var promised_stream = frame.promised_stream; assert((0 <= promised_stream) && (promised_stream <= 0x7fffffff), promised_stream); @@ -747,7 +747,7 @@ typeSpecificAttributes.GOAWAY = ['last_stream', 'error']; // closing the connection. Serializer.GOAWAY = function writeGoaway(frame, buffers) { - var buffer = new Buffer(8); + var buffer = Buffer.alloc(8); var last_stream = frame.last_stream; assert((0 <= last_stream) && (last_stream <= 0x7fffffff), last_stream); @@ -798,7 +798,7 @@ typeSpecificAttributes.WINDOW_UPDATE = ['window_size']; // reserved. Serializer.WINDOW_UPDATE = function writeWindowUpdate(frame, buffers) { - var buffer = new Buffer(4); + var buffer = Buffer.alloc(4); var window_size = frame.window_size; assert((0 < window_size) && (window_size <= 0x7fffffff), window_size); @@ -888,7 +888,7 @@ function hexencode(s) { for (var i = 0; i < s.length; i++) { if (!istchar(s[i])) { t += '%'; - t += new Buffer(s[i]).toString('hex'); + t += Buffer.from(s[i]).toString('hex'); } else { t += s[i]; } @@ -897,17 +897,17 @@ function hexencode(s) { } Serializer.ALTSVC = function writeAltSvc(frame, buffers) { - var buffer = new Buffer(2); + var buffer = Buffer.alloc(2); buffer.writeUInt16BE(frame.origin.length, 0); buffers.push(buffer); - buffers.push(new Buffer(frame.origin, 'ascii')); + buffers.push(Buffer.from(frame.origin, 'ascii')); var fieldValue = hexencode(frame.protocolID) + '="' + frame.host + ':' + frame.port + '"'; if (frame.maxAge !== 86400) { // 86400 is the default fieldValue += "; ma=" + frame.maxAge; } - buffers.push(new Buffer(fieldValue, 'ascii')); + buffers.push(Buffer.from(fieldValue, 'ascii')); }; function stripquotes(s) { @@ -1031,7 +1031,7 @@ function unescape(s) { hexvalue += s[i]; } if (hexvalue.length > 0) { - t += new Buffer(hexvalue, 'hex').toString(); + t += Buffer.from(hexvalue, 'hex').toString(); } else { t += '%'; } diff --git a/lib/protocol/stream.js b/lib/protocol/stream.js index 6d520b94..74a30d6a 100644 --- a/lib/protocol/stream.js +++ b/lib/protocol/stream.js @@ -334,7 +334,7 @@ Stream.prototype._send = function _send() { // flag on the last frame. If there's no frame in the queue, or if it doesn't support this flag, // then we create a 0 length DATA frame. We could do this all the time, but putting the flag on an // existing frame is a nice optimization. -var emptyBuffer = new Buffer(0); +var emptyBuffer = Buffer.alloc(0); Stream.prototype._finishing = function _finishing() { var endFrame = { type: 'DATA', diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..c71ccea0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1584 @@ +{ + "name": "http2", + "version": "3.3.6", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "http2", + "version": "3.3.6", + "license": "MIT", + "devDependencies": { + "bunyan": "*", + "chai": "4", + "docco": "*", + "istanbul": "*", + "mocha": "*" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "dev": true, + "engines": [ + "node >=0.10.0" + ], + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/docco": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/docco/-/docco-0.9.1.tgz", + "integrity": "sha512-B1jUzcAc4AmicWUnmPTxUGM2lqJ11X4DiLUXyhzUVb7A1NNGTSNo3LtGzhHMyRAuJyxrHwHiOCDGuE/n9xRhmA==", + "dev": true, + "dependencies": { + "commander": "~ 8.3.0", + "fs-extra": "~ 10.0.0", + "highlight.js": "~ 11.3.1", + "marked": "~ 4.0.3", + "underscore": "~ 1.13.1" + }, + "bin": { + "docco": "bin/docco" + }, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.14.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.3.1.tgz", + "integrity": "sha512-PUhCRnPjLtiLHZAQ5A/Dt5F8cWZeMyj9KRsACsWT+OD6OP0x6dp5OmT5jdx0JgEyPxPZZIPQpRN2TciUT7occw==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/marked": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.19.tgz", + "integrity": "sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true, + "optional": true + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "dev": true, + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "dev": true, + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 5372f17f..3c0e323a 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,10 @@ "engines" : { "node" : ">=0.12.0" }, + "type": "commonjs", "devDependencies": { "istanbul": "*", - "chai": "*", + "chai": "4", "mocha": "*", "docco": "*", "bunyan": "*" diff --git a/test/compressor.js b/test/compressor.js index f86baf5d..4588b8a3 100644 --- a/test/compressor.js +++ b/test/compressor.js @@ -12,27 +12,27 @@ var Decompressor = compressor.Decompressor; var test_integers = [{ N: 5, I: 10, - buffer: new Buffer([10]) + buffer: Buffer.from([10]) }, { N: 0, I: 10, - buffer: new Buffer([10]) + buffer: Buffer.from([10]) }, { N: 5, I: 1337, - buffer: new Buffer([31, 128 + 26, 10]) + buffer: Buffer.from([31, 128 + 26, 10]) }, { N: 0, I: 1337, - buffer: new Buffer([128 + 57, 10]) + buffer: Buffer.from([128 + 57, 10]) }]; var test_strings = [{ string: 'www.foo.com', - buffer: new Buffer('89f1e3c2f29ceb90f4ff', 'hex') + buffer: Buffer.from('89f1e3c2f29ceb90f4ff', 'hex') }, { string: 'éáűőúöüó€', - buffer: new Buffer('13c3a9c3a1c5b1c591c3bac3b6c3bcc3b3e282ac', 'hex') + buffer: Buffer.from('13c3a9c3a1c5b1c591c3bac3b6c3bcc3b3e282ac', 'hex') }]; test_huffman_request = { @@ -85,7 +85,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('82', 'hex') + buffer: Buffer.from('82', 'hex') }, { // index header: { @@ -96,7 +96,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('86', 'hex') + buffer: Buffer.from('86', 'hex') }, { // index header: { @@ -107,7 +107,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('84', 'hex') + buffer: Buffer.from('84', 'hex') }, { // literal w/index, name index header: { @@ -118,7 +118,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('41' + '89f1e3c2f29ceb90f4ff', 'hex') + buffer: Buffer.from('41' + '89f1e3c2f29ceb90f4ff', 'hex') }, { // indexed header: { @@ -129,7 +129,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('82', 'hex') + buffer: Buffer.from('82', 'hex') }, { // indexed header: { @@ -140,7 +140,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('87', 'hex') + buffer: Buffer.from('87', 'hex') }, { // indexed header: { @@ -151,7 +151,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('84', 'hex') + buffer: Buffer.from('84', 'hex') }, { // literal w/index, name index header: { @@ -162,7 +162,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('41' + '89f1e3c2f18ec5c87a7f', 'hex') + buffer: Buffer.from('41' + '89f1e3c2f18ec5c87a7f', 'hex') }, { // literal w/index, name index header: { @@ -173,7 +173,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('58' + '86a8eb10649cbf', 'hex') + buffer: Buffer.from('58' + '86a8eb10649cbf', 'hex') }, { // index header: { @@ -184,7 +184,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('82', 'hex') + buffer: Buffer.from('82', 'hex') }, { // index header: { @@ -195,7 +195,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('87', 'hex') + buffer: Buffer.from('87', 'hex') }, { // literal w/index, name index header: { @@ -206,7 +206,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('44' + '8b6096a127a56ac699d72211', 'hex') + buffer: Buffer.from('44' + '8b6096a127a56ac699d72211', 'hex') }, { // index header: { @@ -217,7 +217,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('C0', 'hex') + buffer: Buffer.from('C0', 'hex') }, { // literal w/index, new name & value header: { @@ -228,7 +228,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('40' + '8825a849e95ba97d7f' + '8925a849e95bb8e8b4bf', 'hex') + buffer: Buffer.from('40' + '8825a849e95ba97d7f' + '8925a849e95bb8e8b4bf', 'hex') }, { // index header: { @@ -239,7 +239,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('82', 'hex') + buffer: Buffer.from('82', 'hex') }, { // index header: { @@ -250,7 +250,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('87', 'hex') + buffer: Buffer.from('87', 'hex') }, { // index header: { @@ -261,7 +261,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('BF', 'hex') + buffer: Buffer.from('BF', 'hex') }, { // index header: { @@ -272,7 +272,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('C2', 'hex') + buffer: Buffer.from('C2', 'hex') }, { // index header: { @@ -283,7 +283,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('C1', 'hex') + buffer: Buffer.from('C1', 'hex') }, { // index header: { @@ -294,7 +294,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('BE', 'hex') + buffer: Buffer.from('BE', 'hex') }, { // Literal w/o index, name index header: { @@ -305,7 +305,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('07' + '86f138d25ee5b3', 'hex') + buffer: Buffer.from('07' + '86f138d25ee5b3', 'hex') }, { // Literal w/o index, new name & value header: { @@ -316,7 +316,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('00' + '8294e7' + '03626172', 'hex') + buffer: Buffer.from('00' + '8294e7' + '03626172', 'hex') }, { // Literal never indexed, name index header: { @@ -327,7 +327,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('17' + '86f138d25ee5b3', 'hex') + buffer: Buffer.from('17' + '86f138d25ee5b3', 'hex') }, { // Literal never indexed, new name & value header: { @@ -338,7 +338,7 @@ var test_headers = [{ contextUpdate: false, newMaxSize: 0 }, - buffer: new Buffer('10' + '8294e7' + '03626172', 'hex') + buffer: Buffer.from('10' + '8294e7' + '03626172', 'hex') }, { header: { name: -1, @@ -348,7 +348,7 @@ var test_headers = [{ contextUpdate: true, newMaxSize: 100 }, - buffer: new Buffer('3F45', 'hex') + buffer: Buffer.from('3F45', 'hex') }]; var test_header_sets = [{ @@ -398,12 +398,12 @@ describe('compressor.js', function() { var table = HuffmanTable.huffmanTable; for (var decoded in test_huffman_request) { var encoded = test_huffman_request[decoded]; - expect(table.encode(new Buffer(decoded)).toString('hex')).to.equal(encoded); + expect(table.encode(Buffer.from(decoded)).toString('hex')).to.equal(encoded); } table = HuffmanTable.huffmanTable; for (decoded in test_huffman_response) { encoded = test_huffman_response[decoded]; - expect(table.encode(new Buffer(decoded)).toString('hex')).to.equal(encoded); + expect(table.encode(Buffer.from(decoded)).toString('hex')).to.equal(encoded); } }); }); @@ -412,12 +412,12 @@ describe('compressor.js', function() { var table = HuffmanTable.huffmanTable; for (var decoded in test_huffman_request) { var encoded = test_huffman_request[decoded]; - expect(table.decode(new Buffer(encoded, 'hex')).toString()).to.equal(decoded); + expect(table.decode(Buffer.from(encoded, 'hex')).toString()).to.equal(decoded); } table = HuffmanTable.huffmanTable; for (decoded in test_huffman_response) { encoded = test_huffman_response[decoded]; - expect(table.decode(new Buffer(encoded, 'hex')).toString()).to.equal(decoded); + expect(table.decode(Buffer.from(encoded, 'hex')).toString()).to.equal(decoded); } }); }); @@ -509,12 +509,12 @@ describe('compressor.js', function() { flags: { END_HEADERS: false }, - data: new Buffer(5) + data: Buffer.alloc(5) }); decompressor.write({ type: 'DATA', flags: {}, - data: new Buffer(5) + data: Buffer.alloc(5) }); expect(error_occured).to.be.equal(true); }); @@ -564,7 +564,7 @@ describe('compressor.js', function() { while (Math.random() > 0.1) { buffer.push(Math.floor(Math.random() * 256)) } - buffer = new Buffer(buffer); + buffer = Buffer.from(buffer); var table = HuffmanTable.huffmanTable; var result = table.decode(table.encode(buffer)); expect(result).to.deep.equal(buffer); diff --git a/test/connection.js b/test/connection.js index 2c68857f..21785d62 100644 --- a/test/connection.js +++ b/test/connection.js @@ -73,7 +73,7 @@ describe('connection.js', function() { flags: { 'PONG': true }, - data: new Buffer(8) + data: Buffer.alloc(8) }); }); }); @@ -102,11 +102,11 @@ describe('connection.js', function() { ':method': 'GET', ':path': '/' }; - var request_data = new Buffer(0); + var request_data = Buffer.alloc(0); var response_headers = { ':status': '200' }; - var response_data = new Buffer('12345678', 'hex'); + var response_data = Buffer.from('12345678', 'hex'); // Setting up server s.on('stream', function(server_stream) { @@ -140,8 +140,8 @@ describe('connection.js', function() { var response_headers = { ':status': '200' }; var push_request_headers = { ':method': 'get', ':path': '/x' }; var push_response_headers = { ':status': '200' }; - var response_content = new Buffer(10); - var push_content = new Buffer(10); + var response_content = Buffer.alloc(10); + var push_content = Buffer.alloc(10); done = util.callNTimes(5, done); diff --git a/test/flow.js b/test/flow.js index a077c684..29207219 100644 --- a/test/flow.js +++ b/test/flow.js @@ -96,7 +96,7 @@ describe('flow.js', function() { expect(flow.read()).to.equal(dataFrame); }); it('should also split DATA frames when needed', function() { - var buffer = new Buffer(10); + var buffer = Buffer.alloc(10); var dataFrame = { type: 'DATA', flags: {}, stream: util.random(0, 100), data: buffer }; flow._send = util.noop; flow._window = 5; @@ -132,7 +132,7 @@ describe('flow.js', function() { callback(); }; - var buffer = new Buffer(util.random(10, 100)); + var buffer = Buffer.alloc(util.random(10, 100)); flow.write({ type: 'DATA', flags: {}, data: buffer }); flow.once('readable', function() { expect(flow.read()).to.be.deep.equal({ @@ -163,10 +163,10 @@ describe('flow.js', function() { var input = []; flow1._send = function _send() { if (input.length >= frameNumber) { - this.push({ type: 'DATA', flags: { END_STREAM: true }, data: new Buffer(0) }); + this.push({ type: 'DATA', flags: { END_STREAM: true }, data: Buffer.alloc(0) }); this.push(null); } else { - var buffer = new Buffer(util.random(1000, 100000)); + var buffer = Buffer.alloc(util.random(1000, 100000)); input.push(buffer); this.push({ type: 'DATA', flags: {}, data: buffer }); } @@ -207,10 +207,10 @@ describe('flow.js', function() { var input = []; flow1._send = function _send() { if (input.length >= frameNumber) { - this.push({ type: 'DATA', flags: { END_STREAM: true }, data: new Buffer(0) }); + this.push({ type: 'DATA', flags: { END_STREAM: true }, data: Buffer.alloc(0) }); this.push(null); } else { - var buffer = new Buffer(util.random(1000, 100000)); + var buffer = Buffer.alloc(util.random(1000, 100000)); input.push(buffer); this.push({ type: 'DATA', flags: {}, data: buffer }); } diff --git a/test/framer.js b/test/framer.js index 59cc711b..e2eb6936 100644 --- a/test/framer.js +++ b/test/framer.js @@ -26,10 +26,10 @@ var test_frames = [{ PADDED: false }, stream: 10, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, // length + type + flags + stream + content - buffer: new Buffer('000004' + '00' + '00' + '0000000A' + '12345678', 'hex') + buffer: Buffer.from('000004' + '00' + '00' + '0000000A' + '12345678', 'hex') }, { frame: { @@ -38,9 +38,9 @@ var test_frames = [{ PADDED: false, RESERVED5: false, PRIORITY: false }, stream: 15, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, - buffer: new Buffer('000004' + '01' + '00' + '0000000F' + '12345678', 'hex') + buffer: Buffer.from('000004' + '01' + '00' + '0000000F' + '12345678', 'hex') }, { frame: { @@ -52,9 +52,9 @@ var test_frames = [{ priorityWeight: 5, exclusiveDependency: false, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, - buffer: new Buffer('000009' + '01' + '20' + '0000000F' + '0000000A' + '05' + '12345678', 'hex') + buffer: Buffer.from('000009' + '01' + '20' + '0000000F' + '0000000A' + '05' + '12345678', 'hex') }, { @@ -67,9 +67,9 @@ var test_frames = [{ priorityWeight: 5, exclusiveDependency: true, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, - buffer: new Buffer('000009' + '01' + '20' + '0000000F' + '8000000A' + '05' + '12345678', 'hex') + buffer: Buffer.from('000009' + '01' + '20' + '0000000F' + '8000000A' + '05' + '12345678', 'hex') }, { frame: { @@ -81,7 +81,7 @@ var test_frames = [{ priorityWeight: 5, exclusiveDependency: false }, - buffer: new Buffer('000005' + '02' + '00' + '0000000A' + '00000009' + '05', 'hex') + buffer: Buffer.from('000005' + '02' + '00' + '0000000A' + '00000009' + '05', 'hex') }, { frame: { @@ -93,7 +93,7 @@ var test_frames = [{ priorityWeight: 5, exclusiveDependency: true }, - buffer: new Buffer('000005' + '02' + '00' + '0000000A' + '80000009' + '05', 'hex') + buffer: Buffer.from('000005' + '02' + '00' + '0000000A' + '80000009' + '05', 'hex') }, { frame: { @@ -103,7 +103,7 @@ var test_frames = [{ error: 'INTERNAL_ERROR' }, - buffer: new Buffer('000004' + '03' + '00' + '0000000A' + '00000002', 'hex') + buffer: Buffer.from('000004' + '03' + '00' + '0000000A' + '00000002', 'hex') }, { frame: { @@ -119,7 +119,7 @@ var test_frames = [{ SETTINGS_MAX_FRAME_SIZE: 0x00010000 } }, - buffer: new Buffer('00001E' + '04' + '00' + '0000000A' + '0001' + '12345678' + + buffer: Buffer.from('00001E' + '04' + '00' + '0000000A' + '0001' + '12345678' + '0002' + '00000001' + '0003' + '01234567' + '0004' + '89ABCDEF' + @@ -133,9 +133,9 @@ var test_frames = [{ stream: 15, promised_stream: 3, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, - buffer: new Buffer('000008' + '05' + '00' + '0000000F' + '00000003' + '12345678', 'hex') + buffer: Buffer.from('000008' + '05' + '00' + '0000000F' + '00000003' + '12345678', 'hex') }, { frame: { @@ -143,9 +143,9 @@ var test_frames = [{ flags: { ACK: false }, stream: 15, - data: new Buffer('1234567887654321', 'hex') + data: Buffer.from('1234567887654321', 'hex') }, - buffer: new Buffer('000008' + '06' + '00' + '0000000F' + '1234567887654321', 'hex') + buffer: Buffer.from('000008' + '06' + '00' + '0000000F' + '1234567887654321', 'hex') }, { frame: { @@ -156,7 +156,7 @@ var test_frames = [{ last_stream: 0x12345678, error: 'PROTOCOL_ERROR' }, - buffer: new Buffer('000008' + '07' + '00' + '0000000A' + '12345678' + '00000001', 'hex') + buffer: Buffer.from('000008' + '07' + '00' + '0000000A' + '12345678' + '00000001', 'hex') }, { frame: { @@ -166,17 +166,17 @@ var test_frames = [{ window_size: 0x12345678 }, - buffer: new Buffer('000004' + '08' + '00' + '0000000A' + '12345678', 'hex') + buffer: Buffer.from('000004' + '08' + '00' + '0000000A' + '12345678', 'hex') }, { frame: { type: 'CONTINUATION', flags: { RESERVED1: false, RESERVED2: false, END_HEADERS: true }, stream: 10, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, // length + type + flags + stream + content - buffer: new Buffer('000004' + '09' + '04' + '0000000A' + '12345678', 'hex') + buffer: Buffer.from('000004' + '09' + '04' + '0000000A' + '12345678', 'hex') }, { frame: { type: 'ALTSVC', @@ -189,7 +189,7 @@ var test_frames = [{ host: "altsvc.example.com", origin: "" }, - buffer: new Buffer(new Buffer('00002B' + '0A' + '00' + '00000000' + '0000', 'hex') + new Buffer('h2="altsvc.example.com:4443"; ma=31536000', 'ascii')) + buffer: Buffer.from(Buffer.from('00002B' + '0A' + '00' + '00000000' + '0000', 'hex') + Buffer.from('h2="altsvc.example.com:4443"; ma=31536000', 'ascii')) }, { frame: { type: 'ALTSVC', @@ -202,7 +202,7 @@ var test_frames = [{ host: "altsvc.example.com", origin: "https://onlyme.example.com" }, - buffer: new Buffer(new Buffer('000045' + '0A' + '00' + '00000000' + '001A', 'hex') + new Buffer('https://onlyme.example.comh2="altsvc.example.com:4443"; ma=31536000', 'ascii')) + buffer: Buffer.from(Buffer.from('000045' + '0A' + '00' + '00000000' + '001A', 'hex') + Buffer.from('https://onlyme.example.comh2="altsvc.example.com:4443"; ma=31536000', 'ascii')) }, { frame: { @@ -210,7 +210,7 @@ var test_frames = [{ flags: { }, stream: 10 }, - buffer: new Buffer('000000' + '0B' + '00' + '0000000A', 'hex') + buffer: Buffer.from('000000' + '0B' + '00' + '0000000A', 'hex') }]; var deserializer_test_frames = test_frames.slice(0); @@ -220,10 +220,10 @@ var padded_test_frames = [{ flags: { END_STREAM: false, RESERVED2: false, RESERVED4: false, PADDED: true }, stream: 10, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, // length + type + flags + stream + pad length + content + padding - buffer: new Buffer('00000B' + '00' + '08' + '0000000A' + '06' + '12345678' + '000000000000', 'hex') + buffer: Buffer.from('00000B' + '00' + '08' + '0000000A' + '06' + '12345678' + '000000000000', 'hex') }, { frame: { @@ -232,10 +232,10 @@ var padded_test_frames = [{ PADDED: true, RESERVED5: false, PRIORITY: false }, stream: 15, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, // length + type + flags + stream + pad length + data + padding - buffer: new Buffer('00000B' + '01' + '08' + '0000000F' + '06' + '12345678' + '000000000000', 'hex') + buffer: Buffer.from('00000B' + '01' + '08' + '0000000F' + '06' + '12345678' + '000000000000', 'hex') }, { frame: { @@ -247,10 +247,10 @@ var padded_test_frames = [{ priorityWeight: 5, exclusiveDependency: false, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, // length + type + flags + stream + pad length + priority dependency + priority weight + data + padding - buffer: new Buffer('000010' + '01' + '28' + '0000000F' + '06' + '0000000A' + '05' + '12345678' + '000000000000', 'hex') + buffer: Buffer.from('000010' + '01' + '28' + '0000000F' + '06' + '0000000A' + '05' + '12345678' + '000000000000', 'hex') }, { frame: { @@ -262,10 +262,10 @@ var padded_test_frames = [{ priorityWeight: 5, exclusiveDependency: true, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, // length + type + flags + stream + pad length + priority dependency + priority weight + data + padding - buffer: new Buffer('000010' + '01' + '28' + '0000000F' + '06' + '8000000A' + '05' + '12345678' + '000000000000', 'hex') + buffer: Buffer.from('000010' + '01' + '28' + '0000000F' + '06' + '8000000A' + '05' + '12345678' + '000000000000', 'hex') }, { frame: { @@ -275,10 +275,10 @@ var padded_test_frames = [{ stream: 15, promised_stream: 3, - data: new Buffer('12345678', 'hex') + data: Buffer.from('12345678', 'hex') }, // length + type + flags + stream + pad length + promised stream + data + padding - buffer: new Buffer('00000F' + '05' + '08' + '0000000F' + '06' + '00000003' + '12345678' + '000000000000', 'hex') + buffer: Buffer.from('00000F' + '05' + '08' + '0000000F' + '06' + '00000003' + '12345678' + '000000000000', 'hex') }]; for (var idx = 0; idx < padded_test_frames.length; idx++) { @@ -322,7 +322,7 @@ describe('framer.js', function() { for (var i = 0; i < test_frames.length; i++) { var test = test_frames[i]; stream.write(test.frame); - var chunk, buffer = new Buffer(0); + var chunk, buffer = Buffer.alloc(0); while (chunk = stream.read()) { buffer = util.concat([buffer, chunk]); } @@ -384,7 +384,7 @@ describe('framer.js', function() { describe('`frame`', function() { var format = framer.serializers.frame; it('should assign a unique ID to each frame', function() { - var frame1 = { type: 'DATA', data: new Buffer(10) }; + var frame1 = { type: 'DATA', data: Buffer.alloc(10) }; var frame2 = { type: 'PRIORITY', priority: 1 }; expect(format(frame1).id).to.be.equal(format(frame1)); expect(format(frame2).id).to.be.equal(format(frame2)); diff --git a/test/stream.js b/test/stream.js index 90e0ef64..9e60932b 100644 --- a/test/stream.js +++ b/test/stream.js @@ -105,25 +105,25 @@ var example_frames = [ { type: 'WINDOW_UPDATE', flags: {}, settings: {} }, { type: 'RST_STREAM', flags: {}, error: 'CANCEL' }, { type: 'HEADERS', flags: {}, headers: {}, priority: undefined }, - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'PUSH_PROMISE', flags: {}, headers: {}, promised_stream: new Stream(util.log, null) } ]; var invalid_incoming_frames = { IDLE: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'WINDOW_UPDATE', flags: {}, settings: {} }, { type: 'PUSH_PROMISE', flags: {}, headers: {} }, { type: 'RST_STREAM', flags: {}, error: 'CANCEL' } ], RESERVED_LOCAL: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'HEADERS', flags: {}, headers: {}, priority: undefined }, { type: 'PUSH_PROMISE', flags: {}, headers: {} }, { type: 'WINDOW_UPDATE', flags: {}, settings: {} } ], RESERVED_REMOTE: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'PUSH_PROMISE', flags: {}, headers: {} }, { type: 'WINDOW_UPDATE', flags: {}, settings: {} } ], @@ -132,7 +132,7 @@ var invalid_incoming_frames = { HALF_CLOSED_LOCAL: [ ], HALF_CLOSED_REMOTE: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'HEADERS', flags: {}, headers: {}, priority: undefined }, { type: 'PUSH_PROMISE', flags: {}, headers: {} } ] @@ -140,17 +140,17 @@ var invalid_incoming_frames = { var invalid_outgoing_frames = { IDLE: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'WINDOW_UPDATE', flags: {}, settings: {} }, { type: 'PUSH_PROMISE', flags: {}, headers: {} } ], RESERVED_LOCAL: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'PUSH_PROMISE', flags: {}, headers: {} }, { type: 'WINDOW_UPDATE', flags: {}, settings: {} } ], RESERVED_REMOTE: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'HEADERS', flags: {}, headers: {}, priority: undefined }, { type: 'PUSH_PROMISE', flags: {}, headers: {} }, { type: 'WINDOW_UPDATE', flags: {}, settings: {} } @@ -158,7 +158,7 @@ var invalid_outgoing_frames = { OPEN: [ ], HALF_CLOSED_LOCAL: [ - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'HEADERS', flags: {}, headers: {}, priority: undefined }, { type: 'PUSH_PROMISE', flags: {}, headers: {} } ], @@ -167,7 +167,7 @@ var invalid_outgoing_frames = { CLOSED: [ { type: 'WINDOW_UPDATE', flags: {}, settings: {} }, { type: 'HEADERS', flags: {}, headers: {}, priority: undefined }, - { type: 'DATA', flags: {}, data: new Buffer(5) }, + { type: 'DATA', flags: {}, data: Buffer.alloc(5) }, { type: 'PUSH_PROMISE', flags: {}, headers: {}, promised_stream: new Stream(util.log, null) } ] }; @@ -260,11 +260,11 @@ describe('stream.js', function() { { wait : 5 }, { method : { name: 'end', arguments: [] } }, { event : { name: 'state', data: ['HALF_CLOSED_LOCAL'] } }, - { outgoing: { type: 'DATA', flags: { END_STREAM: true }, data: new Buffer(0) } }, + { outgoing: { type: 'DATA', flags: { END_STREAM: true }, data: Buffer.alloc(0) } }, { wait : 10 }, { incoming: { type: 'HEADERS', flags: { }, headers: { ':status': 200 } } }, - { incoming: { type: 'DATA' , flags: { END_STREAM: true }, data: new Buffer(5) } }, + { incoming: { type: 'DATA' , flags: { END_STREAM: true }, data: Buffer.alloc(5) } }, { event : { name: 'headers', data: [{ ':status': 200 }] } }, { event : { name: 'state', data: ['CLOSED'] } }, @@ -274,15 +274,15 @@ describe('stream.js', function() { }); describe('answering request', function() { it('should trigger the appropriate state transitions and outgoing frames', function(done) { - var payload = new Buffer(5); + var payload = Buffer.alloc(5); execute_sequence([ { incoming: { type: 'HEADERS', flags: { }, headers: { ':path': '/' } } }, { event : { name: 'state', data: ['OPEN'] } }, { event : { name: 'headers', data: [{ ':path': '/' }] } }, { wait : 5 }, - { incoming: { type: 'DATA', flags: { }, data: new Buffer(5) } }, - { incoming: { type: 'DATA', flags: { END_STREAM: true }, data: new Buffer(10) } }, + { incoming: { type: 'DATA', flags: { }, data: Buffer.alloc(5) } }, + { incoming: { type: 'DATA', flags: { END_STREAM: true }, data: Buffer.alloc(10) } }, { event : { name: 'state', data: ['HALF_CLOSED_REMOTE'] } }, { wait : 5 }, @@ -300,7 +300,7 @@ describe('stream.js', function() { }); describe('sending push stream', function() { it('should trigger the appropriate state transitions and outgoing frames', function(done) { - var payload = new Buffer(5); + var payload = Buffer.alloc(5); var pushStream; execute_sequence([ @@ -348,7 +348,7 @@ describe('stream.js', function() { }); describe('receiving push stream', function() { it('should trigger the appropriate state transitions and outgoing frames', function(done) { - var payload = new Buffer(5); + var payload = Buffer.alloc(5); var original_stream = createStream(); var promised_stream = createStream(); diff --git a/test/util.js b/test/util.js index 52c6a1be..c612e38b 100644 --- a/test/util.js +++ b/test/util.js @@ -63,7 +63,7 @@ exports.concat = function concat(buffers) { size += buffers[i].length; } - var concatenated = new Buffer(size); + var concatenated = Buffer.alloc(size); for (var cursor = 0, j = 0; j < buffers.length; cursor += buffers[j].length, j++) { buffers[j].copy(concatenated, cursor); } From c0bf1dfe811b30f64ecaec943418c7e9a74c6652 Mon Sep 17 00:00:00 2001 From: Ryan Westerberg Date: Wed, 21 Feb 2024 15:17:43 -1000 Subject: [PATCH 2/2] 3.3.7 --- package-lock.json | 4 ++-- package.json | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index c71ccea0..59bb2a7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "http2", - "version": "3.3.6", + "version": "3.3.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "http2", - "version": "3.3.6", + "version": "3.3.7", "license": "MIT", "devDependencies": { "bunyan": "*", diff --git a/package.json b/package.json index 3c0e323a..de30682b 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "http2", - "version": "3.3.6", + "version": "3.3.7", "description": "An HTTP/2 client and server implementation", "main": "lib/index.js", - "engines" : { - "node" : ">=0.12.0" + "engines": { + "node": ">=0.12.0" }, "type": "commonjs", "devDependencies": {