├── .github └── workflows │ └── codesee-arch-diagram.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── __s__.d.ts ├── build.js ├── build.sh ├── define-function.js ├── eval.c ├── index.d.ts ├── index.node.js ├── index.wechat.js ├── load-eval-wasm.js ├── package-lock.json ├── package.json ├── quickjs.patch ├── test-ts ├── .gitignore ├── node_modules │ └── define-function ├── test.ts └── tsconfig.json ├── test.browser.js ├── test.node.js └── webpack.config.js /.github/workflows/codesee-arch-diagram.yml: -------------------------------------------------------------------------------- 1 | # This workflow was added by CodeSee. Learn more at https://codesee.io/ 2 | # This is v2.0 of this workflow file 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request_target: 8 | types: [opened, synchronize, reopened] 9 | 10 | name: CodeSee 11 | 12 | permissions: read-all 13 | 14 | jobs: 15 | codesee: 16 | runs-on: ubuntu-latest 17 | continue-on-error: true 18 | name: Analyze the repo with CodeSee 19 | steps: 20 | - uses: Codesee-io/codesee-action@v2 21 | with: 22 | codesee-token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }} 23 | codesee-url: https://app.codesee.io 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | /eval.wasm 3 | /eval.wasm.br 4 | /eval.js 5 | /wechat 6 | /index.browser.js 7 | /node_modules 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "quickjs"] 2 | path = quickjs 3 | url = https://github.com/bellard/quickjs.git 4 | [submodule "emsdk"] 5 | path = emsdk 6 | url = https://github.com/emscripten-core/emsdk.git 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Tao Wen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | [quick.js](https://bellard.org/quickjs/) based sandbox 4 | 5 | ``` 6 | npm install define-function 7 | ``` 8 | 9 | works in any WebAssembly environment 10 | 11 | * node 12 | * browser 13 | * wechat miniprogram 14 | 15 | # Usage 16 | 17 | define a function dynamically with javascript source code 18 | 19 | ```js 20 | const def = require('define-function') 21 | const f = await def(` 22 | return 'hello'; 23 | `) 24 | f() // 'hello' 25 | ``` 26 | 27 | function can have argument 28 | 29 | ```js 30 | const def = require('define-function') 31 | const f = await def(` 32 | const [hello, world] = arguments; 33 | return hello + ' ' + world; 34 | `) 35 | f('hello', 'world') // 'hello world' 36 | ``` 37 | 38 | argument can be function 39 | 40 | ```js 41 | const def = require('define-function') 42 | const f = await def(` 43 | const [print] = arguments; 44 | print('hello') 45 | `) 46 | f((msg) => { 47 | console.log(msg) 48 | }) // 'hello' 49 | ``` 50 | 51 | argument can be async function 52 | 53 | ```js 54 | const def = require('define-function') 55 | const f = await def(` 56 | const [print, sleep] = arguments; 57 | (async() => { 58 | print('hello') 59 | await sleep(1000); 60 | print('world') 61 | })(); 62 | `) 63 | f( 64 | msg => console.log(msg), 65 | milliseconds => new Promise(resolve => setTimeout(resolve, milliseconds)) 66 | ) 67 | // hello 68 | // world 69 | ``` 70 | 71 | can return promise back to host 72 | 73 | ```js 74 | const def = require('define-function') 75 | const f = await def(` 76 | const [print, sleep] = arguments; 77 | return (async() => { 78 | print('hello') 79 | await sleep(1000); 80 | print('world') 81 | })(); 82 | `) 83 | await f( 84 | msg => console.log(msg), 85 | milliseconds => new Promise(resolve => setTimeout(resolve, milliseconds)) 86 | ) 87 | console.log('done') 88 | // hello 89 | // world 90 | // done 91 | ``` 92 | 93 | share context between multiple invocations 94 | 95 | ```js 96 | const { context } = require('define-function') 97 | const ctx = await context() 98 | const f = await ctx.def(` 99 | global.counter = (global.counter || 0)+1; 100 | return counter; // counter can be referenced globally 101 | `) 102 | f() // 1 103 | f() // 2 104 | f() // 3 105 | ctx.dispose() 106 | ``` 107 | 108 | inject value and callbacks into global 109 | 110 | ```js 111 | const { context } = require('define-function') 112 | const ctx = await context({ global: { 113 | console, 114 | anwerOfEverything() { 115 | return 42; 116 | } 117 | } }) // inject console and anwerOfEverything to global 118 | const f = await ctx.def(` 119 | console.log(anwerOfEverything()); 120 | `) 121 | f() // 42 122 | ctx.dispose(); 123 | ``` 124 | 125 | import and export es module 126 | 127 | ```js 128 | const { context } = require('define-function') 129 | const ctx = await context({ 130 | loadModuleContent(moduleName) { 131 | if (moduleName !== 'xxx') { 132 | throw new Error('expect xxx'); 133 | } 134 | return `export function sayHello() { return 'hello' }` 135 | } 136 | }); 137 | const { hello } = await ctx.load(` 138 | import { sayHello } from 'xxx'; 139 | export const hello = sayHello(); 140 | `) 141 | console.log(hello) // hello 142 | ctx.dispose(); 143 | ``` 144 | 145 | # Limit 146 | 147 | * function argument does not support Set/Map/Class or anything that can not survive JSON.parse(JSON.stringify), except the argument is a function 148 | * function return value does not support Set/Map/Class or anything that can not survive JSON.parse(JSON.stringify), except promise object 149 | * JSON.stringify and JSON.parse takes time, so the arguments and return value should be as small as possible for best performance 150 | 151 | # Similar projects 152 | 153 | * https://github.com/justjake/quickjs-emscripten/ 154 | * https://github.com/maple3142/wasm-jseval 155 | 156 | define-function has a simpler API and support async/await 157 | -------------------------------------------------------------------------------- /__s__.d.ts: -------------------------------------------------------------------------------- 1 | type sandboxFunctionToken = { __brand: 'sandboxFunctionToken' } 2 | declare const __s__: { 3 | wrapSandboxFunction(f: Function, extra?: { once?: boolean, expectsHostObject?: boolean }): sandboxFunctionToken; 4 | deleteSandboxFunction(token: sandboxFunctionToken); 5 | getProp(hostObj: any, prop: string | number | symbol): any; 6 | setProp(hostObj: any, prop: string | number | symbol, value: any): void; 7 | callMethod(hostObj: any, method: string, ...args: any[]): any; 8 | deleteHostObject(hostObj: any): void; 9 | }; -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const evalWasm = require('fs').readFileSync('./eval.wasm').toString('base64'); 4 | require('fs').writeFileSync('index.browser.js', ` 5 | function loadWasm(options) { 6 | return require('./load-eval-wasm')({ 7 | async instantiateWasm(info, receiveInstance) { 8 | const evalWasm = atob('${evalWasm}'); 9 | var bytes = new Uint8Array(evalWasm.length); 10 | for (var i = 0; i < evalWasm.length; i++) { 11 | bytes[i] = evalWasm.charCodeAt(i); 12 | } 13 | const { instance, module } = await WebAssembly.instantiate(bytes, info); 14 | receiveInstance(instance, module); 15 | } 16 | }); 17 | } 18 | module.exports = require('./define-function')(loadWasm); 19 | `) -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./emsdk/emsdk_env.sh --build=Release 4 | # emsdk install latest 5 | # emsdk activate latest 6 | pushd quickjs 7 | git reset --hard HEAD 8 | git apply ../quickjs.patch 9 | popd 10 | emcc \ 11 | quickjs/quickjs.c \ 12 | quickjs/cutils.c \ 13 | quickjs/libregexp.c \ 14 | quickjs/libbf.c \ 15 | quickjs/libunicode.c \ 16 | eval.c \ 17 | -o eval.js \ 18 | -Os -s WASM=1 \ 19 | -DCONFIG_VERSION="\"1.0.0\"" \ 20 | -DDUMP_LEAKS="true" \ 21 | -s ASSERTIONS=0 -s ENVIRONMENT='shell' \ 22 | -s WASM_ASYNC_COMPILATION=1 \ 23 | -s MODULARIZE=1 -s EXPORT_ES6=0 \ 24 | -s FILESYSTEM=0 -s SINGLE_FILE=0 \ 25 | -s TOTAL_STACK=2MB -s INITIAL_MEMORY=4MB \ 26 | -s ALLOW_MEMORY_GROWTH=1 -s ALLOW_TABLE_GROWTH=1 \ 27 | -s INCOMING_MODULE_JS_API=[] -s DYNAMIC_EXECUTION=0 \ 28 | -s EXPORTED_FUNCTIONS=["_malloc","_free"] \ 29 | --memory-init-file 0 \ 30 | -s AGGRESSIVE_VARIABLE_ELIMINATION=1 --closure 0 --minify 0 31 | brotli -9 -f eval.wasm 32 | rm -rf wechat 33 | mkdir wechat 34 | cp index.wechat.js wechat/index.js 35 | cp define-function.js wechat/define-function.js 36 | cp load-eval-wasm.js wechat/load-eval-wasm.js 37 | cp eval.wasm.br wechat/eval.wasm.br 38 | ./build.js -------------------------------------------------------------------------------- /define-function.js: -------------------------------------------------------------------------------- 1 | let wasm = undefined; 2 | let nextId = 1; 3 | const contexts = new Map(); 4 | 5 | // import {a, b} from 'xxx' 6 | // import ab from 'xxx' 7 | // import * as ab from 'xxx' 8 | const re1 = /import\s+[\w\s,\*\}\{]*?\s+from\s+['"]([^'"]+)['"]/g; 9 | // import 'xxx' 10 | const re2 = /import\s+['"]([^'"]+)['"]/g; 11 | // export * from 'xxx' 12 | const re3 = /export\s+[\w\s,\*\}\{]*?\s+from\s+['"]([^'"]+)['"]/g; 13 | const res = [re1, re2, re3]; 14 | 15 | function* extractImportFroms(script) { 16 | if (!script) { 17 | return 18 | } 19 | for (const re of res) { 20 | for (const match of script.matchAll(re)) { 21 | yield match[1]; 22 | } 23 | } 24 | } 25 | 26 | class Context { 27 | options = undefined; 28 | ctx = undefined; 29 | moduleContents = {}; 30 | createPromise; 31 | invokeSandboxFunction; 32 | deleteSandboxFunction; 33 | hostFunctions = new Map(); 34 | 35 | constructor(options) { 36 | this.options = options; 37 | this.ctx = wasm._newContext(); 38 | contexts.set(this.ctx, this); 39 | this.loadSync(` 40 | global.__s__ = global.__s__ || { 41 | nextId: 1, 42 | promises: new Map(), 43 | callbacks: new Map(), 44 | callbacksLookup: new Map(), 45 | inspectingObjects: new Map(), 46 | currentStack: '', 47 | hostInspect: undefined, // inject later 48 | createPromise() { 49 | const promiseId = this.nextId++; 50 | const result = { __p__: promiseId }; 51 | this.promises.set(promiseId, new Promise((resolve, reject) => { 52 | result.resolve = this.wrapSandboxFunction(resolve); 53 | result.reject = this.wrapSandboxFunction(reject); 54 | })); 55 | return result; 56 | }, 57 | wrapSandboxFunction(callback, extra) { 58 | let callbackId = this.callbacksLookup.get(callback); 59 | if (callbackId === undefined) { 60 | callbackId = this.nextId++; 61 | this.callbacks.set(callbackId, callback); 62 | this.callbacksLookup.set(callback, callbackId); 63 | } 64 | return { __c__: callbackId, ...extra }; 65 | }, 66 | getAndDeletePromise(promiseId) { 67 | const promise = this.promises.get(promiseId); 68 | this.promises.delete(promiseId); 69 | return promise; 70 | }, 71 | invokeSandboxFunction(callbackToken, args) { 72 | const callbackId = callbackToken.__c__; 73 | if (!callbackId) { 74 | throw new Error('invokeSandboxFunction with invalid token: ' + JSON.stringify(callbackToken)); 75 | } 76 | const callback = this.callbacks.get(callbackId); 77 | if (!callback) { 78 | return undefined; 79 | } 80 | return callback.apply(undefined, args); 81 | }, 82 | deleteSandboxFunction(callbackToken) { 83 | const callbackId = callbackToken.__c__; 84 | if (!callbackId) { 85 | throw new Error('deleteSandboxFunction with invalid token: ' + JSON.stringify(callbackToken)); 86 | } 87 | let callback = this.callbacks.get(callbackId); 88 | if (callback !== undefined) { 89 | this.callbacks.delete(callbackId); 90 | this.callbacksLookup.delete(callback); 91 | } 92 | }, 93 | inspect(msg, obj) { 94 | const objId = this.nextId++; 95 | this.inspectingObjects.set(objId, obj); 96 | this.hostInspect(msg, typeof obj === 'object' ? { __o__: objId, keys: Reflect.ownKeys(obj) } : obj); 97 | }, 98 | getInspectingObjectProp(objId, prop) { 99 | const val = this.inspectingObjects.get(objId)[prop]; 100 | if (val && typeof val === 'object') { 101 | const valObjId = this.nextId++; 102 | this.inspectingObjects.set(valObjId, val); 103 | return { __o__: valObjId, keys: Reflect.ownKeys(val) }; 104 | } 105 | return val; 106 | }, 107 | asHostFunction(hostFunctionToken) { 108 | if(!hostFunctionToken?.__h__) { 109 | throw new Error('invalid host function token: '+ JSON.stringify(hostFunctionToken)); 110 | } 111 | return (...args) => { 112 | return this.invokeHostFunction(hostFunctionToken, args); 113 | }; 114 | }, 115 | invokeHostFunction(hostFunctionToken, args) { 116 | if (!hostFunctionToken.nowrap) { 117 | args = args.map(arg => typeof arg === 'function' ? this.wrapSandboxFunction(arg, { once: true }) : arg); 118 | if (args[0] && typeof args[0] === 'object') { 119 | for (const [k, v] of Object.entries(args[0])) { 120 | if (typeof v === 'function') { 121 | args[0][k] = this.wrapSandboxFunction(v, { once: true }); 122 | } 123 | } 124 | } 125 | } 126 | const invokeResult = __invokeHostFunction(JSON.stringify(hostFunctionToken), JSON.stringify(args)); 127 | if (invokeResult?.__p__) { 128 | return this.getAndDeletePromise(invokeResult.__p__); 129 | } 130 | return invokeResult; 131 | }, 132 | callMethod(hostObj, method, ...args) { 133 | return this.asHostFunction(hostObj)('callMethod', method, ...args); 134 | }, 135 | getProp(hostObj, prop) { 136 | return this.asHostFunction(hostObj)('getProp', prop); 137 | }, 138 | setProp(hostObj, prop, propVal) { 139 | return this.asHostFunction(hostObj)('setProp', prop, propVal); 140 | }, 141 | deleteHostObject(hostObj) { 142 | return this.asHostFunction(hostObj)('delete'); 143 | } 144 | }; 145 | `); 146 | this.createPromise = this.def(`return __s__.createPromise()`); 147 | this.invokeSandboxFunction = this.def(`return __s__.invokeSandboxFunction(...arguments)`); 148 | this.deleteSandboxFunction = this.def(`return __s__.deleteSandboxFunction(...arguments)`); 149 | this.getInspectingObjectProp = this.def(`return __s__.getInspectingObjectProp(...arguments)`); 150 | this.currentStack = this.def(`return __s__.currentStack`); 151 | if (options?.global) { 152 | this.inject('global', options.global); 153 | for (const [k, v] of Object.entries(options.global)) { 154 | if (typeof v === 'object') { 155 | this.inject(k, v); 156 | } 157 | } 158 | } 159 | this.def(`__s__.hostInspect = arguments[0]`)(this.wrapHostFunction(this.hostInspect.bind(this), { nowrap: true })); 160 | } 161 | 162 | dispose() { 163 | if (!this.ctx) { 164 | return; // already disposed 165 | } 166 | for (const pModuleContent of Object.values(this.moduleContents)) { 167 | wasm._free(pModuleContent); 168 | } 169 | wasm._freeContext(this.ctx); 170 | contexts.delete(this.ctx); 171 | this.ctx = undefined; 172 | } 173 | 174 | hostInspect(msg, obj) { 175 | obj = this.wrapProxy(obj); 176 | console.warn('inspecting...', msg, obj); 177 | debugger; 178 | } 179 | 180 | wrapProxy(obj) { 181 | if (!obj) { 182 | return obj; 183 | } 184 | if (!obj.__o__) { 185 | return obj; 186 | } 187 | const proxy = {}; 188 | for (const key of obj.keys) { 189 | Object.defineProperty(proxy, key, { 190 | enumerable: true, 191 | get: () => { 192 | return this.wrapProxy(this.getInspectingObjectProp(obj.__o__, key)); 193 | } 194 | }); 195 | } 196 | return proxy; 197 | } 198 | 199 | asSandboxFunction(callbackToken) { 200 | let calledOnce = false; 201 | return (...args) => { 202 | if (!this.ctx) { 203 | return; 204 | } 205 | if (callbackToken.once) { 206 | if (calledOnce) { 207 | throw new Error(`callback ${JSON.stringify(callbackToken)} can only be callback once, if need to callback multiple times, use __s__.wrapSandboxFunction to manage callback lifetime explicitly`) 208 | } 209 | calledOnce = true; 210 | } 211 | if (callbackToken.expectsHostObject) { 212 | args = args.map(arg => arg && typeof arg === 'object' ? this.wrapHostObject(arg) : arg); 213 | } 214 | try { 215 | return this.invokeSandboxFunction(callbackToken, args); 216 | } finally { 217 | if (callbackToken.once) { 218 | this.deleteSandboxFunction(callbackToken); 219 | } 220 | } 221 | } 222 | } 223 | 224 | inject(target, obj) { 225 | const args = [target]; 226 | for (const [k, v] of Object.entries(obj)) { 227 | if (typeof v === 'function') { 228 | args.push(k); 229 | args.push(this.wrapHostFunction(v)) 230 | } else { 231 | args.push(k); 232 | args.push(v); 233 | } 234 | } 235 | const f = this.def(` 236 | const obj = global[arguments[0]] = global[arguments[0]] || {}; 237 | for (let i = 1; i < arguments.length; i+=2) { 238 | obj[arguments[i]] = arguments[i+1]; 239 | }`); 240 | f(...args); 241 | } 242 | 243 | async dynamicImport({ctx, argc, argv, resolveFunc, rejectFunc, basename, filename }) { 244 | try { 245 | if (this.options?.loadModuleContent) { 246 | await this.require(basename, filename) 247 | } 248 | } catch(e) { 249 | wasm._call(ctx, rejectFunc, allocateUTF8(JSON.stringify(`failed to dynamicImport: ${e}`))); 250 | wasm._freeJsValue(ctx, resolveFunc); 251 | wasm._freeJsValue(ctx, rejectFunc); 252 | wasm._free(argv); 253 | return; 254 | } 255 | wasm._doDynamicImport(ctx, argc, argv); 256 | wasm._freeJsValue(ctx, resolveFunc); 257 | wasm._freeJsValue(ctx, rejectFunc); 258 | wasm._free(argv); 259 | } 260 | 261 | async require(basename, filename) { 262 | if (!this.options?.loadModuleContent) { 263 | throw new Error(`missing options.loadModuleContent can not load content of ${filename} imported by ${basename}`); 264 | } 265 | let moduleName = filename; 266 | if (filename[0] === '.') { 267 | const pBasename = allocateUTF8(basename); 268 | const pFilename = allocateUTF8(filename); 269 | const pModuleName = wasm._pathJoin(this.ctx, pBasename, pFilename); 270 | moduleName = wasm.UTF8ToString(pModuleName); 271 | wasm._free(pModuleName); 272 | } 273 | if (this.moduleContents[moduleName] !== undefined) { 274 | return; 275 | } 276 | this.moduleContents[moduleName] = 0; 277 | const content = await this.options.loadModuleContent(moduleName, { basename, filename }); 278 | this.moduleContents[moduleName] = allocateUTF8(content); 279 | const promises = []; 280 | for (const importFrom of extractImportFroms(content)) { 281 | promises.push(this.require(moduleName, importFrom)); 282 | } 283 | await Promise.all(promises); 284 | } 285 | 286 | loadSync(content, options) { 287 | const filename = options?.filename || ``; 288 | const pScript = allocateUTF8(content); 289 | const pScriptName = allocateUTF8(filename) 290 | const meta = options?.meta || { url: filename }; 291 | const pMeta = allocateUTF8(JSON.stringify(meta)); 292 | const pError = wasm._load(this.ctx, pScript, pScriptName, pMeta); 293 | if (pError) { 294 | const error = new Error(wasm.UTF8ToString(pError)); 295 | wasm._free(pError); 296 | throw error; 297 | } 298 | } 299 | 300 | async load(content, options) { 301 | const filename = options?.filename || ``; 302 | const promises = []; 303 | for (const importFrom of extractImportFroms(content)) { 304 | promises.push(this.require(filename, importFrom)); 305 | } 306 | await Promise.all(promises); 307 | this.loadSync(content, { ...options, filename }); 308 | if (!this._loadModule) { 309 | this._loadModule = await this.def(` 310 | return (async() => { 311 | const [moduleName] = arguments; 312 | const m = await import(moduleName); 313 | const exports = {}; 314 | for(const [k, v] of Object.entries(m)) { 315 | if (typeof v === 'function') { 316 | exports[k] = __s__.wrapSandboxFunction(v); 317 | } else { 318 | exports[k] = v; 319 | } 320 | } 321 | return JSON.stringify(exports); 322 | })(); 323 | `) 324 | } 325 | const loadedModule = JSON.parse(await this._loadModule(filename)); 326 | for (const [k, v] of Object.entries(loadedModule)) { 327 | if (v?.__c__) { 328 | loadedModule[k] = this.asSandboxFunction(v); 329 | } 330 | } 331 | return loadedModule; 332 | } 333 | 334 | def(script, options) { 335 | if (!this.ctx) { 336 | throw new Error('context has been disposed'); 337 | } 338 | return (...args) => { 339 | if (!this.ctx) { 340 | throw new Error('context has been disposed'); 341 | } 342 | const invocation = new Invocation(this, options?.timeout); 343 | const setSuccessToken = invocation.wrapHostFunction(invocation.setSuccess.bind(invocation), { nowrap: true }); 344 | const setFailureToken = invocation.wrapHostFunction(invocation.setFailure.bind(invocation), { nowrap: true }); 345 | const encodedArgs = args.map((arg, index) => typeof arg === 'function' ? invocation.wrapHostFunction(arg, { argIndex: index}) : arg); 346 | this.loadSync(` 347 | (() => { 348 | const setSuccess = __s__.asHostFunction(${JSON.stringify(setSuccessToken)}); 349 | const setFailure = __s__.asHostFunction(${JSON.stringify(setFailureToken)}); 350 | const args = ${JSON.stringify(encodedArgs)}; 351 | function f() { 352 | ${script} 353 | } 354 | try { 355 | const result = f.apply(undefined, args.map(arg => arg?.__h__ ? __s__.asHostFunction(arg) : arg)); 356 | if (result && result.then && result.catch) { 357 | result 358 | .then(v => { setSuccess(v); }) 359 | .catch(e => { setFailure('' + e + '' + e.stack); }) 360 | } else { 361 | setSuccess(result); 362 | } 363 | } catch(e) { 364 | setFailure('' + e + '' + e.stack); 365 | } 366 | })(); 367 | `, options); 368 | (async () => { 369 | try { 370 | await invocation.asyncResult; 371 | } catch (e) { 372 | // ignore 373 | } finally { 374 | invocation.dispose(); 375 | } 376 | })(); 377 | return invocation.syncResult(); 378 | } 379 | } 380 | 381 | wrapHostFunction(f, extra) { 382 | const hfId = nextId++; 383 | this.hostFunctions.set(hfId, f); 384 | return { __h__: hfId, ...extra } 385 | } 386 | 387 | deleteHostFunction(hostFunctionToken) { 388 | const hfId = hostFunctionToken.__h__; 389 | if (!hfId) { 390 | throw new Error('deleteHostFunction with invalid token: ' + JSON.stringify(hostFunctionToken)); 391 | } 392 | this.hostFunctions.delete(hfId); 393 | } 394 | unwrapHostFunctionArg(arg) { 395 | if (arg.__c__) { 396 | return this.asSandboxFunction(arg); 397 | } 398 | if (arg.__h__) { 399 | if (arg.isObject) { 400 | return this.hostFunctions.get(arg.__h__)('this'); 401 | } 402 | return this.hostFunctions.get(arg.__h__); 403 | } 404 | throw new Error('unexpected'); 405 | } 406 | invokeHostFunction(hostFunctionToken, args) { 407 | const hfId = hostFunctionToken.__h__; 408 | if (!hfId) { 409 | throw new Error('callHostFunction with invalid token: ' + JSON.stringify(hostFunctionToken)); 410 | } 411 | if (!hostFunctionToken.nowrap) { 412 | args = args.map(arg => arg?.__c__ || arg?.__h__ ? this.unwrapHostFunctionArg(arg) : arg); 413 | if (args[0] && typeof args[0] === 'object') { 414 | for (const [k, v] of Object.entries(args[0])) { 415 | if (v?.__c__ || v?.__h__) { 416 | args[0][k] = this.unwrapHostFunctionArg(v); 417 | } 418 | } 419 | } 420 | } 421 | const hostFunc = this.hostFunctions.get(hfId); 422 | if (hostFunc === undefined) { 423 | throw new Error('host function not found: ' + JSON.stringify(hostFunctionToken)); 424 | } 425 | const invokeResult = hostFunc(...args); 426 | // promise will be passed-through automatically 427 | if (invokeResult && invokeResult.then && invokeResult.catch) { 428 | const { __p__, resolve, reject } = this.createPromise(); 429 | invokeResult 430 | .then(v => { 431 | if (this.ctx) { 432 | this.invokeSandboxFunction(resolve, [v]); 433 | } 434 | }) 435 | .catch(e => { 436 | if (this.ctx) { 437 | this.invokeSandboxFunction(reject, ['' + e]); 438 | } 439 | }) 440 | .finally(() => { 441 | if (this.ctx) { 442 | this.deleteSandboxFunction(resolve); 443 | this.deleteSandboxFunction(reject); 444 | } 445 | }); 446 | return { __p__ }; 447 | } 448 | // non JSON stringifyable circular object need to be declared explicitly with returnsHostObject: true 449 | if (hostFunctionToken.returnsHostObject) { 450 | return this.wrapHostObject(invokeResult); 451 | } 452 | return invokeResult; 453 | } 454 | 455 | wrapHostObject(val) { 456 | if (!val) { 457 | return val; 458 | } 459 | if (typeof val !== 'object') { 460 | return val; 461 | } 462 | const token = this.wrapHostFunction((action, prop, ...args) => { 463 | switch(action) { 464 | case 'this': 465 | return val; 466 | case 'callMethod': 467 | return this.wrapHostObject(val[prop](...args)); 468 | case 'getProp': 469 | return this.wrapHostObject(val[prop]); 470 | case 'setProp': 471 | val[prop] = args; 472 | return undefined; 473 | case 'delete': 474 | this.deleteHostFunction(token); 475 | return undefined; 476 | } 477 | throw new Error(`unknown action: ${action}`); 478 | }, { isObject: true }) 479 | return token; 480 | } 481 | } 482 | 483 | class Invocation { 484 | 485 | context; 486 | asyncResult; 487 | syncResult; 488 | resolveAsyncResult; 489 | rejectAsyncResult; 490 | hostFunctionTokens = []; 491 | 492 | constructor(context, timeout) { 493 | this.context = context; 494 | this.asyncResult = new Promise((resolve, reject) => { 495 | this.resolveAsyncResult = resolve; 496 | this.rejectAsyncResult = reject; 497 | }); 498 | this.syncResult = () => { 499 | return Promise.race([this.asyncResult, (async () => { 500 | if (timeout) { 501 | await new Promise(resolve => setTimeout(resolve, timeout)); 502 | throw new Error('execute function timeout'); 503 | } else { 504 | const noResult = this.syncResult; 505 | while (this.syncResult === noResult) { 506 | await new Promise(resolve => setTimeout(resolve, 1000)); 507 | } 508 | } 509 | })()]); 510 | }; 511 | } 512 | 513 | dispose() { 514 | for (const hostFunctionToken of this.hostFunctionTokens) { 515 | this.context.deleteHostFunction(hostFunctionToken); 516 | } 517 | } 518 | 519 | wrapHostFunction(f, extra) { 520 | const hostFunctionToken = this.context.wrapHostFunction(f, extra); 521 | this.hostFunctionTokens.push(hostFunctionToken); 522 | return hostFunctionToken; 523 | } 524 | 525 | setSuccess(value) { 526 | this.syncResult = () => value; 527 | this.resolveAsyncResult(value); 528 | return 0; 529 | } 530 | 531 | setFailure(error) { 532 | this.syncResult = () => { throw new Error(error) }; 533 | this.rejectAsyncResult(new Error(error)); 534 | return 0; 535 | } 536 | } 537 | 538 | function allocateUTF8(string) { 539 | if (string === undefined) { 540 | return 0; 541 | } 542 | return wasm.allocateUTF8(string); 543 | } 544 | 545 | module.exports = function (wasmProvider) { 546 | async function loadWasm(options) { 547 | if (!wasm) { 548 | wasm = await wasmProvider(options); 549 | wasm.dynamicImport = (ctx, argc, argv, resolveFunc, rejectFunc, basename, filename) => { 550 | basename = wasm.UTF8ToString(basename); 551 | filename = wasm.UTF8ToString(filename); 552 | const context = contexts.get(ctx); 553 | if (!context) { 554 | wasm._call(ctx, rejectFunc, allocateUTF8(JSON.stringify('internal error: context not found'))); 555 | wasm._freeJsValue(ctx, resolveFunc); 556 | wasm._freeJsValue(ctx, rejectFunc); 557 | wasm._free(argv); 558 | return; 559 | } 560 | context.dynamicImport({ ctx, argc, argv, resolveFunc, rejectFunc, basename, filename }); 561 | } 562 | wasm.getModuleContent = (ctx, filename) => { 563 | filename = wasm.UTF8ToString(filename); 564 | const context = contexts.get(ctx); 565 | if (!context) { 566 | throw new Error(`getModuleContent of ${filename} missing context`) 567 | } 568 | return context.moduleContents[filename]; 569 | } 570 | wasm.invokeHostFunction = (ctx, token, args) => { 571 | token = wasm.UTF8ToString(token); 572 | args = wasm.UTF8ToString(args); 573 | const context = contexts.get(ctx); 574 | if (!context) { 575 | throw new Error(`invokeHostFunction missing context`); 576 | } 577 | try { 578 | const result = JSON.stringify(context.invokeHostFunction(JSON.parse(token), JSON.parse(args))); 579 | // eval.c invokeHostFunction will free this memory 580 | return allocateUTF8(result); 581 | } catch(e) { 582 | return allocateUTF8(JSON.stringify({ __e__: e?.stack || `${e}`})); 583 | } 584 | } 585 | } 586 | return wasm; 587 | } 588 | async function defineFunction(script, options) { 589 | await loadWasm(options); 590 | return (...args) => { // start a isolated context for each invocation 591 | const ctx = new Context(options); 592 | function defAndCall() { 593 | const f = ctx.def(script, options); 594 | let result = undefined; 595 | try { 596 | return result = f(...args); 597 | } finally { 598 | if (result && result.finally) { 599 | result.finally(ctx.dispose.bind(ctx)); 600 | } else { 601 | ctx.dispose(); 602 | } 603 | } 604 | } 605 | return defAndCall(); 606 | }; 607 | }; 608 | defineFunction.context = async (contextOptions) => { // share context between invocations 609 | await loadWasm(contextOptions); 610 | const ctx = new Context(contextOptions); 611 | return { 612 | def(script, options) { 613 | return ctx.def(script, options); 614 | }, 615 | load(script, options) { 616 | return ctx.load(script, options) 617 | }, 618 | get currentStack() { 619 | return ctx.currentStack(); 620 | }, 621 | inject(target, obj) { 622 | ctx.inject(target, obj); 623 | }, 624 | wrapHostFunction(f, extra) { 625 | return ctx.wrapHostFunction(f, extra); 626 | }, 627 | dispose() { 628 | ctx.dispose(); 629 | } 630 | } 631 | }; 632 | defineFunction.default = defineFunction; // support import default 633 | return defineFunction; 634 | } -------------------------------------------------------------------------------- /eval.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "./quickjs/quickjs.h" 5 | #include "./quickjs/cutils.h" 6 | 7 | EM_JS(const char*, _invokeHostFunction, (JSContext *ctx, const char* token, const char* args), { 8 | return Module.invokeHostFunction(ctx, token, args); 9 | }); 10 | 11 | EM_JS(void, _dynamicImport, (JSContext *ctx, int argc, JSValueConst *argv, JSValueConst *resolveFunc, JSValueConst *rejectFunc, const char* basename, const char* filename), { 12 | return Module.dynamicImport(ctx, argc, argv, resolveFunc, rejectFunc, basename, filename); 13 | }); 14 | 15 | EM_JS(const char*, _getModuleContent, (JSContext *ctx, const char* filename), { 16 | return Module.getModuleContent(ctx, filename); 17 | }); 18 | 19 | char *mergeStr(const char *a, const char *b) { 20 | int aLen = strlen(a); 21 | int bLen = strlen(b); 22 | char *ret = malloc(aLen + bLen + 1); 23 | for (int i = 0; i < aLen; i++) { 24 | ret[i] = a[i]; 25 | } 26 | for (int i = 0; i < bLen; i++) { 27 | ret[aLen + i] = b[i]; 28 | } 29 | ret[aLen + bLen] = 0; 30 | return ret; 31 | } 32 | 33 | char *dumpException(JSContext* ctx) { 34 | JSValue realException = JS_GetException(ctx); 35 | const char* errorMessage = JS_ToCString(ctx, realException); 36 | JSValue stack = JS_GetProperty(ctx, realException, JS_NewAtom(ctx, "stack")); 37 | const char* stackStr = JS_ToCString(ctx, stack); 38 | char* merged = mergeStr(errorMessage, stackStr); 39 | // malloc memory need to be freed by caller 40 | return merged; 41 | } 42 | 43 | JSValue invokeHostFunction(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic, JSValue *func_data) { 44 | const char* hostFunctionToken = JS_ToCString(ctx, argv[0]); 45 | JS_FreeCString(ctx, hostFunctionToken); 46 | const char* hostFunctionArgs = JS_ToCString(ctx, argv[1]); 47 | JS_FreeCString(ctx, hostFunctionArgs); 48 | const char* result = _invokeHostFunction(ctx, hostFunctionToken, hostFunctionArgs); 49 | if (result == NULL) { 50 | return JS_UNDEFINED; 51 | } 52 | JSValue value = JS_ParseJSON(ctx, result, strlen(result), ""); 53 | // JS_ParseJSON made a copy, we can safely free memory now 54 | free((void*)result); 55 | JSValue errorMessage = JS_GetPropertyStr(ctx, value, "__e__"); 56 | if (!JS_IsUndefined(errorMessage)) { 57 | JS_FreeValue(ctx, value); 58 | return JS_Throw(ctx, errorMessage); 59 | } 60 | return value; 61 | } 62 | 63 | /* main loop which calls the user JS callbacks */ 64 | void js_std_loop(JSContext *ctx) 65 | { 66 | JSContext *ctx1; 67 | int err; 68 | /* execute the pending jobs */ 69 | for(;;) { 70 | err = JS_ExecutePendingJob(JS_GetRuntime(ctx), &ctx1); 71 | if (err <= 0) { 72 | break; 73 | } 74 | } 75 | } 76 | 77 | JSModuleDef *js_module_loader(JSContext *ctx, 78 | const char *module_name, void *opaque) 79 | { 80 | JSModuleDef *m; 81 | JSValue func_val; 82 | const char* buf = _getModuleContent(ctx, module_name); 83 | func_val = JS_Eval(ctx, (char *)buf, strlen(buf), module_name, 84 | JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); 85 | if (JS_IsException(func_val)) 86 | return NULL; 87 | /* the module is already referenced, so we must free it */ 88 | m = JS_VALUE_GET_PTR(func_val); 89 | JS_FreeValue(ctx, func_val); 90 | return m; 91 | } 92 | 93 | EMSCRIPTEN_KEEPALIVE 94 | JSContext* newContext() { 95 | JSRuntime* runtime = JS_NewRuntime(); 96 | JS_SetModuleLoaderFunc(runtime, NULL, js_module_loader, NULL); 97 | JSContext* ctx = JS_NewContext(runtime); 98 | JSValue global = JS_GetGlobalObject(ctx); 99 | JS_SetPropertyStr(ctx, global, "__invokeHostFunction", 100 | JS_NewCFunctionData(ctx, &invokeHostFunction, /* min argc */0, /* unused magic */0, /* func_data len */0, 0)); 101 | JS_SetPropertyStr(ctx, global, "global", JS_GetGlobalObject(ctx)); 102 | JS_FreeValue(ctx, global); 103 | return ctx; 104 | } 105 | 106 | EMSCRIPTEN_KEEPALIVE 107 | void freeContext(JSContext* ctx) { 108 | JSRuntime* runtime = JS_GetRuntime(ctx); 109 | JS_FreeContext(ctx); 110 | JS_FreeRuntime(runtime); 111 | } 112 | 113 | // override quickjs.c definition to make it async 114 | JSValue js_dynamic_import_job(JSContext *ctx, int argc, JSValueConst *argv); 115 | JSValue async_js_dynamic_import_job(JSContext *ctx, int argc, JSValueConst *argv) { 116 | JSValueConst *newArgv = malloc(sizeof(JSValueConst) * 4); // will free it after callback 117 | newArgv[0] = argv[0]; 118 | newArgv[1] = argv[1]; 119 | newArgv[2] = argv[2]; 120 | newArgv[3] = argv[3]; 121 | JSValueConst* resolveFunc = &newArgv[0]; 122 | JSValueConst* rejectFunc = &newArgv[1]; 123 | // need to prevent resolveFunc/rejectFunc from GC 124 | // will free them after callback 125 | JS_DupValue(ctx, *resolveFunc); 126 | JS_DupValue(ctx, *rejectFunc); 127 | const char* basename = JS_ToCString(ctx, newArgv[2]); 128 | const char* filename = JS_ToCString(ctx, newArgv[3]); 129 | JS_FreeCString(ctx, basename); 130 | JS_FreeCString(ctx, filename); 131 | _dynamicImport(ctx, argc, newArgv, resolveFunc, rejectFunc, basename, filename); 132 | return JS_UNDEFINED; 133 | } 134 | 135 | EMSCRIPTEN_KEEPALIVE 136 | void doDynamicImport(JSContext *ctx, int argc, JSValueConst *argv) { 137 | JS_FreeValue(ctx, js_dynamic_import_job(ctx, argc, argv)); 138 | js_std_loop(ctx); 139 | } 140 | 141 | char *js_default_module_normalize_name(JSContext *ctx, const char *base_name, const char *name); 142 | void js_free(JSContext *ctx, void *ptr); 143 | 144 | EMSCRIPTEN_KEEPALIVE 145 | char *pathJoin(JSContext *ctx, const char *base_name, const char *name) { 146 | char * moduleName = js_default_module_normalize_name(ctx, base_name, name); 147 | char *copiedModuleName = strdup(moduleName); 148 | js_free(ctx, moduleName); 149 | free((void*)base_name); 150 | free((void*)name); 151 | return copiedModuleName; 152 | } 153 | 154 | #define __exception __attribute__((warn_unused_result)) 155 | 156 | __exception int JS_CopyDataProperties(JSContext *ctx, 157 | JSValueConst target, 158 | JSValueConst source, 159 | JSValueConst excluded, 160 | BOOL setprop); 161 | 162 | EMSCRIPTEN_KEEPALIVE 163 | const char* load(JSContext* ctx, char* str, const char* filename, const char* meta) { 164 | JSValue result = JS_Eval(ctx, str, strlen(str), filename, JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); 165 | if (JS_IsException(result)) { 166 | free((void*)str); 167 | free((void*)filename); 168 | free((void*)meta); 169 | return dumpException(ctx); 170 | } 171 | free((void*)str); 172 | free((void*)filename); 173 | JSModuleDef *m = JS_VALUE_GET_PTR(result); 174 | JSValue metaObj = JS_GetImportMeta(ctx, m); 175 | JSValue metaObj2 = JS_ParseJSON(ctx, meta, strlen(meta), ""); 176 | free((void*)meta); 177 | if (JS_CopyDataProperties(ctx, metaObj, metaObj2, JS_UNDEFINED, TRUE)) { 178 | JS_FreeValue(ctx, metaObj); 179 | JS_FreeValue(ctx, metaObj2); 180 | return strdup("failed to copy meta"); 181 | } 182 | result = JS_EvalFunction(ctx, result); 183 | JS_FreeValue(ctx, metaObj); 184 | JS_FreeValue(ctx, metaObj2); 185 | if (JS_IsException(result)) { 186 | return dumpException(ctx); 187 | } 188 | JS_FreeValue(ctx, result); 189 | js_std_loop(ctx); 190 | return 0; 191 | } 192 | 193 | EMSCRIPTEN_KEEPALIVE 194 | const char* call(JSContext* ctx, JSValue* pFunc, const char* args) { 195 | JSValue argsVal = JS_UNDEFINED; 196 | if (args) { 197 | argsVal = JS_ParseJSON(ctx, args, strlen(args), ""); 198 | // JS_ParseJSON made a copy, we can safely free memory now 199 | free((void*)args); 200 | } 201 | JSValue result = JS_Call(ctx, *pFunc, JS_UNDEFINED, 1, &argsVal); 202 | JS_FreeValue(ctx, result); 203 | js_std_loop(ctx); 204 | return 0; 205 | } 206 | 207 | 208 | EMSCRIPTEN_KEEPALIVE 209 | void freeJsValue(JSContext* ctx, JSValue* pVal) { 210 | if (pVal) { 211 | JS_FreeValue(ctx, *pVal); 212 | } 213 | } -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | declare function defineFunction any>(script: string, options?: { 2 | timeout?: number, 3 | disposeManually?: boolean, 4 | }): Promise; 5 | declare interface Context { 6 | def: typeof defineFunction; 7 | load(script: string, options?: { 8 | filename?: string, 9 | meta?: Record 10 | }): Promise; 11 | currentStack: string; 12 | wrapHostFunction(f: Function, options?: { returnsHostObject?: boolean; nowrap?: boolean; }): any; 13 | inject(target: string, obj: Record): void; 14 | dispose(): void; 15 | } 16 | declare namespace defineFunction { 17 | var context: (options?: { 18 | wasmFile?: string, 19 | loadModuleContent?: (moduleName: string, extra?: { basename: string, filename: string }) => Promise, 20 | global?: Record 21 | }) => Context; 22 | } 23 | export default defineFunction; -------------------------------------------------------------------------------- /index.node.js: -------------------------------------------------------------------------------- 1 | function loadWasm(options) { 2 | return require('./load-eval-wasm')({ 3 | async instantiateWasm(info, receiveInstance) { 4 | const buff = require('fs').readFileSync(options?.wasmFile || require('path').join(__dirname, 'eval.wasm')); 5 | const { instance, module } = await WebAssembly.instantiate(buff, info); 6 | receiveInstance(instance, module); 7 | } 8 | }); 9 | } 10 | 11 | module.exports = require('./define-function')(loadWasm); -------------------------------------------------------------------------------- /index.wechat.js: -------------------------------------------------------------------------------- 1 | function loadWasm(options) { 2 | return require('./load-eval-wasm')({ 3 | async instantiateWasm(info, receiveInstance) { 4 | const { instance, module } = await WXWebAssembly.instantiate( 5 | options?.wasmFile || '/miniprogram_npm/define-function/eval.wasm.br', info); 6 | receiveInstance(instance, module); 7 | } 8 | }); 9 | } 10 | 11 | module.exports = require('./define-function')(loadWasm); -------------------------------------------------------------------------------- /load-eval-wasm.js: -------------------------------------------------------------------------------- 1 | 2 | var Module = (() => { 3 | return ( 4 | function(Module) { 5 | Module = Module || {}; 6 | 7 | var Module = typeof Module != "undefined" ? Module : {}; 8 | 9 | var readyPromiseResolve, readyPromiseReject; 10 | 11 | Module["ready"] = new Promise(function(resolve, reject) { 12 | readyPromiseResolve = resolve; 13 | readyPromiseReject = reject; 14 | }); 15 | 16 | var moduleOverrides = Object.assign({}, Module); 17 | 18 | var arguments_ = []; 19 | 20 | Object.assign(Module, moduleOverrides); 21 | 22 | moduleOverrides = null; 23 | 24 | var wasmMemory; 25 | 26 | var ABORT = false; 27 | 28 | var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined; 29 | 30 | function UTF8ArrayToString(heap, idx, maxBytesToRead) { 31 | var endIdx = idx + maxBytesToRead; 32 | var endPtr = idx; 33 | while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; 34 | if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { 35 | return UTF8Decoder.decode(heap.subarray(idx, endPtr)); 36 | } else { 37 | var str = ""; 38 | while (idx < endPtr) { 39 | var u0 = heap[idx++]; 40 | if (!(u0 & 128)) { 41 | str += String.fromCharCode(u0); 42 | continue; 43 | } 44 | var u1 = heap[idx++] & 63; 45 | if ((u0 & 224) == 192) { 46 | str += String.fromCharCode((u0 & 31) << 6 | u1); 47 | continue; 48 | } 49 | var u2 = heap[idx++] & 63; 50 | if ((u0 & 240) == 224) { 51 | u0 = (u0 & 15) << 12 | u1 << 6 | u2; 52 | } else { 53 | u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; 54 | } 55 | if (u0 < 65536) { 56 | str += String.fromCharCode(u0); 57 | } else { 58 | var ch = u0 - 65536; 59 | str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); 60 | } 61 | } 62 | } 63 | return str; 64 | } 65 | 66 | function UTF8ToString(ptr, maxBytesToRead) { 67 | return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; 68 | } 69 | 70 | function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { 71 | if (!(maxBytesToWrite > 0)) return 0; 72 | var startIdx = outIdx; 73 | var endIdx = outIdx + maxBytesToWrite - 1; 74 | for (var i = 0; i < str.length; ++i) { 75 | var u = str.charCodeAt(i); 76 | if (u >= 55296 && u <= 57343) { 77 | var u1 = str.charCodeAt(++i); 78 | u = 65536 + ((u & 1023) << 10) | u1 & 1023; 79 | } 80 | if (u <= 127) { 81 | if (outIdx >= endIdx) break; 82 | heap[outIdx++] = u; 83 | } else if (u <= 2047) { 84 | if (outIdx + 1 >= endIdx) break; 85 | heap[outIdx++] = 192 | u >> 6; 86 | heap[outIdx++] = 128 | u & 63; 87 | } else if (u <= 65535) { 88 | if (outIdx + 2 >= endIdx) break; 89 | heap[outIdx++] = 224 | u >> 12; 90 | heap[outIdx++] = 128 | u >> 6 & 63; 91 | heap[outIdx++] = 128 | u & 63; 92 | } else { 93 | if (outIdx + 3 >= endIdx) break; 94 | heap[outIdx++] = 240 | u >> 18; 95 | heap[outIdx++] = 128 | u >> 12 & 63; 96 | heap[outIdx++] = 128 | u >> 6 & 63; 97 | heap[outIdx++] = 128 | u & 63; 98 | } 99 | } 100 | heap[outIdx] = 0; 101 | return outIdx - startIdx; 102 | } 103 | 104 | function lengthBytesUTF8(str) { 105 | var len = 0; 106 | for (var i = 0; i < str.length; ++i) { 107 | var u = str.charCodeAt(i); 108 | if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; 109 | if (u <= 127) ++len; else if (u <= 2047) len += 2; else if (u <= 65535) len += 3; else len += 4; 110 | } 111 | return len; 112 | } 113 | 114 | function allocateUTF8(str) { 115 | var size = lengthBytesUTF8(str) + 1; 116 | var ret = _malloc(size); 117 | if (ret) stringToUTF8Array(str, HEAP8, ret, size); 118 | return ret; 119 | } 120 | 121 | var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; 122 | 123 | function updateGlobalBufferAndViews(buf) { 124 | buffer = buf; 125 | Module["HEAP8"] = HEAP8 = new Int8Array(buf); 126 | Module["HEAP16"] = HEAP16 = new Int16Array(buf); 127 | Module["HEAP32"] = HEAP32 = new Int32Array(buf); 128 | Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); 129 | Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); 130 | Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); 131 | Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); 132 | Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); 133 | } 134 | 135 | var wasmTable; 136 | 137 | var __ATPRERUN__ = []; 138 | 139 | var __ATINIT__ = []; 140 | 141 | var __ATPOSTRUN__ = []; 142 | 143 | function preRun() { 144 | callRuntimeCallbacks(__ATPRERUN__); 145 | } 146 | 147 | function initRuntime() { 148 | callRuntimeCallbacks(__ATINIT__); 149 | } 150 | 151 | function postRun() { 152 | callRuntimeCallbacks(__ATPOSTRUN__); 153 | } 154 | 155 | function addOnInit(cb) { 156 | __ATINIT__.unshift(cb); 157 | } 158 | 159 | var runDependencies = 0; 160 | 161 | var runDependencyWatcher = null; 162 | 163 | var dependenciesFulfilled = null; 164 | 165 | function addRunDependency(id) { 166 | runDependencies++; 167 | } 168 | 169 | function removeRunDependency(id) { 170 | runDependencies--; 171 | if (runDependencies == 0) { 172 | if (runDependencyWatcher !== null) { 173 | clearInterval(runDependencyWatcher); 174 | runDependencyWatcher = null; 175 | } 176 | if (dependenciesFulfilled) { 177 | var callback = dependenciesFulfilled; 178 | dependenciesFulfilled = null; 179 | callback(); 180 | } 181 | } 182 | } 183 | 184 | Module["preloadedImages"] = {}; 185 | 186 | Module["preloadedAudios"] = {}; 187 | 188 | function abort(what) { 189 | what = "Aborted(" + what + ")"; 190 | ABORT = true; 191 | EXITSTATUS = 1; 192 | what += ". Build with -s ASSERTIONS=1 for more info."; 193 | var e = new Error(what); 194 | readyPromiseReject(e); 195 | throw e; 196 | } 197 | 198 | function createWasm() { 199 | var info = { 200 | "a": asmLibraryArg 201 | }; 202 | function receiveInstance(instance, module) { 203 | var exports = instance.exports; 204 | Module["asm"] = exports; 205 | wasmMemory = Module["asm"]["l"]; 206 | updateGlobalBufferAndViews(wasmMemory.buffer); 207 | wasmTable = Module["asm"]["p"]; 208 | addOnInit(Module["asm"]["m"]); 209 | removeRunDependency("wasm-instantiate"); 210 | } 211 | addRunDependency("wasm-instantiate"); 212 | if (Module["instantiateWasm"]) { 213 | try { 214 | var exports = Module["instantiateWasm"](info, receiveInstance); 215 | return exports; 216 | } catch (e) { 217 | err("Module.instantiateWasm callback failed with error: " + e); 218 | return false; 219 | } 220 | } 221 | throw new Error('missing instantiateWasm'); 222 | } 223 | 224 | function _dynamicImport(ctx, argc, argv, resolveFunc, rejectFunc, basename, filename) { 225 | return Module.dynamicImport(ctx, argc, argv, resolveFunc, rejectFunc, basename, filename); 226 | } 227 | 228 | function _getModuleContent(ctx, module_name) { 229 | return Module.getModuleContent(ctx, module_name); 230 | } 231 | 232 | function _invokeHostFunction(ctx, token, args) { 233 | return Module.invokeHostFunction(ctx, token, args); 234 | } 235 | 236 | function callRuntimeCallbacks(callbacks) { 237 | while (callbacks.length > 0) { 238 | var callback = callbacks.shift(); 239 | if (typeof callback == "function") { 240 | callback(Module); 241 | continue; 242 | } 243 | var func = callback.func; 244 | if (typeof func == "number") { 245 | if (callback.arg === undefined) { 246 | getWasmTableEntry(func)(); 247 | } else { 248 | getWasmTableEntry(func)(callback.arg); 249 | } 250 | } else { 251 | func(callback.arg === undefined ? null : callback.arg); 252 | } 253 | } 254 | } 255 | 256 | var wasmTableMirror = []; 257 | 258 | function getWasmTableEntry(funcPtr) { 259 | var func = wasmTableMirror[funcPtr]; 260 | if (!func) { 261 | if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1; 262 | wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr); 263 | } 264 | return func; 265 | } 266 | 267 | function ___assert_fail(condition, filename, line, func) { 268 | abort("Assertion failed: " + UTF8ToString(condition) + ", at: " + [ filename ? UTF8ToString(filename) : "unknown filename", line, func ? UTF8ToString(func) : "unknown function" ]); 269 | } 270 | 271 | function __localtime_js(time, tmPtr) { 272 | var date = new Date(HEAP32[time >> 2] * 1e3); 273 | HEAP32[tmPtr >> 2] = date.getSeconds(); 274 | HEAP32[tmPtr + 4 >> 2] = date.getMinutes(); 275 | HEAP32[tmPtr + 8 >> 2] = date.getHours(); 276 | HEAP32[tmPtr + 12 >> 2] = date.getDate(); 277 | HEAP32[tmPtr + 16 >> 2] = date.getMonth(); 278 | HEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900; 279 | HEAP32[tmPtr + 24 >> 2] = date.getDay(); 280 | var start = new Date(date.getFullYear(), 0, 1); 281 | var yday = (date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24) | 0; 282 | HEAP32[tmPtr + 28 >> 2] = yday; 283 | HEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60); 284 | var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); 285 | var winterOffset = start.getTimezoneOffset(); 286 | var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0; 287 | HEAP32[tmPtr + 32 >> 2] = dst; 288 | } 289 | 290 | function _tzset_impl(timezone, daylight, tzname) { 291 | var currentYear = new Date().getFullYear(); 292 | var winter = new Date(currentYear, 0, 1); 293 | var summer = new Date(currentYear, 6, 1); 294 | var winterOffset = winter.getTimezoneOffset(); 295 | var summerOffset = summer.getTimezoneOffset(); 296 | var stdTimezoneOffset = Math.max(winterOffset, summerOffset); 297 | HEAP32[timezone >> 2] = stdTimezoneOffset * 60; 298 | HEAP32[daylight >> 2] = Number(winterOffset != summerOffset); 299 | function extractZone(date) { 300 | var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); 301 | return match ? match[1] : "GMT"; 302 | } 303 | var winterName = extractZone(winter); 304 | var summerName = extractZone(summer); 305 | var winterNamePtr = allocateUTF8(winterName); 306 | var summerNamePtr = allocateUTF8(summerName); 307 | if (summerOffset < winterOffset) { 308 | HEAP32[tzname >> 2] = winterNamePtr; 309 | HEAP32[tzname + 4 >> 2] = summerNamePtr; 310 | } else { 311 | HEAP32[tzname >> 2] = summerNamePtr; 312 | HEAP32[tzname + 4 >> 2] = winterNamePtr; 313 | } 314 | } 315 | 316 | function __tzset_js(timezone, daylight, tzname) { 317 | if (__tzset_js.called) return; 318 | __tzset_js.called = true; 319 | _tzset_impl(timezone, daylight, tzname); 320 | } 321 | 322 | function _abort() { 323 | abort(""); 324 | } 325 | 326 | function _emscripten_memcpy_big(dest, src, num) { 327 | HEAPU8.copyWithin(dest, src, src + num); 328 | } 329 | 330 | function _emscripten_get_heap_max() { 331 | return 2147483648; 332 | } 333 | 334 | function emscripten_realloc_buffer(size) { 335 | try { 336 | wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); 337 | updateGlobalBufferAndViews(wasmMemory.buffer); 338 | return 1; 339 | } catch (e) {} 340 | } 341 | 342 | function _emscripten_resize_heap(requestedSize) { 343 | var oldSize = HEAPU8.length; 344 | requestedSize = requestedSize >>> 0; 345 | var maxHeapSize = _emscripten_get_heap_max(); 346 | if (requestedSize > maxHeapSize) { 347 | return false; 348 | } 349 | let alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; 350 | for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { 351 | var overGrownHeapSize = oldSize * (1 + .2 / cutDown); 352 | overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); 353 | var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); 354 | var replacement = emscripten_realloc_buffer(newSize); 355 | if (replacement) { 356 | return true; 357 | } 358 | } 359 | return false; 360 | } 361 | 362 | function _fd_write(fd, iov, iovcnt, pnum) { 363 | var num = 0; 364 | for (var i = 0; i < iovcnt; i++) { 365 | var ptr = HEAP32[iov >> 2]; 366 | var len = HEAP32[iov + 4 >> 2]; 367 | iov += 8; 368 | if (typeof process !== 'undefined') { 369 | process.stdout.write(UTF8ToString(ptr, len)) 370 | } 371 | num += len; 372 | } 373 | HEAP32[pnum >> 2] = num; 374 | } 375 | 376 | function _gettimeofday(ptr) { 377 | var now = Date.now(); 378 | HEAP32[ptr >> 2] = now / 1e3 | 0; 379 | HEAP32[ptr + 4 >> 2] = now % 1e3 * 1e3 | 0; 380 | return 0; 381 | } 382 | 383 | var asmLibraryArg = { 384 | "a": ___assert_fail, 385 | "h": _dynamicImport, 386 | "i": _getModuleContent, 387 | "j": _invokeHostFunction, 388 | "e": __localtime_js, 389 | "f": __tzset_js, 390 | "b": _abort, 391 | "g": _emscripten_memcpy_big, 392 | "k": _emscripten_resize_heap, 393 | "d": _fd_write, 394 | "c": _gettimeofday 395 | }; 396 | 397 | var asm = createWasm(); 398 | 399 | var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { 400 | return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["m"]).apply(null, arguments); 401 | }; 402 | 403 | var _malloc = Module["_malloc"] = function() { 404 | return (_malloc = Module["_malloc"] = Module["asm"]["n"]).apply(null, arguments); 405 | }; 406 | 407 | var _free = Module["_free"] = function() { 408 | return (_free = Module["_free"] = Module["asm"]["o"]).apply(null, arguments); 409 | }; 410 | 411 | var _newContext = Module["_newContext"] = function() { 412 | return (_newContext = Module["_newContext"] = Module["asm"]["q"]).apply(null, arguments); 413 | }; 414 | 415 | var _freeContext = Module["_freeContext"] = function() { 416 | return (_freeContext = Module["_freeContext"] = Module["asm"]["r"]).apply(null, arguments); 417 | }; 418 | 419 | var _doDynamicImport = Module["_doDynamicImport"] = function() { 420 | return (_doDynamicImport = Module["_doDynamicImport"] = Module["asm"]["s"]).apply(null, arguments); 421 | }; 422 | 423 | var _pathJoin = Module["_pathJoin"] = function() { 424 | return (_pathJoin = Module["_pathJoin"] = Module["asm"]["t"]).apply(null, arguments); 425 | }; 426 | 427 | var _load = Module["_load"] = function() { 428 | return (_load = Module["_load"] = Module["asm"]["u"]).apply(null, arguments); 429 | }; 430 | 431 | var _call = Module["_call"] = function() { 432 | return (_call = Module["_call"] = Module["asm"]["v"]).apply(null, arguments); 433 | }; 434 | 435 | var _freeJsValue = Module["_freeJsValue"] = function() { 436 | return (_freeJsValue = Module["_freeJsValue"] = Module["asm"]["w"]).apply(null, arguments); 437 | }; 438 | 439 | Module["UTF8ToString"] = UTF8ToString; 440 | Module["allocateUTF8"] = allocateUTF8; 441 | 442 | var calledRun; 443 | 444 | dependenciesFulfilled = function runCaller() { 445 | if (!calledRun) run(); 446 | if (!calledRun) dependenciesFulfilled = runCaller; 447 | }; 448 | 449 | function run(args) { 450 | args = args || arguments_; 451 | if (runDependencies > 0) { 452 | return; 453 | } 454 | preRun(); 455 | if (runDependencies > 0) { 456 | return; 457 | } 458 | function doRun() { 459 | if (calledRun) return; 460 | calledRun = true; 461 | Module["calledRun"] = true; 462 | if (ABORT) return; 463 | initRuntime(); 464 | readyPromiseResolve(Module); 465 | postRun(); 466 | } 467 | { 468 | doRun(); 469 | } 470 | } 471 | 472 | Module["run"] = run; 473 | 474 | run(); 475 | 476 | 477 | return Module.ready 478 | } 479 | ); 480 | })(); 481 | if (typeof exports === 'object' && typeof module === 'object') 482 | module.exports = Module; 483 | else if (typeof define === 'function' && define['amd']) 484 | define([], function() { return Module; }); 485 | else if (typeof exports === 'object') 486 | exports["Module"] = Module; 487 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "define-function", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@discoveryjs/json-ext": { 8 | "version": "0.5.6", 9 | "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", 10 | "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", 11 | "dev": true 12 | }, 13 | "@nodelib/fs.scandir": { 14 | "version": "2.1.5", 15 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 16 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 17 | "dev": true, 18 | "requires": { 19 | "@nodelib/fs.stat": "2.0.5", 20 | "run-parallel": "^1.1.9" 21 | } 22 | }, 23 | "@nodelib/fs.stat": { 24 | "version": "2.0.5", 25 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 26 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 27 | "dev": true 28 | }, 29 | "@nodelib/fs.walk": { 30 | "version": "1.2.8", 31 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 32 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 33 | "dev": true, 34 | "requires": { 35 | "@nodelib/fs.scandir": "2.1.5", 36 | "fastq": "^1.6.0" 37 | } 38 | }, 39 | "@types/body-parser": { 40 | "version": "1.19.2", 41 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", 42 | "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", 43 | "dev": true, 44 | "requires": { 45 | "@types/connect": "*", 46 | "@types/node": "*" 47 | } 48 | }, 49 | "@types/bonjour": { 50 | "version": "3.5.10", 51 | "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", 52 | "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", 53 | "dev": true, 54 | "requires": { 55 | "@types/node": "*" 56 | } 57 | }, 58 | "@types/connect": { 59 | "version": "3.4.35", 60 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", 61 | "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", 62 | "dev": true, 63 | "requires": { 64 | "@types/node": "*" 65 | } 66 | }, 67 | "@types/connect-history-api-fallback": { 68 | "version": "1.3.5", 69 | "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", 70 | "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", 71 | "dev": true, 72 | "requires": { 73 | "@types/express-serve-static-core": "*", 74 | "@types/node": "*" 75 | } 76 | }, 77 | "@types/eslint": { 78 | "version": "8.4.1", 79 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", 80 | "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", 81 | "dev": true, 82 | "requires": { 83 | "@types/estree": "*", 84 | "@types/json-schema": "*" 85 | } 86 | }, 87 | "@types/eslint-scope": { 88 | "version": "3.7.3", 89 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", 90 | "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", 91 | "dev": true, 92 | "requires": { 93 | "@types/eslint": "*", 94 | "@types/estree": "*" 95 | } 96 | }, 97 | "@types/estree": { 98 | "version": "0.0.51", 99 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", 100 | "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", 101 | "dev": true 102 | }, 103 | "@types/express": { 104 | "version": "4.17.13", 105 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", 106 | "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", 107 | "dev": true, 108 | "requires": { 109 | "@types/body-parser": "*", 110 | "@types/express-serve-static-core": "^4.17.18", 111 | "@types/qs": "*", 112 | "@types/serve-static": "*" 113 | } 114 | }, 115 | "@types/express-serve-static-core": { 116 | "version": "4.17.28", 117 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", 118 | "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", 119 | "dev": true, 120 | "requires": { 121 | "@types/node": "*", 122 | "@types/qs": "*", 123 | "@types/range-parser": "*" 124 | } 125 | }, 126 | "@types/html-minifier-terser": { 127 | "version": "6.1.0", 128 | "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", 129 | "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", 130 | "dev": true 131 | }, 132 | "@types/http-proxy": { 133 | "version": "1.17.8", 134 | "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", 135 | "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", 136 | "dev": true, 137 | "requires": { 138 | "@types/node": "*" 139 | } 140 | }, 141 | "@types/json-schema": { 142 | "version": "7.0.9", 143 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", 144 | "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", 145 | "dev": true 146 | }, 147 | "@types/mime": { 148 | "version": "1.3.2", 149 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", 150 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", 151 | "dev": true 152 | }, 153 | "@types/node": { 154 | "version": "17.0.21", 155 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", 156 | "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", 157 | "dev": true 158 | }, 159 | "@types/qs": { 160 | "version": "6.9.7", 161 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", 162 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", 163 | "dev": true 164 | }, 165 | "@types/range-parser": { 166 | "version": "1.2.4", 167 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 168 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 169 | "dev": true 170 | }, 171 | "@types/retry": { 172 | "version": "0.12.1", 173 | "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", 174 | "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", 175 | "dev": true 176 | }, 177 | "@types/serve-index": { 178 | "version": "1.9.1", 179 | "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", 180 | "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", 181 | "dev": true, 182 | "requires": { 183 | "@types/express": "*" 184 | } 185 | }, 186 | "@types/serve-static": { 187 | "version": "1.13.10", 188 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", 189 | "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", 190 | "dev": true, 191 | "requires": { 192 | "@types/mime": "^1", 193 | "@types/node": "*" 194 | } 195 | }, 196 | "@types/sockjs": { 197 | "version": "0.3.33", 198 | "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", 199 | "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", 200 | "dev": true, 201 | "requires": { 202 | "@types/node": "*" 203 | } 204 | }, 205 | "@types/ws": { 206 | "version": "8.5.2", 207 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.2.tgz", 208 | "integrity": "sha512-VXI82ykONr5tacHEojnErTQk+KQSoYbW1NB6iz6wUwrNd+BqfkfggQNoNdCqhJSzbNumShPERbM+Pc5zpfhlbw==", 209 | "dev": true, 210 | "requires": { 211 | "@types/node": "*" 212 | } 213 | }, 214 | "@webassemblyjs/ast": { 215 | "version": "1.11.1", 216 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", 217 | "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", 218 | "dev": true, 219 | "requires": { 220 | "@webassemblyjs/helper-numbers": "1.11.1", 221 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1" 222 | } 223 | }, 224 | "@webassemblyjs/floating-point-hex-parser": { 225 | "version": "1.11.1", 226 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", 227 | "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", 228 | "dev": true 229 | }, 230 | "@webassemblyjs/helper-api-error": { 231 | "version": "1.11.1", 232 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", 233 | "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", 234 | "dev": true 235 | }, 236 | "@webassemblyjs/helper-buffer": { 237 | "version": "1.11.1", 238 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", 239 | "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", 240 | "dev": true 241 | }, 242 | "@webassemblyjs/helper-numbers": { 243 | "version": "1.11.1", 244 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", 245 | "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", 246 | "dev": true, 247 | "requires": { 248 | "@webassemblyjs/floating-point-hex-parser": "1.11.1", 249 | "@webassemblyjs/helper-api-error": "1.11.1", 250 | "@xtuc/long": "4.2.2" 251 | } 252 | }, 253 | "@webassemblyjs/helper-wasm-bytecode": { 254 | "version": "1.11.1", 255 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", 256 | "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", 257 | "dev": true 258 | }, 259 | "@webassemblyjs/helper-wasm-section": { 260 | "version": "1.11.1", 261 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", 262 | "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", 263 | "dev": true, 264 | "requires": { 265 | "@webassemblyjs/ast": "1.11.1", 266 | "@webassemblyjs/helper-buffer": "1.11.1", 267 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1", 268 | "@webassemblyjs/wasm-gen": "1.11.1" 269 | } 270 | }, 271 | "@webassemblyjs/ieee754": { 272 | "version": "1.11.1", 273 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", 274 | "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", 275 | "dev": true, 276 | "requires": { 277 | "@xtuc/ieee754": "^1.2.0" 278 | } 279 | }, 280 | "@webassemblyjs/leb128": { 281 | "version": "1.11.1", 282 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", 283 | "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", 284 | "dev": true, 285 | "requires": { 286 | "@xtuc/long": "4.2.2" 287 | } 288 | }, 289 | "@webassemblyjs/utf8": { 290 | "version": "1.11.1", 291 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", 292 | "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", 293 | "dev": true 294 | }, 295 | "@webassemblyjs/wasm-edit": { 296 | "version": "1.11.1", 297 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", 298 | "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", 299 | "dev": true, 300 | "requires": { 301 | "@webassemblyjs/ast": "1.11.1", 302 | "@webassemblyjs/helper-buffer": "1.11.1", 303 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1", 304 | "@webassemblyjs/helper-wasm-section": "1.11.1", 305 | "@webassemblyjs/wasm-gen": "1.11.1", 306 | "@webassemblyjs/wasm-opt": "1.11.1", 307 | "@webassemblyjs/wasm-parser": "1.11.1", 308 | "@webassemblyjs/wast-printer": "1.11.1" 309 | } 310 | }, 311 | "@webassemblyjs/wasm-gen": { 312 | "version": "1.11.1", 313 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", 314 | "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", 315 | "dev": true, 316 | "requires": { 317 | "@webassemblyjs/ast": "1.11.1", 318 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1", 319 | "@webassemblyjs/ieee754": "1.11.1", 320 | "@webassemblyjs/leb128": "1.11.1", 321 | "@webassemblyjs/utf8": "1.11.1" 322 | } 323 | }, 324 | "@webassemblyjs/wasm-opt": { 325 | "version": "1.11.1", 326 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", 327 | "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", 328 | "dev": true, 329 | "requires": { 330 | "@webassemblyjs/ast": "1.11.1", 331 | "@webassemblyjs/helper-buffer": "1.11.1", 332 | "@webassemblyjs/wasm-gen": "1.11.1", 333 | "@webassemblyjs/wasm-parser": "1.11.1" 334 | } 335 | }, 336 | "@webassemblyjs/wasm-parser": { 337 | "version": "1.11.1", 338 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", 339 | "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", 340 | "dev": true, 341 | "requires": { 342 | "@webassemblyjs/ast": "1.11.1", 343 | "@webassemblyjs/helper-api-error": "1.11.1", 344 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1", 345 | "@webassemblyjs/ieee754": "1.11.1", 346 | "@webassemblyjs/leb128": "1.11.1", 347 | "@webassemblyjs/utf8": "1.11.1" 348 | } 349 | }, 350 | "@webassemblyjs/wast-printer": { 351 | "version": "1.11.1", 352 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", 353 | "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", 354 | "dev": true, 355 | "requires": { 356 | "@webassemblyjs/ast": "1.11.1", 357 | "@xtuc/long": "4.2.2" 358 | } 359 | }, 360 | "@webpack-cli/configtest": { 361 | "version": "1.1.1", 362 | "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", 363 | "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", 364 | "dev": true 365 | }, 366 | "@webpack-cli/info": { 367 | "version": "1.4.1", 368 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", 369 | "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", 370 | "dev": true, 371 | "requires": { 372 | "envinfo": "^7.7.3" 373 | } 374 | }, 375 | "@webpack-cli/serve": { 376 | "version": "1.6.1", 377 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", 378 | "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", 379 | "dev": true 380 | }, 381 | "@xtuc/ieee754": { 382 | "version": "1.2.0", 383 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 384 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 385 | "dev": true 386 | }, 387 | "@xtuc/long": { 388 | "version": "4.2.2", 389 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 390 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 391 | "dev": true 392 | }, 393 | "accepts": { 394 | "version": "1.3.8", 395 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 396 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 397 | "dev": true, 398 | "requires": { 399 | "mime-types": "~2.1.34", 400 | "negotiator": "0.6.3" 401 | } 402 | }, 403 | "acorn": { 404 | "version": "8.7.0", 405 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 406 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 407 | "dev": true 408 | }, 409 | "acorn-import-assertions": { 410 | "version": "1.8.0", 411 | "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", 412 | "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", 413 | "dev": true 414 | }, 415 | "aggregate-error": { 416 | "version": "3.1.0", 417 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 418 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 419 | "dev": true, 420 | "requires": { 421 | "clean-stack": "^2.0.0", 422 | "indent-string": "^4.0.0" 423 | } 424 | }, 425 | "ajv": { 426 | "version": "6.12.6", 427 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 428 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 429 | "dev": true, 430 | "requires": { 431 | "fast-deep-equal": "^3.1.1", 432 | "fast-json-stable-stringify": "^2.0.0", 433 | "json-schema-traverse": "^0.4.1", 434 | "uri-js": "^4.2.2" 435 | } 436 | }, 437 | "ajv-formats": { 438 | "version": "2.1.1", 439 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", 440 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", 441 | "dev": true, 442 | "requires": { 443 | "ajv": "^8.0.0" 444 | }, 445 | "dependencies": { 446 | "ajv": { 447 | "version": "8.10.0", 448 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", 449 | "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", 450 | "dev": true, 451 | "requires": { 452 | "fast-deep-equal": "^3.1.1", 453 | "json-schema-traverse": "^1.0.0", 454 | "require-from-string": "^2.0.2", 455 | "uri-js": "^4.2.2" 456 | } 457 | }, 458 | "json-schema-traverse": { 459 | "version": "1.0.0", 460 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 461 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 462 | "dev": true 463 | } 464 | } 465 | }, 466 | "ajv-keywords": { 467 | "version": "3.5.2", 468 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 469 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 470 | "dev": true 471 | }, 472 | "ansi-html-community": { 473 | "version": "0.0.8", 474 | "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", 475 | "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", 476 | "dev": true 477 | }, 478 | "ansi-regex": { 479 | "version": "6.0.1", 480 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 481 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 482 | "dev": true 483 | }, 484 | "anymatch": { 485 | "version": "3.1.2", 486 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 487 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 488 | "dev": true, 489 | "requires": { 490 | "normalize-path": "^3.0.0", 491 | "picomatch": "^2.0.4" 492 | } 493 | }, 494 | "array-flatten": { 495 | "version": "2.1.2", 496 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", 497 | "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", 498 | "dev": true 499 | }, 500 | "array-union": { 501 | "version": "2.1.0", 502 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 503 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 504 | "dev": true 505 | }, 506 | "async": { 507 | "version": "2.6.3", 508 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", 509 | "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", 510 | "dev": true, 511 | "requires": { 512 | "lodash": "^4.17.14" 513 | } 514 | }, 515 | "balanced-match": { 516 | "version": "1.0.2", 517 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 518 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 519 | "dev": true 520 | }, 521 | "batch": { 522 | "version": "0.6.1", 523 | "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", 524 | "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", 525 | "dev": true 526 | }, 527 | "binary-extensions": { 528 | "version": "2.2.0", 529 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 530 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 531 | "dev": true 532 | }, 533 | "body-parser": { 534 | "version": "1.19.2", 535 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", 536 | "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", 537 | "dev": true, 538 | "requires": { 539 | "bytes": "3.1.2", 540 | "content-type": "~1.0.4", 541 | "debug": "2.6.9", 542 | "depd": "~1.1.2", 543 | "http-errors": "1.8.1", 544 | "iconv-lite": "0.4.24", 545 | "on-finished": "~2.3.0", 546 | "qs": "6.9.7", 547 | "raw-body": "2.4.3", 548 | "type-is": "~1.6.18" 549 | }, 550 | "dependencies": { 551 | "bytes": { 552 | "version": "3.1.2", 553 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 554 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 555 | "dev": true 556 | } 557 | } 558 | }, 559 | "bonjour": { 560 | "version": "3.5.0", 561 | "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", 562 | "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", 563 | "dev": true, 564 | "requires": { 565 | "array-flatten": "^2.1.0", 566 | "deep-equal": "^1.0.1", 567 | "dns-equal": "^1.0.0", 568 | "dns-txt": "^2.0.2", 569 | "multicast-dns": "^6.0.1", 570 | "multicast-dns-service-types": "^1.1.0" 571 | } 572 | }, 573 | "boolbase": { 574 | "version": "1.0.0", 575 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 576 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", 577 | "dev": true 578 | }, 579 | "brace-expansion": { 580 | "version": "1.1.11", 581 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 582 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 583 | "dev": true, 584 | "requires": { 585 | "balanced-match": "^1.0.0", 586 | "concat-map": "0.0.1" 587 | } 588 | }, 589 | "braces": { 590 | "version": "3.0.2", 591 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 592 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 593 | "dev": true, 594 | "requires": { 595 | "fill-range": "^7.0.1" 596 | } 597 | }, 598 | "browserslist": { 599 | "version": "4.19.3", 600 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", 601 | "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", 602 | "dev": true, 603 | "requires": { 604 | "caniuse-lite": "^1.0.30001312", 605 | "electron-to-chromium": "^1.4.71", 606 | "escalade": "^3.1.1", 607 | "node-releases": "^2.0.2", 608 | "picocolors": "^1.0.0" 609 | } 610 | }, 611 | "buffer-from": { 612 | "version": "1.1.2", 613 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 614 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 615 | "dev": true 616 | }, 617 | "buffer-indexof": { 618 | "version": "1.1.1", 619 | "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", 620 | "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", 621 | "dev": true 622 | }, 623 | "bytes": { 624 | "version": "3.0.0", 625 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 626 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", 627 | "dev": true 628 | }, 629 | "call-bind": { 630 | "version": "1.0.2", 631 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 632 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 633 | "dev": true, 634 | "requires": { 635 | "function-bind": "^1.1.1", 636 | "get-intrinsic": "^1.0.2" 637 | } 638 | }, 639 | "camel-case": { 640 | "version": "4.1.2", 641 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", 642 | "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", 643 | "dev": true, 644 | "requires": { 645 | "pascal-case": "^3.1.2", 646 | "tslib": "^2.0.3" 647 | } 648 | }, 649 | "caniuse-lite": { 650 | "version": "1.0.30001313", 651 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz", 652 | "integrity": "sha512-rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q==", 653 | "dev": true 654 | }, 655 | "chokidar": { 656 | "version": "3.5.3", 657 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 658 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 659 | "dev": true, 660 | "requires": { 661 | "anymatch": "~3.1.2", 662 | "braces": "~3.0.2", 663 | "fsevents": "~2.3.2", 664 | "glob-parent": "~5.1.2", 665 | "is-binary-path": "~2.1.0", 666 | "is-glob": "~4.0.1", 667 | "normalize-path": "~3.0.0", 668 | "readdirp": "~3.6.0" 669 | } 670 | }, 671 | "chrome-trace-event": { 672 | "version": "1.0.3", 673 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", 674 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", 675 | "dev": true 676 | }, 677 | "clean-css": { 678 | "version": "5.2.4", 679 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", 680 | "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", 681 | "dev": true, 682 | "requires": { 683 | "source-map": "~0.6.0" 684 | } 685 | }, 686 | "clean-stack": { 687 | "version": "2.2.0", 688 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 689 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 690 | "dev": true 691 | }, 692 | "clone-deep": { 693 | "version": "4.0.1", 694 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", 695 | "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", 696 | "dev": true, 697 | "requires": { 698 | "is-plain-object": "^2.0.4", 699 | "kind-of": "^6.0.2", 700 | "shallow-clone": "^3.0.0" 701 | } 702 | }, 703 | "colorette": { 704 | "version": "2.0.16", 705 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", 706 | "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", 707 | "dev": true 708 | }, 709 | "commander": { 710 | "version": "2.20.3", 711 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 712 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 713 | "dev": true 714 | }, 715 | "compressible": { 716 | "version": "2.0.18", 717 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 718 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 719 | "dev": true, 720 | "requires": { 721 | "mime-db": ">= 1.43.0 < 2" 722 | } 723 | }, 724 | "compression": { 725 | "version": "1.7.4", 726 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", 727 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", 728 | "dev": true, 729 | "requires": { 730 | "accepts": "~1.3.5", 731 | "bytes": "3.0.0", 732 | "compressible": "~2.0.16", 733 | "debug": "2.6.9", 734 | "on-headers": "~1.0.2", 735 | "safe-buffer": "5.1.2", 736 | "vary": "~1.1.2" 737 | }, 738 | "dependencies": { 739 | "safe-buffer": { 740 | "version": "5.1.2", 741 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 742 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 743 | "dev": true 744 | } 745 | } 746 | }, 747 | "concat-map": { 748 | "version": "0.0.1", 749 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 750 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 751 | "dev": true 752 | }, 753 | "connect-history-api-fallback": { 754 | "version": "1.6.0", 755 | "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", 756 | "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", 757 | "dev": true 758 | }, 759 | "content-disposition": { 760 | "version": "0.5.4", 761 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 762 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 763 | "dev": true, 764 | "requires": { 765 | "safe-buffer": "5.2.1" 766 | } 767 | }, 768 | "content-type": { 769 | "version": "1.0.4", 770 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 771 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 772 | "dev": true 773 | }, 774 | "cookie": { 775 | "version": "0.4.2", 776 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 777 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", 778 | "dev": true 779 | }, 780 | "cookie-signature": { 781 | "version": "1.0.6", 782 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 783 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", 784 | "dev": true 785 | }, 786 | "core-util-is": { 787 | "version": "1.0.3", 788 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 789 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 790 | "dev": true 791 | }, 792 | "cross-spawn": { 793 | "version": "7.0.3", 794 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 795 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 796 | "dev": true, 797 | "requires": { 798 | "path-key": "^3.1.0", 799 | "shebang-command": "^2.0.0", 800 | "which": "^2.0.1" 801 | } 802 | }, 803 | "css-select": { 804 | "version": "4.2.1", 805 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", 806 | "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", 807 | "dev": true, 808 | "requires": { 809 | "boolbase": "^1.0.0", 810 | "css-what": "^5.1.0", 811 | "domhandler": "^4.3.0", 812 | "domutils": "^2.8.0", 813 | "nth-check": "^2.0.1" 814 | } 815 | }, 816 | "css-what": { 817 | "version": "5.1.0", 818 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", 819 | "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", 820 | "dev": true 821 | }, 822 | "debug": { 823 | "version": "2.6.9", 824 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 825 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 826 | "dev": true, 827 | "requires": { 828 | "ms": "2.0.0" 829 | } 830 | }, 831 | "deep-equal": { 832 | "version": "1.1.1", 833 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", 834 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", 835 | "dev": true, 836 | "requires": { 837 | "is-arguments": "^1.0.4", 838 | "is-date-object": "^1.0.1", 839 | "is-regex": "^1.0.4", 840 | "object-is": "^1.0.1", 841 | "object-keys": "^1.1.1", 842 | "regexp.prototype.flags": "^1.2.0" 843 | } 844 | }, 845 | "default-gateway": { 846 | "version": "6.0.3", 847 | "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", 848 | "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", 849 | "dev": true, 850 | "requires": { 851 | "execa": "^5.0.0" 852 | } 853 | }, 854 | "define-lazy-prop": { 855 | "version": "2.0.0", 856 | "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", 857 | "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", 858 | "dev": true 859 | }, 860 | "define-properties": { 861 | "version": "1.1.3", 862 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 863 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 864 | "dev": true, 865 | "requires": { 866 | "object-keys": "^1.0.12" 867 | } 868 | }, 869 | "del": { 870 | "version": "6.0.0", 871 | "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", 872 | "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", 873 | "dev": true, 874 | "requires": { 875 | "globby": "^11.0.1", 876 | "graceful-fs": "^4.2.4", 877 | "is-glob": "^4.0.1", 878 | "is-path-cwd": "^2.2.0", 879 | "is-path-inside": "^3.0.2", 880 | "p-map": "^4.0.0", 881 | "rimraf": "^3.0.2", 882 | "slash": "^3.0.0" 883 | } 884 | }, 885 | "depd": { 886 | "version": "1.1.2", 887 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 888 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 889 | "dev": true 890 | }, 891 | "destroy": { 892 | "version": "1.0.4", 893 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 894 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", 895 | "dev": true 896 | }, 897 | "detect-node": { 898 | "version": "2.1.0", 899 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 900 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 901 | "dev": true 902 | }, 903 | "dir-glob": { 904 | "version": "3.0.1", 905 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 906 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 907 | "dev": true, 908 | "requires": { 909 | "path-type": "^4.0.0" 910 | } 911 | }, 912 | "dns-equal": { 913 | "version": "1.0.0", 914 | "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", 915 | "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", 916 | "dev": true 917 | }, 918 | "dns-packet": { 919 | "version": "1.3.4", 920 | "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", 921 | "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", 922 | "dev": true, 923 | "requires": { 924 | "ip": "^1.1.0", 925 | "safe-buffer": "^5.0.1" 926 | } 927 | }, 928 | "dns-txt": { 929 | "version": "2.0.2", 930 | "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", 931 | "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", 932 | "dev": true, 933 | "requires": { 934 | "buffer-indexof": "^1.0.0" 935 | } 936 | }, 937 | "dom-converter": { 938 | "version": "0.2.0", 939 | "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", 940 | "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", 941 | "dev": true, 942 | "requires": { 943 | "utila": "~0.4" 944 | } 945 | }, 946 | "dom-serializer": { 947 | "version": "1.3.2", 948 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", 949 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", 950 | "dev": true, 951 | "requires": { 952 | "domelementtype": "^2.0.1", 953 | "domhandler": "^4.2.0", 954 | "entities": "^2.0.0" 955 | } 956 | }, 957 | "domelementtype": { 958 | "version": "2.2.0", 959 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 960 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", 961 | "dev": true 962 | }, 963 | "domhandler": { 964 | "version": "4.3.0", 965 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", 966 | "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", 967 | "dev": true, 968 | "requires": { 969 | "domelementtype": "^2.2.0" 970 | } 971 | }, 972 | "domutils": { 973 | "version": "2.8.0", 974 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 975 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 976 | "dev": true, 977 | "requires": { 978 | "dom-serializer": "^1.0.1", 979 | "domelementtype": "^2.2.0", 980 | "domhandler": "^4.2.0" 981 | } 982 | }, 983 | "dot-case": { 984 | "version": "3.0.4", 985 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", 986 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", 987 | "dev": true, 988 | "requires": { 989 | "no-case": "^3.0.4", 990 | "tslib": "^2.0.3" 991 | } 992 | }, 993 | "ee-first": { 994 | "version": "1.1.1", 995 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 996 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 997 | "dev": true 998 | }, 999 | "electron-to-chromium": { 1000 | "version": "1.4.75", 1001 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", 1002 | "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", 1003 | "dev": true 1004 | }, 1005 | "encodeurl": { 1006 | "version": "1.0.2", 1007 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1008 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 1009 | "dev": true 1010 | }, 1011 | "enhanced-resolve": { 1012 | "version": "5.9.2", 1013 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", 1014 | "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", 1015 | "dev": true, 1016 | "requires": { 1017 | "graceful-fs": "^4.2.4", 1018 | "tapable": "^2.2.0" 1019 | } 1020 | }, 1021 | "entities": { 1022 | "version": "2.2.0", 1023 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 1024 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 1025 | "dev": true 1026 | }, 1027 | "envinfo": { 1028 | "version": "7.8.1", 1029 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", 1030 | "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", 1031 | "dev": true 1032 | }, 1033 | "es-module-lexer": { 1034 | "version": "0.9.3", 1035 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", 1036 | "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", 1037 | "dev": true 1038 | }, 1039 | "escalade": { 1040 | "version": "3.1.1", 1041 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1042 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1043 | "dev": true 1044 | }, 1045 | "escape-html": { 1046 | "version": "1.0.3", 1047 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1048 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 1049 | "dev": true 1050 | }, 1051 | "eslint-scope": { 1052 | "version": "5.1.1", 1053 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1054 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1055 | "dev": true, 1056 | "requires": { 1057 | "esrecurse": "^4.3.0", 1058 | "estraverse": "^4.1.1" 1059 | } 1060 | }, 1061 | "esrecurse": { 1062 | "version": "4.3.0", 1063 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1064 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1065 | "dev": true, 1066 | "requires": { 1067 | "estraverse": "^5.2.0" 1068 | }, 1069 | "dependencies": { 1070 | "estraverse": { 1071 | "version": "5.3.0", 1072 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1073 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1074 | "dev": true 1075 | } 1076 | } 1077 | }, 1078 | "estraverse": { 1079 | "version": "4.3.0", 1080 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1081 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1082 | "dev": true 1083 | }, 1084 | "etag": { 1085 | "version": "1.8.1", 1086 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1087 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 1088 | "dev": true 1089 | }, 1090 | "eventemitter3": { 1091 | "version": "4.0.7", 1092 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 1093 | "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", 1094 | "dev": true 1095 | }, 1096 | "events": { 1097 | "version": "3.3.0", 1098 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1099 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 1100 | "dev": true 1101 | }, 1102 | "execa": { 1103 | "version": "5.1.1", 1104 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 1105 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 1106 | "dev": true, 1107 | "requires": { 1108 | "cross-spawn": "^7.0.3", 1109 | "get-stream": "^6.0.0", 1110 | "human-signals": "^2.1.0", 1111 | "is-stream": "^2.0.0", 1112 | "merge-stream": "^2.0.0", 1113 | "npm-run-path": "^4.0.1", 1114 | "onetime": "^5.1.2", 1115 | "signal-exit": "^3.0.3", 1116 | "strip-final-newline": "^2.0.0" 1117 | } 1118 | }, 1119 | "express": { 1120 | "version": "4.17.3", 1121 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", 1122 | "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", 1123 | "dev": true, 1124 | "requires": { 1125 | "accepts": "~1.3.8", 1126 | "array-flatten": "1.1.1", 1127 | "body-parser": "1.19.2", 1128 | "content-disposition": "0.5.4", 1129 | "content-type": "~1.0.4", 1130 | "cookie": "0.4.2", 1131 | "cookie-signature": "1.0.6", 1132 | "debug": "2.6.9", 1133 | "depd": "~1.1.2", 1134 | "encodeurl": "~1.0.2", 1135 | "escape-html": "~1.0.3", 1136 | "etag": "~1.8.1", 1137 | "finalhandler": "~1.1.2", 1138 | "fresh": "0.5.2", 1139 | "merge-descriptors": "1.0.1", 1140 | "methods": "~1.1.2", 1141 | "on-finished": "~2.3.0", 1142 | "parseurl": "~1.3.3", 1143 | "path-to-regexp": "0.1.7", 1144 | "proxy-addr": "~2.0.7", 1145 | "qs": "6.9.7", 1146 | "range-parser": "~1.2.1", 1147 | "safe-buffer": "5.2.1", 1148 | "send": "0.17.2", 1149 | "serve-static": "1.14.2", 1150 | "setprototypeof": "1.2.0", 1151 | "statuses": "~1.5.0", 1152 | "type-is": "~1.6.18", 1153 | "utils-merge": "1.0.1", 1154 | "vary": "~1.1.2" 1155 | }, 1156 | "dependencies": { 1157 | "array-flatten": { 1158 | "version": "1.1.1", 1159 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 1160 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", 1161 | "dev": true 1162 | } 1163 | } 1164 | }, 1165 | "fast-deep-equal": { 1166 | "version": "3.1.3", 1167 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1168 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1169 | "dev": true 1170 | }, 1171 | "fast-glob": { 1172 | "version": "3.2.11", 1173 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 1174 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 1175 | "dev": true, 1176 | "requires": { 1177 | "@nodelib/fs.stat": "^2.0.2", 1178 | "@nodelib/fs.walk": "^1.2.3", 1179 | "glob-parent": "^5.1.2", 1180 | "merge2": "^1.3.0", 1181 | "micromatch": "^4.0.4" 1182 | } 1183 | }, 1184 | "fast-json-stable-stringify": { 1185 | "version": "2.1.0", 1186 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1187 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1188 | "dev": true 1189 | }, 1190 | "fastest-levenshtein": { 1191 | "version": "1.0.12", 1192 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", 1193 | "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", 1194 | "dev": true 1195 | }, 1196 | "fastq": { 1197 | "version": "1.13.0", 1198 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1199 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1200 | "dev": true, 1201 | "requires": { 1202 | "reusify": "^1.0.4" 1203 | } 1204 | }, 1205 | "faye-websocket": { 1206 | "version": "0.11.4", 1207 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", 1208 | "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", 1209 | "dev": true, 1210 | "requires": { 1211 | "websocket-driver": ">=0.5.1" 1212 | } 1213 | }, 1214 | "fill-range": { 1215 | "version": "7.0.1", 1216 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1217 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1218 | "dev": true, 1219 | "requires": { 1220 | "to-regex-range": "^5.0.1" 1221 | } 1222 | }, 1223 | "finalhandler": { 1224 | "version": "1.1.2", 1225 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 1226 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 1227 | "dev": true, 1228 | "requires": { 1229 | "debug": "2.6.9", 1230 | "encodeurl": "~1.0.2", 1231 | "escape-html": "~1.0.3", 1232 | "on-finished": "~2.3.0", 1233 | "parseurl": "~1.3.3", 1234 | "statuses": "~1.5.0", 1235 | "unpipe": "~1.0.0" 1236 | } 1237 | }, 1238 | "find-up": { 1239 | "version": "4.1.0", 1240 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1241 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1242 | "dev": true, 1243 | "requires": { 1244 | "locate-path": "^5.0.0", 1245 | "path-exists": "^4.0.0" 1246 | } 1247 | }, 1248 | "follow-redirects": { 1249 | "version": "1.14.9", 1250 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", 1251 | "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", 1252 | "dev": true 1253 | }, 1254 | "forwarded": { 1255 | "version": "0.2.0", 1256 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1257 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 1258 | "dev": true 1259 | }, 1260 | "fresh": { 1261 | "version": "0.5.2", 1262 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1263 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 1264 | "dev": true 1265 | }, 1266 | "fs-monkey": { 1267 | "version": "1.0.3", 1268 | "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", 1269 | "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", 1270 | "dev": true 1271 | }, 1272 | "fs.realpath": { 1273 | "version": "1.0.0", 1274 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1275 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1276 | "dev": true 1277 | }, 1278 | "fsevents": { 1279 | "version": "2.3.2", 1280 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1281 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1282 | "dev": true, 1283 | "optional": true 1284 | }, 1285 | "function-bind": { 1286 | "version": "1.1.1", 1287 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1288 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1289 | "dev": true 1290 | }, 1291 | "get-intrinsic": { 1292 | "version": "1.1.1", 1293 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1294 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1295 | "dev": true, 1296 | "requires": { 1297 | "function-bind": "^1.1.1", 1298 | "has": "^1.0.3", 1299 | "has-symbols": "^1.0.1" 1300 | } 1301 | }, 1302 | "get-stream": { 1303 | "version": "6.0.1", 1304 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1305 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1306 | "dev": true 1307 | }, 1308 | "glob": { 1309 | "version": "7.2.0", 1310 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1311 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1312 | "dev": true, 1313 | "requires": { 1314 | "fs.realpath": "^1.0.0", 1315 | "inflight": "^1.0.4", 1316 | "inherits": "2", 1317 | "minimatch": "^3.0.4", 1318 | "once": "^1.3.0", 1319 | "path-is-absolute": "^1.0.0" 1320 | } 1321 | }, 1322 | "glob-parent": { 1323 | "version": "5.1.2", 1324 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1325 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1326 | "dev": true, 1327 | "requires": { 1328 | "is-glob": "^4.0.1" 1329 | } 1330 | }, 1331 | "glob-to-regexp": { 1332 | "version": "0.4.1", 1333 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1334 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1335 | "dev": true 1336 | }, 1337 | "globby": { 1338 | "version": "11.1.0", 1339 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1340 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1341 | "dev": true, 1342 | "requires": { 1343 | "array-union": "^2.1.0", 1344 | "dir-glob": "^3.0.1", 1345 | "fast-glob": "^3.2.9", 1346 | "ignore": "^5.2.0", 1347 | "merge2": "^1.4.1", 1348 | "slash": "^3.0.0" 1349 | } 1350 | }, 1351 | "graceful-fs": { 1352 | "version": "4.2.9", 1353 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", 1354 | "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", 1355 | "dev": true 1356 | }, 1357 | "handle-thing": { 1358 | "version": "2.0.1", 1359 | "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", 1360 | "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", 1361 | "dev": true 1362 | }, 1363 | "has": { 1364 | "version": "1.0.3", 1365 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1366 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1367 | "dev": true, 1368 | "requires": { 1369 | "function-bind": "^1.1.1" 1370 | } 1371 | }, 1372 | "has-flag": { 1373 | "version": "4.0.0", 1374 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1375 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1376 | "dev": true 1377 | }, 1378 | "has-symbols": { 1379 | "version": "1.0.3", 1380 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1381 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1382 | "dev": true 1383 | }, 1384 | "has-tostringtag": { 1385 | "version": "1.0.0", 1386 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1387 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1388 | "dev": true, 1389 | "requires": { 1390 | "has-symbols": "^1.0.2" 1391 | } 1392 | }, 1393 | "he": { 1394 | "version": "1.2.0", 1395 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1396 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1397 | "dev": true 1398 | }, 1399 | "hpack.js": { 1400 | "version": "2.1.6", 1401 | "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", 1402 | "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", 1403 | "dev": true, 1404 | "requires": { 1405 | "inherits": "^2.0.1", 1406 | "obuf": "^1.0.0", 1407 | "readable-stream": "^2.0.1", 1408 | "wbuf": "^1.1.0" 1409 | }, 1410 | "dependencies": { 1411 | "readable-stream": { 1412 | "version": "2.3.7", 1413 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1414 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1415 | "dev": true, 1416 | "requires": { 1417 | "core-util-is": "~1.0.0", 1418 | "inherits": "~2.0.3", 1419 | "isarray": "~1.0.0", 1420 | "process-nextick-args": "~2.0.0", 1421 | "safe-buffer": "~5.1.1", 1422 | "string_decoder": "~1.1.1", 1423 | "util-deprecate": "~1.0.1" 1424 | } 1425 | }, 1426 | "safe-buffer": { 1427 | "version": "5.1.2", 1428 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1429 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1430 | "dev": true 1431 | } 1432 | } 1433 | }, 1434 | "html-entities": { 1435 | "version": "2.3.2", 1436 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", 1437 | "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", 1438 | "dev": true 1439 | }, 1440 | "html-minifier-terser": { 1441 | "version": "6.1.0", 1442 | "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", 1443 | "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", 1444 | "dev": true, 1445 | "requires": { 1446 | "camel-case": "^4.1.2", 1447 | "clean-css": "^5.2.2", 1448 | "commander": "^8.3.0", 1449 | "he": "^1.2.0", 1450 | "param-case": "^3.0.4", 1451 | "relateurl": "^0.2.7", 1452 | "terser": "^5.10.0" 1453 | }, 1454 | "dependencies": { 1455 | "commander": { 1456 | "version": "8.3.0", 1457 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", 1458 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", 1459 | "dev": true 1460 | } 1461 | } 1462 | }, 1463 | "html-webpack-plugin": { 1464 | "version": "5.5.0", 1465 | "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", 1466 | "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", 1467 | "dev": true, 1468 | "requires": { 1469 | "@types/html-minifier-terser": "^6.0.0", 1470 | "html-minifier-terser": "^6.0.2", 1471 | "lodash": "^4.17.21", 1472 | "pretty-error": "^4.0.0", 1473 | "tapable": "^2.0.0" 1474 | } 1475 | }, 1476 | "htmlparser2": { 1477 | "version": "6.1.0", 1478 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", 1479 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", 1480 | "dev": true, 1481 | "requires": { 1482 | "domelementtype": "^2.0.1", 1483 | "domhandler": "^4.0.0", 1484 | "domutils": "^2.5.2", 1485 | "entities": "^2.0.0" 1486 | } 1487 | }, 1488 | "http-deceiver": { 1489 | "version": "1.2.7", 1490 | "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", 1491 | "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", 1492 | "dev": true 1493 | }, 1494 | "http-errors": { 1495 | "version": "1.8.1", 1496 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", 1497 | "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", 1498 | "dev": true, 1499 | "requires": { 1500 | "depd": "~1.1.2", 1501 | "inherits": "2.0.4", 1502 | "setprototypeof": "1.2.0", 1503 | "statuses": ">= 1.5.0 < 2", 1504 | "toidentifier": "1.0.1" 1505 | } 1506 | }, 1507 | "http-parser-js": { 1508 | "version": "0.5.5", 1509 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", 1510 | "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", 1511 | "dev": true 1512 | }, 1513 | "http-proxy": { 1514 | "version": "1.18.1", 1515 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", 1516 | "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", 1517 | "dev": true, 1518 | "requires": { 1519 | "eventemitter3": "^4.0.0", 1520 | "follow-redirects": "^1.0.0", 1521 | "requires-port": "^1.0.0" 1522 | } 1523 | }, 1524 | "http-proxy-middleware": { 1525 | "version": "2.0.3", 1526 | "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", 1527 | "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", 1528 | "dev": true, 1529 | "requires": { 1530 | "@types/http-proxy": "^1.17.8", 1531 | "http-proxy": "^1.18.1", 1532 | "is-glob": "^4.0.1", 1533 | "is-plain-obj": "^3.0.0", 1534 | "micromatch": "^4.0.2" 1535 | } 1536 | }, 1537 | "human-signals": { 1538 | "version": "2.1.0", 1539 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1540 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1541 | "dev": true 1542 | }, 1543 | "iconv-lite": { 1544 | "version": "0.4.24", 1545 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1546 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1547 | "dev": true, 1548 | "requires": { 1549 | "safer-buffer": ">= 2.1.2 < 3" 1550 | } 1551 | }, 1552 | "ignore": { 1553 | "version": "5.2.0", 1554 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 1555 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 1556 | "dev": true 1557 | }, 1558 | "import-local": { 1559 | "version": "3.1.0", 1560 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", 1561 | "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", 1562 | "dev": true, 1563 | "requires": { 1564 | "pkg-dir": "^4.2.0", 1565 | "resolve-cwd": "^3.0.0" 1566 | } 1567 | }, 1568 | "indent-string": { 1569 | "version": "4.0.0", 1570 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1571 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1572 | "dev": true 1573 | }, 1574 | "inflight": { 1575 | "version": "1.0.6", 1576 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1577 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1578 | "dev": true, 1579 | "requires": { 1580 | "once": "^1.3.0", 1581 | "wrappy": "1" 1582 | } 1583 | }, 1584 | "inherits": { 1585 | "version": "2.0.4", 1586 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1587 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1588 | "dev": true 1589 | }, 1590 | "interpret": { 1591 | "version": "2.2.0", 1592 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", 1593 | "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", 1594 | "dev": true 1595 | }, 1596 | "ip": { 1597 | "version": "1.1.5", 1598 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 1599 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", 1600 | "dev": true 1601 | }, 1602 | "ipaddr.js": { 1603 | "version": "2.0.1", 1604 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", 1605 | "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", 1606 | "dev": true 1607 | }, 1608 | "is-arguments": { 1609 | "version": "1.1.1", 1610 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 1611 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 1612 | "dev": true, 1613 | "requires": { 1614 | "call-bind": "^1.0.2", 1615 | "has-tostringtag": "^1.0.0" 1616 | } 1617 | }, 1618 | "is-binary-path": { 1619 | "version": "2.1.0", 1620 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1621 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1622 | "dev": true, 1623 | "requires": { 1624 | "binary-extensions": "^2.0.0" 1625 | } 1626 | }, 1627 | "is-core-module": { 1628 | "version": "2.8.1", 1629 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 1630 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 1631 | "dev": true, 1632 | "requires": { 1633 | "has": "^1.0.3" 1634 | } 1635 | }, 1636 | "is-date-object": { 1637 | "version": "1.0.5", 1638 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 1639 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 1640 | "dev": true, 1641 | "requires": { 1642 | "has-tostringtag": "^1.0.0" 1643 | } 1644 | }, 1645 | "is-docker": { 1646 | "version": "2.2.1", 1647 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 1648 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 1649 | "dev": true 1650 | }, 1651 | "is-extglob": { 1652 | "version": "2.1.1", 1653 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1654 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1655 | "dev": true 1656 | }, 1657 | "is-glob": { 1658 | "version": "4.0.3", 1659 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1660 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1661 | "dev": true, 1662 | "requires": { 1663 | "is-extglob": "^2.1.1" 1664 | } 1665 | }, 1666 | "is-number": { 1667 | "version": "7.0.0", 1668 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1669 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1670 | "dev": true 1671 | }, 1672 | "is-path-cwd": { 1673 | "version": "2.2.0", 1674 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", 1675 | "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", 1676 | "dev": true 1677 | }, 1678 | "is-path-inside": { 1679 | "version": "3.0.3", 1680 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1681 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1682 | "dev": true 1683 | }, 1684 | "is-plain-obj": { 1685 | "version": "3.0.0", 1686 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", 1687 | "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", 1688 | "dev": true 1689 | }, 1690 | "is-plain-object": { 1691 | "version": "2.0.4", 1692 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1693 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1694 | "dev": true, 1695 | "requires": { 1696 | "isobject": "^3.0.1" 1697 | } 1698 | }, 1699 | "is-regex": { 1700 | "version": "1.1.4", 1701 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1702 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1703 | "dev": true, 1704 | "requires": { 1705 | "call-bind": "^1.0.2", 1706 | "has-tostringtag": "^1.0.0" 1707 | } 1708 | }, 1709 | "is-stream": { 1710 | "version": "2.0.1", 1711 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1712 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1713 | "dev": true 1714 | }, 1715 | "is-wsl": { 1716 | "version": "2.2.0", 1717 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 1718 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 1719 | "dev": true, 1720 | "requires": { 1721 | "is-docker": "^2.0.0" 1722 | } 1723 | }, 1724 | "isarray": { 1725 | "version": "1.0.0", 1726 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1727 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1728 | "dev": true 1729 | }, 1730 | "isexe": { 1731 | "version": "2.0.0", 1732 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1733 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1734 | "dev": true 1735 | }, 1736 | "isobject": { 1737 | "version": "3.0.1", 1738 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1739 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 1740 | "dev": true 1741 | }, 1742 | "jest-worker": { 1743 | "version": "27.5.1", 1744 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 1745 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 1746 | "dev": true, 1747 | "requires": { 1748 | "@types/node": "*", 1749 | "merge-stream": "^2.0.0", 1750 | "supports-color": "^8.0.0" 1751 | } 1752 | }, 1753 | "json-parse-better-errors": { 1754 | "version": "1.0.2", 1755 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1756 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 1757 | "dev": true 1758 | }, 1759 | "json-schema-traverse": { 1760 | "version": "0.4.1", 1761 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1762 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1763 | "dev": true 1764 | }, 1765 | "kind-of": { 1766 | "version": "6.0.3", 1767 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1768 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1769 | "dev": true 1770 | }, 1771 | "loader-runner": { 1772 | "version": "4.2.0", 1773 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", 1774 | "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", 1775 | "dev": true 1776 | }, 1777 | "locate-path": { 1778 | "version": "5.0.0", 1779 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1780 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1781 | "dev": true, 1782 | "requires": { 1783 | "p-locate": "^4.1.0" 1784 | } 1785 | }, 1786 | "lodash": { 1787 | "version": "4.17.21", 1788 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1789 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1790 | "dev": true 1791 | }, 1792 | "lower-case": { 1793 | "version": "2.0.2", 1794 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 1795 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 1796 | "dev": true, 1797 | "requires": { 1798 | "tslib": "^2.0.3" 1799 | } 1800 | }, 1801 | "media-typer": { 1802 | "version": "0.3.0", 1803 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1804 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 1805 | "dev": true 1806 | }, 1807 | "memfs": { 1808 | "version": "3.4.1", 1809 | "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", 1810 | "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", 1811 | "dev": true, 1812 | "requires": { 1813 | "fs-monkey": "1.0.3" 1814 | } 1815 | }, 1816 | "merge-descriptors": { 1817 | "version": "1.0.1", 1818 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1819 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", 1820 | "dev": true 1821 | }, 1822 | "merge-stream": { 1823 | "version": "2.0.0", 1824 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1825 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1826 | "dev": true 1827 | }, 1828 | "merge2": { 1829 | "version": "1.4.1", 1830 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1831 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1832 | "dev": true 1833 | }, 1834 | "methods": { 1835 | "version": "1.1.2", 1836 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1837 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 1838 | "dev": true 1839 | }, 1840 | "micromatch": { 1841 | "version": "4.0.4", 1842 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 1843 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 1844 | "dev": true, 1845 | "requires": { 1846 | "braces": "^3.0.1", 1847 | "picomatch": "^2.2.3" 1848 | } 1849 | }, 1850 | "mime": { 1851 | "version": "1.6.0", 1852 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1853 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1854 | "dev": true 1855 | }, 1856 | "mime-db": { 1857 | "version": "1.51.0", 1858 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", 1859 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", 1860 | "dev": true 1861 | }, 1862 | "mime-types": { 1863 | "version": "2.1.34", 1864 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", 1865 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", 1866 | "dev": true, 1867 | "requires": { 1868 | "mime-db": "1.51.0" 1869 | } 1870 | }, 1871 | "mimic-fn": { 1872 | "version": "2.1.0", 1873 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1874 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1875 | "dev": true 1876 | }, 1877 | "minimalistic-assert": { 1878 | "version": "1.0.1", 1879 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1880 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 1881 | "dev": true 1882 | }, 1883 | "minimatch": { 1884 | "version": "3.1.2", 1885 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1886 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1887 | "dev": true, 1888 | "requires": { 1889 | "brace-expansion": "^1.1.7" 1890 | } 1891 | }, 1892 | "minimist": { 1893 | "version": "1.2.5", 1894 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1895 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1896 | "dev": true 1897 | }, 1898 | "mkdirp": { 1899 | "version": "0.5.5", 1900 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1901 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1902 | "dev": true, 1903 | "requires": { 1904 | "minimist": "^1.2.5" 1905 | } 1906 | }, 1907 | "ms": { 1908 | "version": "2.0.0", 1909 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1910 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1911 | "dev": true 1912 | }, 1913 | "multicast-dns": { 1914 | "version": "6.2.3", 1915 | "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", 1916 | "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", 1917 | "dev": true, 1918 | "requires": { 1919 | "dns-packet": "^1.3.1", 1920 | "thunky": "^1.0.2" 1921 | } 1922 | }, 1923 | "multicast-dns-service-types": { 1924 | "version": "1.1.0", 1925 | "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", 1926 | "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", 1927 | "dev": true 1928 | }, 1929 | "negotiator": { 1930 | "version": "0.6.3", 1931 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1932 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1933 | "dev": true 1934 | }, 1935 | "neo-async": { 1936 | "version": "2.6.2", 1937 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1938 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 1939 | "dev": true 1940 | }, 1941 | "no-case": { 1942 | "version": "3.0.4", 1943 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 1944 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 1945 | "dev": true, 1946 | "requires": { 1947 | "lower-case": "^2.0.2", 1948 | "tslib": "^2.0.3" 1949 | } 1950 | }, 1951 | "node-forge": { 1952 | "version": "1.2.1", 1953 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", 1954 | "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", 1955 | "dev": true 1956 | }, 1957 | "node-releases": { 1958 | "version": "2.0.2", 1959 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", 1960 | "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", 1961 | "dev": true 1962 | }, 1963 | "normalize-path": { 1964 | "version": "3.0.0", 1965 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1966 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1967 | "dev": true 1968 | }, 1969 | "npm-run-path": { 1970 | "version": "4.0.1", 1971 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 1972 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1973 | "dev": true, 1974 | "requires": { 1975 | "path-key": "^3.0.0" 1976 | } 1977 | }, 1978 | "nth-check": { 1979 | "version": "2.0.1", 1980 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", 1981 | "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", 1982 | "dev": true, 1983 | "requires": { 1984 | "boolbase": "^1.0.0" 1985 | } 1986 | }, 1987 | "object-is": { 1988 | "version": "1.1.5", 1989 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", 1990 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", 1991 | "dev": true, 1992 | "requires": { 1993 | "call-bind": "^1.0.2", 1994 | "define-properties": "^1.1.3" 1995 | } 1996 | }, 1997 | "object-keys": { 1998 | "version": "1.1.1", 1999 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2000 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2001 | "dev": true 2002 | }, 2003 | "obuf": { 2004 | "version": "1.1.2", 2005 | "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", 2006 | "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", 2007 | "dev": true 2008 | }, 2009 | "on-finished": { 2010 | "version": "2.3.0", 2011 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2012 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2013 | "dev": true, 2014 | "requires": { 2015 | "ee-first": "1.1.1" 2016 | } 2017 | }, 2018 | "on-headers": { 2019 | "version": "1.0.2", 2020 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 2021 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 2022 | "dev": true 2023 | }, 2024 | "once": { 2025 | "version": "1.4.0", 2026 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2027 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2028 | "dev": true, 2029 | "requires": { 2030 | "wrappy": "1" 2031 | } 2032 | }, 2033 | "onetime": { 2034 | "version": "5.1.2", 2035 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2036 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2037 | "dev": true, 2038 | "requires": { 2039 | "mimic-fn": "^2.1.0" 2040 | } 2041 | }, 2042 | "open": { 2043 | "version": "8.4.0", 2044 | "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", 2045 | "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", 2046 | "dev": true, 2047 | "requires": { 2048 | "define-lazy-prop": "^2.0.0", 2049 | "is-docker": "^2.1.1", 2050 | "is-wsl": "^2.2.0" 2051 | } 2052 | }, 2053 | "p-limit": { 2054 | "version": "2.3.0", 2055 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2056 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2057 | "dev": true, 2058 | "requires": { 2059 | "p-try": "^2.0.0" 2060 | } 2061 | }, 2062 | "p-locate": { 2063 | "version": "4.1.0", 2064 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2065 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2066 | "dev": true, 2067 | "requires": { 2068 | "p-limit": "^2.2.0" 2069 | } 2070 | }, 2071 | "p-map": { 2072 | "version": "4.0.0", 2073 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 2074 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 2075 | "dev": true, 2076 | "requires": { 2077 | "aggregate-error": "^3.0.0" 2078 | } 2079 | }, 2080 | "p-retry": { 2081 | "version": "4.6.1", 2082 | "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", 2083 | "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", 2084 | "dev": true, 2085 | "requires": { 2086 | "@types/retry": "^0.12.0", 2087 | "retry": "^0.13.1" 2088 | } 2089 | }, 2090 | "p-try": { 2091 | "version": "2.2.0", 2092 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2093 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2094 | "dev": true 2095 | }, 2096 | "param-case": { 2097 | "version": "3.0.4", 2098 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", 2099 | "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", 2100 | "dev": true, 2101 | "requires": { 2102 | "dot-case": "^3.0.4", 2103 | "tslib": "^2.0.3" 2104 | } 2105 | }, 2106 | "parseurl": { 2107 | "version": "1.3.3", 2108 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2109 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 2110 | "dev": true 2111 | }, 2112 | "pascal-case": { 2113 | "version": "3.1.2", 2114 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 2115 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 2116 | "dev": true, 2117 | "requires": { 2118 | "no-case": "^3.0.4", 2119 | "tslib": "^2.0.3" 2120 | } 2121 | }, 2122 | "path-exists": { 2123 | "version": "4.0.0", 2124 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2125 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2126 | "dev": true 2127 | }, 2128 | "path-is-absolute": { 2129 | "version": "1.0.1", 2130 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2131 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2132 | "dev": true 2133 | }, 2134 | "path-key": { 2135 | "version": "3.1.1", 2136 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2137 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2138 | "dev": true 2139 | }, 2140 | "path-parse": { 2141 | "version": "1.0.7", 2142 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2143 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2144 | "dev": true 2145 | }, 2146 | "path-to-regexp": { 2147 | "version": "0.1.7", 2148 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2149 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", 2150 | "dev": true 2151 | }, 2152 | "path-type": { 2153 | "version": "4.0.0", 2154 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2155 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2156 | "dev": true 2157 | }, 2158 | "picocolors": { 2159 | "version": "1.0.0", 2160 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2161 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2162 | "dev": true 2163 | }, 2164 | "picomatch": { 2165 | "version": "2.3.1", 2166 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2167 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2168 | "dev": true 2169 | }, 2170 | "pkg-dir": { 2171 | "version": "4.2.0", 2172 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 2173 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 2174 | "dev": true, 2175 | "requires": { 2176 | "find-up": "^4.0.0" 2177 | } 2178 | }, 2179 | "portfinder": { 2180 | "version": "1.0.28", 2181 | "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", 2182 | "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", 2183 | "dev": true, 2184 | "requires": { 2185 | "async": "^2.6.2", 2186 | "debug": "^3.1.1", 2187 | "mkdirp": "^0.5.5" 2188 | }, 2189 | "dependencies": { 2190 | "debug": { 2191 | "version": "3.2.7", 2192 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 2193 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 2194 | "dev": true, 2195 | "requires": { 2196 | "ms": "^2.1.1" 2197 | } 2198 | }, 2199 | "ms": { 2200 | "version": "2.1.3", 2201 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2202 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2203 | "dev": true 2204 | } 2205 | } 2206 | }, 2207 | "pretty-error": { 2208 | "version": "4.0.0", 2209 | "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", 2210 | "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", 2211 | "dev": true, 2212 | "requires": { 2213 | "lodash": "^4.17.20", 2214 | "renderkid": "^3.0.0" 2215 | } 2216 | }, 2217 | "process-nextick-args": { 2218 | "version": "2.0.1", 2219 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2220 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2221 | "dev": true 2222 | }, 2223 | "proxy-addr": { 2224 | "version": "2.0.7", 2225 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2226 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2227 | "dev": true, 2228 | "requires": { 2229 | "forwarded": "0.2.0", 2230 | "ipaddr.js": "1.9.1" 2231 | }, 2232 | "dependencies": { 2233 | "ipaddr.js": { 2234 | "version": "1.9.1", 2235 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2236 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 2237 | "dev": true 2238 | } 2239 | } 2240 | }, 2241 | "punycode": { 2242 | "version": "2.1.1", 2243 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2244 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2245 | "dev": true 2246 | }, 2247 | "qs": { 2248 | "version": "6.9.7", 2249 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", 2250 | "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", 2251 | "dev": true 2252 | }, 2253 | "queue-microtask": { 2254 | "version": "1.2.3", 2255 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2256 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2257 | "dev": true 2258 | }, 2259 | "randombytes": { 2260 | "version": "2.1.0", 2261 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2262 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2263 | "dev": true, 2264 | "requires": { 2265 | "safe-buffer": "^5.1.0" 2266 | } 2267 | }, 2268 | "range-parser": { 2269 | "version": "1.2.1", 2270 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2271 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 2272 | "dev": true 2273 | }, 2274 | "raw-body": { 2275 | "version": "2.4.3", 2276 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", 2277 | "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", 2278 | "dev": true, 2279 | "requires": { 2280 | "bytes": "3.1.2", 2281 | "http-errors": "1.8.1", 2282 | "iconv-lite": "0.4.24", 2283 | "unpipe": "1.0.0" 2284 | }, 2285 | "dependencies": { 2286 | "bytes": { 2287 | "version": "3.1.2", 2288 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 2289 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 2290 | "dev": true 2291 | } 2292 | } 2293 | }, 2294 | "readable-stream": { 2295 | "version": "3.6.0", 2296 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2297 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2298 | "dev": true, 2299 | "requires": { 2300 | "inherits": "^2.0.3", 2301 | "string_decoder": "^1.1.1", 2302 | "util-deprecate": "^1.0.1" 2303 | } 2304 | }, 2305 | "readdirp": { 2306 | "version": "3.6.0", 2307 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2308 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2309 | "dev": true, 2310 | "requires": { 2311 | "picomatch": "^2.2.1" 2312 | } 2313 | }, 2314 | "rechoir": { 2315 | "version": "0.7.1", 2316 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", 2317 | "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", 2318 | "dev": true, 2319 | "requires": { 2320 | "resolve": "^1.9.0" 2321 | } 2322 | }, 2323 | "regexp.prototype.flags": { 2324 | "version": "1.4.1", 2325 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", 2326 | "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", 2327 | "dev": true, 2328 | "requires": { 2329 | "call-bind": "^1.0.2", 2330 | "define-properties": "^1.1.3" 2331 | } 2332 | }, 2333 | "relateurl": { 2334 | "version": "0.2.7", 2335 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 2336 | "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", 2337 | "dev": true 2338 | }, 2339 | "renderkid": { 2340 | "version": "3.0.0", 2341 | "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", 2342 | "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", 2343 | "dev": true, 2344 | "requires": { 2345 | "css-select": "^4.1.3", 2346 | "dom-converter": "^0.2.0", 2347 | "htmlparser2": "^6.1.0", 2348 | "lodash": "^4.17.21", 2349 | "strip-ansi": "^6.0.1" 2350 | }, 2351 | "dependencies": { 2352 | "ansi-regex": { 2353 | "version": "5.0.1", 2354 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2355 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2356 | "dev": true 2357 | }, 2358 | "strip-ansi": { 2359 | "version": "6.0.1", 2360 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2361 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2362 | "dev": true, 2363 | "requires": { 2364 | "ansi-regex": "^5.0.1" 2365 | } 2366 | } 2367 | } 2368 | }, 2369 | "require-from-string": { 2370 | "version": "2.0.2", 2371 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2372 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2373 | "dev": true 2374 | }, 2375 | "requires-port": { 2376 | "version": "1.0.0", 2377 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 2378 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 2379 | "dev": true 2380 | }, 2381 | "resolve": { 2382 | "version": "1.22.0", 2383 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 2384 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 2385 | "dev": true, 2386 | "requires": { 2387 | "is-core-module": "^2.8.1", 2388 | "path-parse": "^1.0.7", 2389 | "supports-preserve-symlinks-flag": "^1.0.0" 2390 | } 2391 | }, 2392 | "resolve-cwd": { 2393 | "version": "3.0.0", 2394 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 2395 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 2396 | "dev": true, 2397 | "requires": { 2398 | "resolve-from": "^5.0.0" 2399 | } 2400 | }, 2401 | "resolve-from": { 2402 | "version": "5.0.0", 2403 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2404 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2405 | "dev": true 2406 | }, 2407 | "retry": { 2408 | "version": "0.13.1", 2409 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", 2410 | "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", 2411 | "dev": true 2412 | }, 2413 | "reusify": { 2414 | "version": "1.0.4", 2415 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2416 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2417 | "dev": true 2418 | }, 2419 | "rimraf": { 2420 | "version": "3.0.2", 2421 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2422 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2423 | "dev": true, 2424 | "requires": { 2425 | "glob": "^7.1.3" 2426 | } 2427 | }, 2428 | "run-parallel": { 2429 | "version": "1.2.0", 2430 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2431 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2432 | "dev": true, 2433 | "requires": { 2434 | "queue-microtask": "^1.2.2" 2435 | } 2436 | }, 2437 | "safe-buffer": { 2438 | "version": "5.2.1", 2439 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2440 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2441 | "dev": true 2442 | }, 2443 | "safer-buffer": { 2444 | "version": "2.1.2", 2445 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2446 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2447 | "dev": true 2448 | }, 2449 | "schema-utils": { 2450 | "version": "3.1.1", 2451 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", 2452 | "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", 2453 | "dev": true, 2454 | "requires": { 2455 | "@types/json-schema": "^7.0.8", 2456 | "ajv": "^6.12.5", 2457 | "ajv-keywords": "^3.5.2" 2458 | } 2459 | }, 2460 | "select-hose": { 2461 | "version": "2.0.0", 2462 | "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", 2463 | "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", 2464 | "dev": true 2465 | }, 2466 | "selfsigned": { 2467 | "version": "2.0.0", 2468 | "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", 2469 | "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", 2470 | "dev": true, 2471 | "requires": { 2472 | "node-forge": "^1.2.0" 2473 | } 2474 | }, 2475 | "send": { 2476 | "version": "0.17.2", 2477 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", 2478 | "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", 2479 | "dev": true, 2480 | "requires": { 2481 | "debug": "2.6.9", 2482 | "depd": "~1.1.2", 2483 | "destroy": "~1.0.4", 2484 | "encodeurl": "~1.0.2", 2485 | "escape-html": "~1.0.3", 2486 | "etag": "~1.8.1", 2487 | "fresh": "0.5.2", 2488 | "http-errors": "1.8.1", 2489 | "mime": "1.6.0", 2490 | "ms": "2.1.3", 2491 | "on-finished": "~2.3.0", 2492 | "range-parser": "~1.2.1", 2493 | "statuses": "~1.5.0" 2494 | }, 2495 | "dependencies": { 2496 | "ms": { 2497 | "version": "2.1.3", 2498 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2499 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2500 | "dev": true 2501 | } 2502 | } 2503 | }, 2504 | "serialize-javascript": { 2505 | "version": "6.0.0", 2506 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 2507 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 2508 | "dev": true, 2509 | "requires": { 2510 | "randombytes": "^2.1.0" 2511 | } 2512 | }, 2513 | "serve-index": { 2514 | "version": "1.9.1", 2515 | "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", 2516 | "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", 2517 | "dev": true, 2518 | "requires": { 2519 | "accepts": "~1.3.4", 2520 | "batch": "0.6.1", 2521 | "debug": "2.6.9", 2522 | "escape-html": "~1.0.3", 2523 | "http-errors": "~1.6.2", 2524 | "mime-types": "~2.1.17", 2525 | "parseurl": "~1.3.2" 2526 | }, 2527 | "dependencies": { 2528 | "http-errors": { 2529 | "version": "1.6.3", 2530 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 2531 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 2532 | "dev": true, 2533 | "requires": { 2534 | "depd": "~1.1.2", 2535 | "inherits": "2.0.3", 2536 | "setprototypeof": "1.1.0", 2537 | "statuses": ">= 1.4.0 < 2" 2538 | } 2539 | }, 2540 | "inherits": { 2541 | "version": "2.0.3", 2542 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2543 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 2544 | "dev": true 2545 | }, 2546 | "setprototypeof": { 2547 | "version": "1.1.0", 2548 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 2549 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", 2550 | "dev": true 2551 | } 2552 | } 2553 | }, 2554 | "serve-static": { 2555 | "version": "1.14.2", 2556 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", 2557 | "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", 2558 | "dev": true, 2559 | "requires": { 2560 | "encodeurl": "~1.0.2", 2561 | "escape-html": "~1.0.3", 2562 | "parseurl": "~1.3.3", 2563 | "send": "0.17.2" 2564 | } 2565 | }, 2566 | "setprototypeof": { 2567 | "version": "1.2.0", 2568 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 2569 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 2570 | "dev": true 2571 | }, 2572 | "shallow-clone": { 2573 | "version": "3.0.1", 2574 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", 2575 | "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", 2576 | "dev": true, 2577 | "requires": { 2578 | "kind-of": "^6.0.2" 2579 | } 2580 | }, 2581 | "shebang-command": { 2582 | "version": "2.0.0", 2583 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2584 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2585 | "dev": true, 2586 | "requires": { 2587 | "shebang-regex": "^3.0.0" 2588 | } 2589 | }, 2590 | "shebang-regex": { 2591 | "version": "3.0.0", 2592 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2593 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2594 | "dev": true 2595 | }, 2596 | "signal-exit": { 2597 | "version": "3.0.7", 2598 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2599 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2600 | "dev": true 2601 | }, 2602 | "slash": { 2603 | "version": "3.0.0", 2604 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2605 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2606 | "dev": true 2607 | }, 2608 | "sockjs": { 2609 | "version": "0.3.24", 2610 | "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", 2611 | "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", 2612 | "dev": true, 2613 | "requires": { 2614 | "faye-websocket": "^0.11.3", 2615 | "uuid": "^8.3.2", 2616 | "websocket-driver": "^0.7.4" 2617 | } 2618 | }, 2619 | "source-map": { 2620 | "version": "0.6.1", 2621 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2622 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2623 | "dev": true 2624 | }, 2625 | "source-map-support": { 2626 | "version": "0.5.21", 2627 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2628 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2629 | "dev": true, 2630 | "requires": { 2631 | "buffer-from": "^1.0.0", 2632 | "source-map": "^0.6.0" 2633 | } 2634 | }, 2635 | "spdy": { 2636 | "version": "4.0.2", 2637 | "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", 2638 | "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", 2639 | "dev": true, 2640 | "requires": { 2641 | "debug": "^4.1.0", 2642 | "handle-thing": "^2.0.0", 2643 | "http-deceiver": "^1.2.7", 2644 | "select-hose": "^2.0.0", 2645 | "spdy-transport": "^3.0.0" 2646 | }, 2647 | "dependencies": { 2648 | "debug": { 2649 | "version": "4.3.3", 2650 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 2651 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 2652 | "dev": true, 2653 | "requires": { 2654 | "ms": "2.1.2" 2655 | } 2656 | }, 2657 | "ms": { 2658 | "version": "2.1.2", 2659 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2660 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2661 | "dev": true 2662 | } 2663 | } 2664 | }, 2665 | "spdy-transport": { 2666 | "version": "3.0.0", 2667 | "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", 2668 | "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", 2669 | "dev": true, 2670 | "requires": { 2671 | "debug": "^4.1.0", 2672 | "detect-node": "^2.0.4", 2673 | "hpack.js": "^2.1.6", 2674 | "obuf": "^1.1.2", 2675 | "readable-stream": "^3.0.6", 2676 | "wbuf": "^1.7.3" 2677 | }, 2678 | "dependencies": { 2679 | "debug": { 2680 | "version": "4.3.3", 2681 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 2682 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 2683 | "dev": true, 2684 | "requires": { 2685 | "ms": "2.1.2" 2686 | } 2687 | }, 2688 | "ms": { 2689 | "version": "2.1.2", 2690 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2691 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2692 | "dev": true 2693 | } 2694 | } 2695 | }, 2696 | "statuses": { 2697 | "version": "1.5.0", 2698 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 2699 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 2700 | "dev": true 2701 | }, 2702 | "string_decoder": { 2703 | "version": "1.1.1", 2704 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2705 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2706 | "dev": true, 2707 | "requires": { 2708 | "safe-buffer": "~5.1.0" 2709 | }, 2710 | "dependencies": { 2711 | "safe-buffer": { 2712 | "version": "5.1.2", 2713 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2714 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2715 | "dev": true 2716 | } 2717 | } 2718 | }, 2719 | "strip-ansi": { 2720 | "version": "7.0.1", 2721 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 2722 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 2723 | "dev": true, 2724 | "requires": { 2725 | "ansi-regex": "^6.0.1" 2726 | } 2727 | }, 2728 | "strip-final-newline": { 2729 | "version": "2.0.0", 2730 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2731 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2732 | "dev": true 2733 | }, 2734 | "supports-color": { 2735 | "version": "8.1.1", 2736 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2737 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2738 | "dev": true, 2739 | "requires": { 2740 | "has-flag": "^4.0.0" 2741 | } 2742 | }, 2743 | "supports-preserve-symlinks-flag": { 2744 | "version": "1.0.0", 2745 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2746 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2747 | "dev": true 2748 | }, 2749 | "tapable": { 2750 | "version": "2.2.1", 2751 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 2752 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 2753 | "dev": true 2754 | }, 2755 | "terser": { 2756 | "version": "5.12.0", 2757 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.0.tgz", 2758 | "integrity": "sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==", 2759 | "dev": true, 2760 | "requires": { 2761 | "acorn": "^8.5.0", 2762 | "commander": "^2.20.0", 2763 | "source-map": "~0.7.2", 2764 | "source-map-support": "~0.5.20" 2765 | }, 2766 | "dependencies": { 2767 | "source-map": { 2768 | "version": "0.7.3", 2769 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 2770 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 2771 | "dev": true 2772 | } 2773 | } 2774 | }, 2775 | "terser-webpack-plugin": { 2776 | "version": "5.3.1", 2777 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", 2778 | "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", 2779 | "dev": true, 2780 | "requires": { 2781 | "jest-worker": "^27.4.5", 2782 | "schema-utils": "^3.1.1", 2783 | "serialize-javascript": "^6.0.0", 2784 | "source-map": "^0.6.1", 2785 | "terser": "^5.7.2" 2786 | } 2787 | }, 2788 | "thunky": { 2789 | "version": "1.1.0", 2790 | "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", 2791 | "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", 2792 | "dev": true 2793 | }, 2794 | "to-regex-range": { 2795 | "version": "5.0.1", 2796 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2797 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2798 | "dev": true, 2799 | "requires": { 2800 | "is-number": "^7.0.0" 2801 | } 2802 | }, 2803 | "toidentifier": { 2804 | "version": "1.0.1", 2805 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2806 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2807 | "dev": true 2808 | }, 2809 | "tslib": { 2810 | "version": "2.3.1", 2811 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", 2812 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", 2813 | "dev": true 2814 | }, 2815 | "type-is": { 2816 | "version": "1.6.18", 2817 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2818 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2819 | "dev": true, 2820 | "requires": { 2821 | "media-typer": "0.3.0", 2822 | "mime-types": "~2.1.24" 2823 | } 2824 | }, 2825 | "typescript": { 2826 | "version": "4.6.2", 2827 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", 2828 | "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", 2829 | "dev": true 2830 | }, 2831 | "unpipe": { 2832 | "version": "1.0.0", 2833 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2834 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 2835 | "dev": true 2836 | }, 2837 | "uri-js": { 2838 | "version": "4.4.1", 2839 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2840 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2841 | "dev": true, 2842 | "requires": { 2843 | "punycode": "^2.1.0" 2844 | } 2845 | }, 2846 | "util-deprecate": { 2847 | "version": "1.0.2", 2848 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2849 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2850 | "dev": true 2851 | }, 2852 | "utila": { 2853 | "version": "0.4.0", 2854 | "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", 2855 | "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", 2856 | "dev": true 2857 | }, 2858 | "utils-merge": { 2859 | "version": "1.0.1", 2860 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2861 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 2862 | "dev": true 2863 | }, 2864 | "uuid": { 2865 | "version": "8.3.2", 2866 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 2867 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 2868 | "dev": true 2869 | }, 2870 | "vary": { 2871 | "version": "1.1.2", 2872 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2873 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 2874 | "dev": true 2875 | }, 2876 | "watchpack": { 2877 | "version": "2.3.1", 2878 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", 2879 | "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", 2880 | "dev": true, 2881 | "requires": { 2882 | "glob-to-regexp": "^0.4.1", 2883 | "graceful-fs": "^4.1.2" 2884 | } 2885 | }, 2886 | "wbuf": { 2887 | "version": "1.7.3", 2888 | "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", 2889 | "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", 2890 | "dev": true, 2891 | "requires": { 2892 | "minimalistic-assert": "^1.0.0" 2893 | } 2894 | }, 2895 | "webpack": { 2896 | "version": "5.70.0", 2897 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", 2898 | "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", 2899 | "dev": true, 2900 | "requires": { 2901 | "@types/eslint-scope": "^3.7.3", 2902 | "@types/estree": "^0.0.51", 2903 | "@webassemblyjs/ast": "1.11.1", 2904 | "@webassemblyjs/wasm-edit": "1.11.1", 2905 | "@webassemblyjs/wasm-parser": "1.11.1", 2906 | "acorn": "^8.4.1", 2907 | "acorn-import-assertions": "^1.7.6", 2908 | "browserslist": "^4.14.5", 2909 | "chrome-trace-event": "^1.0.2", 2910 | "enhanced-resolve": "^5.9.2", 2911 | "es-module-lexer": "^0.9.0", 2912 | "eslint-scope": "5.1.1", 2913 | "events": "^3.2.0", 2914 | "glob-to-regexp": "^0.4.1", 2915 | "graceful-fs": "^4.2.9", 2916 | "json-parse-better-errors": "^1.0.2", 2917 | "loader-runner": "^4.2.0", 2918 | "mime-types": "^2.1.27", 2919 | "neo-async": "^2.6.2", 2920 | "schema-utils": "^3.1.0", 2921 | "tapable": "^2.1.1", 2922 | "terser-webpack-plugin": "^5.1.3", 2923 | "watchpack": "^2.3.1", 2924 | "webpack-sources": "^3.2.3" 2925 | } 2926 | }, 2927 | "webpack-cli": { 2928 | "version": "4.9.2", 2929 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", 2930 | "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", 2931 | "dev": true, 2932 | "requires": { 2933 | "@discoveryjs/json-ext": "^0.5.0", 2934 | "@webpack-cli/configtest": "^1.1.1", 2935 | "@webpack-cli/info": "^1.4.1", 2936 | "@webpack-cli/serve": "^1.6.1", 2937 | "colorette": "^2.0.14", 2938 | "commander": "^7.0.0", 2939 | "execa": "^5.0.0", 2940 | "fastest-levenshtein": "^1.0.12", 2941 | "import-local": "^3.0.2", 2942 | "interpret": "^2.2.0", 2943 | "rechoir": "^0.7.0", 2944 | "webpack-merge": "^5.7.3" 2945 | }, 2946 | "dependencies": { 2947 | "commander": { 2948 | "version": "7.2.0", 2949 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 2950 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 2951 | "dev": true 2952 | } 2953 | } 2954 | }, 2955 | "webpack-dev-middleware": { 2956 | "version": "5.3.1", 2957 | "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", 2958 | "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", 2959 | "dev": true, 2960 | "requires": { 2961 | "colorette": "^2.0.10", 2962 | "memfs": "^3.4.1", 2963 | "mime-types": "^2.1.31", 2964 | "range-parser": "^1.2.1", 2965 | "schema-utils": "^4.0.0" 2966 | }, 2967 | "dependencies": { 2968 | "ajv": { 2969 | "version": "8.10.0", 2970 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", 2971 | "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", 2972 | "dev": true, 2973 | "requires": { 2974 | "fast-deep-equal": "^3.1.1", 2975 | "json-schema-traverse": "^1.0.0", 2976 | "require-from-string": "^2.0.2", 2977 | "uri-js": "^4.2.2" 2978 | } 2979 | }, 2980 | "ajv-keywords": { 2981 | "version": "5.1.0", 2982 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", 2983 | "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", 2984 | "dev": true, 2985 | "requires": { 2986 | "fast-deep-equal": "^3.1.3" 2987 | } 2988 | }, 2989 | "json-schema-traverse": { 2990 | "version": "1.0.0", 2991 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2992 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2993 | "dev": true 2994 | }, 2995 | "schema-utils": { 2996 | "version": "4.0.0", 2997 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", 2998 | "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", 2999 | "dev": true, 3000 | "requires": { 3001 | "@types/json-schema": "^7.0.9", 3002 | "ajv": "^8.8.0", 3003 | "ajv-formats": "^2.1.1", 3004 | "ajv-keywords": "^5.0.0" 3005 | } 3006 | } 3007 | } 3008 | }, 3009 | "webpack-dev-server": { 3010 | "version": "4.7.4", 3011 | "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", 3012 | "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", 3013 | "dev": true, 3014 | "requires": { 3015 | "@types/bonjour": "^3.5.9", 3016 | "@types/connect-history-api-fallback": "^1.3.5", 3017 | "@types/express": "^4.17.13", 3018 | "@types/serve-index": "^1.9.1", 3019 | "@types/sockjs": "^0.3.33", 3020 | "@types/ws": "^8.2.2", 3021 | "ansi-html-community": "^0.0.8", 3022 | "bonjour": "^3.5.0", 3023 | "chokidar": "^3.5.3", 3024 | "colorette": "^2.0.10", 3025 | "compression": "^1.7.4", 3026 | "connect-history-api-fallback": "^1.6.0", 3027 | "default-gateway": "^6.0.3", 3028 | "del": "^6.0.0", 3029 | "express": "^4.17.1", 3030 | "graceful-fs": "^4.2.6", 3031 | "html-entities": "^2.3.2", 3032 | "http-proxy-middleware": "^2.0.0", 3033 | "ipaddr.js": "^2.0.1", 3034 | "open": "^8.0.9", 3035 | "p-retry": "^4.5.0", 3036 | "portfinder": "^1.0.28", 3037 | "schema-utils": "^4.0.0", 3038 | "selfsigned": "^2.0.0", 3039 | "serve-index": "^1.9.1", 3040 | "sockjs": "^0.3.21", 3041 | "spdy": "^4.0.2", 3042 | "strip-ansi": "^7.0.0", 3043 | "webpack-dev-middleware": "^5.3.1", 3044 | "ws": "^8.4.2" 3045 | }, 3046 | "dependencies": { 3047 | "ajv": { 3048 | "version": "8.10.0", 3049 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", 3050 | "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", 3051 | "dev": true, 3052 | "requires": { 3053 | "fast-deep-equal": "^3.1.1", 3054 | "json-schema-traverse": "^1.0.0", 3055 | "require-from-string": "^2.0.2", 3056 | "uri-js": "^4.2.2" 3057 | } 3058 | }, 3059 | "ajv-keywords": { 3060 | "version": "5.1.0", 3061 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", 3062 | "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", 3063 | "dev": true, 3064 | "requires": { 3065 | "fast-deep-equal": "^3.1.3" 3066 | } 3067 | }, 3068 | "json-schema-traverse": { 3069 | "version": "1.0.0", 3070 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 3071 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 3072 | "dev": true 3073 | }, 3074 | "schema-utils": { 3075 | "version": "4.0.0", 3076 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", 3077 | "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", 3078 | "dev": true, 3079 | "requires": { 3080 | "@types/json-schema": "^7.0.9", 3081 | "ajv": "^8.8.0", 3082 | "ajv-formats": "^2.1.1", 3083 | "ajv-keywords": "^5.0.0" 3084 | } 3085 | } 3086 | } 3087 | }, 3088 | "webpack-merge": { 3089 | "version": "5.8.0", 3090 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", 3091 | "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", 3092 | "dev": true, 3093 | "requires": { 3094 | "clone-deep": "^4.0.1", 3095 | "wildcard": "^2.0.0" 3096 | } 3097 | }, 3098 | "webpack-sources": { 3099 | "version": "3.2.3", 3100 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 3101 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 3102 | "dev": true 3103 | }, 3104 | "websocket-driver": { 3105 | "version": "0.7.4", 3106 | "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", 3107 | "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", 3108 | "dev": true, 3109 | "requires": { 3110 | "http-parser-js": ">=0.5.1", 3111 | "safe-buffer": ">=5.1.0", 3112 | "websocket-extensions": ">=0.1.1" 3113 | } 3114 | }, 3115 | "websocket-extensions": { 3116 | "version": "0.1.4", 3117 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", 3118 | "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", 3119 | "dev": true 3120 | }, 3121 | "which": { 3122 | "version": "2.0.2", 3123 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3124 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3125 | "dev": true, 3126 | "requires": { 3127 | "isexe": "^2.0.0" 3128 | } 3129 | }, 3130 | "wildcard": { 3131 | "version": "2.0.0", 3132 | "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", 3133 | "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", 3134 | "dev": true 3135 | }, 3136 | "wrappy": { 3137 | "version": "1.0.2", 3138 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3139 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3140 | "dev": true 3141 | }, 3142 | "ws": { 3143 | "version": "8.5.0", 3144 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", 3145 | "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", 3146 | "dev": true 3147 | } 3148 | } 3149 | } 3150 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "define-function", 3 | "version": "2.0.0", 4 | "repository": "https://github.com/taowen/define-function", 5 | "license": "MIT", 6 | "miniprogram": "wechat", 7 | "main": "index.node.js", 8 | "browser": "index.browser.js", 9 | "types": "index.d.ts", 10 | "devDependencies": { 11 | "webpack": "^5.69.1", 12 | "webpack-dev-server": "^4.7.4", 13 | "webpack-cli": "^4.9.2", 14 | "html-webpack-plugin": "^5.5.0", 15 | "typescript": "^4.6.2" 16 | }, 17 | "scripts": { 18 | "test:browser": "webpack serve", 19 | "test:node": "node test.node.js", 20 | "test:ts": "cd test-ts && tsc" 21 | }, 22 | "files": [ 23 | "index.node.js", 24 | "index.browser.js", 25 | "index.d.ts", 26 | "__s__.d.ts", 27 | "define-function.js", 28 | "load-eval-wasm.js", 29 | "eval.wasm", 30 | "wechat/*" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /quickjs.patch: -------------------------------------------------------------------------------- 1 | diff --git a/quickjs.c b/quickjs.c 2 | index 48aeffc..66253ee 100644 3 | --- a/quickjs.c 4 | +++ b/quickjs.c 5 | @@ -15634,7 +15634,7 @@ exception: 6 | return -1; 7 | } 8 | 9 | -static __exception int JS_CopyDataProperties(JSContext *ctx, 10 | +__exception int JS_CopyDataProperties(JSContext *ctx, 11 | JSValueConst target, 12 | JSValueConst source, 13 | JSValueConst excluded, 14 | @@ -27251,7 +27251,7 @@ void JS_SetModuleLoaderFunc(JSRuntime *rt, 15 | } 16 | 17 | /* default module filename normalizer */ 18 | -static char *js_default_module_normalize_name(JSContext *ctx, 19 | +char *js_default_module_normalize_name(JSContext *ctx, 20 | const char *base_name, 21 | const char *name) 22 | { 23 | @@ -28204,7 +28204,43 @@ JSModuleDef *JS_RunModule(JSContext *ctx, const char *basename, 24 | return m; 25 | } 26 | 27 | -static JSValue js_dynamic_import_job(JSContext *ctx, 28 | +static JSModuleDef *js_host_resolve_imported_module_by_value(JSContext *ctx, 29 | + JSValue base_cname_val, 30 | + JSValue cname1_val) 31 | +{ 32 | + JSRuntime *rt = ctx->rt; 33 | + JSModuleDef *m; 34 | + char *cname; 35 | + JSAtom module_name; 36 | + 37 | + const char *base_cname = JS_ToCString(ctx, base_cname_val); 38 | + const char *cname1 = JS_ToCString(ctx, cname1_val); 39 | + if (!rt->module_normalize_func) { 40 | + cname = js_default_module_normalize_name(ctx, base_cname, cname1); 41 | + } else { 42 | + cname = rt->module_normalize_func(ctx, base_cname, cname1, 43 | + rt->module_loader_opaque); 44 | + } 45 | + JS_FreeCString(ctx, base_cname); 46 | + JS_FreeCString(ctx, cname1); 47 | + if (!cname) 48 | + return NULL; 49 | + 50 | + module_name = JS_NewAtom(ctx, cname); 51 | + if (module_name == JS_ATOM_NULL) { 52 | + js_free(ctx, cname); 53 | + return NULL; 54 | + } 55 | + 56 | + /* first look at the loaded modules */ 57 | + m = js_find_loaded_module(ctx, module_name); 58 | + js_free(ctx, cname); 59 | + JS_FreeAtom(ctx, module_name); 60 | + return m; 61 | +} 62 | +JSValue async_js_dynamic_import_job(JSContext *ctx, 63 | + int argc, JSValueConst *argv); 64 | +JSValue js_dynamic_import_job(JSContext *ctx, 65 | int argc, JSValueConst *argv) 66 | { 67 | JSValueConst *resolving_funcs = argv; 68 | @@ -28278,8 +28314,13 @@ static JSValue js_dynamic_import(JSContext *ctx, JSValueConst specifier) 69 | args[1] = resolving_funcs[1]; 70 | args[2] = basename_val; 71 | args[3] = specifier; 72 | - 73 | - JS_EnqueueJob(ctx, js_dynamic_import_job, 4, args); 74 | + 75 | + JSModuleDef* m = js_host_resolve_imported_module_by_value(ctx, basename_val, specifier); 76 | + if(m == NULL) { 77 | + JS_EnqueueJob(ctx, async_js_dynamic_import_job, 4, args); 78 | + } else { 79 | + JS_EnqueueJob(ctx, js_dynamic_import_job, 4, args); 80 | + } 81 | 82 | JS_FreeValue(ctx, basename_val); 83 | JS_FreeValue(ctx, resolving_funcs[0]); 84 | -------------------------------------------------------------------------------- /test-ts/.gitignore: -------------------------------------------------------------------------------- 1 | /lib 2 | -------------------------------------------------------------------------------- /test-ts/node_modules/define-function: -------------------------------------------------------------------------------- 1 | ../../ -------------------------------------------------------------------------------- /test-ts/test.ts: -------------------------------------------------------------------------------- 1 | import def from "define-function"; 2 | 3 | async function main() { 4 | const ctx = def.context(); 5 | const f = await ctx.def(` 6 | return 'hello' 7 | `) 8 | f(); 9 | ctx.dispose(); 10 | } 11 | 12 | main(); -------------------------------------------------------------------------------- /test-ts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "target": "esnext", 5 | "useDefineForClassFields": true, 6 | "module": "commonjs", 7 | "moduleResolution": "node", 8 | "strict": true, 9 | "jsx": "react", 10 | "sourceMap": true, 11 | "resolveJsonModule": true, 12 | "lib": ["esnext", "dom"], 13 | "outDir": "lib" 14 | }, 15 | "include": ["test.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /test.browser.js: -------------------------------------------------------------------------------- 1 | const def = require('./index.browser') 2 | 3 | async function main() { 4 | const f = await def(` 5 | return 'hello'; 6 | `) 7 | console.log(f()); 8 | } 9 | 10 | main(); -------------------------------------------------------------------------------- /test.node.js: -------------------------------------------------------------------------------- 1 | const def = require('./index.node') 2 | const assert = require('assert'); 3 | 4 | async function test1() { 5 | const f = await def(` 6 | return 'hello'; 7 | `) 8 | f(); 9 | if (f() !== 'hello') { 10 | assert.fail() 11 | } 12 | } 13 | 14 | async function test2() { 15 | const f = await def(` 16 | throw 'hello'; 17 | `) 18 | let ex; 19 | try { 20 | f() 21 | } catch (e) { 22 | ex = e; 23 | } 24 | if (!ex) { 25 | assert.fail(); 26 | } 27 | } 28 | 29 | async function test3() { 30 | const f = await def(` 31 | const [hello, world] = arguments; 32 | return hello + ' ' + world; 33 | `) 34 | if (f('hello', 'world') !== 'hello world') { 35 | assert.fail(); 36 | } 37 | } 38 | 39 | async function test4() { 40 | const f = await def(` 41 | return new Date().toString(); 42 | `) 43 | if (typeof f() !== 'string') { 44 | assert.fail(); 45 | } 46 | } 47 | 48 | async function test5() { 49 | const f = await def(` 50 | const [print, sleep] = arguments; 51 | return (async() => { 52 | print('hello') 53 | await sleep(1000); 54 | print('world') 55 | })() 56 | `) 57 | await f( 58 | msg => console.log(msg), 59 | milliseconds => new Promise(resolve => setTimeout(resolve, milliseconds)) 60 | ) 61 | } 62 | 63 | async function test6() { 64 | const { context } = require('./index.node'); 65 | const ctx = await context(); 66 | const f = ctx.def(` 67 | global.counter = (global.counter || 0)+1; 68 | return counter; 69 | `) 70 | if (f() !== 1) { 71 | assert.fail() 72 | } 73 | if (f() !== 2) { 74 | assert.fail() 75 | } 76 | if (f() !== 3) { 77 | assert.fail() 78 | } 79 | ctx.dispose(); 80 | } 81 | 82 | async function test7() { 83 | const f = await def(` 84 | return (async() => { 85 | return await import('sideFile.js'); 86 | })() 87 | `, { 88 | async loadModuleContent(moduleName) { 89 | await new Promise(resolve => setTimeout(resolve, 1000)); 90 | return `export default 'hello'`; 91 | } 92 | }) 93 | if ((await f()).default !== 'hello') { 94 | assert.fail(); 95 | } 96 | } 97 | 98 | async function test8() { 99 | const { context } = require('./index.node'); 100 | const ctx = await context({ 101 | async loadModuleContent(moduleName) { 102 | if (moduleName === 'xxx') { 103 | return `export default 'hello'` 104 | } else { 105 | return ''; 106 | } 107 | }, 108 | global: { 109 | console 110 | } 111 | }); 112 | await ctx.load(` 113 | import * as xxx from 'xxx'; 114 | console.log(import.meta, xxx)`, { 115 | filename: 'abc.js', 116 | meta: { 117 | blah: 'blah' 118 | } 119 | }); 120 | ctx.dispose(); 121 | } 122 | 123 | async function test9() { 124 | const { context } = require('./index.node'); 125 | const ctx = await context(); 126 | const { hello, sayHello } = await ctx.load(` 127 | export const hello = 'world'; 128 | export function sayHello() { 129 | return 'world' 130 | } 131 | `, { 132 | filename: '' 133 | }); 134 | if (hello !== 'world') { 135 | assert.fail(); 136 | } 137 | if (await sayHello() !== 'world') { 138 | assert.fail(); 139 | } 140 | ctx.dispose(); 141 | } 142 | 143 | async function test10() { 144 | const { context } = require('./index.node'); 145 | const ctx = await context({ 146 | loadModuleContent(moduleName) { 147 | if (moduleName !== 'someDir/b.js') { 148 | assert.fail(); 149 | } 150 | return `export const msg = 'hello';` 151 | } 152 | }); 153 | const { result } = await ctx.load(` 154 | import { msg } from '../b.js' 155 | export const result = msg; 156 | `, { 157 | filename: 'someDir/someSubDir/a.js' 158 | }); 159 | if (result !== 'hello') { 160 | assert.fail(); 161 | } 162 | ctx.dispose(); 163 | } 164 | 165 | async function test11() { 166 | const { context } = require('./index.node'); 167 | const ctx = await context({ global: { 168 | setTimeout: (cb, ms) => { 169 | setTimeout(cb, ms) 170 | }, 171 | console 172 | }}); 173 | const f = ctx.def(` 174 | setTimeout(() => { 175 | console.log('callback'); 176 | }, 0); 177 | `) 178 | f(); 179 | await new Promise(resolve => setTimeout(resolve, 100)); 180 | ctx.dispose(); 181 | } 182 | 183 | async function test12() { 184 | const { context } = require('./index.node'); 185 | const ctx = await context({ global: { 186 | console 187 | }}); 188 | await ctx.load(` 189 | const consoleLog = console.log; 190 | global.console.log = (...args) => { 191 | try { 192 | JSON.stringify(args) 193 | } catch(e) { 194 | consoleLog('ignore console.log with data that can not JSON.stringify: ' + e); 195 | return; 196 | } 197 | consoleLog(...args); 198 | }`); 199 | const f = ctx.def(` 200 | let a = {}; 201 | a.b = a; 202 | console.log('hello', a); 203 | `) 204 | f(); 205 | ctx.dispose(); 206 | } 207 | 208 | async function test13() { 209 | const { context } = require('./index.node'); 210 | const ctx = await context({ global: { 211 | someCallback() { 212 | console.log(ctx.currentStack); 213 | } 214 | }}); 215 | await ctx.load(` 216 | function someFunction() { 217 | someCallback() 218 | } 219 | __s__.inspect('someObj', { a: 'b' }); 220 | someFunction(); 221 | `); 222 | ctx.dispose(); 223 | } 224 | 225 | async function test14() { 226 | const { context } = require('./index.node'); 227 | const ctx = await context({ global: { 228 | console, 229 | wx: { 230 | request(options) { 231 | options.success('hello'); 232 | } 233 | } 234 | }}); 235 | await ctx.load(` 236 | wx.request({ 237 | url: 'http://baidu.com', 238 | success(data) { 239 | console.log(data); 240 | } 241 | }) 242 | `); 243 | ctx.dispose(); 244 | } 245 | 246 | async function test15() { 247 | const { context } = require('./index.node'); 248 | const ctx = await context(); 249 | ctx.inject('wx', { 250 | createSelectorQuery: ctx.wrapHostFunction(() => { 251 | return { 252 | select(selector) { 253 | return { selector }; 254 | } 255 | } 256 | }, { returnsHostObject: true }) 257 | }) 258 | const ret = ctx.def(` 259 | const query = wx.createSelectorQuery(); 260 | try { 261 | const ret = __s__.callMethod(query, 'select', '#the-id'); 262 | try { 263 | return __s__.getProp(ret, 'selector'); 264 | } finally { 265 | __s__.deleteHostObject(ret); 266 | } 267 | } finally { 268 | __s__.deleteHostObject(query); 269 | } 270 | `)(); 271 | if (ret !== '#the-id') { 272 | assert.fail(); 273 | } 274 | ctx.dispose(); 275 | } 276 | 277 | async function test16() { 278 | const { context } = require('./index.node'); 279 | const ctx = await context(); 280 | // should not save to global.cb, as arguments[0] will be disposed 281 | await ctx.def(`global.cb = arguments[0]`)(() => 100); 282 | try { 283 | ctx.def(`return cb()`)() 284 | } catch(e) { 285 | // Error: host function not found: {"__h__":10,"argIndex":0} 286 | if (!e.message.includes('argIndex')) { 287 | assert.fail(); 288 | } 289 | } 290 | ctx.dispose(); 291 | } 292 | 293 | async function test17() { 294 | const { context } = require('./index.node'); 295 | const ctx = await context({ 296 | global: { 297 | setTimeout(cb) { 298 | if(cb() !== 100) { 299 | assert.fail(); 300 | } 301 | try { 302 | cb(); 303 | } catch(e) { 304 | // Error: callback {"__c__":1,"once":true} can only be callback once, if need to callback multiple times, use __s__.wrapCallback to manage callback lifetime explicitly 305 | if (!e.message.includes('manage callback lifetime explicitly')) { 306 | e.fail(); 307 | } 308 | } 309 | } 310 | } 311 | }); 312 | await ctx.load(`setTimeout(() => 100)`); 313 | ctx.dispose(); 314 | } 315 | 316 | async function test18() { 317 | const { context } = require('./index.node'); 318 | const ctx = await context({ global: { console }}); 319 | ctx.inject('global', { 320 | createABC: ctx.wrapHostFunction(() => { 321 | return { val: 100 } 322 | }, { returnsHostObject: true }), 323 | useABC: (arg) => { 324 | if (arg?.val !== 100) { 325 | assert.fail(); 326 | } 327 | } 328 | }) 329 | await ctx.load(` 330 | useABC(createABC()); 331 | `); 332 | ctx.dispose(); 333 | } 334 | 335 | async function main() { 336 | await Promise.all([test1(), test2(), test3(), test4(), test6()]) 337 | await test5(); 338 | await test7(); 339 | await test8(); 340 | await test9(); 341 | await test10(); 342 | await test11(); 343 | await test12(); 344 | await test13(); 345 | await test14(); 346 | await test15(); 347 | await test16(); 348 | await test17(); 349 | await test18(); 350 | } 351 | 352 | main(); -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 3 | 4 | module.exports = { 5 | mode: "development", 6 | entry: './test.browser.js', 7 | output: { 8 | filename: 'index.js', 9 | path: path.resolve(__dirname, 'dist'), 10 | }, 11 | plugins: [new HtmlWebpackPlugin()], 12 | }; 13 | --------------------------------------------------------------------------------