From 274aa99fb8f2917c0bf232421a9fe2d8e4bc6373 Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Tue, 23 May 2023 20:36:52 -0700 Subject: [PATCH 01/15] thingy idk --- development/server.js | 2 +- extensions/godslayerakp/http.js | 445 ++++++ extensions/godslayerakp/httpExtra.js | 222 +++ package-lock.json | 1954 +++++++++++++++++++++++++- 4 files changed, 2620 insertions(+), 3 deletions(-) create mode 100644 extensions/godslayerakp/http.js create mode 100644 extensions/godslayerakp/httpExtra.js diff --git a/development/server.js b/development/server.js index 4f80d73dd3..8ca8a93015 100644 --- a/development/server.js +++ b/development/server.js @@ -65,6 +65,6 @@ app.use((req, res) => { // The port the server runs on matters. The editor only treats port 8000 as unsandboxed. const PORT = 8000; -app.listen(8000, () => { +app.listen(PORT, () => { console.log(`Development server is ready on http://localhost:${PORT}/`); }); diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js new file mode 100644 index 0000000000..528b1c8d88 --- /dev/null +++ b/extensions/godslayerakp/http.js @@ -0,0 +1,445 @@ +(function(Scratch) { + 'use strict'; + if (!Scratch.extensions.unsandboxed) throw 'can not load out side unsandboxed mode'; + + const {vm} = Scratch; + const {runtime, extensionManager} = vm; + + // inject comments bc yes + // @ts-ignore + const oldConvert = runtime._convertForScratchBlocks.bind(runtime); + const createComment = blockInfo => ({ + info: blockInfo, + xml: `` + }); + // @ts-ignore + runtime._convertForScratchBlocks = (blockInfo, categoryInfo) => { + if (typeof blockInfo === 'string' && + blockInfo.startsWith('---') && + blockInfo.length > 3) { + return createComment(blockInfo); + } + return oldConvert(blockInfo, categoryInfo); + }; + // @ts-ignore + const oldPrepare = extensionManager._prepareBlockInfo.bind(extensionManager); + // @ts-ignore + extensionManager._prepareBlockInfo = (serviceName, blockInfo) => { + if (typeof blockInfo === 'string' && blockInfo.startsWith('---')) + return blockInfo; + return oldPrepare(serviceName, blockInfo); + }; + + // the funny class to make event blocks look better + class Events { + constructor() { + this.events = {}; + } + + add(name) { + this.events[name] = false; + } + + peek(name) { + return this.events[name]; + } + + check(name) { + const state = this.events[name]; + this.events[name] = false; + return state; + } + + activate(name) { + this.events[name] = true; + } + } + + /* ------- BLOCKS -------- */ + const {BlockType, Cast, ArgumentType} = Scratch; + + class WebRequests { + static get defaultRequest() { + const defaultRequest = { + events: new Events(), + get mimeType() { + return this.options.headers['Content-Type']; + }, + set mimeType(value) { + this.options.headers['Content-Type'] = value; + }, + set method(val) { + this.options.method = val; + // remove body on get requests + if (val === 'GET') { + delete this.options.body; + } + }, + get method() { + return this.options.method; + }, + options: { + headers: { + 'Content-Type': 'text/plain' + }, + method: 'GET' + }, + set body(val) { + if (this.method === 'GET') return; + this.options.body = val; + }, + get body() { + return this.options.body; + } + }; + + defaultRequest.events.add('reqEnd'); + defaultRequest.events.add('reqSuccess'); + defaultRequest.events.add('reqFail'); + + return defaultRequest; + } + static get defualtResponse() { + const defualtResponse = { + text: '', + status: '', + statusText: '', + headers: new Headers(), + error: '', + url: '' + }; + + return defualtResponse; + } + + /** + * no need to install runtime as it comes with Scratch var + */ + constructor() { + this.clearAll(); + } + getInfo() { + return { + id: 'extawebrequestsHTTP', + name: 'http/https', + color1: '#307eff', + color2: '#2c5eb0', + blocks: [ + { + opcode: 'clearAll', + blockType: BlockType.COMMAND, + text: 'clear current data' + }, + "---response", + { + opcode: 'error', + blockType: BlockType.REPORTER, + text: 'error' + }, + { + opcode: 'status', + blockType: BlockType.REPORTER, + text: 'status' + }, + { + opcode: 'statusText', + blockType: BlockType.REPORTER, + text: 'status text' + }, + { + opcode: 'getHeaderJSON', + blockType: BlockType.REPORTER, + disableMonitor: true, + text: 'get headers as json' + }, + { + opcode: 'getHeaderValue', + blockType: BlockType.REPORTER, + arguments: { + name: { + type: ArgumentType.STRING + } + }, + text: 'get [name] from header' + }, + { + opcode: 'requestComplete', + blockType: BlockType.BOOLEAN, + text: 'site responded?' + }, + { + opcode: 'requestFail', + blockType: BlockType.BOOLEAN, + text: 'request failed?' + }, + { + opcode: 'requestSuccess', + blockType: BlockType.BOOLEAN, + text: 'request succeeded?' + }, + "---", + { + opcode: 'onResponse', + blockType: BlockType.HAT, + isEdgeActivated: false, + text: 'when a site responds' + }, + { + opcode: 'onFail', + blockType: BlockType.HAT, + isEdgeActivated: false, + text: 'when a request fails' + }, + "---request", + { + opcode: 'setMimeType', + blockType: BlockType.COMMAND, + arguments: { + type: { + type: ArgumentType.STRING, + menu: 'mimeType', + defaultValue: this.request.mimeType + } + }, + text: 'set content type to [type]' + }, + { + opcode: 'setRequestmethod', + blockType: BlockType.COMMAND, + arguments: { + method: { + type: ArgumentType.STRING, + menu: 'method', + defaultValue: this.request.method + } + }, + text: 'set request method to [method]' + }, + { + opcode: 'setHeaderData', + blockType: BlockType.COMMAND, + arguments: { + name: { + type: ArgumentType.STRING, + defaultValue: 'Content-Type' + }, + value: { + type: ArgumentType.STRING, + defaultValue: this.request.mimeType + } + }, + text: 'in header set [name] to [value]' + }, + { + opcode: 'setHeaderJSON', + blockType: BlockType.COMMAND, + arguments: { + json: { + type: ArgumentType.STRING, + defaultValue: `{"Content-Type": "${this.request.mimeType}"}` + } + }, + text: 'set headers to json [json]' + }, + { + opcode: 'setBody', + blockType: BlockType.COMMAND, + arguments: { + text: { + type: ArgumentType.STRING + } + }, + text: 'set request body to [text]' + }, + { + opcode: 'sendRequest', + blockType: BlockType.COMMAND, + arguments: { + url: { + type: ArgumentType.STRING, + defaultValue: 'https://dummyurl.com' + } + }, + text: 'send request to [url]' + } + ], + menus: { + method: { + items: [ + 'GET', + 'POST', + 'PUT', + 'PATCH', + 'DELETE', + 'HEAD', + 'OPTIONS' + ] + }, + mimeType: { + items: [ + "application/javascript", + "application/ogg", + "application/pdf", + "application/json", + "application/ld+json", + "application/xml", + "application/zip", + "audio/mpeg", + "image/gif", + "image/jpeg", + "image/png", + "image/tiff", + "image/x-icon", + "image/svg+xml", + "text/css", + "text/csv", + "text/html", + "text/plain", + "text/xml", + "video/mpeg", + "video/mp4", + "video/x-ms-wmv", + "video/x-msvideo", + "video/x-flv", + "video/webm" + ], + acceptReporters: true + }, + jsTypes: { + items: [ + 'string', + 'number', + 'boolean', + 'object' + ] + } + } + }; + } + + /* ------ RESETING ------- */ + + clearAll() { + this.request = WebRequests.defaultRequest; + this.response = WebRequests.defualtResponse; + } + + /* ------- DATA READING -------- */ + + error() { + return this.response.error; + } + + status() { + return this.response.status; + } + + requestComplete() { + return this.request.events.peek('reqEnd'); + } + + requestFail() { + return this.request.events.peek('reqFail'); + } + + requestSuccess() { + return this.request.events.peek('reqSuccess'); + } + + statusText() { + return this.response.statusText; + } + + getHeaderValue(args) { + const name = Cast.toString(args.name); + return this.response.get(name); + } + + getHeaderJSON() { + const object = {}; + for (const entry of this.response.headers.entries()) { + object[entry[0]] = entry[1]; + } + return JSON.stringify(object); + } + + /* -------- EVENTS -------- */ + + onResponse() { + const { events } = this.request; + return events.check('reqEnd'); + } + + onFail() { + const { events } = this.request; + return events.check('reqFail'); + } + + /* -------- CONTROL --------- */ + + setMimeType(args) { + const type = Cast.toString(args.type); + this.request.mimeType = type; + } + + setRequestmethod(args) { + const method = Cast.toString(args.method); + this.request.method = method; + } + + setHeaderData(args) { + const key = Cast.toString(args.name); + const value = Cast.toString(args.value); + this.request.options.headers[key] = value; + } + + setHeaderJSON(args) { + const json = Cast.toString(args.json); + let object; + // ignore invalid data + try { + object = JSON.parse(json); + } catch { + return; + } + if (typeof object !== 'object') return; + this.request.options.headers = object; + } + + setBody(args) { + const body = Cast.toString(args.text); + this.request.body = body; + } + + // eslint-disable-next-line require-await + async sendRequest(args) { + const url = Cast.toString(args.url); + const {request, response} = this; + + response.url = url; + // @ts-ignore + Scratch.fetch(url, request.options) + .then(res => { + // @ts-ignore + response.status = res.status; + response.headers = res.headers; + response.statusText = res.statusText; + request.events.activate(res.ok ? 'reqSuccess' : 'reqFail'); + request.events.activate('reqEnd'); + return res.text(); + }) + .then(body => response.text = body) + .catch(err => { + response.error = String(err); + console.warn('request failed with error', err); + request.events.activate('reqFail'); + request.events.activate('reqEnd'); + }); + } + } + + const instance = new WebRequests(); + Scratch.extensions.register(instance); + // @ts-ignore + runtime.ext_http = instance; +})(Scratch); \ No newline at end of file diff --git a/extensions/godslayerakp/httpExtra.js b/extensions/godslayerakp/httpExtra.js new file mode 100644 index 0000000000..c0a6735b62 --- /dev/null +++ b/extensions/godslayerakp/httpExtra.js @@ -0,0 +1,222 @@ +// this is just kinda existent, its only point is so +// people can set properties that arnt explictly in the http ext + +(function(Scratch) { + 'use strict'; + const pathRegex = /[^.]+/g; + const setType = (value, type) => { + switch (type) { + case 'string': + switch (typeof value) { + case 'string': + case 'boolean': + case 'number': + case 'function': + return String(value); + case 'object': + try { + return JSON.stringify(value); + } catch { + return '{}'; + } + } + break; + case 'number': + switch (typeof value) { + case 'string': + return String(value); + case 'boolean': + return Boolean(value); + case 'number': + return value; + case 'function': + case 'object': + return NaN; + } + break; + case 'boolean': + switch (typeof value) { + case 'string': + case 'boolean': + case 'function': + case 'number': + return Boolean(value); + case 'object': + return false; + } + break; + case 'object': + switch (typeof value) { + case 'string': + try { + const parsed = JSON.parse(value); + if (typeof parsed === 'object') return parsed; + return {}; + } catch { + return {}; + } + case 'boolean': + case 'function': + case 'number': + return {}; + case 'object': + return value; + } + break; + } + }; + const parseType = text => { + // this isnt text and we just pass it down as what ever it is + if (typeof text !== 'string') return text; + if (!isNaN(Number(text))) { + return Number(text); + } else { + try { + const parsed = JSON.parse(text); + if (typeof parsed === 'object') return parsed; + if (typeof parsed === 'boolean') return parsed; + return text; + } catch { + return text; + } + } + }; + const getPathArray = path => { + const names = path.match(pathRegex); + for (let index = 0; index < names.length; index++) { + let name = names[index]; + name = name.replaceAll(/(? { + for (const name of path) { + object = object[name]; + if (typeof object !== 'object') return; + } + return object; + }; + const setValueAtPath = (object, path, value) => { + for (const name of path) { + object = object[name]; + if (typeof object !== 'object') return; + } + return object = value; + }; + + const {BlockType, Cast, ArgumentType} = Scratch; + // @ts-ignore + const http = Scratch.vm.runtime.ext_http; + + class HTTPPatches { + getInfo() { + return { + id: 'httpPatches', + name: 'http/https extra', + color1: '#307eff', + color2: '#2c5eb0', + blocks: [ + { + opcode: 'setUnkownProperty', + blockType: BlockType.COMMAND, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + }, + value: { + type: ArgumentType.STRING, + defaultValue: 'your mom :trel:' + } + }, + text: 'set [path] to [value] in request options' + }, + { + opcode: 'setUnkownPropertyType', + blockType: BlockType.COMMAND, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + }, + type: { + type: ArgumentType.STRING, + menu: 'jsTypes' + } + }, + text: 'set [path] to type [type] in request options' + }, + { + opcode: 'getUnkownProperty', + blockType: BlockType.REPORTER, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + } + }, + text: 'get [path] in request options' + }, + { + opcode: 'getUnkownPropertyType', + blockType: BlockType.REPORTER, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + } + }, + text: 'get type of [path] in request options' + } + ], + menus: { + jsTypes: { + items: [ + 'string', + 'number', + 'boolean', + 'object' + ] + } + } + }; + } + + setUnkownProperty(args) { + const name = Cast.toString(args.name); + const text = Cast.toString(args.value); + + const path = getPathArray(name); + const value = parseType(text); + setValueAtPath(http.request.options, path, value); + } + + setUnkownPropertyType(args) { + const name = Cast.toString(args.name); + const type = Cast.toString(args.type); + const path = getPathArray(name); + + const oldValue = getValueAtPath(http.request.options, path); + const newValue = setType(oldValue, type); + setValueAtPath(http.request.options, path, newValue); + } + + getUnkownProperty(args) { + const name = Cast.toString(args.name); + const path = getPathArray(name); + + return getValueAtPath(http.request.options, path); + } + + getUnkownPropertyType(args) { + const name = Cast.toString(args.name); + const path = getPathArray(name); + const value = getValueAtPath(http.request.options, path); + + return typeof value; + } + } + + const instance = new HTTPPatches(); + Scratch.extensions.register(instance); +})(Scratch); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6b95fe22e3..bb3127aea6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,1957 @@ { "name": "@turbowarp/extensions", "version": "0.0.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@turbowarp/extensions", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@turbowarp/types-tw": "^0.0.6", + "chokidar": "^3.5.3", + "ejs": "^3.1.9", + "express": "^4.18.2" + }, + "devDependencies": { + "eslint": "^8.40.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/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/@eslint/js": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", + "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/config-array/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/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@turbowarp/types-tw": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@turbowarp/types-tw/-/types-tw-0.0.6.tgz", + "integrity": "sha512-mQxaUypyHe2D18bBsnbTYzAgRTXpM7Dz2cH1bvh8eGJbQUAWHtKxpKcO9Sz57fYye+6hzlx1XrcuaTgRlCOwiQ==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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==", + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "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==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "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/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==", + "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==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "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/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "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/eslint": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", + "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.40.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/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/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.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/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "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/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.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-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "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==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "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/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "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/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "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/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "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/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.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": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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" + } + } + }, "dependencies": { "@eslint-community/eslint-utils": { "version": "4.4.0", @@ -149,7 +2098,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv": { "version": "6.12.6", From 2eddac1ef75c26f66056cb63d7acd7f5f943aa6d Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Tue, 23 May 2023 20:46:07 -0700 Subject: [PATCH 02/15] the actauly gallery thingy --- images/godslayerakp/http.png | Bin 0 -> 27809 bytes website/index.ejs | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 images/godslayerakp/http.png diff --git a/images/godslayerakp/http.png b/images/godslayerakp/http.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0d60026e8d9ec0856470dd863603c4b369ec9c GIT binary patch literal 27809 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 z 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 SH;#Nkz)w?MSFJ(?8~J}s7oy?- literal 0 HcmV?d00001 diff --git a/website/index.ejs b/website/index.ejs index 18e4594bf2..028ba1d809 100644 --- a/website/index.ejs +++ b/website/index.ejs @@ -649,6 +649,12 @@

McUtils

Helpful utilities for any fast food employee. Created by LukeManiaStudios.

+ +
+ <%- banner('godslayerakp/http') %> +

http/https

+

(mostly) the entirety of http implemented into an ext! made by RedMan13 (godslayerakp).

+
From 09c5da8d16c526d1a25f96b9e05275c08a58bb51 Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Wed, 7 Jun 2023 20:52:54 -0700 Subject: [PATCH 03/15] undo port change --- development/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/development/server.js b/development/server.js index 8ca8a93015..4f80d73dd3 100644 --- a/development/server.js +++ b/development/server.js @@ -65,6 +65,6 @@ app.use((req, res) => { // The port the server runs on matters. The editor only treats port 8000 as unsandboxed. const PORT = 8000; -app.listen(PORT, () => { +app.listen(8000, () => { console.log(`Development server is ready on http://localhost:${PORT}/`); }); From 660b819417ba33fdcf0a3d26b1eee2bed22beb8b Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Wed, 7 Jun 2023 20:57:46 -0700 Subject: [PATCH 04/15] fixed extension id's and label usage --- extensions/godslayerakp/http.js | 39 +++++++--------------------- extensions/godslayerakp/httpExtra.js | 2 +- 2 files changed, 11 insertions(+), 30 deletions(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 528b1c8d88..79914a9bc0 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -3,32 +3,7 @@ if (!Scratch.extensions.unsandboxed) throw 'can not load out side unsandboxed mode'; const {vm} = Scratch; - const {runtime, extensionManager} = vm; - - // inject comments bc yes - // @ts-ignore - const oldConvert = runtime._convertForScratchBlocks.bind(runtime); - const createComment = blockInfo => ({ - info: blockInfo, - xml: `` - }); - // @ts-ignore - runtime._convertForScratchBlocks = (blockInfo, categoryInfo) => { - if (typeof blockInfo === 'string' && - blockInfo.startsWith('---') && - blockInfo.length > 3) { - return createComment(blockInfo); - } - return oldConvert(blockInfo, categoryInfo); - }; - // @ts-ignore - const oldPrepare = extensionManager._prepareBlockInfo.bind(extensionManager); - // @ts-ignore - extensionManager._prepareBlockInfo = (serviceName, blockInfo) => { - if (typeof blockInfo === 'string' && blockInfo.startsWith('---')) - return blockInfo; - return oldPrepare(serviceName, blockInfo); - }; + const {runtime} = vm; // the funny class to make event blocks look better class Events { @@ -120,7 +95,7 @@ } getInfo() { return { - id: 'extawebrequestsHTTP', + id: 'gsaHTTPRequests', name: 'http/https', color1: '#307eff', color2: '#2c5eb0', @@ -130,7 +105,10 @@ blockType: BlockType.COMMAND, text: 'clear current data' }, - "---response", + { + blockType: Scratch.BlockType.LABEL, + text: "response" + }, { opcode: 'error', blockType: BlockType.REPORTER, @@ -190,7 +168,10 @@ isEdgeActivated: false, text: 'when a request fails' }, - "---request", + { + blockType: Scratch.BlockType.LABEL, + text: "request" + }, { opcode: 'setMimeType', blockType: BlockType.COMMAND, diff --git a/extensions/godslayerakp/httpExtra.js b/extensions/godslayerakp/httpExtra.js index c0a6735b62..291ce3d286 100644 --- a/extensions/godslayerakp/httpExtra.js +++ b/extensions/godslayerakp/httpExtra.js @@ -111,7 +111,7 @@ class HTTPPatches { getInfo() { return { - id: 'httpPatches', + id: 'gsaHttpPatches', name: 'http/https extra', color1: '#307eff', color2: '#2c5eb0', From 31185fd3d7cc253f2561cddeee797f710442353e Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Fri, 9 Jun 2023 11:22:55 -0700 Subject: [PATCH 05/15] event system re-write --- extensions/godslayerakp/http.js | 52 ++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 79914a9bc0..60ba5ee94a 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -5,30 +5,63 @@ const {vm} = Scratch; const {runtime} = vm; + const extensionId = 'gsaHTTPRequests'; + // the funny class to make event blocks look better class Events { constructor() { this.events = {}; + this.blocks = {}; } - add(name) { + /** + * adds a event name listner + * @param {string} name name of the event + * @param {string} [block] a block to run when trigered + */ + add(name, block) { + if (block) { + if (!this.blocks[name]) this.blocks[name] = []; + this.blocks[name].push(block); + } this.events[name] = false; } + /** + * gets if a event has been trigered or not + * does not reset the value unlike check + * @param {string} name name of the event + * @returns {boolean} + */ peek(name) { return this.events[name]; } + /** + * gets if a event has been trigered or not + * @param {string} name name of the event + * @returns {boolean} + */ check(name) { const state = this.events[name]; this.events[name] = false; return state; } + /** + * activate an event + * @param {string} name name of the event + */ activate(name) { this.events[name] = true; + if (this.blocks[name]) { + for (const block of this.blocks[name]) { + runtime.startHats(block); + } + } } } + const createBlockId = block => `${extensionId}_${block}`; /* ------- BLOCKS -------- */ const {BlockType, Cast, ArgumentType} = Scratch; @@ -69,8 +102,8 @@ }; defaultRequest.events.add('reqEnd'); - defaultRequest.events.add('reqSuccess'); - defaultRequest.events.add('reqFail'); + defaultRequest.events.add('reqSuccess', createBlockId('onResponse')); + defaultRequest.events.add('reqFail', createBlockId('onFail')); return defaultRequest; } @@ -95,7 +128,7 @@ } getInfo() { return { - id: 'gsaHTTPRequests', + id: extensionId, name: 'http/https', color1: '#307eff', color2: '#2c5eb0', @@ -347,13 +380,13 @@ /* -------- EVENTS -------- */ onResponse() { - const { events } = this.request; - return events.check('reqEnd'); + // filer olo + return false; } onFail() { - const { events } = this.request; - return events.check('reqFail'); + // filer olo + return false; } /* -------- CONTROL --------- */ @@ -397,6 +430,8 @@ const url = Cast.toString(args.url); const {request, response} = this; + this.clearAll(); + response.url = url; // @ts-ignore Scratch.fetch(url, request.options) @@ -423,4 +458,5 @@ Scratch.extensions.register(instance); // @ts-ignore runtime.ext_http = instance; +// @ts-ignore })(Scratch); \ No newline at end of file From 2f9265cc5d7193fa76658c5ca3eb667c50a66d00 Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Fri, 9 Jun 2023 11:24:16 -0700 Subject: [PATCH 06/15] bruh how tf did i forget to add the ability to read the response --- extensions/godslayerakp/http.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 60ba5ee94a..8c812c56b7 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -142,6 +142,11 @@ blockType: Scratch.BlockType.LABEL, text: "response" }, + { + opcode: 'resData', + blockType: BlockType.REPORTER, + text: 'response' + }, { opcode: 'error', blockType: BlockType.REPORTER, @@ -340,6 +345,10 @@ /* ------- DATA READING -------- */ + resData() { + return this.response.text; + } + error() { return this.response.error; } From 543bcf01042bf4ccbb7c1cece0b64836490772bc Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Fri, 9 Jun 2023 11:44:47 -0700 Subject: [PATCH 07/15] fixed(!) --- extensions/godslayerakp/http.js | 65 +++++++++++++-------------------- 1 file changed, 25 insertions(+), 40 deletions(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 8c812c56b7..67b616e8ac 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -15,7 +15,7 @@ } /** - * adds a event name listner + * adds a event name listner for a block * @param {string} name name of the event * @param {string} [block] a block to run when trigered */ @@ -24,28 +24,6 @@ if (!this.blocks[name]) this.blocks[name] = []; this.blocks[name].push(block); } - this.events[name] = false; - } - - /** - * gets if a event has been trigered or not - * does not reset the value unlike check - * @param {string} name name of the event - * @returns {boolean} - */ - peek(name) { - return this.events[name]; - } - - /** - * gets if a event has been trigered or not - * @param {string} name name of the event - * @returns {boolean} - */ - check(name) { - const state = this.events[name]; - this.events[name] = false; - return state; } /** @@ -98,10 +76,12 @@ }, get body() { return this.options.body; - } + }, + end: false, + fail: false, + success: false }; - defaultRequest.events.add('reqEnd'); defaultRequest.events.add('reqSuccess', createBlockId('onResponse')); defaultRequest.events.add('reqFail', createBlockId('onFail')); @@ -162,6 +142,7 @@ blockType: BlockType.REPORTER, text: 'status text' }, + "---", { opcode: 'getHeaderJSON', blockType: BlockType.REPORTER, @@ -178,6 +159,7 @@ }, text: 'get [name] from header' }, + "---", { opcode: 'requestComplete', blockType: BlockType.BOOLEAN, @@ -358,15 +340,15 @@ } requestComplete() { - return this.request.events.peek('reqEnd'); + return this.request.end; } requestFail() { - return this.request.events.peek('reqFail'); + return this.request.fail; } requestSuccess() { - return this.request.events.peek('reqSuccess'); + return this.request.success; } statusText() { @@ -437,28 +419,31 @@ // eslint-disable-next-line require-await async sendRequest(args) { const url = Cast.toString(args.url); - const {request, response} = this; this.clearAll(); - response.url = url; + this.response.url = url; // @ts-ignore - Scratch.fetch(url, request.options) + Scratch.fetch(url, this.request.options) .then(res => { // @ts-ignore - response.status = res.status; - response.headers = res.headers; - response.statusText = res.statusText; - request.events.activate(res.ok ? 'reqSuccess' : 'reqFail'); - request.events.activate('reqEnd'); + this.response.status = res.status; + this.response.headers = res.headers; + this.response.statusText = res.statusText; + if (res.ok) { + this.request.success = true; + } else { + this.request.fail = true; + } + this.request.end = true; return res.text(); }) - .then(body => response.text = body) + .then(body => this.response.text = body) .catch(err => { - response.error = String(err); + this.response.error = String(err); console.warn('request failed with error', err); - request.events.activate('reqFail'); - request.events.activate('reqEnd'); + this.request.fail = true; + this.request.end = true; }); } } From 966e3187e82279dd8547883c078fd44e148409d1 Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Fri, 9 Jun 2023 11:47:21 -0700 Subject: [PATCH 08/15] bruh i fogart the events :skull: --- extensions/godslayerakp/http.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 67b616e8ac..97bc5dd941 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -432,8 +432,10 @@ this.response.statusText = res.statusText; if (res.ok) { this.request.success = true; + this.request.events.activate('reqSuccess'); } else { this.request.fail = true; + this.request.events.activate('reqFail'); } this.request.end = true; return res.text(); @@ -444,6 +446,7 @@ console.warn('request failed with error', err); this.request.fail = true; this.request.end = true; + this.request.events.activate('reqFail'); }); } } From 85462dc1886f886ec319986f4908473656d59699 Mon Sep 17 00:00:00 2001 From: godslayerakp <74981904+RedMan13@users.noreply.github.com> Date: Sat, 10 Jun 2023 21:03:29 -0700 Subject: [PATCH 09/15] Update package-lock.json --- package-lock.json | 1954 +-------------------------------------------- 1 file changed, 2 insertions(+), 1952 deletions(-) diff --git a/package-lock.json b/package-lock.json index c0e189a94a..294db72298 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1957 +1,8 @@ { "name": "@turbowarp/extensions", "version": "0.0.1", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@turbowarp/extensions", - "version": "0.0.1", - "license": "MIT", - "dependencies": { - "@turbowarp/types-tw": "^0.0.6", - "chokidar": "^3.5.3", - "ejs": "^3.1.9", - "express": "^4.18.2" - }, - "devDependencies": { - "eslint": "^8.40.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/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/@eslint/js": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", - "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/config-array/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/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@turbowarp/types-tw": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@turbowarp/types-tw/-/types-tw-0.0.6.tgz", - "integrity": "sha512-mQxaUypyHe2D18bBsnbTYzAgRTXpM7Dz2cH1bvh8eGJbQUAWHtKxpKcO9Sz57fYye+6hzlx1XrcuaTgRlCOwiQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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==", - "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==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "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==" - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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==", - "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==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "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/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==", - "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==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "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/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/eslint": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", - "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.40.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/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/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/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/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.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/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "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/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/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==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.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-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "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==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "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/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "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/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "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/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "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/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "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==", - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/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==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.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": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "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==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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" - } - } - }, "dependencies": { "@eslint-community/eslint-utils": { "version": "4.4.0", @@ -2097,8 +148,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "ajv": { "version": "6.12.6", From 20411f3388a58dc6a2cf5ca6e4c6c211b33ec6f5 Mon Sep 17 00:00:00 2001 From: GarboMuffin Date: Thu, 29 Jun 2023 21:19:30 -0500 Subject: [PATCH 10/15] acceptReporters --- extensions/godslayerakp/http.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 97bc5dd941..17d05ab75c 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -274,7 +274,8 @@ 'DELETE', 'HEAD', 'OPTIONS' - ] + ], + acceptReporters: true }, mimeType: { items: [ @@ -312,7 +313,8 @@ 'number', 'boolean', 'object' - ] + ], + acceptReporters: true } } }; From d421688264ce45db5360e24a1c011cc23b0764f1 Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Fri, 30 Jun 2023 17:41:00 -0700 Subject: [PATCH 11/15] migrated extra into main --- extensions/godslayerakp/http.js | 235 +++++++++++++++++++++++++-- extensions/godslayerakp/httpExtra.js | 222 ------------------------- 2 files changed, 224 insertions(+), 233 deletions(-) delete mode 100644 extensions/godslayerakp/httpExtra.js diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 17d05ab75c..5cadc3f6ff 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -2,6 +2,107 @@ 'use strict'; if (!Scratch.extensions.unsandboxed) throw 'can not load out side unsandboxed mode'; + const pathRegex = /[^.]+/g; + const setType = (value, type) => { + switch (type) { + case 'string': + switch (typeof value) { + case 'string': + case 'boolean': + case 'number': + case 'function': + return String(value); + case 'object': + try { + return JSON.stringify(value); + } catch { + return '{}'; + } + } + break; + case 'number': + switch (typeof value) { + case 'string': + return String(value); + case 'boolean': + return Boolean(value); + case 'number': + return value; + case 'function': + case 'object': + return NaN; + } + break; + case 'boolean': + switch (typeof value) { + case 'string': + case 'boolean': + case 'function': + case 'number': + return Boolean(value); + case 'object': + return false; + } + break; + case 'object': + switch (typeof value) { + case 'string': + try { + const parsed = JSON.parse(value); + if (typeof parsed === 'object') return parsed; + return {}; + } catch { + return {}; + } + case 'boolean': + case 'function': + case 'number': + return {}; + case 'object': + return value; + } + break; + } + }; + const parseType = text => { + // this isnt text and we just pass it down as what ever it is + if (typeof text !== 'string') return text; + if (!isNaN(Number(text))) { + return Number(text); + } else { + try { + const parsed = JSON.parse(text); + if (typeof parsed === 'object') return parsed; + if (typeof parsed === 'boolean') return parsed; + return text; + } catch { + return text; + } + } + }; + const getPathArray = path => { + const names = path.match(pathRegex); + for (let index = 0; index < names.length; index++) { + let name = names[index]; + name = name.replaceAll(/(? { + for (const name of path) { + object = object[name]; + if (typeof object !== 'object') return; + } + return object; + }; + const setValueAtPath = (object, path, value) => { + for (const name of path) { + object = object[name]; + if (typeof object !== 'object') return; + } + return object = value; + }; + const {vm} = Scratch; const {runtime} = vm; @@ -105,6 +206,7 @@ */ constructor() { this.clearAll(); + this.showingExtra = false } getInfo() { return { @@ -262,9 +364,85 @@ } }, text: 'send request to [url]' + }, + { + func: 'showExtra', + blockType: BlockType.BUTTON, + text: 'show extra', + hideFromPalette: this.showingExtra + }, + { + func: 'hideExtra', + blockType: BlockType.BUTTON, + text: 'hide extra', + hideFromPalette: !this.showingExtra + }, + { + opcode: 'setUnkownProperty', + blockType: BlockType.COMMAND, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + }, + value: { + type: ArgumentType.STRING, + defaultValue: 'your mom :trel:' + } + }, + text: 'set [path] to [value] in request options', + hideFromPalette: !this.showingExtra + }, + { + opcode: 'setUnkownPropertyType', + blockType: BlockType.COMMAND, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + }, + type: { + type: ArgumentType.STRING, + menu: 'jsTypes' + } + }, + text: 'set [path] to type [type] in request options', + hideFromPalette: !this.showingExtra + }, + { + opcode: 'getUnkownProperty', + blockType: BlockType.REPORTER, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + } + }, + text: 'get [path] in request options', + hideFromPalette: !this.showingExtra + }, + { + opcode: 'getUnkownPropertyType', + blockType: BlockType.REPORTER, + arguments: { + path: { + type: ArgumentType.STRING, + defaultValue: 'path.to.item' + } + }, + text: 'get type of [path] in request options', + hideFromPalette: !this.showingExtra } ], menus: { + jsTypes: { + items: [ + 'string', + 'number', + 'boolean', + 'object' + ] + }, method: { items: [ 'GET', @@ -306,15 +484,6 @@ "video/webm" ], acceptReporters: true - }, - jsTypes: { - items: [ - 'string', - 'number', - 'boolean', - 'object' - ], - acceptReporters: true } } }; @@ -451,11 +620,55 @@ this.request.events.activate('reqFail'); }); } + + /* extra stuff for when its missing something */ + + showExtra() { + this.showingExtra = true; + vm.extensionManager.refreshBlocks(); + } + + hideExtra() { + this.showingExtra = false; + vm.extensionManager.refreshBlocks(); + } + + setUnkownProperty(args) { + const name = Cast.toString(args.name); + const text = Cast.toString(args.value); + + const path = getPathArray(name); + const value = parseType(text); + setValueAtPath(this.request.options, path, value); + } + + setUnkownPropertyType(args) { + const name = Cast.toString(args.name); + const type = Cast.toString(args.type); + const path = getPathArray(name); + + const oldValue = getValueAtPath(this.request.options, path); + const newValue = setType(oldValue, type); + setValueAtPath(this.request.options, path, newValue); + } + + getUnkownProperty(args) { + const name = Cast.toString(args.name); + const path = getPathArray(name); + + return getValueAtPath(this.request.options, path); + } + + getUnkownPropertyType(args) { + const name = Cast.toString(args.name); + const path = getPathArray(name); + const value = getValueAtPath(this.request.options, path); + + return typeof value; + } } const instance = new WebRequests(); Scratch.extensions.register(instance); - // @ts-ignore - runtime.ext_http = instance; // @ts-ignore })(Scratch); \ No newline at end of file diff --git a/extensions/godslayerakp/httpExtra.js b/extensions/godslayerakp/httpExtra.js deleted file mode 100644 index 291ce3d286..0000000000 --- a/extensions/godslayerakp/httpExtra.js +++ /dev/null @@ -1,222 +0,0 @@ -// this is just kinda existent, its only point is so -// people can set properties that arnt explictly in the http ext - -(function(Scratch) { - 'use strict'; - const pathRegex = /[^.]+/g; - const setType = (value, type) => { - switch (type) { - case 'string': - switch (typeof value) { - case 'string': - case 'boolean': - case 'number': - case 'function': - return String(value); - case 'object': - try { - return JSON.stringify(value); - } catch { - return '{}'; - } - } - break; - case 'number': - switch (typeof value) { - case 'string': - return String(value); - case 'boolean': - return Boolean(value); - case 'number': - return value; - case 'function': - case 'object': - return NaN; - } - break; - case 'boolean': - switch (typeof value) { - case 'string': - case 'boolean': - case 'function': - case 'number': - return Boolean(value); - case 'object': - return false; - } - break; - case 'object': - switch (typeof value) { - case 'string': - try { - const parsed = JSON.parse(value); - if (typeof parsed === 'object') return parsed; - return {}; - } catch { - return {}; - } - case 'boolean': - case 'function': - case 'number': - return {}; - case 'object': - return value; - } - break; - } - }; - const parseType = text => { - // this isnt text and we just pass it down as what ever it is - if (typeof text !== 'string') return text; - if (!isNaN(Number(text))) { - return Number(text); - } else { - try { - const parsed = JSON.parse(text); - if (typeof parsed === 'object') return parsed; - if (typeof parsed === 'boolean') return parsed; - return text; - } catch { - return text; - } - } - }; - const getPathArray = path => { - const names = path.match(pathRegex); - for (let index = 0; index < names.length; index++) { - let name = names[index]; - name = name.replaceAll(/(? { - for (const name of path) { - object = object[name]; - if (typeof object !== 'object') return; - } - return object; - }; - const setValueAtPath = (object, path, value) => { - for (const name of path) { - object = object[name]; - if (typeof object !== 'object') return; - } - return object = value; - }; - - const {BlockType, Cast, ArgumentType} = Scratch; - // @ts-ignore - const http = Scratch.vm.runtime.ext_http; - - class HTTPPatches { - getInfo() { - return { - id: 'gsaHttpPatches', - name: 'http/https extra', - color1: '#307eff', - color2: '#2c5eb0', - blocks: [ - { - opcode: 'setUnkownProperty', - blockType: BlockType.COMMAND, - arguments: { - path: { - type: ArgumentType.STRING, - defaultValue: 'path.to.item' - }, - value: { - type: ArgumentType.STRING, - defaultValue: 'your mom :trel:' - } - }, - text: 'set [path] to [value] in request options' - }, - { - opcode: 'setUnkownPropertyType', - blockType: BlockType.COMMAND, - arguments: { - path: { - type: ArgumentType.STRING, - defaultValue: 'path.to.item' - }, - type: { - type: ArgumentType.STRING, - menu: 'jsTypes' - } - }, - text: 'set [path] to type [type] in request options' - }, - { - opcode: 'getUnkownProperty', - blockType: BlockType.REPORTER, - arguments: { - path: { - type: ArgumentType.STRING, - defaultValue: 'path.to.item' - } - }, - text: 'get [path] in request options' - }, - { - opcode: 'getUnkownPropertyType', - blockType: BlockType.REPORTER, - arguments: { - path: { - type: ArgumentType.STRING, - defaultValue: 'path.to.item' - } - }, - text: 'get type of [path] in request options' - } - ], - menus: { - jsTypes: { - items: [ - 'string', - 'number', - 'boolean', - 'object' - ] - } - } - }; - } - - setUnkownProperty(args) { - const name = Cast.toString(args.name); - const text = Cast.toString(args.value); - - const path = getPathArray(name); - const value = parseType(text); - setValueAtPath(http.request.options, path, value); - } - - setUnkownPropertyType(args) { - const name = Cast.toString(args.name); - const type = Cast.toString(args.type); - const path = getPathArray(name); - - const oldValue = getValueAtPath(http.request.options, path); - const newValue = setType(oldValue, type); - setValueAtPath(http.request.options, path, newValue); - } - - getUnkownProperty(args) { - const name = Cast.toString(args.name); - const path = getPathArray(name); - - return getValueAtPath(http.request.options, path); - } - - getUnkownPropertyType(args) { - const name = Cast.toString(args.name); - const path = getPathArray(name); - const value = getValueAtPath(http.request.options, path); - - return typeof value; - } - } - - const instance = new HTTPPatches(); - Scratch.extensions.register(instance); -})(Scratch); \ No newline at end of file From e02b5b2688cace8389f6412c8c4e352054fc5553 Mon Sep 17 00:00:00 2001 From: RedMan13 Date: Fri, 30 Jun 2023 18:09:39 -0700 Subject: [PATCH 12/15] how did it not tell me --- extensions/godslayerakp/http.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 5cadc3f6ff..8ef815db4f 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -206,7 +206,7 @@ */ constructor() { this.clearAll(); - this.showingExtra = false + this.showingExtra = false; } getInfo() { return { From c7fa3482edcfa5b07c864cc6c9b4e27ed229a804 Mon Sep 17 00:00:00 2001 From: GarboMuffin Date: Sun, 2 Jul 2023 21:01:12 -0500 Subject: [PATCH 13/15] sorry but funny is banned in this repository :( --- extensions/godslayerakp/http.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index 8ef815db4f..f7b774a698 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -387,7 +387,7 @@ }, value: { type: ArgumentType.STRING, - defaultValue: 'your mom :trel:' + defaultValue: 'data' } }, text: 'set [path] to [value] in request options', From 4e52210c8e5fb2fa43d62a5709c4bf2faa7c5784 Mon Sep 17 00:00:00 2001 From: GarboMuffin Date: Sun, 2 Jul 2023 21:02:44 -0500 Subject: [PATCH 14/15] various nitpicks --- extensions/godslayerakp/http.js | 18 ++++++++---------- website/index.ejs | 12 ++++++------ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index f7b774a698..b10221e2a2 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -1,6 +1,6 @@ (function(Scratch) { 'use strict'; - if (!Scratch.extensions.unsandboxed) throw 'can not load out side unsandboxed mode'; + if (!Scratch.extensions.unsandboxed) throw new Error('can not load out side unsandboxed mode'); const pathRegex = /[^.]+/g; const setType = (value, type) => { @@ -211,7 +211,7 @@ getInfo() { return { id: extensionId, - name: 'http/https', + name: 'HTTP', color1: '#307eff', color2: '#2c5eb0', blocks: [ @@ -222,7 +222,7 @@ }, { blockType: Scratch.BlockType.LABEL, - text: "response" + text: 'Response' }, { opcode: 'resData', @@ -292,7 +292,7 @@ }, { blockType: Scratch.BlockType.LABEL, - text: "request" + text: "Request" }, { opcode: 'setMimeType', @@ -360,7 +360,7 @@ arguments: { url: { type: ArgumentType.STRING, - defaultValue: 'https://dummyurl.com' + defaultValue: 'https://extensions.turbowarp.org/hello.txt' } }, text: 'send request to [url]' @@ -368,13 +368,13 @@ { func: 'showExtra', blockType: BlockType.BUTTON, - text: 'show extra', + text: 'Show Extra', hideFromPalette: this.showingExtra }, { func: 'hideExtra', blockType: BlockType.BUTTON, - text: 'hide extra', + text: 'Hide Extra', hideFromPalette: !this.showingExtra }, { @@ -594,7 +594,6 @@ this.clearAll(); this.response.url = url; - // @ts-ignore Scratch.fetch(url, this.request.options) .then(res => { // @ts-ignore @@ -670,5 +669,4 @@ const instance = new WebRequests(); Scratch.extensions.register(instance); -// @ts-ignore -})(Scratch); \ No newline at end of file +})(Scratch); diff --git a/website/index.ejs b/website/index.ejs index 38b30826b8..c4ab20bc72 100644 --- a/website/index.ejs +++ b/website/index.ejs @@ -686,6 +686,12 @@

Use the power of dictionaries in your project. Created by Vercte.

+
+ <%- banner('godslayerakp/http') %> +

http/https

+

Extension HTTP extension. Created by RedMan13.

+
+
<%- banner('Lily/CommentBlocks') %>

Comment Blocks

@@ -721,12 +727,6 @@

McUtils

Helpful utilities for any fast food employee. Created by LilyMakesThings.

- -
- <%- banner('godslayerakp/http') %> -

http/https

-

(mostly) the entirety of http implemented into an ext! made by RedMan13 (godslayerakp).

-
From d076edf471176d406f2bce349c603258e77d36bd Mon Sep 17 00:00:00 2001 From: GarboMuffin Date: Sun, 2 Jul 2023 21:04:32 -0500 Subject: [PATCH 15/15] consistent quoting --- extensions/godslayerakp/http.js | 58 ++++++++++++++++----------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/extensions/godslayerakp/http.js b/extensions/godslayerakp/http.js index b10221e2a2..6d7e6c5b58 100644 --- a/extensions/godslayerakp/http.js +++ b/extensions/godslayerakp/http.js @@ -244,7 +244,7 @@ blockType: BlockType.REPORTER, text: 'status text' }, - "---", + '---', { opcode: 'getHeaderJSON', blockType: BlockType.REPORTER, @@ -261,7 +261,7 @@ }, text: 'get [name] from header' }, - "---", + '---', { opcode: 'requestComplete', blockType: BlockType.BOOLEAN, @@ -277,7 +277,7 @@ blockType: BlockType.BOOLEAN, text: 'request succeeded?' }, - "---", + '---', { opcode: 'onResponse', blockType: BlockType.HAT, @@ -292,7 +292,7 @@ }, { blockType: Scratch.BlockType.LABEL, - text: "Request" + text: 'Request' }, { opcode: 'setMimeType', @@ -457,31 +457,31 @@ }, mimeType: { items: [ - "application/javascript", - "application/ogg", - "application/pdf", - "application/json", - "application/ld+json", - "application/xml", - "application/zip", - "audio/mpeg", - "image/gif", - "image/jpeg", - "image/png", - "image/tiff", - "image/x-icon", - "image/svg+xml", - "text/css", - "text/csv", - "text/html", - "text/plain", - "text/xml", - "video/mpeg", - "video/mp4", - "video/x-ms-wmv", - "video/x-msvideo", - "video/x-flv", - "video/webm" + 'application/javascript', + 'application/ogg', + 'application/pdf', + 'application/json', + 'application/ld+json', + 'application/xml', + 'application/zip', + 'audio/mpeg', + 'image/gif', + 'image/jpeg', + 'image/png', + 'image/tiff', + 'image/x-icon', + 'image/svg+xml', + 'text/css', + 'text/csv', + 'text/html', + 'text/plain', + 'text/xml', + 'video/mpeg', + 'video/mp4', + 'video/x-ms-wmv', + 'video/x-msvideo', + 'video/x-flv', + 'video/webm' ], acceptReporters: true }