From a08f2f4a438f105043e8c9377ef99c3b241f65f5 Mon Sep 17 00:00:00 2001 From: xnacly <47723417+xnacly@users.noreply.github.com> Date: Wed, 22 Jul 2026 15:04:27 +0200 Subject: [PATCH 1/6] Squashed 'vendor/quickjs/' changes from f113949..04be246 04be246 run-test262: when updating errors, sort them so that it gives the same result with several threads 42d08be optimized Array.prototype.slice and Array.prototype.splice 762e6fc fixed typo in commit 445624b 088cf5e inlined the float case in relational operators 8f0c037 use JSValueConst arguments for js_strict_eq2() 445624b inlined more cases for equality operators 3d5e064 new release ccfe076 Check return values of fallible functions (#518) 8b04550 Add fuzz targets for ES6 modules, JSON, RegExp, and bytecode (#512) cfc846a doc update ad1e7bd keep more generic cpu_count() for non Linux systems 92a3d4d fixed microbench with d8 8e97f24 faster add, sub and mul for mixed integer floating point operands 594f965 exclude few very slow and currently useless test262 tests 10c81b1 fixed large performance regression with recent GCC versions e2c01df add optional define to add asm labels for each opcode to ease code inspection and profiling 2504823 added multi-threading support in run-test262 (initial patch by bnoordhuis) - fixed unsafe thread termination in show_progress() - use the number of physical cores by default - added -T option to force the number of threads - avoid hardcoding the maximum number of threads 458992e removed CONFIG_AGENT 774e30e fixed win32 compilation f838177 ArrayBuffer.prototype.transfer: avoid destroying the old array buffer in case the allocation of the new array buffer fails. Also avoid setting opaque = NULL for the custom array buffer free function 14a1536 add line number info in variable initialization (#458) ecd05ea use the host malloc() for all allocations when ASAN is enabled 4a13c45 fixed setuid() / setgid() ordering (#517) e6c2be8 disable inlining of malloc() wrappers to avoid problems with LTO (#515) 163b9b7 added poll() support so that the number of file handles is not limited (#502) 8a3aaa1 Add run-test262 --no-can-block flag (#505) d73189d fixed compilation with clang 99e9181 added custom malloc for small blocks (11% faster on bench-v8) e182e3d Add Uint8Array base64/hex methods (initial patch by saghul) 1f50b39 memcpy() (currently) has undefined behavior if a pointer is NULL with zero size (#500) b1b4733 fixed error handling in os.exec() (#503) c1ba371 added missing NULL pointer check (#504) 9b90125 use __EMSCRIPTEN__ define instead of EMSCRIPTEN efda450 fixed (again) JS atomics in case of typed array resizing - use same function name as quickjs-ng for js_atomics_get_buf() (#508) d417caf added libunicode unicode version (#509) 6b62098 Merge pull request #496 from bptato/fix-hex-access 8e09295 Merge pull request #495 from nickva/fix-initializer-string-warning 66afb72 Fix member access on non-decimal numeric literals d38eea9 Avoid initializer-string warning for the digits array d7ae12a added JSON.parse source text access a31dcef added basic protection against too large function in serialized bytecode 5022f2b fixed use-after-free via re-entrant GC in FinalizationRegistry weak reference cleanup (#494) e7b9f21 Fix async generator lifecycle bug (bnoordhuis) (quickjs-ng/quickjs#1355) 4d16546 fixed RegExp.escape 46bd985 fixed buffer overflow in Atomics with resizable typed arrays 16d6947 typo f1b63fc Fix memory leak in Iterator.prototype.map (saghul) (#493) 841dd03 fixed buffer overflow in TypedArray.prototype.with (#492) 69090b9 Fix stack underflow with generator in iterable (saghul) (#488) aaf0174 test262 update 68caa5f fixed TypedArray constructor semantics which removes a buffer overflow (#478) 0989d4c fixed TypedArray sort semantics by copying the array before calling the comparison function. Fixed buffer overflow when the array is resized (#477) 4c722ce modified js_allocate_fast_array() so that the array is fully initialized. It is slightly slower but avoids several nasty bugs (#471) git-subtree-dir: vendor/quickjs git-subtree-split: 04be246001599f5995fa2f2d8c91a0f198d3f34c --- .clang-format | 2 - .eslintignore | 19 - .eslintrc.cjs | 37 - .gitattributes | 2 - .../.github => .github}/workflows/ci.yml | 0 .github/workflows/main.yml | 100 - .gitignore | 65 +- .npmignore | 2 - .prettierignore | 15 - .prettierrc | 7 - .vscode/c_cpp_properties.json | 45 - .vscode/settings.json | 17 - .yarn/releases/yarn-4.0.2.cjs | 893 - .yarnrc.yml | 7 - CHANGELOG.md | 260 - CLAUDE.md | 34 - vendor/quickjs/Changelog => Changelog | 4 + LICENSE | 17 +- vendor/quickjs/Makefile => Makefile | 11 +- README.md | 928 - vendor/quickjs/TODO => TODO | 2 +- VERSION | 1 + c/interface.c | 1234 - c/sanitize_test.c | 8 - c/test.c | 21 - .../compat => compat}/test-closefrom.c | 0 vendor/quickjs/cutils.c => cutils.c | 2 +- vendor/quickjs/cutils.h => cutils.h | 0 doc/.nojekyll | 1 - .../quickjs-asmjs-mjs-release-sync/README.md | 91 - .../quickjs-asmjs-mjs-release-sync/exports.md | 40 - doc/@jitl/quickjs-ffi-types/README.md | 13 - doc/@jitl/quickjs-ffi-types/exports.md | 576 - .../interfaces/EmscriptenModule.md | 417 - .../interfaces/EmscriptenModuleLoader.md | 29 - .../EmscriptenModuleLoaderOptions.md | 136 - .../QuickJSAsyncEmscriptenModule.md | 511 - .../interfaces/QuickJSAsyncFFI.md | 1618 - .../interfaces/QuickJSAsyncVariant.md | 67 - .../interfaces/QuickJSEmscriptenModule.md | 507 - .../interfaces/QuickJSFFI.md | 1399 - .../interfaces/QuickJSSyncVariant.md | 67 - .../interfaces/SourceMapData.md | 59 - .../README.md | 110 - .../exports.md | 40 - .../quickjs-ng-wasmfile-debug-sync/README.md | 105 - .../quickjs-ng-wasmfile-debug-sync/exports.md | 40 - .../README.md | 106 - .../exports.md | 40 - .../README.md | 99 - .../exports.md | 40 - .../README.md | 99 - .../exports.md | 40 - .../README.md | 94 - .../exports.md | 40 - .../README.md | 95 - .../exports.md | 40 - .../README.md | 88 - .../exports.md | 40 - .../README.md | 99 - .../exports.md | 40 - .../README.md | 94 - .../exports.md | 40 - .../README.md | 95 - .../exports.md | 40 - .../README.md | 88 - .../exports.md | 40 - .../README.md | 99 - .../exports.md | 40 - .../README.md | 94 - .../exports.md | 40 - .../README.md | 95 - .../exports.md | 40 - .../README.md | 88 - .../exports.md | 40 - .../quickjs-wasmfile-debug-asyncify/README.md | 110 - .../exports.md | 40 - .../quickjs-wasmfile-debug-sync/README.md | 105 - .../quickjs-wasmfile-debug-sync/exports.md | 40 - .../README.md | 106 - .../exports.md | 40 - .../quickjs-wasmfile-release-sync/README.md | 99 - .../quickjs-wasmfile-release-sync/exports.md | 40 - doc/README.md | 936 - doc/packages.md | 36 - doc/quickjs-emscripten-core/README.md | 376 - .../classes/DisposableFail.md | 246 - .../classes/DisposableSuccess.md | 255 - .../classes/Lifetime.md | 440 - .../classes/QuickJSAsyncContext.md | 1701 - .../classes/QuickJSAsyncRuntime.md | 530 - .../classes/QuickJSAsyncWASMModule.md | 163 - .../classes/QuickJSContext.md | 1551 - .../classes/QuickJSDeferredPromise.md | 253 - .../classes/QuickJSRuntime.md | 476 - .../classes/QuickJSWASMModule.md | 152 - doc/quickjs-emscripten-core/classes/Scope.md | 227 - .../classes/StaticLifetime.md | 463 - .../classes/TestQuickJSWASMModule.md | 192 - .../classes/UsingDisposable.md | 101 - .../classes/WeakLifetime.md | 473 - doc/quickjs-emscripten-core/exports.md | 1433 - .../interfaces/AsyncRuntimeOptions.md | 136 - .../interfaces/ContextEvalOptions.md | 85 - .../interfaces/ContextOptions.md | 44 - .../interfaces/CustomizeVariantOptions.md | 180 - .../interfaces/Disposable.md | 65 - .../interfaces/EmscriptenModule.md | 417 - .../interfaces/EmscriptenModuleLoader.md | 29 - .../EmscriptenModuleLoaderOptions.md | 136 - .../interfaces/JSModuleLoader.md | 29 - .../interfaces/JSModuleLoaderAsync.md | 29 - .../interfaces/JSModuleNormalizer.md | 51 - .../interfaces/JSModuleNormalizerAsync.md | 33 - .../interfaces/JSPromiseStateFulfilled.md | 64 - .../interfaces/JSPromiseStatePending.md | 48 - .../interfaces/JSPromiseStateRejected.md | 40 - .../interfaces/LowLevelJavascriptVm.md | 296 - .../interfaces/ModuleEvalOptions.md | 71 - .../QuickJSAsyncEmscriptenModule.md | 511 - .../interfaces/QuickJSAsyncFFI.md | 1618 - .../interfaces/QuickJSAsyncVariant.md | 67 - .../interfaces/QuickJSEmscriptenModule.md | 507 - .../interfaces/QuickJSFFI.md | 1399 - .../interfaces/QuickJSSyncVariant.md | 67 - .../interfaces/RuntimeOptions.md | 136 - .../interfaces/RuntimeOptionsBase.md | 98 - .../interfaces/SourceMapData.md | 59 - .../interfaces/VmPropertyDescriptor.md | 95 - .../namespaces/errors/README.md | 29 - .../errors/classes/QuickJSAsyncifyError.md | 59 - .../classes/QuickJSAsyncifySuspended.md | 59 - .../QuickJSEmptyGetOwnPropertyNames.md | 59 - .../classes/QuickJSEmscriptenModuleError.md | 59 - .../classes/QuickJSMemoryLeakDetected.md | 59 - .../errors/classes/QuickJSNotImplemented.md | 59 - .../errors/classes/QuickJSPromisePending.md | 59 - .../errors/classes/QuickJSUnknownIntrinsic.md | 80 - .../errors/classes/QuickJSUnwrapError.md | 85 - .../errors/classes/QuickJSUseAfterFree.md | 59 - .../errors/classes/QuickJSWrongOwner.md | 59 - doc/quickjs-emscripten/README.md | 956 - .../classes/DisposableFail.md | 246 - .../classes/DisposableSuccess.md | 255 - doc/quickjs-emscripten/classes/Lifetime.md | 440 - .../classes/QuickJSAsyncContext.md | 1701 - .../classes/QuickJSAsyncRuntime.md | 530 - .../classes/QuickJSAsyncWASMModule.md | 163 - .../classes/QuickJSContext.md | 1551 - .../classes/QuickJSDeferredPromise.md | 253 - .../classes/QuickJSRuntime.md | 476 - .../classes/QuickJSWASMModule.md | 152 - doc/quickjs-emscripten/classes/Scope.md | 227 - .../classes/StaticLifetime.md | 463 - .../classes/TestQuickJSWASMModule.md | 192 - .../classes/UsingDisposable.md | 101 - .../classes/WeakLifetime.md | 473 - doc/quickjs-emscripten/exports.md | 1704 - .../interfaces/AsyncRuntimeOptions.md | 136 - .../interfaces/ContextEvalOptions.md | 85 - .../interfaces/ContextOptions.md | 44 - .../interfaces/CustomizeVariantOptions.md | 180 - .../interfaces/Disposable.md | 65 - .../interfaces/EmscriptenModule.md | 417 - .../interfaces/EmscriptenModuleLoader.md | 29 - .../EmscriptenModuleLoaderOptions.md | 136 - .../interfaces/JSModuleLoader.md | 29 - .../interfaces/JSModuleLoaderAsync.md | 29 - .../interfaces/JSModuleNormalizer.md | 51 - .../interfaces/JSModuleNormalizerAsync.md | 33 - .../interfaces/JSPromiseStateFulfilled.md | 64 - .../interfaces/JSPromiseStatePending.md | 48 - .../interfaces/JSPromiseStateRejected.md | 40 - .../interfaces/LowLevelJavascriptVm.md | 296 - .../interfaces/ModuleEvalOptions.md | 71 - .../QuickJSAsyncEmscriptenModule.md | 511 - .../interfaces/QuickJSAsyncFFI.md | 1618 - .../interfaces/QuickJSAsyncVariant.md | 67 - .../interfaces/QuickJSEmscriptenModule.md | 507 - .../interfaces/QuickJSFFI.md | 1399 - .../interfaces/QuickJSSyncVariant.md | 67 - .../interfaces/RuntimeOptions.md | 136 - .../interfaces/RuntimeOptionsBase.md | 98 - .../interfaces/SourceMapData.md | 59 - .../interfaces/VmPropertyDescriptor.md | 95 - .../namespaces/errors/README.md | 29 - .../errors/classes/QuickJSAsyncifyError.md | 59 - .../classes/QuickJSAsyncifySuspended.md | 59 - .../QuickJSEmptyGetOwnPropertyNames.md | 59 - .../classes/QuickJSEmscriptenModuleError.md | 59 - .../classes/QuickJSMemoryLeakDetected.md | 59 - .../errors/classes/QuickJSNotImplemented.md | 59 - .../errors/classes/QuickJSPromisePending.md | 59 - .../errors/classes/QuickJSUnknownIntrinsic.md | 80 - .../errors/classes/QuickJSUnwrapError.md | 85 - .../errors/classes/QuickJSUseAfterFree.md | 59 - .../errors/classes/QuickJSWrongOwner.md | 59 - {vendor/quickjs/doc => doc}/quickjs.texi | 20 +- vendor/quickjs/dtoa.c => dtoa.c | 0 vendor/quickjs/dtoa.h => dtoa.h | 0 examples/bun-typescript/.gitignore | 2 - examples/bun-typescript/.npmrc | 2 - examples/bun-typescript/bun.lockb | Bin 1350 -> 0 bytes examples/bun-typescript/index.ts | 10 - examples/bun-typescript/package-lock.json | 96 - examples/bun-typescript/package.json | 18 - examples/bun-typescript/tsconfig.json | 10 - examples/cloudflare-workers/.editorconfig | 13 - examples/cloudflare-workers/.gitignore | 4 - examples/cloudflare-workers/.prettierrc | 6 - examples/cloudflare-workers/README.md | 11 - .../copy-wasm-file-into-src.sh | 25 - examples/cloudflare-workers/package-lock.json | 1238 - examples/cloudflare-workers/package.json | 15 - .../src/DEBUG_SYNC.wasm.map | 1 - .../cloudflare-workers/src/cloudflare.d.ts | 7 - examples/cloudflare-workers/src/index.mts | 41 - examples/cloudflare-workers/tsconfig.json | 103 - examples/cloudflare-workers/wrangler.toml | 4 - examples/create-react-app/.gitignore | 23 - examples/create-react-app/.npmrc | 2 - examples/create-react-app/README.md | 44 - examples/create-react-app/package-lock.json | 30065 --------- examples/create-react-app/package.json | 46 - examples/create-react-app/public/favicon.ico | Bin 3150 -> 0 bytes examples/create-react-app/public/index.html | 40 - examples/create-react-app/public/logo192.png | Bin 5347 -> 0 bytes examples/create-react-app/public/logo512.png | Bin 9664 -> 0 bytes .../create-react-app/public/manifest.json | 25 - examples/create-react-app/public/robots.txt | 3 - examples/create-react-app/src/App.css | 17 - examples/create-react-app/src/App.test.tsx | 9 - examples/create-react-app/src/App.tsx | 67 - examples/create-react-app/src/index.css | 7 - examples/create-react-app/src/index.tsx | 17 - .../create-react-app/src/react-app-env.d.ts | 1 - .../create-react-app/src/serviceWorker.ts | 142 - examples/create-react-app/src/setupTests.ts | 5 - examples/create-react-app/tsconfig.json | 20 - examples/deno/.gitignore | 1 - examples/deno/README.md | 5 - examples/deno/main.ts | 4 - examples/deno/package-lock.json | 80 - examples/deno/package.json | 11 - examples/esmodule.html | 18 - {vendor/quickjs/examples => examples}/fib.c | 0 .../examples => examples}/fib_module.js | 0 .../quickjs-ng/examples => examples}/hello.js | 0 .../examples => examples}/hello_module.js | 0 examples/iife-global.html | 22 - .../v69/react-dom@17.0.2/es2015/server.js | 12 - .../v69/react@17.0.2/es2015/react.js | 10 - examples/imports/data.json | 1 - examples/imports/esm.sh/react-dom@17/server | 3 - examples/imports/esm.sh/react@17 | 3 - .../examples => examples}/message.json | 0 examples/node-minimal/main.mjs | 2 - examples/node-minimal/package-lock.json | 40 - examples/node-minimal/package.json | 16 - examples/node-minimal/quickjs.mjs | 7 - examples/node-typescript/.gitignore | 2 - examples/node-typescript/.npmrc | 2 - examples/node-typescript/index.ts | 10 - examples/node-typescript/package-lock.json | 97 - examples/node-typescript/package.json | 17 - examples/node-typescript/tsconfig.json | 10 - .../examples => examples}/pi_bigint.js | 0 {vendor/quickjs/examples => examples}/point.c | 0 .../examples => examples}/test_fib.js | 0 .../examples => examples}/test_point.js | 0 examples/vite-vue/.gitignore | 24 - examples/vite-vue/.npmrc | 2 - examples/vite-vue/.vscode/extensions.json | 3 - examples/vite-vue/README.md | 7 - examples/vite-vue/index.html | 13 - examples/vite-vue/package-lock.json | 990 - examples/vite-vue/package.json | 25 - examples/vite-vue/public/vite.svg | 1 - examples/vite-vue/src/App.vue | 22 - examples/vite-vue/src/assets/vue.svg | 1 - .../vite-vue/src/components/HelloWorld.vue | 45 - examples/vite-vue/src/main.js | 5 - examples/vite-vue/src/quickjs.ts | 12 - examples/vite-vue/src/style.css | 79 - examples/vite-vue/vite.config.js | 7 - exportedRuntimeMethods.asyncify.json | 1 - exportedRuntimeMethods.json | 1 - {vendor/quickjs/fuzz => fuzz}/README | 0 {vendor/quickjs/fuzz => fuzz}/fuzz.dict | 0 fuzz/fuzz_bytecode.c | 142 + {vendor/quickjs/fuzz => fuzz}/fuzz_common.c | 0 {vendor/quickjs/fuzz => fuzz}/fuzz_common.h | 0 {vendor/quickjs/fuzz => fuzz}/fuzz_compile.c | 0 {vendor/quickjs/fuzz => fuzz}/fuzz_eval.c | 0 fuzz/fuzz_json.c | 131 + fuzz/fuzz_module_export.c | 105 + {vendor/quickjs/fuzz => fuzz}/fuzz_regexp.c | 0 fuzz/fuzz_regexp_compile.c | 177 + .../quickjs/fuzz => fuzz}/generate_dict.js | 0 .../libregexp-opcode.h => libregexp-opcode.h | 0 vendor/quickjs/libregexp.c => libregexp.c | 0 vendor/quickjs/libregexp.h => libregexp.h | 0 .../libunicode-table.h => libunicode-table.h | 0 vendor/quickjs/libunicode.c => libunicode.c | 3 +- vendor/quickjs/libunicode.h => libunicode.h | 5 + vendor/quickjs-ng/list.h => list.h | 0 package.json | 79 - packages/internal-tsconfig/.gitignore | 3 - packages/internal-tsconfig/package.json | 10 - packages/internal-tsconfig/tsconfig.json | 82 - packages/internal-tsconfig/tsconfig.tsup.json | 5 - .../internal-tsconfig/tsup.base.config.ts | 22 - .../internal-tsconfig/vite.base.config.mts | 15 - packages/quickjs-emscripten-core/.gitignore | 1 - packages/quickjs-emscripten-core/LICENSE | 21 - packages/quickjs-emscripten-core/README.md | 341 - .../README.template.md | 70 - packages/quickjs-emscripten-core/package.json | 49 - .../src/QuickJSIterator.ts | 144 - .../src/asyncify-helpers.test.ts | 42 - .../src/asyncify-helpers.ts | 93 - .../src/context-asyncify.ts | 94 - .../quickjs-emscripten-core/src/context.ts | 1443 - packages/quickjs-emscripten-core/src/debug.ts | 29 - .../src/deferred-promise.ts | 186 - .../quickjs-emscripten-core/src/errors.ts | 58 - .../src/from-variant.ts | 315 - packages/quickjs-emscripten-core/src/index.ts | 51 - .../src/interrupt-helpers.ts | 15 - .../src/lifetime.test.ts | 156 - .../quickjs-emscripten-core/src/lifetime.ts | 479 - .../quickjs-emscripten-core/src/memory.ts | 94 - .../src/module-asyncify.ts | 112 - .../src/module-test.ts | 87 - .../quickjs-emscripten-core/src/module.ts | 445 - .../src/runtime-asyncify.ts | 95 - .../quickjs-emscripten-core/src/runtime.ts | 473 - packages/quickjs-emscripten-core/src/types.ts | 346 - .../src/vm-interface.ts | 89 - .../tsconfig.build.json | 9 - .../quickjs-emscripten-core/tsconfig.json | 10 - .../quickjs-emscripten-core/tsup.config.ts | 5 - packages/quickjs-emscripten-core/typedoc.js | 4 - .../quickjs-emscripten-core/vite.config.mts | 2 - packages/quickjs-emscripten/.gitignore | 2 - packages/quickjs-emscripten/LICENSE | 21 - .../quickjs-emscripten/makeTestPackageJson.ts | 6 - packages/quickjs-emscripten/node.package.json | 5 - packages/quickjs-emscripten/package.json | 69 - packages/quickjs-emscripten/src/index.ts | 3 - packages/quickjs-emscripten/src/leak.test.ts | 192 - packages/quickjs-emscripten/src/mod.ts | 79 - .../quickjs-emscripten/src/package.test.ts | 21 - .../src/quickjs-in-quickjs-node-test.mts | 264 - .../quickjs-emscripten/src/quickjs.test.ts | 1555 - .../quickjs-emscripten/src/readme.test.ts | 323 - .../src/variant-node-test-cjs.cts | 18 - .../src/variant-node-test-mjs.mts | 21 - .../src/variant-test-suite.ts | 126 - .../src/variant-vi-cjs.test.cts | 7 - .../src/variant-vi-mjs.test.mts | 7 - .../quickjs-emscripten/src/variants.iife.ts | 53 - packages/quickjs-emscripten/src/variants.ts | 56 - .../json-generator-dot-com-1024-rows.json | 37930 ----------- .../quickjs-emscripten/tsconfig.build.json | 10 - .../quickjs-emscripten/tsconfig.iife.json | 8 - packages/quickjs-emscripten/tsconfig.json | 11 - packages/quickjs-emscripten/tsup.config.ts | 39 - packages/quickjs-emscripten/typedoc.js | 4 - packages/quickjs-emscripten/vite.config.mts | 2 - packages/quickjs-ffi-types/.gitignore | 1 - packages/quickjs-ffi-types/LICENSE | 21 - packages/quickjs-ffi-types/README.md | 5 - packages/quickjs-ffi-types/package.json | 36 - .../quickjs-ffi-types/src/emscripten-types.ts | 250 - packages/quickjs-ffi-types/src/ffi-async.ts | 266 - packages/quickjs-ffi-types/src/ffi-types.ts | 216 - packages/quickjs-ffi-types/src/ffi.ts | 214 - packages/quickjs-ffi-types/src/index.ts | 7 - .../quickjs-ffi-types/src/variant-types.ts | 50 - packages/quickjs-ffi-types/tsconfig.json | 7 - packages/quickjs-ffi-types/tsup.config.ts | 3 - packages/quickjs-ffi-types/typedoc.js | 5 - packages/quickjs-for-quickjs/LICENSE | 21 - packages/quickjs-for-quickjs/README.md | 70 - .../quickjs-for-quickjs/example/node-host.mjs | 51 - .../example/quickjs-host.mjs | 49 - packages/quickjs-for-quickjs/package.json | 40 - packages/quickjs-for-quickjs/src/index.mts | 52 - packages/quickjs-for-quickjs/tsconfig.json | 7 - packages/quickjs-for-quickjs/tsup.config.ts | 10 - packages/quickjs-for-quickjs/yodawg.jpg | Bin 58744 -> 0 bytes .../LICENSE | 47 - .../Makefile | 183 - .../README.md | 74 - .../package.json | 48 - .../src/ffi.ts | 419 - .../src/index.ts | 24 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 49 - .../Makefile | 192 - .../README.md | 93 - .../package.json | 61 - .../src/ffi.ts | 526 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 49 - .../Makefile | 186 - .../README.md | 88 - .../package.json | 61 - .../src/ffi.ts | 419 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 49 - .../Makefile | 187 - .../README.md | 89 - .../package.json | 61 - .../src/ffi.ts | 523 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 49 - .../Makefile | 180 - .../README.md | 82 - .../package.json | 61 - .../src/ffi.ts | 419 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 193 - .../README.md | 82 - .../package.json | 55 - .../src/ffi.ts | 526 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 187 - .../README.md | 77 - .../package.json | 55 - .../src/ffi.ts | 419 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 188 - .../README.md | 78 - .../package.json | 55 - .../src/ffi.ts | 523 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 181 - .../README.md | 71 - .../package.json | 55 - .../src/ffi.ts | 419 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 193 - .../README.md | 82 - .../package.json | 56 - .../src/ffi.ts | 526 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 187 - .../README.md | 77 - .../package.json | 56 - .../src/ffi.ts | 419 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 188 - .../README.md | 78 - .../package.json | 56 - .../src/ffi.ts | 523 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 181 - .../README.md | 71 - .../package.json | 56 - .../src/ffi.ts | 419 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 193 - .../README.md | 82 - .../package.json | 53 - .../src/ffi.ts | 526 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 187 - .../README.md | 77 - .../package.json | 53 - .../src/ffi.ts | 419 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 188 - .../README.md | 78 - .../package.json | 53 - .../src/ffi.ts | 523 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 181 - .../README.md | 71 - .../package.json | 53 - .../src/ffi.ts | 419 - .../src/index.ts | 27 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 192 - .../README.md | 93 - .../package.json | 61 - .../src/ffi.ts | 526 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 186 - .../README.md | 88 - .../package.json | 61 - .../src/ffi.ts | 419 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 187 - .../README.md | 89 - .../package.json | 61 - .../src/ffi.ts | 523 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - .../LICENSE | 47 - .../Makefile | 180 - .../README.md | 82 - .../package.json | 61 - .../src/ffi.ts | 419 - .../src/index.ts | 25 - .../tsconfig.json | 1 - .../tsup.config.ts | 7 - .../typedoc.json | 1 - vendor/quickjs/qjs.c => qjs.c | 2 +- vendor/quickjs/qjsc.c => qjsc.c | 0 .../quickjs/quickjs-atom.h => quickjs-atom.h | 5 + .../quickjs/quickjs-libc.c => quickjs-libc.c | 95 +- .../quickjs/quickjs-libc.h => quickjs-libc.h | 0 .../quickjs-opcode.h => quickjs-opcode.h | 0 vendor/quickjs/quickjs.c => quickjs.c | 3294 +- vendor/quickjs/quickjs.h => quickjs.h | 25 +- .../readme-cosmo.txt => readme-cosmo.txt | 0 vendor/quickjs/readme.txt => readme.txt | 0 vendor/quickjs/release.sh => release.sh | 2 +- vendor/quickjs/repl.js => repl.js | 0 vendor/quickjs/run-test262.c => run-test262.c | 597 +- scripts/check-packages-built.ts | 101 - scripts/downloadEcmaScriptModules.ts | 82 - scripts/emcc.sh | 50 - scripts/generate.ts | 412 - scripts/helpers.ts | 204 - scripts/prepareVariants.ts | 930 - scripts/set-version.ts | 31 - scripts/smoketest-create-react-app.ts | 6 - scripts/smoketest-deno.ts | 10 - scripts/smoketest-node-minimal.ts | 9 - scripts/smoketest-node.ts | 7 - scripts/smoketest-vite.ts | 6 - templates/Variant.mk | 175 - templates/emscripten-module.ASYNCIFY.d.ts | 14 - templates/emscripten-module.SYNC.d.ts | 10 - templates/pre-extension.js | 16 - templates/pre-sourceMapJson.js | 13 - templates/pre-wasmMemory.js | 6 - templates/pre-wasmOffsetConverter.js | 26 - vendor/quickjs/test262.conf => test262.conf | 18 +- .../test262_errors.txt => test262_errors.txt | 8 - vendor/quickjs/test262o.conf => test262o.conf | 0 ...test262o_errors.txt => test262o_errors.txt | 0 {vendor/quickjs/tests => tests}/assert.js | 0 {vendor/quickjs/tests => tests}/bjson.c | 0 .../tests => tests}/fixture_cyclic_import.js | 0 {vendor/quickjs/tests => tests}/microbench.js | 10 +- {vendor/quickjs/tests => tests}/test262.patch | 0 .../quickjs/tests => tests}/test_bigint.js | 0 {vendor/quickjs/tests => tests}/test_bjson.js | 0 .../quickjs/tests => tests}/test_builtin.js | 0 .../tests => tests}/test_closure.js | 0 .../tests => tests}/test_cyclic_import.js | 0 .../quickjs/tests => tests}/test_language.js | 11 + {vendor/quickjs/tests => tests}/test_loop.js | 0 tests/test_rw_handler.js | 57 + {vendor/quickjs/tests => tests}/test_std.js | 0 .../quickjs/tests => tests}/test_worker.js | 0 .../tests => tests}/test_worker_module.js | 0 tsconfig.json | 7 - typedoc.base.js | 23 - typedoc.js | 15 - ...unicode_download.sh => unicode_download.sh | 0 vendor/quickjs/unicode_gen.c => unicode_gen.c | 0 .../unicode_gen_def.h => unicode_gen_def.h | 0 variants.json | 1235 - vendor/quickjs-ng/.github/workflows/ci.yml | 456 - .../quickjs-ng/.github/workflows/release.yml | 163 - vendor/quickjs-ng/.gitignore | 9 - vendor/quickjs-ng/.gitmodules | 4 - vendor/quickjs-ng/CMakeLists.txt | 365 - vendor/quickjs-ng/LICENSE | 24 - vendor/quickjs-ng/Makefile | 95 - vendor/quickjs-ng/README.md | 5 - vendor/quickjs-ng/cutils.c | 677 - vendor/quickjs-ng/cutils.h | 443 - vendor/quickjs-ng/dirent_compat.h | 1166 - vendor/quickjs-ng/doc/quickjs.texi | 1045 - vendor/quickjs-ng/examples/fib.c | 72 - vendor/quickjs-ng/examples/hello_module.js | 6 - vendor/quickjs-ng/examples/point.c | 152 - vendor/quickjs-ng/getopt_compat.h | 653 - vendor/quickjs-ng/libbf.c | 8412 --- vendor/quickjs-ng/libbf.h | 535 - vendor/quickjs-ng/libregexp-opcode.h | 59 - vendor/quickjs-ng/libregexp.c | 2715 - vendor/quickjs-ng/libregexp.h | 87 - vendor/quickjs-ng/libunicode-table.h | 4484 -- vendor/quickjs-ng/libunicode.c | 1504 - vendor/quickjs-ng/libunicode.h | 117 - vendor/quickjs-ng/qjs.c | 516 - vendor/quickjs-ng/qjsc.c | 529 - vendor/quickjs-ng/quickjs-atom.h | 257 - vendor/quickjs-ng/quickjs-c-atomics.h | 54 - vendor/quickjs-ng/quickjs-libc.c | 3952 -- vendor/quickjs-ng/quickjs-libc.h | 59 - vendor/quickjs-ng/quickjs-opcode.h | 367 - vendor/quickjs-ng/quickjs.c | 51907 ---------------- vendor/quickjs-ng/quickjs.h | 1000 - vendor/quickjs-ng/repl.js | 1367 - vendor/quickjs-ng/run-test262.c | 2185 - vendor/quickjs-ng/test262 | 1 - vendor/quickjs-ng/test262.conf | 369 - vendor/quickjs-ng/test262_errors.txt | 12 - vendor/quickjs-ng/tests/bjson.c | 96 - vendor/quickjs-ng/tests/function_source.js | 14 - vendor/quickjs-ng/tests/microbench.js | 1055 - vendor/quickjs-ng/tests/test262.patch | 71 - vendor/quickjs-ng/tests/test_bigint.js | 139 - vendor/quickjs-ng/tests/test_bjson.js | 189 - vendor/quickjs-ng/tests/test_builtin.js | 889 - vendor/quickjs-ng/tests/test_language.js | 557 - vendor/quickjs-ng/tests/test_loop.js | 368 - .../quickjs-ng/tests/test_queue_microtask.js | 84 - vendor/quickjs-ng/tests/test_std.js | 276 - vendor/quickjs-ng/tests/test_worker.js | 63 - vendor/quickjs-ng/tests/test_worker_module.js | 31 - vendor/quickjs-ng/unicode_download.sh | 19 - vendor/quickjs-ng/unicode_gen.c | 2999 - vendor/quickjs-ng/unicode_gen_def.h | 291 - vendor/quickjs-ng/v8-tweak.js | 11 - vendor/quickjs-ng/v8.js | 52 - vendor/quickjs-ng/v8.sh | 6 - vendor/quickjs-ng/v8.txt | 1830 - vendor/quickjs-patches/0166-webkit-wasm.patch | 20 - vendor/quickjs/.gitignore | 31 - vendor/quickjs/LICENSE | 22 - vendor/quickjs/VERSION | 1 - vendor/quickjs/examples/fib_module.js | 10 - vendor/quickjs/examples/hello.js | 1 - vendor/quickjs/examples/pi_bigint.js | 118 - vendor/quickjs/examples/test_fib.js | 6 - vendor/quickjs/examples/test_point.js | 40 - vendor/quickjs/list.h | 99 - vendor/quickjs/tests/test_closure.js | 221 - yarn.lock | 7240 --- yodawg.jpg | Bin 58744 -> 0 bytes 711 files changed, 3823 insertions(+), 252868 deletions(-) delete mode 100644 .clang-format delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs delete mode 100644 .gitattributes rename {vendor/quickjs/.github => .github}/workflows/ci.yml (100%) delete mode 100644 .github/workflows/main.yml delete mode 100644 .npmignore delete mode 100644 .prettierignore delete mode 100644 .prettierrc delete mode 100644 .vscode/c_cpp_properties.json delete mode 100644 .vscode/settings.json delete mode 100755 .yarn/releases/yarn-4.0.2.cjs delete mode 100644 .yarnrc.yml delete mode 100644 CHANGELOG.md delete mode 100644 CLAUDE.md rename vendor/quickjs/Changelog => Changelog (97%) rename vendor/quickjs/Makefile => Makefile (97%) delete mode 100644 README.md rename vendor/quickjs/TODO => TODO (98%) create mode 100644 VERSION delete mode 100644 c/interface.c delete mode 100644 c/sanitize_test.c delete mode 100644 c/test.c rename {vendor/quickjs/compat => compat}/test-closefrom.c (100%) rename vendor/quickjs/cutils.c => cutils.c (99%) rename vendor/quickjs/cutils.h => cutils.h (100%) delete mode 100644 doc/.nojekyll delete mode 100644 doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md delete mode 100644 doc/@jitl/quickjs-asmjs-mjs-release-sync/exports.md delete mode 100644 doc/@jitl/quickjs-ffi-types/README.md delete mode 100644 doc/@jitl/quickjs-ffi-types/exports.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModule.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoader.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoaderOptions.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncEmscriptenModule.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncFFI.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncVariant.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/QuickJSEmscriptenModule.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/QuickJSFFI.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/QuickJSSyncVariant.md delete mode 100644 doc/@jitl/quickjs-ffi-types/interfaces/SourceMapData.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-debug-sync/exports.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-release-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md delete mode 100644 doc/@jitl/quickjs-ng-wasmfile-release-sync/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-debug-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-debug-sync/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-release-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-release-sync/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-browser-release-sync/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-debug-sync/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-release-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-cjs-release-sync/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-debug-sync/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-release-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md delete mode 100644 doc/@jitl/quickjs-singlefile-mjs-release-sync/exports.md delete mode 100644 doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-wasmfile-debug-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-wasmfile-debug-sync/README.md delete mode 100644 doc/@jitl/quickjs-wasmfile-debug-sync/exports.md delete mode 100644 doc/@jitl/quickjs-wasmfile-release-asyncify/README.md delete mode 100644 doc/@jitl/quickjs-wasmfile-release-asyncify/exports.md delete mode 100644 doc/@jitl/quickjs-wasmfile-release-sync/README.md delete mode 100644 doc/@jitl/quickjs-wasmfile-release-sync/exports.md delete mode 100644 doc/README.md delete mode 100644 doc/packages.md delete mode 100644 doc/quickjs-emscripten-core/README.md delete mode 100644 doc/quickjs-emscripten-core/classes/DisposableFail.md delete mode 100644 doc/quickjs-emscripten-core/classes/DisposableSuccess.md delete mode 100644 doc/quickjs-emscripten-core/classes/Lifetime.md delete mode 100644 doc/quickjs-emscripten-core/classes/QuickJSAsyncContext.md delete mode 100644 doc/quickjs-emscripten-core/classes/QuickJSAsyncRuntime.md delete mode 100644 doc/quickjs-emscripten-core/classes/QuickJSAsyncWASMModule.md delete mode 100644 doc/quickjs-emscripten-core/classes/QuickJSContext.md delete mode 100644 doc/quickjs-emscripten-core/classes/QuickJSDeferredPromise.md delete mode 100644 doc/quickjs-emscripten-core/classes/QuickJSRuntime.md delete mode 100644 doc/quickjs-emscripten-core/classes/QuickJSWASMModule.md delete mode 100644 doc/quickjs-emscripten-core/classes/Scope.md delete mode 100644 doc/quickjs-emscripten-core/classes/StaticLifetime.md delete mode 100644 doc/quickjs-emscripten-core/classes/TestQuickJSWASMModule.md delete mode 100644 doc/quickjs-emscripten-core/classes/UsingDisposable.md delete mode 100644 doc/quickjs-emscripten-core/classes/WeakLifetime.md delete mode 100644 doc/quickjs-emscripten-core/exports.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/AsyncRuntimeOptions.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/ContextEvalOptions.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/ContextOptions.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/CustomizeVariantOptions.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/Disposable.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/EmscriptenModule.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoader.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoaderOptions.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/JSModuleLoader.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/JSModuleLoaderAsync.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/JSModuleNormalizer.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/JSModuleNormalizerAsync.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/JSPromiseStateFulfilled.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/JSPromiseStatePending.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/JSPromiseStateRejected.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/LowLevelJavascriptVm.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/ModuleEvalOptions.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/QuickJSAsyncEmscriptenModule.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/QuickJSAsyncFFI.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/QuickJSAsyncVariant.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/QuickJSEmscriptenModule.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/QuickJSFFI.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/QuickJSSyncVariant.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/RuntimeOptions.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/RuntimeOptionsBase.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/SourceMapData.md delete mode 100644 doc/quickjs-emscripten-core/interfaces/VmPropertyDescriptor.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/README.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifyError.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifySuspended.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmscriptenModuleError.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSMemoryLeakDetected.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSNotImplemented.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSPromisePending.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnknownIntrinsic.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnwrapError.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUseAfterFree.md delete mode 100644 doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSWrongOwner.md delete mode 100644 doc/quickjs-emscripten/README.md delete mode 100644 doc/quickjs-emscripten/classes/DisposableFail.md delete mode 100644 doc/quickjs-emscripten/classes/DisposableSuccess.md delete mode 100644 doc/quickjs-emscripten/classes/Lifetime.md delete mode 100644 doc/quickjs-emscripten/classes/QuickJSAsyncContext.md delete mode 100644 doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md delete mode 100644 doc/quickjs-emscripten/classes/QuickJSAsyncWASMModule.md delete mode 100644 doc/quickjs-emscripten/classes/QuickJSContext.md delete mode 100644 doc/quickjs-emscripten/classes/QuickJSDeferredPromise.md delete mode 100644 doc/quickjs-emscripten/classes/QuickJSRuntime.md delete mode 100644 doc/quickjs-emscripten/classes/QuickJSWASMModule.md delete mode 100644 doc/quickjs-emscripten/classes/Scope.md delete mode 100644 doc/quickjs-emscripten/classes/StaticLifetime.md delete mode 100644 doc/quickjs-emscripten/classes/TestQuickJSWASMModule.md delete mode 100644 doc/quickjs-emscripten/classes/UsingDisposable.md delete mode 100644 doc/quickjs-emscripten/classes/WeakLifetime.md delete mode 100644 doc/quickjs-emscripten/exports.md delete mode 100644 doc/quickjs-emscripten/interfaces/AsyncRuntimeOptions.md delete mode 100644 doc/quickjs-emscripten/interfaces/ContextEvalOptions.md delete mode 100644 doc/quickjs-emscripten/interfaces/ContextOptions.md delete mode 100644 doc/quickjs-emscripten/interfaces/CustomizeVariantOptions.md delete mode 100644 doc/quickjs-emscripten/interfaces/Disposable.md delete mode 100644 doc/quickjs-emscripten/interfaces/EmscriptenModule.md delete mode 100644 doc/quickjs-emscripten/interfaces/EmscriptenModuleLoader.md delete mode 100644 doc/quickjs-emscripten/interfaces/EmscriptenModuleLoaderOptions.md delete mode 100644 doc/quickjs-emscripten/interfaces/JSModuleLoader.md delete mode 100644 doc/quickjs-emscripten/interfaces/JSModuleLoaderAsync.md delete mode 100644 doc/quickjs-emscripten/interfaces/JSModuleNormalizer.md delete mode 100644 doc/quickjs-emscripten/interfaces/JSModuleNormalizerAsync.md delete mode 100644 doc/quickjs-emscripten/interfaces/JSPromiseStateFulfilled.md delete mode 100644 doc/quickjs-emscripten/interfaces/JSPromiseStatePending.md delete mode 100644 doc/quickjs-emscripten/interfaces/JSPromiseStateRejected.md delete mode 100644 doc/quickjs-emscripten/interfaces/LowLevelJavascriptVm.md delete mode 100644 doc/quickjs-emscripten/interfaces/ModuleEvalOptions.md delete mode 100644 doc/quickjs-emscripten/interfaces/QuickJSAsyncEmscriptenModule.md delete mode 100644 doc/quickjs-emscripten/interfaces/QuickJSAsyncFFI.md delete mode 100644 doc/quickjs-emscripten/interfaces/QuickJSAsyncVariant.md delete mode 100644 doc/quickjs-emscripten/interfaces/QuickJSEmscriptenModule.md delete mode 100644 doc/quickjs-emscripten/interfaces/QuickJSFFI.md delete mode 100644 doc/quickjs-emscripten/interfaces/QuickJSSyncVariant.md delete mode 100644 doc/quickjs-emscripten/interfaces/RuntimeOptions.md delete mode 100644 doc/quickjs-emscripten/interfaces/RuntimeOptionsBase.md delete mode 100644 doc/quickjs-emscripten/interfaces/SourceMapData.md delete mode 100644 doc/quickjs-emscripten/interfaces/VmPropertyDescriptor.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/README.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifyError.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifySuspended.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmscriptenModuleError.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSMemoryLeakDetected.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSNotImplemented.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSPromisePending.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnknownIntrinsic.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnwrapError.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUseAfterFree.md delete mode 100644 doc/quickjs-emscripten/namespaces/errors/classes/QuickJSWrongOwner.md rename {vendor/quickjs/doc => doc}/quickjs.texi (97%) rename vendor/quickjs/dtoa.c => dtoa.c (100%) rename vendor/quickjs/dtoa.h => dtoa.h (100%) delete mode 100644 examples/bun-typescript/.gitignore delete mode 100644 examples/bun-typescript/.npmrc delete mode 100755 examples/bun-typescript/bun.lockb delete mode 100644 examples/bun-typescript/index.ts delete mode 100644 examples/bun-typescript/package-lock.json delete mode 100644 examples/bun-typescript/package.json delete mode 100644 examples/bun-typescript/tsconfig.json delete mode 100644 examples/cloudflare-workers/.editorconfig delete mode 100644 examples/cloudflare-workers/.gitignore delete mode 100644 examples/cloudflare-workers/.prettierrc delete mode 100644 examples/cloudflare-workers/README.md delete mode 100755 examples/cloudflare-workers/copy-wasm-file-into-src.sh delete mode 100644 examples/cloudflare-workers/package-lock.json delete mode 100644 examples/cloudflare-workers/package.json delete mode 100644 examples/cloudflare-workers/src/DEBUG_SYNC.wasm.map delete mode 100644 examples/cloudflare-workers/src/cloudflare.d.ts delete mode 100644 examples/cloudflare-workers/src/index.mts delete mode 100644 examples/cloudflare-workers/tsconfig.json delete mode 100644 examples/cloudflare-workers/wrangler.toml delete mode 100644 examples/create-react-app/.gitignore delete mode 100644 examples/create-react-app/.npmrc delete mode 100644 examples/create-react-app/README.md delete mode 100644 examples/create-react-app/package-lock.json delete mode 100644 examples/create-react-app/package.json delete mode 100644 examples/create-react-app/public/favicon.ico delete mode 100644 examples/create-react-app/public/index.html delete mode 100644 examples/create-react-app/public/logo192.png delete mode 100644 examples/create-react-app/public/logo512.png delete mode 100644 examples/create-react-app/public/manifest.json delete mode 100644 examples/create-react-app/public/robots.txt delete mode 100644 examples/create-react-app/src/App.css delete mode 100644 examples/create-react-app/src/App.test.tsx delete mode 100644 examples/create-react-app/src/App.tsx delete mode 100644 examples/create-react-app/src/index.css delete mode 100644 examples/create-react-app/src/index.tsx delete mode 100644 examples/create-react-app/src/react-app-env.d.ts delete mode 100644 examples/create-react-app/src/serviceWorker.ts delete mode 100644 examples/create-react-app/src/setupTests.ts delete mode 100644 examples/create-react-app/tsconfig.json delete mode 100644 examples/deno/.gitignore delete mode 100644 examples/deno/README.md delete mode 100755 examples/deno/main.ts delete mode 100644 examples/deno/package-lock.json delete mode 100644 examples/deno/package.json delete mode 100644 examples/esmodule.html rename {vendor/quickjs/examples => examples}/fib.c (100%) rename {vendor/quickjs-ng/examples => examples}/fib_module.js (100%) rename {vendor/quickjs-ng/examples => examples}/hello.js (100%) rename {vendor/quickjs/examples => examples}/hello_module.js (100%) delete mode 100644 examples/iife-global.html delete mode 100644 examples/imports/cdn.esm.sh/v69/react-dom@17.0.2/es2015/server.js delete mode 100644 examples/imports/cdn.esm.sh/v69/react@17.0.2/es2015/react.js delete mode 100644 examples/imports/data.json delete mode 100644 examples/imports/esm.sh/react-dom@17/server delete mode 100644 examples/imports/esm.sh/react@17 rename {vendor/quickjs/examples => examples}/message.json (100%) delete mode 100644 examples/node-minimal/main.mjs delete mode 100644 examples/node-minimal/package-lock.json delete mode 100644 examples/node-minimal/package.json delete mode 100644 examples/node-minimal/quickjs.mjs delete mode 100644 examples/node-typescript/.gitignore delete mode 100644 examples/node-typescript/.npmrc delete mode 100644 examples/node-typescript/index.ts delete mode 100644 examples/node-typescript/package-lock.json delete mode 100644 examples/node-typescript/package.json delete mode 100644 examples/node-typescript/tsconfig.json rename {vendor/quickjs-ng/examples => examples}/pi_bigint.js (100%) rename {vendor/quickjs/examples => examples}/point.c (100%) rename {vendor/quickjs-ng/examples => examples}/test_fib.js (100%) rename {vendor/quickjs-ng/examples => examples}/test_point.js (100%) delete mode 100644 examples/vite-vue/.gitignore delete mode 100644 examples/vite-vue/.npmrc delete mode 100644 examples/vite-vue/.vscode/extensions.json delete mode 100644 examples/vite-vue/README.md delete mode 100644 examples/vite-vue/index.html delete mode 100644 examples/vite-vue/package-lock.json delete mode 100644 examples/vite-vue/package.json delete mode 100644 examples/vite-vue/public/vite.svg delete mode 100644 examples/vite-vue/src/App.vue delete mode 100644 examples/vite-vue/src/assets/vue.svg delete mode 100644 examples/vite-vue/src/components/HelloWorld.vue delete mode 100644 examples/vite-vue/src/main.js delete mode 100644 examples/vite-vue/src/quickjs.ts delete mode 100644 examples/vite-vue/src/style.css delete mode 100644 examples/vite-vue/vite.config.js delete mode 100644 exportedRuntimeMethods.asyncify.json delete mode 100644 exportedRuntimeMethods.json rename {vendor/quickjs/fuzz => fuzz}/README (100%) rename {vendor/quickjs/fuzz => fuzz}/fuzz.dict (100%) create mode 100644 fuzz/fuzz_bytecode.c rename {vendor/quickjs/fuzz => fuzz}/fuzz_common.c (100%) rename {vendor/quickjs/fuzz => fuzz}/fuzz_common.h (100%) rename {vendor/quickjs/fuzz => fuzz}/fuzz_compile.c (100%) rename {vendor/quickjs/fuzz => fuzz}/fuzz_eval.c (100%) create mode 100644 fuzz/fuzz_json.c create mode 100644 fuzz/fuzz_module_export.c rename {vendor/quickjs/fuzz => fuzz}/fuzz_regexp.c (100%) create mode 100644 fuzz/fuzz_regexp_compile.c rename {vendor/quickjs/fuzz => fuzz}/generate_dict.js (100%) rename vendor/quickjs/libregexp-opcode.h => libregexp-opcode.h (100%) rename vendor/quickjs/libregexp.c => libregexp.c (100%) rename vendor/quickjs/libregexp.h => libregexp.h (100%) rename vendor/quickjs/libunicode-table.h => libunicode-table.h (100%) rename vendor/quickjs/libunicode.c => libunicode.c (99%) rename vendor/quickjs/libunicode.h => libunicode.h (97%) rename vendor/quickjs-ng/list.h => list.h (100%) delete mode 100644 package.json delete mode 100644 packages/internal-tsconfig/.gitignore delete mode 100644 packages/internal-tsconfig/package.json delete mode 100644 packages/internal-tsconfig/tsconfig.json delete mode 100644 packages/internal-tsconfig/tsconfig.tsup.json delete mode 100644 packages/internal-tsconfig/tsup.base.config.ts delete mode 100644 packages/internal-tsconfig/vite.base.config.mts delete mode 100644 packages/quickjs-emscripten-core/.gitignore delete mode 100644 packages/quickjs-emscripten-core/LICENSE delete mode 100644 packages/quickjs-emscripten-core/README.md delete mode 100644 packages/quickjs-emscripten-core/README.template.md delete mode 100644 packages/quickjs-emscripten-core/package.json delete mode 100644 packages/quickjs-emscripten-core/src/QuickJSIterator.ts delete mode 100644 packages/quickjs-emscripten-core/src/asyncify-helpers.test.ts delete mode 100644 packages/quickjs-emscripten-core/src/asyncify-helpers.ts delete mode 100644 packages/quickjs-emscripten-core/src/context-asyncify.ts delete mode 100644 packages/quickjs-emscripten-core/src/context.ts delete mode 100644 packages/quickjs-emscripten-core/src/debug.ts delete mode 100644 packages/quickjs-emscripten-core/src/deferred-promise.ts delete mode 100644 packages/quickjs-emscripten-core/src/errors.ts delete mode 100644 packages/quickjs-emscripten-core/src/from-variant.ts delete mode 100644 packages/quickjs-emscripten-core/src/index.ts delete mode 100644 packages/quickjs-emscripten-core/src/interrupt-helpers.ts delete mode 100644 packages/quickjs-emscripten-core/src/lifetime.test.ts delete mode 100644 packages/quickjs-emscripten-core/src/lifetime.ts delete mode 100644 packages/quickjs-emscripten-core/src/memory.ts delete mode 100644 packages/quickjs-emscripten-core/src/module-asyncify.ts delete mode 100644 packages/quickjs-emscripten-core/src/module-test.ts delete mode 100644 packages/quickjs-emscripten-core/src/module.ts delete mode 100644 packages/quickjs-emscripten-core/src/runtime-asyncify.ts delete mode 100644 packages/quickjs-emscripten-core/src/runtime.ts delete mode 100644 packages/quickjs-emscripten-core/src/types.ts delete mode 100644 packages/quickjs-emscripten-core/src/vm-interface.ts delete mode 100644 packages/quickjs-emscripten-core/tsconfig.build.json delete mode 100644 packages/quickjs-emscripten-core/tsconfig.json delete mode 100644 packages/quickjs-emscripten-core/tsup.config.ts delete mode 100644 packages/quickjs-emscripten-core/typedoc.js delete mode 100644 packages/quickjs-emscripten-core/vite.config.mts delete mode 100644 packages/quickjs-emscripten/.gitignore delete mode 100644 packages/quickjs-emscripten/LICENSE delete mode 100755 packages/quickjs-emscripten/makeTestPackageJson.ts delete mode 100644 packages/quickjs-emscripten/node.package.json delete mode 100644 packages/quickjs-emscripten/package.json delete mode 100644 packages/quickjs-emscripten/src/index.ts delete mode 100644 packages/quickjs-emscripten/src/leak.test.ts delete mode 100644 packages/quickjs-emscripten/src/mod.ts delete mode 100644 packages/quickjs-emscripten/src/package.test.ts delete mode 100644 packages/quickjs-emscripten/src/quickjs-in-quickjs-node-test.mts delete mode 100644 packages/quickjs-emscripten/src/quickjs.test.ts delete mode 100644 packages/quickjs-emscripten/src/readme.test.ts delete mode 100644 packages/quickjs-emscripten/src/variant-node-test-cjs.cts delete mode 100644 packages/quickjs-emscripten/src/variant-node-test-mjs.mts delete mode 100644 packages/quickjs-emscripten/src/variant-test-suite.ts delete mode 100644 packages/quickjs-emscripten/src/variant-vi-cjs.test.cts delete mode 100644 packages/quickjs-emscripten/src/variant-vi-mjs.test.mts delete mode 100644 packages/quickjs-emscripten/src/variants.iife.ts delete mode 100644 packages/quickjs-emscripten/src/variants.ts delete mode 100644 packages/quickjs-emscripten/test/json-generator-dot-com-1024-rows.json delete mode 100644 packages/quickjs-emscripten/tsconfig.build.json delete mode 100644 packages/quickjs-emscripten/tsconfig.iife.json delete mode 100644 packages/quickjs-emscripten/tsconfig.json delete mode 100644 packages/quickjs-emscripten/tsup.config.ts delete mode 100644 packages/quickjs-emscripten/typedoc.js delete mode 100644 packages/quickjs-emscripten/vite.config.mts delete mode 100644 packages/quickjs-ffi-types/.gitignore delete mode 100644 packages/quickjs-ffi-types/LICENSE delete mode 100644 packages/quickjs-ffi-types/README.md delete mode 100644 packages/quickjs-ffi-types/package.json delete mode 100644 packages/quickjs-ffi-types/src/emscripten-types.ts delete mode 100644 packages/quickjs-ffi-types/src/ffi-async.ts delete mode 100644 packages/quickjs-ffi-types/src/ffi-types.ts delete mode 100644 packages/quickjs-ffi-types/src/ffi.ts delete mode 100644 packages/quickjs-ffi-types/src/index.ts delete mode 100644 packages/quickjs-ffi-types/src/variant-types.ts delete mode 100644 packages/quickjs-ffi-types/tsconfig.json delete mode 100644 packages/quickjs-ffi-types/tsup.config.ts delete mode 100644 packages/quickjs-ffi-types/typedoc.js delete mode 100644 packages/quickjs-for-quickjs/LICENSE delete mode 100644 packages/quickjs-for-quickjs/README.md delete mode 100644 packages/quickjs-for-quickjs/example/node-host.mjs delete mode 100644 packages/quickjs-for-quickjs/example/quickjs-host.mjs delete mode 100644 packages/quickjs-for-quickjs/package.json delete mode 100644 packages/quickjs-for-quickjs/src/index.mts delete mode 100644 packages/quickjs-for-quickjs/tsconfig.json delete mode 100644 packages/quickjs-for-quickjs/tsup.config.ts delete mode 100644 packages/quickjs-for-quickjs/yodawg.jpg delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/LICENSE delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/Makefile delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/README.md delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/package.json delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/src/index.ts delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-asmjs-mjs-release-sync/typedoc.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/Makefile delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/README.md delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/package.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/LICENSE delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/Makefile delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/README.md delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/package.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/src/index.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-debug-sync/typedoc.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/Makefile delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/README.md delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/package.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/LICENSE delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/Makefile delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/README.md delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/package.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/src/index.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-ng-wasmfile-release-sync/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/Makefile delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/README.md delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/package.json delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/Makefile delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/README.md delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/package.json delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-debug-sync/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/Makefile delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/README.md delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/package.json delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-release-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/Makefile delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/README.md delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/package.json delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-browser-release-sync/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/Makefile delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/README.md delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/package.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/Makefile delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/README.md delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/package.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-debug-sync/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/Makefile delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/README.md delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/package.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/Makefile delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/README.md delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/package.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-cjs-release-sync/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/Makefile delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/README.md delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/package.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/Makefile delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/README.md delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/package.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-debug-sync/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/Makefile delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/README.md delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/package.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/LICENSE delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/Makefile delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/README.md delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/package.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/src/index.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-singlefile-mjs-release-sync/typedoc.json delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/Makefile delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/README.md delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/package.json delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-wasmfile-debug-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/LICENSE delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/Makefile delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/README.md delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/package.json delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/src/index.ts delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-wasmfile-debug-sync/typedoc.json delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/LICENSE delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/Makefile delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/README.md delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/package.json delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/src/ffi.ts delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/src/index.ts delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/tsconfig.json delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/tsup.config.ts delete mode 100644 packages/variant-quickjs-wasmfile-release-asyncify/typedoc.json delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/LICENSE delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/Makefile delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/README.md delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/package.json delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/src/ffi.ts delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/src/index.ts delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/tsconfig.json delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/tsup.config.ts delete mode 100644 packages/variant-quickjs-wasmfile-release-sync/typedoc.json rename vendor/quickjs/qjs.c => qjs.c (99%) rename vendor/quickjs/qjsc.c => qjsc.c (100%) rename vendor/quickjs/quickjs-atom.h => quickjs-atom.h (98%) rename vendor/quickjs/quickjs-libc.c => quickjs-libc.c (98%) rename vendor/quickjs/quickjs-libc.h => quickjs-libc.h (100%) rename vendor/quickjs/quickjs-opcode.h => quickjs-opcode.h (100%) rename vendor/quickjs/quickjs.c => quickjs.c (95%) rename vendor/quickjs/quickjs.h => quickjs.h (98%) rename vendor/quickjs/readme-cosmo.txt => readme-cosmo.txt (100%) rename vendor/quickjs/readme.txt => readme.txt (100%) rename vendor/quickjs/release.sh => release.sh (98%) rename vendor/quickjs/repl.js => repl.js (100%) rename vendor/quickjs/run-test262.c => run-test262.c (82%) delete mode 100755 scripts/check-packages-built.ts delete mode 100755 scripts/downloadEcmaScriptModules.ts delete mode 100755 scripts/emcc.sh delete mode 100755 scripts/generate.ts delete mode 100644 scripts/helpers.ts delete mode 100755 scripts/prepareVariants.ts delete mode 100755 scripts/set-version.ts delete mode 100755 scripts/smoketest-create-react-app.ts delete mode 100755 scripts/smoketest-deno.ts delete mode 100755 scripts/smoketest-node-minimal.ts delete mode 100755 scripts/smoketest-node.ts delete mode 100755 scripts/smoketest-vite.ts delete mode 100644 templates/Variant.mk delete mode 100644 templates/emscripten-module.ASYNCIFY.d.ts delete mode 100644 templates/emscripten-module.SYNC.d.ts delete mode 100644 templates/pre-extension.js delete mode 100644 templates/pre-sourceMapJson.js delete mode 100644 templates/pre-wasmMemory.js delete mode 100644 templates/pre-wasmOffsetConverter.js rename vendor/quickjs/test262.conf => test262.conf (91%) rename vendor/quickjs/test262_errors.txt => test262_errors.txt (89%) rename vendor/quickjs/test262o.conf => test262o.conf (100%) rename vendor/quickjs/test262o_errors.txt => test262o_errors.txt (100%) rename {vendor/quickjs/tests => tests}/assert.js (100%) rename {vendor/quickjs/tests => tests}/bjson.c (100%) rename {vendor/quickjs/tests => tests}/fixture_cyclic_import.js (100%) rename {vendor/quickjs/tests => tests}/microbench.js (99%) rename {vendor/quickjs/tests => tests}/test262.patch (100%) rename {vendor/quickjs/tests => tests}/test_bigint.js (100%) rename {vendor/quickjs/tests => tests}/test_bjson.js (100%) rename {vendor/quickjs/tests => tests}/test_builtin.js (100%) rename {vendor/quickjs-ng/tests => tests}/test_closure.js (100%) rename {vendor/quickjs/tests => tests}/test_cyclic_import.js (100%) rename {vendor/quickjs/tests => tests}/test_language.js (98%) rename {vendor/quickjs/tests => tests}/test_loop.js (100%) create mode 100644 tests/test_rw_handler.js rename {vendor/quickjs/tests => tests}/test_std.js (100%) rename {vendor/quickjs/tests => tests}/test_worker.js (100%) rename {vendor/quickjs/tests => tests}/test_worker_module.js (100%) delete mode 100644 tsconfig.json delete mode 100644 typedoc.base.js delete mode 100644 typedoc.js rename vendor/quickjs/unicode_download.sh => unicode_download.sh (100%) rename vendor/quickjs/unicode_gen.c => unicode_gen.c (100%) rename vendor/quickjs/unicode_gen_def.h => unicode_gen_def.h (100%) delete mode 100644 variants.json delete mode 100644 vendor/quickjs-ng/.github/workflows/ci.yml delete mode 100644 vendor/quickjs-ng/.github/workflows/release.yml delete mode 100644 vendor/quickjs-ng/.gitignore delete mode 100644 vendor/quickjs-ng/.gitmodules delete mode 100644 vendor/quickjs-ng/CMakeLists.txt delete mode 100644 vendor/quickjs-ng/LICENSE delete mode 100644 vendor/quickjs-ng/Makefile delete mode 100644 vendor/quickjs-ng/README.md delete mode 100644 vendor/quickjs-ng/cutils.c delete mode 100644 vendor/quickjs-ng/cutils.h delete mode 100644 vendor/quickjs-ng/dirent_compat.h delete mode 100644 vendor/quickjs-ng/doc/quickjs.texi delete mode 100644 vendor/quickjs-ng/examples/fib.c delete mode 100644 vendor/quickjs-ng/examples/hello_module.js delete mode 100644 vendor/quickjs-ng/examples/point.c delete mode 100644 vendor/quickjs-ng/getopt_compat.h delete mode 100644 vendor/quickjs-ng/libbf.c delete mode 100644 vendor/quickjs-ng/libbf.h delete mode 100644 vendor/quickjs-ng/libregexp-opcode.h delete mode 100644 vendor/quickjs-ng/libregexp.c delete mode 100644 vendor/quickjs-ng/libregexp.h delete mode 100644 vendor/quickjs-ng/libunicode-table.h delete mode 100644 vendor/quickjs-ng/libunicode.c delete mode 100644 vendor/quickjs-ng/libunicode.h delete mode 100644 vendor/quickjs-ng/qjs.c delete mode 100644 vendor/quickjs-ng/qjsc.c delete mode 100644 vendor/quickjs-ng/quickjs-atom.h delete mode 100644 vendor/quickjs-ng/quickjs-c-atomics.h delete mode 100644 vendor/quickjs-ng/quickjs-libc.c delete mode 100644 vendor/quickjs-ng/quickjs-libc.h delete mode 100644 vendor/quickjs-ng/quickjs-opcode.h delete mode 100644 vendor/quickjs-ng/quickjs.c delete mode 100644 vendor/quickjs-ng/quickjs.h delete mode 100644 vendor/quickjs-ng/repl.js delete mode 100644 vendor/quickjs-ng/run-test262.c delete mode 160000 vendor/quickjs-ng/test262 delete mode 100644 vendor/quickjs-ng/test262.conf delete mode 100644 vendor/quickjs-ng/test262_errors.txt delete mode 100644 vendor/quickjs-ng/tests/bjson.c delete mode 100644 vendor/quickjs-ng/tests/function_source.js delete mode 100644 vendor/quickjs-ng/tests/microbench.js delete mode 100644 vendor/quickjs-ng/tests/test262.patch delete mode 100644 vendor/quickjs-ng/tests/test_bigint.js delete mode 100644 vendor/quickjs-ng/tests/test_bjson.js delete mode 100644 vendor/quickjs-ng/tests/test_builtin.js delete mode 100644 vendor/quickjs-ng/tests/test_language.js delete mode 100644 vendor/quickjs-ng/tests/test_loop.js delete mode 100644 vendor/quickjs-ng/tests/test_queue_microtask.js delete mode 100644 vendor/quickjs-ng/tests/test_std.js delete mode 100644 vendor/quickjs-ng/tests/test_worker.js delete mode 100644 vendor/quickjs-ng/tests/test_worker_module.js delete mode 100755 vendor/quickjs-ng/unicode_download.sh delete mode 100644 vendor/quickjs-ng/unicode_gen.c delete mode 100644 vendor/quickjs-ng/unicode_gen_def.h delete mode 100644 vendor/quickjs-ng/v8-tweak.js delete mode 100644 vendor/quickjs-ng/v8.js delete mode 100755 vendor/quickjs-ng/v8.sh delete mode 100644 vendor/quickjs-ng/v8.txt delete mode 100644 vendor/quickjs-patches/0166-webkit-wasm.patch delete mode 100644 vendor/quickjs/.gitignore delete mode 100644 vendor/quickjs/LICENSE delete mode 100644 vendor/quickjs/VERSION delete mode 100644 vendor/quickjs/examples/fib_module.js delete mode 100644 vendor/quickjs/examples/hello.js delete mode 100644 vendor/quickjs/examples/pi_bigint.js delete mode 100644 vendor/quickjs/examples/test_fib.js delete mode 100644 vendor/quickjs/examples/test_point.js delete mode 100644 vendor/quickjs/list.h delete mode 100644 vendor/quickjs/tests/test_closure.js delete mode 100644 yarn.lock delete mode 100644 yodawg.jpg diff --git a/.clang-format b/.clang-format deleted file mode 100644 index 880cdc75f..000000000 --- a/.clang-format +++ /dev/null @@ -1,2 +0,0 @@ -BasedOnStyle: Google -ColumnLimit: 0 diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 6df0ac238..000000000 --- a/.eslintignore +++ /dev/null @@ -1,19 +0,0 @@ -ts/generated -quickjs -.yarn -doc -json-generator-dot-com-1024-rows.json -dist -examples/imports -examples/create-react-app -examples/node-typescript/*.js -build -emsdk-cache -.output -packages/internal-tsconfig/*.d.*ts -packages/internal-tsconfig/*.*js -packages/variant-*/src/ffi.ts -packages/quickjs-ffi-types/src/ffi*.ts -typedoc.js -typedoc.base.js -vendor diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 4118e4d10..000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,37 +0,0 @@ -/* eslint-env node */ -/* @type import("eslint").ESLintConfig */ -module.exports = { - plugins: ["@typescript-eslint", "import"], - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:import/typescript", - ], - parser: "@typescript-eslint/parser", - root: true, - rules: { - // Disables - "@typescript-eslint/no-explicit-any": "off", - "no-extra-semi": "off", // covered by prettier - - // Enables - "@typescript-eslint/consistent-type-imports": "error", - "import/order": "error", - "import/no-duplicates": "error", - "import/no-cycle": "error", - "@typescript-eslint/no-unused-vars": [ - "error", - { - varsIgnorePattern: "^_", - argsIgnorePattern: "^_", - destructuredArrayIgnorePattern: "^_", - }, - ], - }, - settings: { - // 'import/resolver': { - // typescript: true, - // node: true, - // } - }, -} diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 3212f1f43..000000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Don't diff generated .emscripten-module files -*.emscripten-module.js -diff diff --git a/vendor/quickjs/.github/workflows/ci.yml b/.github/workflows/ci.yml similarity index 100% rename from vendor/quickjs/.github/workflows/ci.yml rename to .github/workflows/ci.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 11db3aaef..000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,100 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: CI - -# Controls when the action will run. Triggers the workflow on push or pull request -# events but only for the main branch -on: - push: - branches: [main] - pull_request: - branches: [main] - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # We'll run the tests on both Linux and OSX - strategy: - fail-fast: false - matrix: - platform: [ubuntu-latest] # , macos-latest] # Too slow :( - - # The type of runner that the job will run on - runs-on: ${{matrix.platform}} - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - - name: Setup Docker (macOS) - uses: docker-practice/actions-setup-docker@1.0.8 - if: matrix.platform == 'macos-latest' - - - name: Setup Node.js environment - uses: actions/setup-node@v3 - with: - node-version: 18 - - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v4 - with: - # We need `git log` to find git-subtree versions - fetch-depth: 0 - - - name: Yarn cache - uses: actions/cache@v3 - with: - path: "**/.yarn/cache" - key: ${{ hashFiles('**/yarn.lock') }} - - - name: Install dependencies - run: yarn install --immutable - env: - YARN_ENABLE_SCRIPTS: 0 - - - name: EMSDK cache - uses: actions/cache@v3 - with: - path: "emsdk-cache" - key: ${{ hashFiles('scripts/emcc.sh') }} - - - name: Environment info - run: | - echo $(which node) v$(node --version) - echo $(which yarn) v$(yarn --version) - echo $(which npx) v$(npx --version) - echo $(npx which tsc) $(npx tsc --version) - echo $(npx which tsup) $(npx tsup --version) - echo $(npx which esbuild) v$(npx esbuild --version) - - - name: Build - run: yarn build - - - name: Check types - run: yarn check:types - - - name: Check package.jsons - run: yarn check:packages - - - name: Test - run: yarn test:slow - - - name: Build tarballs - run: yarn tarball && du -h build/tar/* - - - name: Test release with NodeJS minimal ESModule example - run: ./scripts/smoketest-node-minimal.ts - - - name: Test release with NodeJS/Typescript example - run: ./scripts/smoketest-node.ts - - - name: Test release with create-react-app/Typescript example - run: ./scripts/smoketest-create-react-app.ts - - - name: Test release with Vite/Vue example - run: ./scripts/smoketest-vite.ts - - - name: Check lint - run: yarn lint - - - name: Check format - run: yarn check:format diff --git a/.gitignore b/.gitignore index 364de50ee..ba32a84f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,31 @@ -node_modules -yarn-error.log -npm-error.log - -*.tsbuildinfo -.vscode/*.log - -/build -/dist -/emsdk-cache - -/packages/quickjs-emscripten/README.md - -/packages/*/build -/packages/*/dist - -# QuickJS build stuff -/quickjs/test_fib.c -/quickjs/examples/test_fib -/quickjs/.obj/ -/quickjs/examples/hello -/quickjs/examples/hello_module -/quickjs/hello.c -/quickjs/libquickjs.a -/quickjs/libquickjs.lto.a -/quickjs/qjs -/quickjs/qjsc -/quickjs/qjscalc -/quickjs/qjscalc.c -/quickjs/repl.c -/quickjs/run-test262 - -.yarn/cache -.yarn/install-state.gz +*.a +.obj/ +tests/bjson.so +examples/test_fib +test_fib.c +examples/*.so +examples/hello +examples/hello_module +examples/hello.exe +examples/test_fib.exe +hello.c +microbench*.txt +qjs +qjs.exe +qjsc +qjsc.exe +host-qjsc +qjscalc +qjscalc.c +repl.c +run-test262 +run-test262.exe +test262 +test262_*.txt +test262o +test262o_*.txt +unicode +unicode_gen +run_octane +run_sunspider_like +libwinpthread*.dll diff --git a/.npmignore b/.npmignore deleted file mode 100644 index b1104e1e9..000000000 --- a/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -*.tsbuildinfo -*.test.js diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 1ba37c91d..000000000 --- a/.prettierignore +++ /dev/null @@ -1,15 +0,0 @@ -ts/generated -quickjs -.yarn -.* -doc -json-generator-dot-com-1024-rows.json -dist -examples/imports -examples/node-typescript/*.js -build -emsdk-cache -.output -packages/internal-tsconfig/*.d.*ts -packages/internal-tsconfig/*.*js -vendor \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index e82060f26..000000000 --- a/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "tabWidth": 2, - "useTabs": false, - "printWidth": 100, - "singleQuote": false, - "semi": false -} diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index 6ea843285..000000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "configurations": [ - { - "name": "Mac", - "includePath": [ - "${workspaceFolder}/**", - "/opt/homebrew/Cellar/emscripten/3.1.7/libexec/system/include/**", - "/opt/homebrew/Cellar/emscripten/3.1.7/libexec/cache/sysroot/include/**", - "/opt/homebrew/Cellar/emscripten/3.1.7/libexec/llvm/lib/clang/15.0.0/include/**", - "/opt/homebrew/Cellar/emscripten/3.1.7/libexec/cache/sysroot/include/SDL", - "/opt/homebrew/Cellar/emscripten/3.1.7/libexec/cache/sysroot/include/compat", - "/opt/homebrew/Cellar/emscripten/3.1.7/libexec/llvm/lib/clang/15.0.0/include", - "/opt/homebrew/Cellar/emscripten/3.1.7/libexec/cache/sysroot/include" - ], - "defines": ["QTS_ASYNCIFY=1", "QTS_DEBUG_MODE=1", "__EMSCRIPTEN__=1"], - "macFrameworkPath": [ - "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks" - ], - "compilerPath": "/usr/bin/clang", - "cStandard": "c17", - "cppStandard": "c++98", - "intelliSenseMode": "macos-clang-arm64", - "compilerArgs": [], - "mergeConfigurations": false, - "browse": { - "path": ["${workspaceFolder}/**"], - "limitSymbolsToIncludedHeaders": true - }, - "configurationProvider": "ms-vscode.makefile-tools" - }, - { - "name": "Emscripten", - "includePath": ["${workspaceFolder}/**"], - "defines": [], - "macFrameworkPath": [ - "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks" - ], - "compilerPath": "/opt/homebrew/bin/emcc", - "cStandard": "c17", - "cppStandard": "c++98", - "intelliSenseMode": "macos-clang-arm64" - } - ], - "version": 4 -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 9ad76c27a..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "cSpell.words": ["Asyncified", "ASYNCIFY", "chonkers", "JSFFI", "JSWASM", "runtimes"], - "files.associations": { - "cutils.h": "c", - "quickjs.h": "c", - "quickjs-libc.h": "c", - "stdio.h": "c", - "lsan_interface.h": "c", - "math.h": "c", - "stdbool.h": "c", - "emscripten.h": "c", - "quickjs-atom.h": "c" - }, - "files.exclude": { - ".yarn/releases/*": true - } -} diff --git a/.yarn/releases/yarn-4.0.2.cjs b/.yarn/releases/yarn-4.0.2.cjs deleted file mode 100755 index f12c120ed..000000000 --- a/.yarn/releases/yarn-4.0.2.cjs +++ /dev/null @@ -1,893 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var n_e=Object.create;var MT=Object.defineProperty;var i_e=Object.getOwnPropertyDescriptor;var s_e=Object.getOwnPropertyNames;var o_e=Object.getPrototypeOf,a_e=Object.prototype.hasOwnProperty;var Be=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Kt=(t,e)=>{for(var r in e)MT(t,r,{get:e[r],enumerable:!0})},l_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of s_e(e))!a_e.call(t,a)&&a!==r&&MT(t,a,{get:()=>e[a],enumerable:!(o=i_e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?n_e(o_e(t)):{},l_e(e||!t||!t.__esModule?MT(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Kt(vi,{SAFE_TIME:()=>F7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Mu,S_IFREG:()=>Hw});var Mu,wD,Hw,ID,F7,T7=Et(()=>{Mu=61440,wD=16384,Hw=32768,ID=40960,F7=456789e3});var ar={};Kt(ar,{EBADF:()=>Io,EBUSY:()=>c_e,EEXIST:()=>g_e,EINVAL:()=>A_e,EISDIR:()=>h_e,ENOENT:()=>f_e,ENOSYS:()=>u_e,ENOTDIR:()=>p_e,ENOTEMPTY:()=>m_e,EOPNOTSUPP:()=>y_e,EROFS:()=>d_e,ERR_DIR_CLOSED:()=>OT});function Rl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function c_e(t){return Rl("EBUSY",t)}function u_e(t,e){return Rl("ENOSYS",`${t}, ${e}`)}function A_e(t){return Rl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Rl("EBADF",`bad file descriptor, ${t}`)}function f_e(t){return Rl("ENOENT",`no such file or directory, ${t}`)}function p_e(t){return Rl("ENOTDIR",`not a directory, ${t}`)}function h_e(t){return Rl("EISDIR",`illegal operation on a directory, ${t}`)}function g_e(t){return Rl("EEXIST",`file already exists, ${t}`)}function d_e(t){return Rl("EROFS",`read-only filesystem, ${t}`)}function m_e(t){return Rl("ENOTEMPTY",`directory not empty, ${t}`)}function y_e(t){return Rl("EOPNOTSUPP",`operation not supported, ${t}`)}function OT(){return Rl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Kt(Ea,{BigIntStatsEntry:()=>ey,DEFAULT_MODE:()=>HT,DirEntry:()=>UT,StatEntry:()=>$m,areStatsEqual:()=>jT,clearStats:()=>vD,convertToBigIntStats:()=>C_e,makeDefaultStats:()=>R7,makeEmptyStats:()=>E_e});function R7(){return new $m}function E_e(){return vD(R7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):_T.types.isDate(r)&&(t[e]=new Date(0))}return t}function C_e(t){let e=new ey;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):_T.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function jT(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var _T,HT,UT,$m,ey,qT=Et(()=>{_T=$e(Be("util")),HT=33188,UT=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},$m=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=HT;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(HT);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function D_e(t){let e,r;if(e=t.match(B_e))t=e[1];else if(r=t.match(v_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function P_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(w_e))?t=`/${e[1]}`:(r=t.match(I_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?L7(e):GT(e)}var jw,Bt,dr,ue,K,N7,w_e,I_e,B_e,v_e,GT,L7,Ca=Et(()=>{jw=$e(Be("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(jw.default),K=Object.create(jw.default.posix);ue.cwd=()=>process.cwd();K.cwd=process.platform==="win32"?()=>GT(process.cwd()):process.cwd;process.platform==="win32"&&(K.resolve=(...t)=>t.length>0&&K.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(K.cwd(),...t));N7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>N7(ue,t,e);K.contains=(t,e)=>N7(K,t,e);w_e=/^([a-zA-Z]:.*)$/,I_e=/^\/\/(\.\/)?(.*)$/,B_e=/^\/([a-zA-Z]:.*)$/,v_e=/^\/unc\/(\.dot\/)?(.*)$/;GT=process.platform==="win32"?P_e:t=>t,L7=process.platform==="win32"?D_e:t=>t;ue.fromPortablePath=L7;ue.toPortablePath=GT});async function PD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function M7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Lg,mtime:Lg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await YT(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function YT(t,e,r,o,a,n,u){let A=u.didParentExist?await O7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Lg,mtime:Lg}:p,I;switch(!0){case p.isDirectory():I=await x_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await Q_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await F_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function O7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function x_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await YT(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async b=>{await YT(t,e,r,r.pathUtils.join(o,b),n,n.pathUtils.join(u,b),I)}))).some(b=>b)&&(h=!0);return h}async function b_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=r.pathUtils.join(h.indexPath,E.slice(0,2),`${E}.dat`),v;(te=>(te[te.Lock=0]="Lock",te[te.Rename=1]="Rename"))(v||={});let b=1,C=await O7(r,I);if(a){let U=C&&a.dev===C.dev&&a.ino===C.ino,J=C?.mtimeMs!==S_e;if(U&&J&&h.autoRepair&&(b=0,C=null),!U)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let T=!C&&b===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,L=!1;return t.push(async()=>{if(!C&&(b===0&&await r.lockPromise(I,async()=>{let U=await n.readFilePromise(u);await r.writeFilePromise(I,U)}),b===1&&T)){let U=await n.readFilePromise(u);await r.writeFilePromise(T,U);try{await r.linkPromise(T,I)}catch(J){if(J.code==="EEXIST")L=!0,await r.unlinkPromise(T);else throw J}}a||await r.linkPromise(I,o)}),e.push(async()=>{C||await r.lutimesPromise(I,Lg,Lg),T&&!L&&await r.unlinkPromise(T)}),!1}async function k_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function Q_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?b_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):k_e(t,e,r,o,a,n,u,A,p)}async function F_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Lg,S_e,WT=Et(()=>{Ca();Lg=new Date(456789e3*1e3),S_e=Lg.getTime()});function SD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,U7=Et(()=>{BD();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw OT()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function _7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var H7,ty,j7=Et(()=>{H7=Be("events");qT();ty=class extends H7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ty(r,o,a);return n.start(),n}start(){_7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){_7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ey:new $m;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;jT(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ry(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=xD.get(t);typeof p>"u"&&xD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ty.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=xD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Og(t){let e=xD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var xD,VT=Et(()=>{j7();xD=new WeakMap});function T_e(t){let e=t.match(/\r?\n/g);if(e===null)return G7.EOL;let r=e.filter(a=>a===`\r -`).length,o=e.length-r;return r>o?`\r -`:` -`}function Ug(t,e){return e.replace(/\r?\n/g,T_e(t))}var q7,G7,hf,Ou,_g=Et(()=>{q7=Be("crypto"),G7=Be("os");WT();Ca();hf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,q7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await M7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} -`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} -`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Ou=class extends hf{constructor(){super(K)}}});var Ps,gf=Et(()=>{_g();Ps=class extends hf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,Y7=Et(()=>{gf();Uu=class extends Ps{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function W7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var V7,Rn,Hg=Et(()=>{V7=$e(Be("fs"));_g();Ca();Rn=class extends Ou{constructor(r=V7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return K.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(W7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(W7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,K7=Et(()=>{Hg();gf();Ca();gn=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?K.normalize(r):this.baseFs.resolve(K.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var J7,_u,z7=Et(()=>{Hg();gf();Ca();J7=Bt.root,_u=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(J7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(J7,this.pathUtils.relative(this.target,r))}}});var ny,X7=Et(()=>{gf();ny=class extends Ps{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,_p,Z7=Et(()=>{jg=Be("fs");_g();Hg();VT();BD();Ca();wa=4278190080,_p=class extends Ou{constructor({baseFs:r=new Rn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ry(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,KT,Gw,$7=Et(()=>{_g();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),KT=class extends hf{constructor(){super(K)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Gw=KT;Gw.instance=new KT});var Hp,eY=Et(()=>{gf();Ca();Hp=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var R_e,JT,N_e,mi,tY=Et(()=>{Hg();gf();Ca();R_e=/^[0-9]+$/,JT=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,N_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ps{constructor({baseFs:r=new Rn}={}){super(K);this.baseFs=r}static makeVirtualPath(r,o,a){if(K.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!K.basename(o).match(N_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=K.relative(K.dirname(r),a).split("/"),A=0;for(;A{zT=$e(Be("buffer")),kD=Be("url"),rY=Be("util");gf();Ca();bD=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof kD.URL)return(0,kD.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!L_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,rY.inspect)(r)}`)}}});var iY,Bo,df,jp,QD,FD,iy,Rc,Nc,M_e,O_e,U_e,__e,Yw,sY=Et(()=>{iY=Be("readline"),Bo=Symbol("kBaseFs"),df=Symbol("kFd"),jp=Symbol("kClosePromise"),QD=Symbol("kCloseResolve"),FD=Symbol("kCloseReject"),iy=Symbol("kRefs"),Rc=Symbol("kRef"),Nc=Symbol("kUnref"),Yw=class{constructor(e,r){this[M_e]=1;this[O_e]=void 0;this[U_e]=void 0;this[__e]=void 0;this[Bo]=r,this[df]=e}get fd(){return this[df]}async appendFile(e,r){try{this[Rc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Rc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Rc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Rc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Rc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,iY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Rc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Rc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Rc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Rc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Rc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[df]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[QD]=e,this[FD]=r}).finally(()=>{this[jp]=void 0,this[FD]=void 0,this[QD]=void 0});return this[jp]}[(Bo,df,M_e=iy,O_e=jp,U_e=QD,__e=FD,Rc)](e){if(this[df]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[iy]++}[Nc](){if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[Bo].closePromise(e).then(this[QD],this[FD])}}}});function Ww(t,e){e=new bD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[sy.promisify.custom]<"u"&&(n[sy.promisify.custom]=u[sy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of oY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of H_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of oY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Yw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Yw(n,e)})}t.read[sy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[sy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function TD(t,e){let r=Object.create(t);return Ww(r,e),r}var sy,H_e,oY,aY=Et(()=>{sy=Be("util");nY();sY();H_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),oY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function lY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function cY(){if(XT)return XT;let t=ue.toPortablePath(uY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),XT={tmpdir:t,realTmpdir:e}}var uY,Lc,XT,oe,AY=Et(()=>{uY=$e(Be("os"));Hg();Ca();Lc=new Set,XT=null;oe=Object.assign(new Rn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{this.mkdirSync(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{await this.mkdirPromise(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Kt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Ou,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>hf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>ny,MountFS:()=>_p,NoFS:()=>Gw,NodeFS:()=>Rn,PortablePath:()=>Bt,PosixFS:()=>Hp,ProxiedFS:()=>Ps,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>TD,normalizeLineEndings:()=>Ug,npath:()=>ue,opendir:()=>SD,patchFs:()=>Ww,ppath:()=>K,setupCopyIndex:()=>PD,statUtils:()=>Ea,unwatchAllFiles:()=>Og,unwatchFile:()=>Mg,watchFile:()=>ry,xfs:()=>oe});var Pt=Et(()=>{T7();BD();qT();WT();U7();VT();_g();Ca();Ca();Y7();_g();K7();z7();X7();Z7();$7();Hg();eY();gf();tY();aY();AY()});var dY=_((axt,gY)=>{gY.exports=hY;hY.sync=q_e;var fY=Be("fs");function j_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{CY.exports=yY;yY.sync=G_e;var mY=Be("fs");function yY(t,e,r){mY.stat(t,function(o,a){r(o,o?!1:EY(a,e))})}function G_e(t,e){return EY(mY.statSync(t),e)}function EY(t,e){return t.isFile()&&Y_e(t,e)}function Y_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var BY=_((uxt,IY)=>{var cxt=Be("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=dY():RD=wY();IY.exports=ZT;ZT.sync=W_e;function ZT(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){ZT(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function W_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var kY=_((Axt,bY)=>{var oy=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",vY=Be("path"),V_e=oy?";":":",DY=BY(),PY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),SY=(t,e)=>{let r=e.colon||V_e,o=t.match(/\//)||oy&&t.match(/\\/)?[""]:[...oy?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=oy?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=oy?a.split(r):[""];return oy&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},xY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=SY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(PY(t));let v=o[h],b=/^".*"$/.test(v)?v.slice(1,-1):v,C=vY.join(b,t),T=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(T,h,0))}),p=(h,E,I)=>new Promise((v,b)=>{if(I===a.length)return v(A(E+1));let C=a[I];DY(h+C,{pathExt:n},(T,L)=>{if(!T&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},K_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=SY(t,e),n=[];for(let u=0;u{"use strict";var QY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};$T.exports=QY;$T.exports.default=QY});var LY=_((pxt,NY)=>{"use strict";var TY=Be("path"),J_e=kY(),z_e=FY();function RY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=J_e.sync(t.command,{path:r[z_e({env:r})],pathExt:e?TY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=TY.resolve(a?t.options.cwd:"",u)),u}function X_e(t){return RY(t)||RY(t,!0)}NY.exports=X_e});var MY=_((hxt,tR)=>{"use strict";var eR=/([()\][%!^"`<>&|;, *?])/g;function Z_e(t){return t=t.replace(eR,"^$1"),t}function $_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(eR,"^$1"),e&&(t=t.replace(eR,"^$1")),t}tR.exports.command=Z_e;tR.exports.argument=$_e});var UY=_((gxt,OY)=>{"use strict";OY.exports=/^#!(.*)/});var HY=_((dxt,_Y)=>{"use strict";var e8e=UY();_Y.exports=(t="")=>{let e=t.match(e8e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var qY=_((mxt,jY)=>{"use strict";var rR=Be("fs"),t8e=HY();function r8e(t){let r=Buffer.alloc(150),o;try{o=rR.openSync(t,"r"),rR.readSync(o,r,0,150,0),rR.closeSync(o)}catch{}return t8e(r.toString())}jY.exports=r8e});var VY=_((yxt,WY)=>{"use strict";var n8e=Be("path"),GY=LY(),YY=MY(),i8e=qY(),s8e=process.platform==="win32",o8e=/\.(?:com|exe)$/i,a8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l8e(t){t.file=GY(t);let e=t.file&&i8e(t.file);return e?(t.args.unshift(t.file),t.command=e,GY(t)):t.file}function c8e(t){if(!s8e)return t;let e=l8e(t),r=!o8e.test(e);if(t.options.forceShell||r){let o=a8e.test(e);t.command=n8e.normalize(t.command),t.command=YY.command(t.command),t.args=t.args.map(n=>YY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function u8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:c8e(o)}WY.exports=u8e});var zY=_((Ext,JY)=>{"use strict";var nR=process.platform==="win32";function iR(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function A8e(t,e){if(!nR)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=KY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function KY(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawn"):null}function f8e(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawnSync"):null}JY.exports={hookChildProcess:A8e,verifyENOENT:KY,verifyENOENTSync:f8e,notFoundError:iR}});var aR=_((Cxt,ay)=>{"use strict";var XY=Be("child_process"),sR=VY(),oR=zY();function ZY(t,e,r){let o=sR(t,e,r),a=XY.spawn(o.command,o.args,o.options);return oR.hookChildProcess(a,o),a}function p8e(t,e,r){let o=sR(t,e,r),a=XY.spawnSync(o.command,o.args,o.options);return a.error=a.error||oR.verifyENOENTSync(a.status,o),a}ay.exports=ZY;ay.exports.spawn=ZY;ay.exports.sync=p8e;ay.exports._parse=sR;ay.exports._enoent=oR});var eW=_((wxt,$Y)=>{"use strict";function h8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function qg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,qg)}h8e(qg,Error);qg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Se="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},xt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),xr=function(N){return[{type:"text",text:N}]},Wr='""',Vn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ri='"',ps=Br('"',!1),io=function(N){return N},Si=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},ap=function(N){return{type:"shell",shell:N,quoted:!1}},lp=function(N){return{type:"variable",...N,quoted:!1}},Ms=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Os=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ -`,Kn=Br(`\\ -`,!1),Mn=function(){return""},Ni="\\",On=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Me=function(N){return N},ii="\\a",Oa=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,vA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Tt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` -`},Cl="\\r",DA=Br("\\r",!1),cp=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),SA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),ji="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=cg(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,V,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(V.join("")+"."+re.join(""))}},ms=function(N,V){return{type:"number",value:(N==="-"?-1:1)*parseInt(V.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Pn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,V,re){return{type:V==="*"?"multiplication":"division",right:re}},$=function(N,V){return V.reduce((re,he)=>({left:re,...he}),N)},me=function(N,V,re){return{type:V==="+"?"addition":"subtraction",right:re}},Le="$((",ft=Br("$((",!1),pt="))",Rt=Br("))",!1),er=function(N){return N},Zr="$(",qi=Br("$(",!1),es=function(N){return N},xi="${",jo=Br("${",!1),bA=":-",kA=Br(":-",!1),up=function(N,V){return{name:N,defaultValue:V}},ng=":-}",gu=Br(":-}",!1),ig=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),QA=function(N,V){return{name:N,alternativeValue:V}},mc=":+}",ca=Br(":+}",!1),sg=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",og=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},Ap=function(N){return N},ag=/^[a-zA-Z0-9_]/,FA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return lg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),G=0,Dt=0,wl=[{line:1,column:1}],bi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function lg(){return t.substring(Dt,G)}function mw(){return Ic(Dt,G)}function TA(N,V){throw V=V!==void 0?V:Ic(Dt,G),fg([Ag(N)],t.substring(Dt,G),V)}function fp(N,V){throw V=V!==void 0?V:Ic(Dt,G),Sm(N,V)}function Br(N,V){return{type:"literal",text:N,ignoreCase:V}}function Cs(N,V,re){return{type:"class",parts:N,inverted:V,ignoreCase:re}}function cg(){return{type:"any"}}function ug(){return{type:"end"}}function Ag(N){return{type:"other",description:N}}function pp(N){var V=wl[N],re;if(V)return V;for(re=N-1;!wl[re];)re--;for(V=wl[re],V={line:V.line,column:V.column};rebi&&(bi=G,wc=[]),wc.push(N))}function Sm(N,V){return new qg(N,null,null,V)}function fg(N,V,re){return new qg(qg.buildMessage(N,V),N,V,re)}function pg(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,V=n(re),N=V):(G=N,N=r)):(G=N,N=r),N}function Cu(){var N,V,re,he,ze;if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,V=u(V,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;if(N===r)if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he===r&&(he=null),he!==r?(Dt=N,V=A(V,he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function xm(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Cu(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=p(re),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function hg(){var N;return t.charCodeAt(G)===59?(N=h,G++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(G)===38?(N=I,G++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,V,re;return N=G,V=Aa(),V!==r?(re=yw(),re===r&&(re=null),re!==r?(Dt=N,V=b(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function yw(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=bm(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=C(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function bm(){var N;return t.substr(G,2)===T?(N=T,G+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(G,2)===U?(N=U,G+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,V,re;return N=G,V=gg(),V!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,V=te(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function Bc(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Il(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=le(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function Il(){var N;return t.substr(G,2)===pe?(N=pe,G+=2):(N=r,ct===0&&Ct(Ae)),N===r&&(t.charCodeAt(G)===124?(N=ye,G++):(N=r,ct===0&&Ct(ae))),N}function Iu(){var N,V,re,he,ze,mt;if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r)if(he=qo(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,V=g(V,he),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;else G=N,N=r;if(N===r)if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=Ee(V),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function gg(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===40?(re=De,G++):(re=r,ct===0&&Ct(ce)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===41?(fr=ne,G++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Ie(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===123?(re=ke,G++):(re=r,ct===0&&Ct(ht)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===125?(fr=H,G++):(fr=r,ct===0&&Ct(lt)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Re(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){for(re=[],he=Iu();he!==r;)re.push(he),he=Iu();if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r){if(ze=[],mt=hp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=hp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=Qe(re,ze),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r}else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=Iu(),he!==r)for(;he!==r;)re.push(he),he=Iu();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=be(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}}}return N}function RA(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=gp(),he!==r)for(;he!==r;)re.push(he),he=gp();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=_e(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r;return N}function hp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r?(re=ja(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();V!==r?(re=gp(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r)}return N}function ja(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(Je.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(He)),re===r&&(re=null),re!==r?(he=dg(),he!==r?(ze=gp(),ze!==r?(Dt=N,V=x(re,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function dg(){var N;return t.substr(G,2)===w?(N=w,G+=2):(N=r,ct===0&&Ct(S)),N===r&&(t.substr(G,2)===y?(N=y,G+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(G)===62?(N=z,G++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(G,3)===Z?(N=Z,G+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(G,2)===Se?(N=Se,G+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(G)===60?(N=ot,G++):(N=r,ct===0&&Ct(dt))))))),N}function gp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=qo(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N}function qo(){var N,V,re;if(N=G,V=[],re=ws(),re!==r)for(;re!==r;)V.push(re),re=ws();else V=r;return V!==r&&(Dt=N,V=jt(V)),N=V,N}function ws(){var N,V;return N=G,V=Ii(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=km(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Qm(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Go(),V!==r&&(Dt=N,V=$t(V)),N=V))),N}function Ii(){var N,V,re,he;return N=G,t.substr(G,2)===xt?(V=xt,G+=2):(V=r,ct===0&&Ct(an)),V!==r?(re=ln(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function km(){var N,V,re,he;return N=G,t.charCodeAt(G)===39?(V=Qr,G++):(V=r,ct===0&&Ct(mr)),V!==r?(re=mp(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Qm(){var N,V,re,he;if(N=G,t.substr(G,2)===Wr?(V=Wr,G+=2):(V=r,ct===0&&Ct(Vn)),V!==r&&(Dt=N,V=Ns()),N=V,N===r)if(N=G,t.charCodeAt(G)===34?(V=Ri,G++):(V=r,ct===0&&Ct(ps)),V!==r){for(re=[],he=NA();he!==r;)re.push(he),he=NA();re!==r?(t.charCodeAt(G)===34?(he=Ri,G++):(he=r,ct===0&&Ct(ps)),he!==r?(Dt=N,V=io(re),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function Go(){var N,V,re;if(N=G,V=[],re=dp(),re!==r)for(;re!==r;)V.push(re),re=dp();else V=r;return V!==r&&(Dt=N,V=io(V)),N=V,N}function NA(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=Si(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=Ls(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=so(V)),N=V,N===r&&(N=G,V=mg(),V!==r&&(Dt=N,V=cc(V)),N=V))),N}function dp(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=cu(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=ap(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=lp(V)),N=V,N===r&&(N=G,V=Ew(),V!==r&&(Dt=N,V=Ms(V)),N=V,N===r&&(N=G,V=pa(),V!==r&&(Dt=N,V=cc(V)),N=V)))),N}function mp(){var N,V,re;for(N=G,V=[],Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));re!==r;)V.push(re),Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function mg(){var N,V,re;if(N=G,V=[],re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)V.push(re),re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function fa(){var N,V,re;return N=G,t.substr(G,2)===ao?(V=ao,G+=2):(V=r,ct===0&&Ct(Kn)),V!==r&&(Dt=N,V=Mn()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(_i.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r)),N}function ln(){var N,V,re;for(N=G,V=[],re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));re!==r;)V.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Ao(){var N,V,re;return N=G,t.substr(G,2)===ii?(V=ii,G+=2):(V=r,ct===0&&Ct(Oa)),V!==r&&(Dt=N,V=hr()),N=V,N===r&&(N=G,t.substr(G,2)===uc?(V=uc,G+=2):(V=r,ct===0&&Ct(uu)),V!==r&&(Dt=N,V=Ac()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(El.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(vA)),re!==r?(Dt=N,V=Au(),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ce?(V=Ce,G+=2):(V=r,ct===0&&Ct(Tt)),V!==r&&(Dt=N,V=fc()),N=V,N===r&&(N=G,t.substr(G,2)===Hi?(V=Hi,G+=2):(V=r,ct===0&&Ct(fu)),V!==r&&(Dt=N,V=Yt()),N=V,N===r&&(N=G,t.substr(G,2)===Cl?(V=Cl,G+=2):(V=r,ct===0&&Ct(DA)),V!==r&&(Dt=N,V=cp()),N=V,N===r&&(N=G,t.substr(G,2)===pc?(V=pc,G+=2):(V=r,ct===0&&Ct(PA)),V!==r&&(Dt=N,V=Qn()),N=V,N===r&&(N=G,t.substr(G,2)===hi?(V=hi,G+=2):(V=r,ct===0&&Ct(hc)),V!==r&&(Dt=N,V=SA()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(sa.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=LA()))))))))),N}function LA(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi,wg;return N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(re=qa(),re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ze?(V=Ze,G+=2):(V=r,ct===0&&Ct(lo)),V!==r?(re=G,he=G,ze=qa(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],he=ze):(G=he,he=r)):(G=he,he=r),he===r&&(he=qa()),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===gc?(V=gc,G+=2):(V=r,ct===0&&Ct(pu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===ji?(V=ji,G+=2):(V=r,ct===0&&Ct(hu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Mi=si(),Mi!==r?(wg=si(),wg!==r?(ze=[ze,mt,fr,Cr,yn,oi,Mi,wg],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=xA(re),N=V):(G=N,N=r)):(G=N,N=r)))),N}function qa(){var N;return Ua.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,V,re,he,ze;if(N=G,V=[],re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r))),re!==r)for(;re!==r;)V.push(re),re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function vc(){var N,V,re,he,ze,mt;if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;if(re!==r)if(t.charCodeAt(G)===46?(he=wi,G++):(he=r,ct===0&&Ct(gs)),he!==r){if(ze=[],Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He));else ze=r;ze!==r?(Dt=N,V=ds(V,re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;if(N===r){if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;re!==r?(Dt=N,V=ms(V,re),N=V):(G=N,N=r)}else G=N,N=r;if(N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=_s(V)),N=V,N===r&&(N=G,V=Ga(),V!==r&&(Dt=N,V=Un(V)),N=V,N===r)))if(N=G,t.charCodeAt(G)===40?(V=De,G++):(V=r,ct===0&&Ct(ce)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(G)===41?(mt=ne,G++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,V=Pn(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r}return N}function Bl(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=vc(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function ts(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=Bl(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function Gr(){var N,V,re,he,ze,mt;if(N=G,t.substr(G,3)===Le?(V=Le,G+=3):(V=r,ct===0&&Ct(ft)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(G,2)===pt?(mt=pt,G+=2):(mt=r,ct===0&&Ct(Rt)),mt!==r?(Dt=N,V=er(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;return N}function yp(){var N,V,re,he;return N=G,t.substr(G,2)===Zr?(V=Zr,G+=2):(V=r,ct===0&&Ct(qi)),V!==r?(re=Cu(),re!==r?(t.charCodeAt(G)===41?(he=ne,G++):(he=r,ct===0&&Ct(ee)),he!==r?(Dt=N,V=es(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Dc(){var N,V,re,he,ze,mt;return N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===bA?(he=bA,G+=2):(he=r,ct===0&&Ct(kA)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=up(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===ng?(he=ng,G+=3):(he=r,ct===0&&Ct(gu)),he!==r?(Dt=N,V=ig(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===du?(he=du,G+=2):(he=r,ct===0&&Ct(uo)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=QA(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===mc?(he=mc,G+=3):(he=r,ct===0&&Ct(ca)),he!==r?(Dt=N,V=sg(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.charCodeAt(G)===125?(he=H,G++):(he=r,ct===0&&Ct(lt)),he!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.charCodeAt(G)===36?(V=Pm,G++):(V=r,ct===0&&Ct(og)),V!==r?(re=Ga(),re!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)))))),N}function Ew(){var N,V,re;return N=G,V=yg(),V!==r?(Dt=G,re=$n(V),re?re=void 0:re=r,re!==r?(Dt=N,V=Ap(V),N=V):(G=N,N=r)):(G=N,N=r),N}function yg(){var N,V,re,he,ze;if(N=G,V=[],re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re!==r)for(;re!==r;)V.push(re),re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r);else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Eg(){var N,V,re;if(N=G,V=[],ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA)),re!==r)for(;re!==r;)V.push(re),ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Ga(){var N,V,re;if(N=G,V=[],mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)V.push(re),mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Fm(){var N;return Gi.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(ua)),N}function Cg(){var N;return yu.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,V;if(N=[],Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc)),V!==r)for(;V!==r;)N.push(V),Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&G===t.length)return Eu;throw Eu!==r&&G!1}){try{return(0,tW.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function ly(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${MD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function MD(t){return`${cy(t.chain)}${t.then?` ${lR(t.then)}`:""}`}function lR(t){return`${t.type} ${MD(t.line)}`}function cy(t){return`${uR(t)}${t.then?` ${cR(t.then)}`:""}`}function cR(t){return`${t.type} ${cy(t.chain)}`}function uR(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>ND(e)).join(" ")} `:""}${t.args.map(e=>AR(e)).join(" ")}`;case"subshell":return`(${ly(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"group":return`{ ${ly(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>ND(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function ND(t){return`${t.name}=${t.args[0]?Gg(t.args[0]):""}`}function AR(t){switch(t.type){case"redirection":return Kw(t);case"argument":return Gg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Kw(t){return`${t.subtype} ${t.args.map(e=>Gg(e)).join(" ")}`}function Gg(t){return t.segments.map(e=>fR(e)).join("")}function fR(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,m8e)}"`:`$'${o.replace(/[\t\p{C}]/u,nW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${ly(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Gg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Gg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var tW,rW,d8e,nW,m8e,iW=Et(()=>{tW=$e(eW());rW=new Map([["\f","\\f"],[` -`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),d8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(rW,([t,e])=>[t,`"$'${e}'"`])]),nW=t=>rW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,m8e=t=>d8e.get(t)??`"$'${nW(t)}'"`});var oW=_((Nxt,sW)=>{"use strict";function y8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Yg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Yg)}y8e(Yg,Error);Yg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ipe&&(pe=J,Ae=[]),Ae.push(He))}function lt(He,x){return new Yg(He,null,null,x)}function Re(He,x,w){return new Yg(Yg.buildMessage(He,x),He,x,w)}function Qe(){var He,x,w,S;return He=J,x=be(),x!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,ye===0&&H(u)),w!==r?(S=be(),S!==r?(te=He,x=A(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=be(),x!==r&&(te=He,x=p(x)),He=x),He}function be(){var He,x,w,S;return He=J,x=_e(),x!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,ye===0&&H(E)),w!==r?(S=Je(),S!==r?(te=He,x=I(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=_e(),x!==r&&(te=He,x=v(x)),He=x),He}function _e(){var He,x,w,S,y;return He=J,t.charCodeAt(J)===64?(x=h,J++):(x=r,ye===0&&H(E)),x!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(S=n,J++):(S=r,ye===0&&H(u)),S!==r?(y=Te(),y!==r?(te=He,x=b(),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=Te(),x!==r&&(te=He,x=b()),He=x),He}function Te(){var He,x,w;if(He=J,x=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T)),w!==r)for(;w!==r;)x.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T));else x=r;return x!==r&&(te=He,x=b()),He=x,He}function Je(){var He,x,w;if(He=J,x=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U)),w!==r)for(;w!==r;)x.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U));else x=r;return x!==r&&(te=He,x=b()),He=x,He}if(ae=a(),ae!==r&&J===t.length)return ae;throw ae!==r&&J{aW=$e(oW())});var Vg=_((Mxt,Wg)=>{"use strict";function cW(t){return typeof t>"u"||t===null}function C8e(t){return typeof t=="object"&&t!==null}function w8e(t){return Array.isArray(t)?t:cW(t)?[]:[t]}function I8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function Jw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Jw.prototype=Object.create(Error.prototype);Jw.prototype.constructor=Jw;Jw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};uW.exports=Jw});var pW=_((Uxt,fW)=>{"use strict";var AW=Vg();function pR(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}pR.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),AW.repeat(" ",e)+o+A+n+` -`+AW.repeat(" ",e+this.position-a+o.length)+"^"};pR.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: -`+r)),o};fW.exports=pR});var os=_((_xt,gW)=>{"use strict";var hW=uy(),D8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],P8e=["scalar","sequence","mapping"];function S8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function x8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(D8e.indexOf(r)===-1)throw new hW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=S8e(e.styleAliases||null),P8e.indexOf(this.kind)===-1)throw new hW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}gW.exports=x8e});var Kg=_((Hxt,mW)=>{"use strict";var dW=Vg(),HD=uy(),b8e=os();function hR(t,e,r){var o=[];return t.include.forEach(function(a){r=hR(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function k8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var Q8e=os();yW.exports=new Q8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var wW=_((qxt,CW)=>{"use strict";var F8e=os();CW.exports=new F8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var BW=_((Gxt,IW)=>{"use strict";var T8e=os();IW.exports=new T8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var jD=_((Yxt,vW)=>{"use strict";var R8e=Kg();vW.exports=new R8e({explicit:[EW(),wW(),BW()]})});var PW=_((Wxt,DW)=>{"use strict";var N8e=os();function L8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function M8e(){return null}function O8e(t){return t===null}DW.exports=new N8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:L8e,construct:M8e,predicate:O8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var xW=_((Vxt,SW)=>{"use strict";var U8e=os();function _8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function H8e(t){return t==="true"||t==="True"||t==="TRUE"}function j8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}SW.exports=new U8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:_8e,construct:H8e,predicate:j8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var kW=_((Kxt,bW)=>{"use strict";var q8e=Vg(),G8e=os();function Y8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function W8e(t){return 48<=t&&t<=55}function V8e(t){return 48<=t&&t<=57}function K8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var TW=_((Jxt,FW)=>{"use strict";var QW=Vg(),X8e=os(),Z8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function $8e(t){return!(t===null||!Z8e.test(t)||t[t.length-1]==="_")}function eHe(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var tHe=/^[-+]?[0-9]+e/;function rHe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(QW.isNegativeZero(t))return"-0.0";return r=t.toString(10),tHe.test(r)?r.replace("e",".e"):r}function nHe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||QW.isNegativeZero(t))}FW.exports=new X8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:$8e,construct:eHe,predicate:nHe,represent:rHe,defaultStyle:"lowercase"})});var gR=_((zxt,RW)=>{"use strict";var iHe=Kg();RW.exports=new iHe({include:[jD()],implicit:[PW(),xW(),kW(),TW()]})});var dR=_((Xxt,NW)=>{"use strict";var sHe=Kg();NW.exports=new sHe({include:[gR()]})});var UW=_((Zxt,OW)=>{"use strict";var oHe=os(),LW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),MW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function aHe(t){return t===null?!1:LW.exec(t)!==null||MW.exec(t)!==null}function lHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=LW.exec(t),e===null&&(e=MW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function cHe(t){return t.toISOString()}OW.exports=new oHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:aHe,construct:lHe,instanceOf:Date,represent:cHe})});var HW=_(($xt,_W)=>{"use strict";var uHe=os();function AHe(t){return t==="<<"||t===null}_W.exports=new uHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:AHe})});var GW=_((ebt,qW)=>{"use strict";var Jg;try{jW=Be,Jg=jW("buffer").Buffer}catch{}var jW,fHe=os(),mR=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function pHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=mR;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function hHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=mR,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Jg?Jg.from?Jg.from(A):new Jg(A):A}function gHe(t){var e="",r=0,o,a,n=t.length,u=mR;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function dHe(t){return Jg&&Jg.isBuffer(t)}qW.exports=new fHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pHe,construct:hHe,predicate:dHe,represent:gHe})});var WW=_((rbt,YW)=>{"use strict";var mHe=os(),yHe=Object.prototype.hasOwnProperty,EHe=Object.prototype.toString;function CHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var IHe=os(),BHe=Object.prototype.toString;function vHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var PHe=os(),SHe=Object.prototype.hasOwnProperty;function xHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(SHe.call(r,e)&&r[e]!==null)return!1;return!0}function bHe(t){return t!==null?t:{}}JW.exports=new PHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:xHe,construct:bHe})});var fy=_((sbt,XW)=>{"use strict";var kHe=Kg();XW.exports=new kHe({include:[dR()],implicit:[UW(),HW()],explicit:[GW(),WW(),KW(),zW()]})});var $W=_((obt,ZW)=>{"use strict";var QHe=os();function FHe(){return!0}function THe(){}function RHe(){return""}function NHe(t){return typeof t>"u"}ZW.exports=new QHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:FHe,construct:THe,predicate:NHe,represent:RHe})});var tV=_((abt,eV)=>{"use strict";var LHe=os();function MHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function OHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function UHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function _He(t){return Object.prototype.toString.call(t)==="[object RegExp]"}eV.exports=new LHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:MHe,construct:OHe,predicate:_He,represent:UHe})});var iV=_((lbt,nV)=>{"use strict";var qD;try{rV=Be,qD=rV("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var rV,HHe=os();function jHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function qHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function GHe(t){return t.toString()}function YHe(t){return Object.prototype.toString.call(t)==="[object Function]"}nV.exports=new HHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:jHe,construct:qHe,predicate:YHe,represent:GHe})});var zw=_((ubt,oV)=>{"use strict";var sV=Kg();oV.exports=sV.DEFAULT=new sV({include:[fy()],explicit:[$W(),tV(),iV()]})});var DV=_((Abt,Xw)=>{"use strict";var mf=Vg(),pV=uy(),WHe=pW(),hV=fy(),VHe=zw(),Gp=Object.prototype.hasOwnProperty,GD=1,gV=2,dV=3,YD=4,yR=1,KHe=2,aV=3,JHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,zHe=/[\x85\u2028\u2029]/,XHe=/[,\[\]\{\}]/,mV=/^(?:!|!!|![a-z\-]+!)$/i,yV=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function lV(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Xg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function py(t){return t===44||t===91||t===93||t===123||t===125}function ZHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function $He(t){return t===120?2:t===117?4:t===85?8:0}function e6e(t){return 48<=t&&t<=57?t-48:-1}function cV(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` -`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function t6e(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var EV=new Array(256),CV=new Array(256);for(zg=0;zg<256;zg++)EV[zg]=cV(zg)?1:0,CV[zg]=cV(zg);var zg;function r6e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||VHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function wV(t,e){return new pV(e,new WHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw wV(t,e)}function WD(t,e){t.onWarning&&t.onWarning.call(null,wV(t,e))}var uV={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&WD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],mV.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),Gp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),yV.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function qp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=mf.repeat(` -`,e-1))}function n6e(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,b;if(b=t.input.charCodeAt(t.position),Ia(b)||py(b)||b===35||b===38||b===42||b===33||b===124||b===62||b===39||b===34||b===37||b===64||b===96||(b===63||b===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a))break}else if(b===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&VD(t)||r&&py(b))break;if(Hu(b))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(qp(t,n,u,!1),CR(t,t.line-p),n=u=t.position,A=!1),Xg(b)||(u=t.position+1),b=t.input.charCodeAt(++t.position)}return qp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function i6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(qp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(qp(t,o,a,!0),CR(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function s6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return qp(t,r,t.position,!0),t.position++,!0;if(A===92){if(qp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&EV[A])t.result+=CV[A],t.position++;else if((u=$He(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=ZHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=t6e(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(qp(t,r,o,!0),CR(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function o6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},b,C,T,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),C=b=T=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,gy(t,e,GD,!1,!0),C=t.tag,b=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),gy(t,e,GD,!1,!0),T=t.result),I?hy(t,n,v,C,b,T):h?n.push(hy(t,null,v,C,b,T)):n.push(b),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function a6e(t,e){var r,o,a=yR,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)yR===a?a=I===43?aV:KHe:Sr(t,"repeat of a chomping mode identifier");else if((E=e6e(I))>=0)E===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Xg(I)){do I=t.input.charCodeAt(++t.position);while(Xg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(ER(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(gy(t,e,YD,!0,a)&&(C?v=t.result:b=t.result),C||(hy(t,h,E,I,v,b,n,u),I=v=b=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Sr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+b.kind+'", not "'+t.kind+'"'),b.resolve(t.result)?(t.result=b.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function f6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;Xg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&ER(t),Gp.call(uV,o)?uV[o](t,o,a):WD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),gy(t,t.lineIndent-1,YD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&zHe.test(t.input.slice(e,t.position))&&WD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&VD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=IV(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),BV(t,e,mf.extend({schema:hV},r))}function h6e(t,e){return vV(t,mf.extend({schema:hV},e))}Xw.exports.loadAll=BV;Xw.exports.load=vV;Xw.exports.safeLoadAll=p6e;Xw.exports.safeLoad=h6e});var KV=_((fbt,vR)=>{"use strict";var $w=Vg(),eI=uy(),g6e=zw(),d6e=fy(),TV=Object.prototype.toString,RV=Object.prototype.hasOwnProperty,m6e=9,Zw=10,y6e=13,E6e=32,C6e=33,w6e=34,NV=35,I6e=37,B6e=38,v6e=39,D6e=42,LV=44,P6e=45,MV=58,S6e=61,x6e=62,b6e=63,k6e=64,OV=91,UV=93,Q6e=96,_V=123,F6e=124,HV=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var T6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function R6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!dy(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?qV:GV:r>9&&jV(t)?KD:h?WV:YV}function _6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&T6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return L6e(t,p)}switch(U6e(e,u,t.indent,n,A)){case qV:return e;case GV:return"'"+e.replace(/'/g,"''")+"'";case YV:return"|"+bV(e,t.indent)+kV(SV(e,a));case WV:return">"+bV(e,t.indent)+kV(SV(H6e(e,n),a));case KD:return'"'+j6e(e,n)+'"';default:throw new eI("impossible error: invalid scalar style")}}()}function bV(t,e){var r=jV(t)?String(e):"",o=t[t.length-1]===` -`,a=o&&(t[t.length-2]===` -`||t===` -`),n=a?"+":o?"":"-";return r+n+` -`}function kV(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function H6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` -`);return h=h!==-1?h:t.length,r.lastIndex=h,QV(t.slice(0,h),e)}(),a=t[0]===` -`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` -`:"")+QV(p,e),a=n}return o}function QV(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` -`+t.slice(a,n),a=n+1),u=A;return p+=` -`,t.length-a>e&&u>a?p+=t.slice(a,u)+` -`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function j6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=PV((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&dy(r)?t[n]:a||PV(r)}return e}function q6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Zg(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function W6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new eI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=wR(t,e)),Zg(t,e+1,E,!0,I)&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function FV(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function Zg(t,e,r,o,a,n){t.tag=null,t.dump=r,FV(t,r,!1)||FV(t,r,!0);var u=TV.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(W6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(Y6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(G6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(q6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&_6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new eI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function V6e(t,e){var r=[],o=[],a,n;for(IR(t,r,o),a=0,n=o.length;a{"use strict";var JD=DV(),JV=KV();function zD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Kg();ki.exports.FAILSAFE_SCHEMA=jD();ki.exports.JSON_SCHEMA=gR();ki.exports.CORE_SCHEMA=dR();ki.exports.DEFAULT_SAFE_SCHEMA=fy();ki.exports.DEFAULT_FULL_SCHEMA=zw();ki.exports.load=JD.load;ki.exports.loadAll=JD.loadAll;ki.exports.safeLoad=JD.safeLoad;ki.exports.safeLoadAll=JD.safeLoadAll;ki.exports.dump=JV.dump;ki.exports.safeDump=JV.safeDump;ki.exports.YAMLException=uy();ki.exports.MINIMAL_SCHEMA=jD();ki.exports.SAFE_SCHEMA=fy();ki.exports.DEFAULT_SCHEMA=zw();ki.exports.scan=zD("scan");ki.exports.parse=zD("parse");ki.exports.compose=zD("compose");ki.exports.addConstructor=zD("addConstructor")});var ZV=_((hbt,XV)=>{"use strict";var J6e=zV();XV.exports=J6e});var eK=_((gbt,$V)=>{"use strict";function z6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function $g(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,$g)}z6e($g,Error);$g.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[ft]:Le})))},pe=function($){return $},Ae=function($){return $},ye=sa("correct indentation"),ae=" ",we=Qn(" ",!1),Pe=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},De=function(){return nr--,!0},ce=function(){return DA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),ke=/^[^\r\n\t ,\][{}:#"']/,ht=hi(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return DA().replace(/^ *| *$/g,"")},lt="--",Re=Qn("--",!1),Qe=/^[a-zA-Z\/0-9]/,be=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),_e=/^[^\r\n\t :,]/,Te=hi(["\r",` -`," "," ",":",","],!0,!1),Je="null",He=Qn("null",!1),x=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Se=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),xt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",xr=Qn("\\\\",!1),Wr=function(){return"\\"},Vn="\\/",Ns=Qn("\\/",!1),Ri=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Si=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",ap=Qn("\\n",!1),lp=function(){return` -`},Ms="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Os="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Kn=Qn("\\u",!1),Mn=function($,me,Le,ft){return String.fromCharCode(parseInt(`0x${$}${me}${Le}${ft}`))},Ni=/^[0-9a-fA-F]/,On=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Me=hi([" "," "],!1,!1),ii=sa("white space"),Oa=/^[ \t\n\r]/,hr=hi([" "," ",` -`,"\r"],!1,!1),uc=`\r -`,uu=Qn(`\r -`,!1),Ac=` -`,El=Qn(` -`,!1),vA="\r",Au=Qn("\r",!1),Ce=0,Tt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function DA(){return t.substring(Tt,Ce)}function cp(){return _o(Tt,Ce)}function pc($,me){throw me=me!==void 0?me:_o(Tt,Ce),gc([sa($)],t.substring(Tt,Ce),me)}function PA($,me){throw me=me!==void 0?me:_o(Tt,Ce),lo($,me)}function Qn($,me){return{type:"literal",text:$,ignoreCase:me}}function hi($,me,Le){return{type:"class",parts:$,inverted:me,ignoreCase:Le}}function hc(){return{type:"any"}}function SA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var me=fc[$],Le;if(me)return me;for(Le=$-1;!fc[Le];)Le--;for(me=fc[Le],me={line:me.line,column:me.column};Le<$;)t.charCodeAt(Le)===10?(me.line++,me.column=1):me.column++,Le++;return fc[$]=me,me}function _o($,me){var Le=Li($),ft=Li(me);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:me,line:ft.line,column:ft.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,me){return new $g($,null,null,me)}function gc($,me,Le){return new $g($g.buildMessage($,me),$,me,Le)}function pu(){var $;return $=xA(),$}function ji(){var $,me,Le;for($=Ce,me=[],Le=hu();Le!==r;)me.push(Le),Le=hu();return me!==r&&(Tt=$,me=n(me)),$=me,$}function hu(){var $,me,Le,ft,pt;return $=Ce,me=hs(),me!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(ft=Pn(),ft!==r?(pt=dc(),pt!==r?(Tt=$,me=p(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,me,Le;for($=Ce,me=[],Le=Ua();Le!==r;)me.push(Le),Le=Ua();return me!==r&&(Tt=$,me=h(me)),$=me,$}function Ua(){var $,me,Le,ft,pt,Rt,er,Zr,qi;if($=Ce,me=Pn(),me===r&&(me=null),me!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(ft=E,Ce++):(ft=r,Yt===0&&Ze(I)),ft!==r){if(pt=[],Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r),Rt!==r)for(;Rt!==r;)pt.push(Rt),Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r);else pt=r;pt!==r?(ft=[ft,pt],Le=ft):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(ft=[],pt=We(),pt!==r)for(;pt!==r;)ft.push(pt),pt=We();else ft=r;ft!==r?(Tt=$,me=b(),$=me):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,me=hs(),me!==r?(Le=oa(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=hs(),me!==r?(Le=co(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r)if(ft=Pn(),ft!==r)if(pt=aa(),pt!==r){if(Rt=[],er=We(),er!==r)for(;er!==r;)Rt.push(er),er=We();else Rt=r;Rt!==r?(Tt=$,me=L(Le,pt),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r){if(ft=[],pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r),pt!==r)for(;pt!==r;)ft.push(pt),pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r);else ft=r;ft!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(Rt=C,Ce++):(Rt=r,Yt===0&&Ze(T)),Rt!==r?(er=Pn(),er===r&&(er=null),er!==r?(Zr=dc(),Zr!==r?(Tt=$,me=le(Le,ft,Zr),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,me,Le,ft,pt,Rt,er;if($=Ce,me=Ce,Yt++,Le=Ce,ft=tt(),ft!==r?(pt=_t(),pt!==r?(t.charCodeAt(Ce)===45?(Rt=u,Ce++):(Rt=r,Yt===0&&Ze(A)),Rt!==r?(er=Pn(),er!==r?(ft=[ft,pt,Rt,er],Le=ft):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=me,me=void 0):me=r,me!==r?(Le=We(),Le!==r?(ft=Fn(),ft!==r?(pt=ji(),pt!==r?(Rt=Ci(),Rt!==r?(Tt=$,me=pe(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=tt(),me!==r?(Le=Fn(),Le!==r?(ft=xA(),ft!==r?(pt=Ci(),pt!==r?(Tt=$,me=pe(ft),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,me=Us(),me!==r){if(Le=[],ft=We(),ft!==r)for(;ft!==r;)Le.push(ft),ft=We();else Le=r;Le!==r?(Tt=$,me=Ae(me),$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,me,Le;for(Yt++,$=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=Pe(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(me=r,Yt===0&&Ze(ye)),$}function _t(){var $,me,Le;for($=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=g(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Tt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Tt=Ce,$=De(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,me,Le;if($=ds(),$===r){if($=Ce,me=[],Le=Ho(),Le!==r)for(;Le!==r;)me.push(Le),Le=Ho();else me=r;me!==r&&(Tt=$,me=ce()),$=me}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,me,Le,ft,pt,Rt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Ie)),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ne)),$}function Ho(){var $,me,Le,ft,pt;if($=Ce,t.substr(Ce,2)===lt?(me=lt,Ce+=2):(me=r,Yt===0&&Ze(Re)),me===r&&(me=null),me!==r)if(Qe.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(be)),Le!==r){for(ft=[],_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));pt!==r;)ft.push(pt),_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));ft!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,me;return $=Ce,t.substr(Ce,4)===Je?(me=Je,Ce+=4):(me=r,Yt===0&&Ze(He)),me!==r&&(Tt=$,me=x()),$=me,$}function gs(){var $,me;return $=Ce,t.substr(Ce,4)===w?(me=w,Ce+=4):(me=r,Yt===0&&Ze(S)),me!==r&&(Tt=$,me=y()),$=me,$===r&&($=Ce,t.substr(Ce,5)===F?(me=F,Ce+=5):(me=r,Yt===0&&Ze(z)),me!==r&&(Tt=$,me=X()),$=me),$}function ds(){var $,me,Le,ft;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Se)),Le!==r?(Tt=$,me=Ne(),$=me):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(ft=ie,Ce++):(ft=r,Yt===0&&Ze(Se)),ft!==r?(Tt=$,me=ot(Le),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(me=r,Yt===0&&Ze(Z)),$}function ms(){var $,me,Le;if($=Ce,me=[],Le=_s(),Le!==r)for(;Le!==r;)me.push(Le),Le=_s();else me=r;return me!==r&&(Tt=$,me=dt(me)),$=me,$}function _s(){var $,me,Le,ft,pt,Rt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===xt?(me=xt,Ce+=2):(me=r,Yt===0&&Ze(an)),me!==r&&(Tt=$,me=Qr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===mr?(me=mr,Ce+=2):(me=r,Yt===0&&Ze(xr)),me!==r&&(Tt=$,me=Wr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Vn?(me=Vn,Ce+=2):(me=r,Yt===0&&Ze(Ns)),me!==r&&(Tt=$,me=Ri()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ps?(me=ps,Ce+=2):(me=r,Yt===0&&Ze(io)),me!==r&&(Tt=$,me=Si()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ls?(me=Ls,Ce+=2):(me=r,Yt===0&&Ze(so)),me!==r&&(Tt=$,me=cc()),$=me,$===r&&($=Ce,t.substr(Ce,2)===cu?(me=cu,Ce+=2):(me=r,Yt===0&&Ze(ap)),me!==r&&(Tt=$,me=lp()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ms?(me=Ms,Ce+=2):(me=r,Yt===0&&Ze(Dn)),me!==r&&(Tt=$,me=oo()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Os?(me=Os,Ce+=2):(me=r,Yt===0&&Ze(ml)),me!==r&&(Tt=$,me=yl()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ao?(me=ao,Ce+=2):(me=r,Yt===0&&Ze(Kn)),me!==r?(Le=Un(),Le!==r?(ft=Un(),ft!==r?(pt=Un(),pt!==r?(Rt=Un(),Rt!==r?(Tt=$,me=Mn(Le,ft,pt,Rt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(On)),$}function Pn(){var $,me;if(Yt++,$=[],tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me)),me!==r)for(;me!==r;)$.push(me),tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(_i)),$}function ys(){var $,me;if(Yt++,$=[],Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr)),me!==r)for(;me!==r;)$.push(me),Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ii)),$}function We(){var $,me,Le,ft,pt,Rt;if($=Ce,me=tt(),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=vA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>iK(t[e])):!1}function DR(t,e,r){if(t===null)return`null -`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} -`;if(typeof t=="string")return`${rK(t)} -`;if(Array.isArray(t)){if(t.length===0)return`[] -`;let o=" ".repeat(e);return` -${t.map(n=>`${o}- ${DR(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof XD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=tK.indexOf(p),I=tK.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!iK(o[p])).map((p,h)=>{let E=o[p],I=rK(p),v=DR(E,e+1,!0),b=h>0||r?n:"",C=I.length>1024?`? ${I} -${b}:`:`${I}:`,T=v.startsWith(` -`)?v:` ${v}`;return`${b}${C}${T}`}).join(e===0?` -`:"")||` -`;return r?` -${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=DR(t,0,!1);return e!==` -`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function $6e(t){return t.endsWith(` -`)||(t+=` -`),(0,nK.parse)(t)}function tje(t){if(eje.test(t))return $6e(t);let e=(0,ZD.safeLoad)(t,{schema:ZD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Vi(t){return tje(t)}var ZD,nK,Z6e,tK,XD,eje,sK=Et(()=>{ZD=$e(ZV()),nK=$e(eK()),Z6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,tK=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],XD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=XD;eje=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var tI={};Kt(tI,{parseResolution:()=>UD,parseShell:()=>LD,parseSyml:()=>Vi,stringifyArgument:()=>AR,stringifyArgumentSegment:()=>fR,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>uR,stringifyCommandChain:()=>cy,stringifyCommandChainThen:()=>cR,stringifyCommandLine:()=>MD,stringifyCommandLineThen:()=>lR,stringifyEnvSegment:()=>ND,stringifyRedirectArgument:()=>Kw,stringifyResolution:()=>_D,stringifyShell:()=>ly,stringifyShellLine:()=>ly,stringifySyml:()=>Ba,stringifyValueArgument:()=>Gg});var Nl=Et(()=>{iW();lW();sK()});var aK=_((Cbt,PR)=>{"use strict";var rje=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=rje(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};PR.exports=oK;PR.exports.default=oK});var lK=_((wbt,nje)=>{nje.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var ed=_(Xa=>{"use strict";var uK=lK(),ju=process.env;Object.defineProperty(Xa,"_vendors",{value:uK.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;uK.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return cK(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!ju[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in ju&&ju[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!ju[o]}):Xa.isPR=cK(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(ju.CI||ju.CONTINUOUS_INTEGRATION||ju.BUILD_NUMBER||ju.RUN_ID||Xa.name);function cK(t){return typeof t=="string"?!!ju[t]:Object.keys(t).every(function(e){return ju[e]===t[e]})}});var Hn,cn,td,SR,$D,AK,xR,bR,eP=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));td=-1,SR=/^(-h|--help)(?:=([0-9]+))?$/,$D=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,AK=/^-[a-zA-Z]{2,}$/,xR=/^([^=]+)=([\s\S]*)$/,bR=process.env.DEBUG_CLI==="1"});var it,my,tP,kR,rP=Et(()=>{eP();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},my=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} - -${this.candidates.map(({usage:a})=>`$ ${a}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${o} -${kR(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` -`)} - -${kR(e)}`}},tP=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: - -${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` -`)} - -${kR(e)}`}},kR=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function ije(t){let e=t.split(` -`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` -`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` -`),t=ije(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` -`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` -`)}).join(` - -`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} -`:""}var QR,fK,pK,FR=Et(()=>{QR=Array(80).fill("\u2501");for(let t=0;t<=24;++t)QR[QR.length-t]=`\x1B[38;5;${232+t}m\u2501`;fK={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${QR.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},pK={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Vo(t){return{...t,[rI]:!0}}function qu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function nP(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function nI(t,e){return e.length===1?new it(`${t}${nP(e[0],{mergeName:!0})}`):new it(`${t}: -${e.map(r=>` -- ${nP(r)}`).join("")}`)}function rd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw nI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var rI,yf=Et(()=>{rP();rI=Symbol("clipanion/isOption")});var Ko={};Kt(Ko,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Wp,applyCascade:()=>oI,as:()=>Bje,assert:()=>Cje,assertWithErrors:()=>wje,cascade:()=>aP,fn:()=>vje,hasAtLeastOneKey:()=>UR,hasExactLength:()=>yK,hasForbiddenKeys:()=>qje,hasKeyRelationship:()=>lI,hasMaxLength:()=>Pje,hasMinLength:()=>Dje,hasMutuallyExclusiveKeys:()=>Gje,hasRequiredKeys:()=>jje,hasUniqueItems:()=>Sje,isArray:()=>iP,isAtLeast:()=>MR,isAtMost:()=>kje,isBase64:()=>Oje,isBoolean:()=>fje,isDate:()=>hje,isDict:()=>mje,isEnum:()=>Vs,isHexColor:()=>Mje,isISO8601:()=>Lje,isInExclusiveRange:()=>Fje,isInInclusiveRange:()=>Qje,isInstanceOf:()=>Eje,isInteger:()=>OR,isJSON:()=>Uje,isLiteral:()=>gK,isLowerCase:()=>Tje,isMap:()=>dje,isNegative:()=>xje,isNullable:()=>Hje,isNumber:()=>NR,isObject:()=>dK,isOneOf:()=>LR,isOptional:()=>_je,isPartial:()=>yje,isPayload:()=>pje,isPositive:()=>bje,isRecord:()=>oP,isSet:()=>gje,isString:()=>Ey,isTuple:()=>sP,isUUID4:()=>Nje,isUnknown:()=>RR,isUpperCase:()=>Rje,makeTrait:()=>mK,makeValidator:()=>Hr,matchesRegExp:()=>sI,softAssert:()=>Ije});function jn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function yy(t,e){if(t.length===0)return"nothing";if(t.length===1)return jn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>jn(n)).join(", ")}${a}${jn(o)}`}function Yp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:sje.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function TR(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function uje(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function iI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function RR(){return Hr({test:(t,e)=>!0})}function gK(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${jn(t)} (got ${jn(e)})`):!0})}function Ey(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${jn(t)})`):!0})}function Vs(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?gK([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${yy(e,"or")} (got ${jn(a)})`):pr(n,`Expected a valid enumeration value (got ${jn(a)})`)})}function fje(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=Aje.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${jn(t)})`)}return!0}})}function NR(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${jn(t)})`)}return!0}})}function pje(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${jn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${jn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function hje(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&hK.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${jn(t)})`)}return!0}})}function iP(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${jn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",iI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",iI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${jn(o)})`)}})}function dje(t,e){let r=iP(sP([t,e])),o=oP(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,b)=>v[0]!==h[b][0]||v[1]!==h[b][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",iI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Yp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",iI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",iI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${jn(a)})`)}})}function sP(t,{delimiter:e}={}){let r=yK(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${jn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${jn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${jn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Yp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),`Extraneous property (got ${jn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:uje(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function yje(t){return dK(t,{extra:oP(RR())})}function mK(t){return()=>t}function Hr({test:t}){return mK(t)()}function Cje(t,e){if(!e(t))throw new Wp}function wje(t,e){let r=[];if(!e(t,{errors:r}))throw new Wp({errors:r})}function Ije(t,e){}function Bje(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function vje(t,e){let r=sP(t);return(...o)=>{if(!r(o))throw new Wp;return e(...o)}}function Dje(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function Pje(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function yK(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Sje({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function bje(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function MR(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function kje(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Qje(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Fje(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function sI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${jn(e)})`)})}function Tje(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function Rje(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Nje(){return Hr({test:(t,e)=>cje.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${jn(t)})`)})}function Lje(){return Hr({test:(t,e)=>hK.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${jn(t)})`)})}function Mje({alpha:t=!1}){return Hr({test:(e,r)=>(t?oje.test(e):aje.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${jn(e)})`)})}function Oje(){return Hr({test:(t,e)=>lje.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${jn(t)})`)})}function Uje(t=RR()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${jn(e)})`)}return t(o,r)}})}function aP(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function oI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return aP(t,r)}function _je(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Hje(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function jje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function UR(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${yy(Array.from(o),"or")}`)})}function qje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function Gje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${yy(p,"and")}`):!0}})}function lI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=aI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Yje[e],E=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let b=new Set(Object.keys(I));if(!A(b,t,I)||u.has(I[t]))return!0;let C=[];for(let T of p)(A(b,T,I)&&!u.has(I[T]))!==h.expect&&C.push(T);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${TR(C.length,"property","properties")} ${yy(C,E)}`):!0}})}var sje,oje,aje,lje,cje,hK,Aje,Eje,LR,Wp,aI,Gu,Yje,Za=Et(()=>{sje=/^[a-zA-Z_][a-zA-Z0-9_]*$/;oje=/^#[0-9a-f]{6}$/i,aje=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,lje=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,cje=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,hK=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;Aje=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);Eje=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${jn(e)})`)}),LR=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Wp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` -`;for(let o of e)r+=` -- ${o}`}super(r)}};aI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));Yje={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{yf();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Ko)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw nI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=rI;nt.Default=[]});function va(t){bR&&console.log(t)}function CK(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function Kje(t,{prefix:e=""}={}){if(bR){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new my(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Xje(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function zje(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Jje(t,[...e,r]);return Zje(e,o.map(({state:a})=>a))}function Xje(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Zje(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===td||v.requiredOptions.every(b=>b.some(C=>v.options.find(T=>T.name===C))));if(a.length===0)throw new my(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:b})=>!b).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=$je(E);if(I.length>1)throw new tP(t,I.map(v=>v.candidateUsage));return I[0]}function $je(t){let e=[],r=[];for(let o of t)o.selectedIndex===td?r.push(o):e.push(o);return r.length>0&&e.push({...EK,path:wK(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function wK(t,e,...r){return e===void 0?Array.from(t):wK(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function IK(t){return t===cn.SuccessNode||t===cn.ErrorNode}function _R(t,e=0){return{to:IK(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function eqe(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,_R(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(_R(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>_R(n,e));return r}function Ss(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function Cy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function lP(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var EK,tqe,HR,el,jR,wy,cP=Et(()=>{eP();rP();EK={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:td,partial:!1,tokens:[]};tqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&AK.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(xR);return!t.ignoreOptions&&!!n&&$D.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&SR.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&$D.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!$D.test(e)},HR={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(xR),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(SR);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),jR=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${b}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=CK(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,$a());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Mc(e,$a());Ss(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ss(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",td]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,b,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,b,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ss(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Mc(e,$a());if(Cy(e,h,v),this.arity.extra===el){let b=Mc(e,$a());this.arity.proxy||this.registerOptions(e,b),Ss(e,h,n,b,"pushExtraNoLimits"),Ss(e,b,n,b,"pushExtraNoLimits"),Cy(e,b,v)}else for(let b=0;b0)&&this.registerOptions(e,C),Ss(e,E,n,C,"pushExtra"),Cy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return zje(o,a,{endToken:u})}}}}});function vK(){return uP.default&&"getColorDepth"in uP.default.WriteStream.prototype?uP.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function DK(t){let e=BK;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Be("async_hooks");e=BK=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var uP,BK,PK=Et(()=>{uP=$e(Be("tty"),1)});var Iy,SK=Et(()=>{Vp();Iy=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new Iy(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: -`),this.context.stdout.write(` -`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` -`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}}});async function kK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).runExit(o,a)}async function QK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).run(o,a)}function FK(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function bK(t){return t()}var xK,as,TK=Et(()=>{eP();cP();FR();PK();Vp();SK();xK=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new wy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case td:{let E=Iy.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[b,{transformer:C}]of I.specs.entries())v[b]=C(I.builder,b,p,h);return v}catch(b){throw b[xK]=v,b}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=DK(u))!==null&&a!==void 0?a:bK,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(b=>b.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),A+=` -`),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} -`,A+=` -`);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} -`,v.length>0){A+=` -`,A+=`${this.format(r).header("Options")} -`;let b=v.reduce((C,T)=>Math.max(C,T.definition.length),0);A+=` -`;for(let{definition:C,description:T}of v)A+=` ${this.format(r).bold(C.padEnd(b))} ${Do(T,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` -`,A+=`${this.format(r).header("Details")} -`,A+=` -`,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` -`,A+=`${this.format(r).header("Examples")} -`;for(let[b,C]of E)A+=` -`,A+=Do(b,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} -`}else{let p=new Map;for(let[v,{index:b}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,T=p.get(C);typeof T>"u"&&p.set(C,T=[]);let{usage:L}=this.getUsageByIndex(b);T.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,b)=>v===null?-1:b===null?1:v.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} -`:A+=`${this.format(r).header(`${this.binaryVersion}`)} -`,A+=` ${this.format(r).bold(a)}${this.binaryName} -`):A+=`${this.format(r).bold(a)}${this.binaryName} -`;for(let v of h){let b=p.get(v).slice().sort((T,L)=>T.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` -`,A+=`${this.format(r).header(`${C}`)} -`;for(let{commandClass:T,usage:L}of b){let U=T.usage.description||"undocumented";A+=` -`,A+=` ${this.format(r).bold(L)} -`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` -`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[xK])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} -`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` -`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} -`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?fK:pK}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:vK()}});var cI,RK=Et(()=>{Vp();cI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};cI.paths=[["--clipanion=definitions"]]});var uI,NK=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};uI.paths=[["-h"],["--help"]]});function AP(t={}){return Vo({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var qR=Et(()=>{yf()});var AI,LK=Et(()=>{Vp();qR();AI=class extends nt{constructor(){super(...arguments),this.args=AP()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} -`)}};AI.paths=[["--clipanion=tokens"]]});var fI,MK=Et(()=>{Vp();fI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};fI.paths=[["-v"],["--version"]]});var GR={};Kt(GR,{DefinitionsCommand:()=>cI,HelpCommand:()=>uI,TokensCommand:()=>AI,VersionCommand:()=>fI});var OK=Et(()=>{RK();NK();LK();MK()});function UK(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:b,value:C}of E.options)!A.has(b)||(I=b,v=v??[],v.push(C));return typeof v<"u"?rd(I??h,v,a.validator):v}})}var _K=Et(()=>{yf()});function HK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var jK=Et(()=>{yf()});function qK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var GK=Et(()=>{yf()});function YK(t={}){return Vo({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var WK=Et(()=>{cP();yf()});function rqe(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,b=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,b=I.env[a.env]);for(let{name:C,value:T}of E.options)!A.has(C)||(v=C,b=T);return typeof b=="string"?rd(v??h,b,a.validator):b}})}function nqe(t={}){let{required:e=!0}=t;return Vo({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{cP();yf()});var ge={};Kt(ge,{Array:()=>UK,Boolean:()=>HK,Counter:()=>qK,Proxy:()=>AP,Rest:()=>YK,String:()=>VK,applyValidator:()=>rd,cleanValidationError:()=>nP,formatError:()=>nI,isOptionSymbol:()=>rI,makeCommandOption:()=>Vo,rerouteArguments:()=>qu});var JK=Et(()=>{yf();qR();_K();jK();GK();WK();KK()});var pI={};Kt(pI,{Builtins:()=>GR,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>QK,runExit:()=>kK});var qt=Et(()=>{rP();FR();Vp();TK();OK();JK()});var zK=_((xkt,iqe)=>{iqe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var eJ=_((bkt,Ef)=>{var XK=Be("fs"),WR=Be("path"),sqe=Be("os"),oqe=Be("crypto"),aqe=zK(),VR=aqe.version,lqe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function cqe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` -`);let o;for(;(o=lqe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` -`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function uqe(t){let e=$K(t),r=xs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=ZK(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return xs.parse(n)}function Aqe(t){console.log(`[dotenv@${VR}][INFO] ${t}`)}function fqe(t){console.log(`[dotenv@${VR}][WARN] ${t}`)}function YR(t){console.log(`[dotenv@${VR}][DEBUG] ${t}`)}function ZK(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function pqe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function $K(t){let e=WR.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function hqe(t){return t[0]==="~"?WR.join(sqe.homedir(),t.slice(1)):t}function gqe(t){Aqe("Loading env from encrypted .env.vault");let e=xs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),xs.populate(r,e,t),{parsed:e}}function dqe(t){let e=WR.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=hqe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=xs.parse(XK.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),xs.populate(n,a,t),{parsed:a}}catch(a){return o&&YR(`Failed to load ${e} ${a.message}`),{error:a}}}function mqe(t){let e=$K(t);return ZK(t).length===0?xs.configDotenv(t):XK.existsSync(e)?xs._configVault(t):(fqe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),xs.configDotenv(t))}function yqe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=oqe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function Eqe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&YR(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var xs={configDotenv:dqe,_configVault:gqe,_parseVault:uqe,config:mqe,decrypt:yqe,parse:cqe,populate:Eqe};Ef.exports.configDotenv=xs.configDotenv;Ef.exports._configVault=xs._configVault;Ef.exports._parseVault=xs._parseVault;Ef.exports.config=xs.config;Ef.exports.decrypt=xs.decrypt;Ef.exports.parse=xs.parse;Ef.exports.populate=xs.populate;Ef.exports=xs});var rJ=_((kkt,tJ)=>{"use strict";tJ.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var nd=_((Qkt,KR)=>{"use strict";var Cqe=rJ(),nJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=Cqe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};KR.exports=nJ;KR.exports.default=nJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function fP(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,pP=Et(()=>{wr=(Me=>(Me[Me.UNNAMED=0]="UNNAMED",Me[Me.EXCEPTION=1]="EXCEPTION",Me[Me.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Me[Me.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Me[Me.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Me[Me.BUILD_DISABLED=5]="BUILD_DISABLED",Me[Me.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Me[Me.MUST_BUILD=7]="MUST_BUILD",Me[Me.MUST_REBUILD=8]="MUST_REBUILD",Me[Me.BUILD_FAILED=9]="BUILD_FAILED",Me[Me.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Me[Me.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Me[Me.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Me[Me.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Me[Me.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Me[Me.REMOTE_INVALID=15]="REMOTE_INVALID",Me[Me.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Me[Me.RESOLUTION_PACK=17]="RESOLUTION_PACK",Me[Me.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Me[Me.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Me[Me.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Me[Me.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Me[Me.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Me[Me.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Me[Me.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Me[Me.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Me[Me.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Me[Me.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Me[Me.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Me[Me.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Me[Me.FETCH_FAILED=30]="FETCH_FAILED",Me[Me.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Me[Me.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Me[Me.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Me[Me.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Me[Me.NETWORK_ERROR=35]="NETWORK_ERROR",Me[Me.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Me[Me.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Me[Me.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Me[Me.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Me[Me.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Me[Me.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Me[Me.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Me[Me.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Me[Me.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Me[Me.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Me[Me.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Me[Me.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Me[Me.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Me[Me.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Me[Me.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Me[Me.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Me[Me.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Me[Me.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Me[Me.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Me[Me.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Me[Me.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Me[Me.INVALID_MANIFEST=57]="INVALID_MANIFEST",Me[Me.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Me[Me.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Me[Me.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Me[Me.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Me[Me.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Me[Me.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Me[Me.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Me[Me.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Me[Me.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Me[Me.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Me[Me.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Me[Me.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Me[Me.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Me[Me.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Me[Me.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Me[Me.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Me[Me.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Me[Me.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Me[Me.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Me[Me.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Me[Me.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Me[Me.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Me[Me.NETWORK_DISABLED=80]="NETWORK_DISABLED",Me[Me.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Me[Me.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Me[Me.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Me[Me.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Me[Me.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Me[Me.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Me[Me.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Me[Me.VERSION_NOTICE=88]="VERSION_NOTICE",Me[Me.TIPS_NOTICE=89]="TIPS_NOTICE",Me[Me.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Me))(wr||{})});var hI=_((Tkt,iJ)=>{var wqe="2.0.0",Iqe=Number.MAX_SAFE_INTEGER||9007199254740991,Bqe=16,vqe=256-6,Dqe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];iJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Bqe,MAX_SAFE_BUILD_LENGTH:vqe,MAX_SAFE_INTEGER:Iqe,RELEASE_TYPES:Dqe,SEMVER_SPEC_VERSION:wqe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var gI=_((Rkt,sJ)=>{var Pqe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};sJ.exports=Pqe});var By=_((Cf,oJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:JR,MAX_SAFE_BUILD_LENGTH:Sqe,MAX_LENGTH:xqe}=hI(),bqe=gI();Cf=oJ.exports={};var kqe=Cf.re=[],Qqe=Cf.safeRe=[],lr=Cf.src=[],cr=Cf.t={},Fqe=0,zR="[a-zA-Z0-9-]",Tqe=[["\\s",1],["\\d",xqe],[zR,Sqe]],Rqe=t=>{for(let[e,r]of Tqe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=Rqe(e),a=Fqe++;bqe(t,a,e),cr[t]=a,lr[a]=e,kqe[a]=new RegExp(e,r?"g":void 0),Qqe[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${zR}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${zR}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${JR}})(?:\\.(\\d{1,${JR}}))?(?:\\.(\\d{1,${JR}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);Cf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);Cf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);Cf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var hP=_((Nkt,aJ)=>{var Nqe=Object.freeze({loose:!0}),Lqe=Object.freeze({}),Mqe=t=>t?typeof t!="object"?Nqe:t:Lqe;aJ.exports=Mqe});var XR=_((Lkt,uJ)=>{var lJ=/^[0-9]+$/,cJ=(t,e)=>{let r=lJ.test(t),o=lJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:tcJ(e,t);uJ.exports={compareIdentifiers:cJ,rcompareIdentifiers:Oqe}});var Po=_((Mkt,hJ)=>{var gP=gI(),{MAX_LENGTH:AJ,MAX_SAFE_INTEGER:dP}=hI(),{safeRe:fJ,t:pJ}=By(),Uqe=hP(),{compareIdentifiers:vy}=XR(),tl=class{constructor(e,r){if(r=Uqe(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>AJ)throw new TypeError(`version is longer than ${AJ} characters`);gP("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?fJ[pJ.LOOSE]:fJ[pJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>dP||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dP||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dP||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),vy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};hJ.exports=tl});var id=_((Okt,dJ)=>{var gJ=Po(),_qe=(t,e,r=!1)=>{if(t instanceof gJ)return t;try{return new gJ(t,e)}catch(o){if(!r)return null;throw o}};dJ.exports=_qe});var yJ=_((Ukt,mJ)=>{var Hqe=id(),jqe=(t,e)=>{let r=Hqe(t,e);return r?r.version:null};mJ.exports=jqe});var CJ=_((_kt,EJ)=>{var qqe=id(),Gqe=(t,e)=>{let r=qqe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};EJ.exports=Gqe});var BJ=_((Hkt,IJ)=>{var wJ=Po(),Yqe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new wJ(t instanceof wJ?t.version:t,r).inc(e,o,a).version}catch{return null}};IJ.exports=Yqe});var PJ=_((jkt,DJ)=>{var vJ=id(),Wqe=(t,e)=>{let r=vJ(t,null,!0),o=vJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};DJ.exports=Wqe});var xJ=_((qkt,SJ)=>{var Vqe=Po(),Kqe=(t,e)=>new Vqe(t,e).major;SJ.exports=Kqe});var kJ=_((Gkt,bJ)=>{var Jqe=Po(),zqe=(t,e)=>new Jqe(t,e).minor;bJ.exports=zqe});var FJ=_((Ykt,QJ)=>{var Xqe=Po(),Zqe=(t,e)=>new Xqe(t,e).patch;QJ.exports=Zqe});var RJ=_((Wkt,TJ)=>{var $qe=id(),eGe=(t,e)=>{let r=$qe(t,e);return r&&r.prerelease.length?r.prerelease:null};TJ.exports=eGe});var Ll=_((Vkt,LJ)=>{var NJ=Po(),tGe=(t,e,r)=>new NJ(t,r).compare(new NJ(e,r));LJ.exports=tGe});var OJ=_((Kkt,MJ)=>{var rGe=Ll(),nGe=(t,e,r)=>rGe(e,t,r);MJ.exports=nGe});var _J=_((Jkt,UJ)=>{var iGe=Ll(),sGe=(t,e)=>iGe(t,e,!0);UJ.exports=sGe});var mP=_((zkt,jJ)=>{var HJ=Po(),oGe=(t,e,r)=>{let o=new HJ(t,r),a=new HJ(e,r);return o.compare(a)||o.compareBuild(a)};jJ.exports=oGe});var GJ=_((Xkt,qJ)=>{var aGe=mP(),lGe=(t,e)=>t.sort((r,o)=>aGe(r,o,e));qJ.exports=lGe});var WJ=_((Zkt,YJ)=>{var cGe=mP(),uGe=(t,e)=>t.sort((r,o)=>cGe(o,r,e));YJ.exports=uGe});var dI=_(($kt,VJ)=>{var AGe=Ll(),fGe=(t,e,r)=>AGe(t,e,r)>0;VJ.exports=fGe});var yP=_((eQt,KJ)=>{var pGe=Ll(),hGe=(t,e,r)=>pGe(t,e,r)<0;KJ.exports=hGe});var ZR=_((tQt,JJ)=>{var gGe=Ll(),dGe=(t,e,r)=>gGe(t,e,r)===0;JJ.exports=dGe});var $R=_((rQt,zJ)=>{var mGe=Ll(),yGe=(t,e,r)=>mGe(t,e,r)!==0;zJ.exports=yGe});var EP=_((nQt,XJ)=>{var EGe=Ll(),CGe=(t,e,r)=>EGe(t,e,r)>=0;XJ.exports=CGe});var CP=_((iQt,ZJ)=>{var wGe=Ll(),IGe=(t,e,r)=>wGe(t,e,r)<=0;ZJ.exports=IGe});var eN=_((sQt,$J)=>{var BGe=ZR(),vGe=$R(),DGe=dI(),PGe=EP(),SGe=yP(),xGe=CP(),bGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return BGe(t,r,o);case"!=":return vGe(t,r,o);case">":return DGe(t,r,o);case">=":return PGe(t,r,o);case"<":return SGe(t,r,o);case"<=":return xGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};$J.exports=bGe});var tz=_((oQt,ez)=>{var kGe=Po(),QGe=id(),{safeRe:wP,t:IP}=By(),FGe=(t,e)=>{if(t instanceof kGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(wP[IP.COERCE]);else{let o;for(;(o=wP[IP.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),wP[IP.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;wP[IP.COERCERTL].lastIndex=-1}return r===null?null:QGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ez.exports=FGe});var nz=_((aQt,rz)=>{"use strict";rz.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var BP=_((lQt,iz)=>{"use strict";iz.exports=Cn;Cn.Node=sd;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var LGe=BP(),od=Symbol("max"),If=Symbol("length"),Dy=Symbol("lengthCalculator"),yI=Symbol("allowStale"),ad=Symbol("maxAge"),wf=Symbol("dispose"),sz=Symbol("noDisposeOnSet"),bs=Symbol("lruList"),Oc=Symbol("cache"),az=Symbol("updateAgeOnGet"),tN=()=>1,nN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[od]=e.max||1/0,o=e.length||tN;if(this[Dy]=typeof o!="function"?tN:o,this[yI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ad]=e.maxAge||0,this[wf]=e.dispose,this[sz]=e.noDisposeOnSet||!1,this[az]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[od]=e||1/0,mI(this)}get max(){return this[od]}set allowStale(e){this[yI]=!!e}get allowStale(){return this[yI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ad]=e,mI(this)}get maxAge(){return this[ad]}set lengthCalculator(e){typeof e!="function"&&(e=tN),e!==this[Dy]&&(this[Dy]=e,this[If]=0,this[bs].forEach(r=>{r.length=this[Dy](r.value,r.key),this[If]+=r.length})),mI(this)}get lengthCalculator(){return this[Dy]}get length(){return this[If]}get itemCount(){return this[bs].length}rforEach(e,r){r=r||this;for(let o=this[bs].tail;o!==null;){let a=o.prev;oz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[bs].head;o!==null;){let a=o.next;oz(this,e,o,r),o=a}}keys(){return this[bs].toArray().map(e=>e.key)}values(){return this[bs].toArray().map(e=>e.value)}reset(){this[wf]&&this[bs]&&this[bs].length&&this[bs].forEach(e=>this[wf](e.key,e.value)),this[Oc]=new Map,this[bs]=new LGe,this[If]=0}dump(){return this[bs].map(e=>vP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[bs]}set(e,r,o){if(o=o||this[ad],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Dy](r,e);if(this[Oc].has(e)){if(n>this[od])return Py(this,this[Oc].get(e)),!1;let p=this[Oc].get(e).value;return this[wf]&&(this[sz]||this[wf](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[If]+=n-p.length,p.length=n,this.get(e),mI(this),!0}let u=new iN(e,r,n,a,o);return u.length>this[od]?(this[wf]&&this[wf](e,r),!1):(this[If]+=u.length,this[bs].unshift(u),this[Oc].set(e,this[bs].head),mI(this),!0)}has(e){if(!this[Oc].has(e))return!1;let r=this[Oc].get(e).value;return!vP(this,r)}get(e){return rN(this,e,!0)}peek(e){return rN(this,e,!1)}pop(){let e=this[bs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Oc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Oc].forEach((e,r)=>rN(this,r,!1))}},rN=(t,e,r)=>{let o=t[Oc].get(e);if(o){let a=o.value;if(vP(t,a)){if(Py(t,o),!t[yI])return}else r&&(t[az]&&(o.value.now=Date.now()),t[bs].unshiftNode(o));return a.value}},vP=(t,e)=>{if(!e||!e.maxAge&&!t[ad])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ad]&&r>t[ad]},mI=t=>{if(t[If]>t[od])for(let e=t[bs].tail;t[If]>t[od]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[wf]&&t[wf](r.key,r.value),t[If]-=r.length,t[Oc].delete(r.key),t[bs].removeNode(e)}},iN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},oz=(t,e,r,o)=>{let a=r.value;vP(t,a)&&(Py(t,r),t[yI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};lz.exports=nN});var Ml=_((uQt,pz)=>{var ld=class{constructor(e,r){if(r=OGe(r),e instanceof ld)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ld(e.raw,r);if(e instanceof sN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!Az(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&YGe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&qGe)|(this.options.loose&&GGe))+":"+e,a=uz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,t5e(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],_Ge),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],HGe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],jGe),ci("caret trim",e);let A=e.split(" ").map(I=>WGe(I,this.options)).join(" ").split(/\s+/).map(I=>e5e(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new sN(I,this.options));for(let I of h){if(Az(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return uz.set(o,E),E}intersects(e,r){if(!(e instanceof ld))throw new TypeError("a Range is required");return this.set.some(o=>fz(o,r)&&e.set.some(a=>fz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new UGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",YGe=t=>t.value==="",fz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},WGe=(t,e)=>(ci("comp",t,e),t=JGe(t,e),ci("caret",t),t=VGe(t,e),ci("tildes",t),t=XGe(t,e),ci("xrange",t),t=$Ge(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",VGe=(t,e)=>t.trim().split(/\s+/).map(r=>KGe(r,e)).join(" "),KGe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},JGe=(t,e)=>t.trim().split(/\s+/).map(r=>zGe(r,e)).join(" "),zGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},XGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>ZGe(r,e)).join(" ")),ZGe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},$Ge=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),e5e=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),t5e=t=>(e,r,o,a,n,u,A,p,h,E,I,v,b)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),r5e=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var EI=_((AQt,Ez)=>{var CI=Symbol("SemVer ANY"),Sy=class{static get ANY(){return CI}constructor(e,r){if(r=hz(r),e instanceof Sy){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),aN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===CI?this.value="":this.value=this.operator+this.semver.version,aN("comp",this)}parse(e){let r=this.options.loose?gz[dz.COMPARATORLOOSE]:gz[dz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new mz(o[2],this.options.loose):this.semver=CI}toString(){return this.value}test(e){if(aN("Comparator.test",e,this.options.loose),this.semver===CI||e===CI)return!0;if(typeof e=="string")try{e=new mz(e,this.options)}catch{return!1}return oN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Sy))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new yz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new yz(this.value,r).test(e.semver):(r=hz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||oN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||oN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Ez.exports=Sy;var hz=hP(),{safeRe:gz,t:dz}=By(),oN=eN(),aN=gI(),mz=Po(),yz=Ml()});var wI=_((fQt,Cz)=>{var n5e=Ml(),i5e=(t,e,r)=>{try{e=new n5e(e,r)}catch{return!1}return e.test(t)};Cz.exports=i5e});var Iz=_((pQt,wz)=>{var s5e=Ml(),o5e=(t,e)=>new s5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));wz.exports=o5e});var vz=_((hQt,Bz)=>{var a5e=Po(),l5e=Ml(),c5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new l5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new a5e(o,r))}),o};Bz.exports=c5e});var Pz=_((gQt,Dz)=>{var u5e=Po(),A5e=Ml(),f5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new A5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new u5e(o,r))}),o};Dz.exports=f5e});var bz=_((dQt,xz)=>{var lN=Po(),p5e=Ml(),Sz=dI(),h5e=(t,e)=>{t=new p5e(t,e);let r=new lN("0.0.0");if(t.test(r)||(r=new lN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new lN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Sz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Sz(r,n))&&(r=n)}return r&&t.test(r)?r:null};xz.exports=h5e});var Qz=_((mQt,kz)=>{var g5e=Ml(),d5e=(t,e)=>{try{return new g5e(t,e).range||"*"}catch{return null}};kz.exports=d5e});var DP=_((yQt,Nz)=>{var m5e=Po(),Rz=EI(),{ANY:y5e}=Rz,E5e=Ml(),C5e=wI(),Fz=dI(),Tz=yP(),w5e=CP(),I5e=EP(),B5e=(t,e,r,o)=>{t=new m5e(t,o),e=new E5e(e,o);let a,n,u,A,p;switch(r){case">":a=Fz,n=w5e,u=Tz,A=">",p=">=";break;case"<":a=Tz,n=I5e,u=Fz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(C5e(t,e,o))return!1;for(let h=0;h{b.semver===y5e&&(b=new Rz(">=0.0.0")),I=I||b,v=v||b,a(b.semver,I.semver,o)?I=b:u(b.semver,v.semver,o)&&(v=b)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Nz.exports=B5e});var Mz=_((EQt,Lz)=>{var v5e=DP(),D5e=(t,e,r)=>v5e(t,e,">",r);Lz.exports=D5e});var Uz=_((CQt,Oz)=>{var P5e=DP(),S5e=(t,e,r)=>P5e(t,e,"<",r);Oz.exports=S5e});var jz=_((wQt,Hz)=>{var _z=Ml(),x5e=(t,e,r)=>(t=new _z(t,r),e=new _z(e,r),t.intersects(e,r));Hz.exports=x5e});var Gz=_((IQt,qz)=>{var b5e=wI(),k5e=Ll();qz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>k5e(E,I,r));for(let E of u)b5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var Yz=Ml(),uN=EI(),{ANY:cN}=uN,II=wI(),AN=Ll(),Q5e=(t,e,r={})=>{if(t===e)return!0;t=new Yz(t,r),e=new Yz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=T5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},F5e=[new uN(">=0.0.0-0")],Wz=[new uN(">=0.0.0")],T5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===cN){if(e.length===1&&e[0].semver===cN)return!0;r.includePrerelease?t=F5e:t=Wz}if(e.length===1&&e[0].semver===cN){if(r.includePrerelease)return!0;e=Wz}let o=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=Vz(a,b,r):b.operator==="<"||b.operator==="<="?n=Kz(n,b,r):o.add(b.semver);if(o.size>1)return null;let u;if(a&&n){if(u=AN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of o){if(a&&!II(b,String(a),r)||n&&!II(b,String(n),r))return null;for(let C of e)if(!II(b,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let b of e){if(E=E||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(v&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===v.major&&b.semver.minor===v.minor&&b.semver.patch===v.patch&&(v=!1),b.operator===">"||b.operator===">="){if(A=Vz(a,b,r),A===b&&A!==a)return!1}else if(a.operator===">="&&!II(a.semver,String(b),r))return!1}if(n){if(I&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===I.major&&b.semver.minor===I.minor&&b.semver.patch===I.patch&&(I=!1),b.operator==="<"||b.operator==="<="){if(p=Kz(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!II(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Vz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Kz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Jz.exports=Q5e});var zn=_((vQt,$z)=>{var fN=By(),Xz=hI(),R5e=Po(),Zz=XR(),N5e=id(),L5e=yJ(),M5e=CJ(),O5e=BJ(),U5e=PJ(),_5e=xJ(),H5e=kJ(),j5e=FJ(),q5e=RJ(),G5e=Ll(),Y5e=OJ(),W5e=_J(),V5e=mP(),K5e=GJ(),J5e=WJ(),z5e=dI(),X5e=yP(),Z5e=ZR(),$5e=$R(),e9e=EP(),t9e=CP(),r9e=eN(),n9e=tz(),i9e=EI(),s9e=Ml(),o9e=wI(),a9e=Iz(),l9e=vz(),c9e=Pz(),u9e=bz(),A9e=Qz(),f9e=DP(),p9e=Mz(),h9e=Uz(),g9e=jz(),d9e=Gz(),m9e=zz();$z.exports={parse:N5e,valid:L5e,clean:M5e,inc:O5e,diff:U5e,major:_5e,minor:H5e,patch:j5e,prerelease:q5e,compare:G5e,rcompare:Y5e,compareLoose:W5e,compareBuild:V5e,sort:K5e,rsort:J5e,gt:z5e,lt:X5e,eq:Z5e,neq:$5e,gte:e9e,lte:t9e,cmp:r9e,coerce:n9e,Comparator:i9e,Range:s9e,satisfies:o9e,toComparators:a9e,maxSatisfying:l9e,minSatisfying:c9e,minVersion:u9e,validRange:A9e,outside:f9e,gtr:p9e,ltr:h9e,intersects:g9e,simplifyRange:d9e,subset:m9e,SemVer:R5e,re:fN.re,src:fN.src,tokens:fN.t,SEMVER_SPEC_VERSION:Xz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Xz.RELEASE_TYPES,compareIdentifiers:Zz.compareIdentifiers,rcompareIdentifiers:Zz.rcompareIdentifiers}});var tX=_((DQt,eX)=>{"use strict";function y9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function cd(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,cd)}y9e(cd,Error);cd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Se|Ne[3];case"&":return Se&Ne[3];case"^":return Se^Ne[3]}},Z)},v="!",b=Re("!",!1),C=function(Z){return!Z},T="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},le=/^[^ \t\n\r()!|&\^]/,pe=Qe([" "," ",` -`,"\r","(",")","!","|","&","^"],!0,!1),Ae=function(Z){return e.queryPattern.test(Z)},ye=function(Z){return e.checkFn(Z)},ae=Te("whitespace"),we=/^[ \t\n\r]/,Pe=Qe([" "," ",` -`,"\r"],!1,!1),g=0,Ee=0,De=[{line:1,column:1}],ce=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ke(){return t.substring(Ee,g)}function ht(){return He(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),S([Te(Z)],t.substring(Ee,g),ie)}function lt(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function Qe(Z,ie,Se){return{type:"class",parts:Z,inverted:ie,ignoreCase:Se}}function be(){return{type:"any"}}function _e(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=De[Z],Se;if(ie)return ie;for(Se=Z-1;!De[Se];)Se--;for(ie=De[Se],ie={line:ie.line,column:ie.column};Sece&&(ce=g,ne=[]),ne.push(Z))}function w(Z,ie){return new cd(Z,null,null,ie)}function S(Z,ie,Se){return new cd(cd.buildMessage(Z,ie),Z,ie,Se)}function y(){var Z,ie,Se,Ne,ot,dt,jt,$t;if(Z=g,ie=F(),ie!==r){for(Se=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Se.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Se!==r?(Ee=Z,ie=I(ie,Se),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Se,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&x(b)),ie!==r?(Se=F(),Se!==r?(Ee=Z,ie=C(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=T,g++):(ie=r,ee===0&&x(L)),ie!==r?(Se=X(),Se!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&x(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Se,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Se=g,Ne=[],le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe)),ot!==r)for(;ot!==r;)Ne.push(ot),le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe));else Ne=r;Ne!==r?Se=t.substring(Se,g):Se=Ne,Se!==r?(Ee=g,Ne=Ae(Se),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=ye(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));ie!==r;)Z.push(ie),we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));return ee--,Z===r&&(ie=r,ee===0&&x(ae)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:C9e}=tX();PP.makeParser=(t=/[a-z]+/)=>(e,r)=>C9e(e,{queryPattern:t,checkFn:r});PP.parse=PP.makeParser()});var iX=_((SQt,nX)=>{"use strict";nX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var pN=_((xQt,oX)=>{var BI=iX(),sX={};for(let t of Object.keys(BI))sX[BI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};oX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function w9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=sX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(BI)){let n=BI[a],u=w9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var lX=_((bQt,aX)=>{var SP=pN();function I9e(){let t={},e=Object.keys(SP);for(let r=e.length,o=0;o{var hN=pN(),P9e=lX(),xy={},S9e=Object.keys(hN);function x9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function b9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:hN[t].channels}),Object.defineProperty(xy[t],"labels",{value:hN[t].labels});let e=P9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=b9e(a),xy[t][o].raw=x9e(a)})});cX.exports=xy});var vI=_((QQt,gX)=>{"use strict";var AX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,fX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},pX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},xP=t=>t,hX=(t,e,r)=>[t,e,r],by=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},gN,ky=(t,e,r,o)=>{gN===void 0&&(gN=uX());let a=o?10:0,n={};for(let[u,A]of Object.entries(gN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function k9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",by(e.color,"ansi",()=>ky(AX,"ansi16",xP,!1)),by(e.color,"ansi256",()=>ky(fX,"ansi256",xP,!1)),by(e.color,"ansi16m",()=>ky(pX,"rgb",hX,!1)),by(e.bgColor,"ansi",()=>ky(AX,"ansi16",xP,!0)),by(e.bgColor,"ansi256",()=>ky(fX,"ansi256",xP,!0)),by(e.bgColor,"ansi16m",()=>ky(pX,"rgb",hX,!0)),e}Object.defineProperty(gX,"exports",{enumerable:!0,get:k9e})});var mX=_((FQt,dX)=>{"use strict";dX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var Q9e=Be("os"),yX=Be("tty"),Ol=mX(),{env:ls}=process,Kp;Ol("no-color")||Ol("no-colors")||Ol("color=false")||Ol("color=never")?Kp=0:(Ol("color")||Ol("colors")||Ol("color=true")||Ol("color=always"))&&(Kp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Kp=1:ls.FORCE_COLOR==="false"?Kp=0:Kp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function dN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function mN(t,e){if(Kp===0)return 0;if(Ol("color=16m")||Ol("color=full")||Ol("color=truecolor"))return 3;if(Ol("color=256"))return 2;if(t&&!e&&Kp===void 0)return 0;let r=Kp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=Q9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function F9e(t){let e=mN(t,t&&t.isTTY);return dN(e)}EX.exports={supportsColor:F9e,stdout:dN(mN(!0,yX.isatty(1))),stderr:dN(mN(!0,yX.isatty(2)))}});var wX=_((RQt,CX)=>{"use strict";var T9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},R9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r -`:` -`)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};CX.exports={stringReplaceAll:T9e,stringEncaseCRLFWithFirstIndex:R9e}});var PX=_((NQt,DX)=>{"use strict";var N9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,IX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,L9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,M9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,O9e=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function vX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):O9e.get(t)||t}function U9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(L9e))r.push(a[2].replace(M9e,(A,p,h)=>p?vX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function _9e(t){IX.lastIndex=0;let e=[],r;for(;(r=IX.exec(t))!==null;){let o=r[1];if(r[2]){let a=U9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function BX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}DX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(N9e,(n,u,A,p,h,E)=>{if(u)a.push(vX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:BX(t,r)(I)),r.push({inverse:A,styles:_9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(BX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var vN=_((LQt,kX)=>{"use strict";var DI=vI(),{stdout:CN,stderr:wN}=yN(),{stringReplaceAll:H9e,stringEncaseCRLFWithFirstIndex:j9e}=wX(),SX=["ansi","ansi","ansi256","ansi16m"],Qy=Object.create(null),q9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=CN?CN.level:0;t.level=e.level===void 0?r:e.level},IN=class{constructor(e){return xX(e)}},xX=t=>{let e={};return q9e(e,t),e.template=(...r)=>W9e(e.template,...r),Object.setPrototypeOf(e,bP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=IN,e.template};function bP(t){return xX(t)}for(let[t,e]of Object.entries(DI))Qy[t]={get(){let r=kP(this,BN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Qy.visible={get(){let t=kP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bX)Qy[t]={get(){let{level:e}=this;return function(...r){let o=BN(DI.color[SX[e]][t](...r),DI.color.close,this._styler);return kP(this,o,this._isEmpty)}}};for(let t of bX){let e="bg"+t[0].toUpperCase()+t.slice(1);Qy[e]={get(){let{level:r}=this;return function(...o){let a=BN(DI.bgColor[SX[r]][t](...o),DI.bgColor.close,this._styler);return kP(this,a,this._isEmpty)}}}}var G9e=Object.defineProperties(()=>{},{...Qy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),BN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},kP=(t,e,r)=>{let o=(...a)=>Y9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=G9e,o._generator=t,o._styler=e,o._isEmpty=r,o},Y9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=H9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=j9e(e,a,o,n)),o+e+a},EN,W9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var QX=QP();FX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&QX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&QX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var RX=_((UQt,TX)=>{"use strict";TX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var qX=_((_Qt,jX)=>{"use strict";var NX=RX(),ud=(t,e,r)=>{if(NX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(NX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(ud.cache.hasOwnProperty(p))return ud.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let T=t+"|"+e;return o.capture?`(${T})`:o.wrap===!1?T:`(?:${T})`}let I=HX(t)||HX(e),v={min:t,max:e,a:h,b:E},b=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let T=E<0?Math.abs(E):1;C=LX(T,Math.abs(h),v,o),h=v.a=0}return E>=0&&(b=LX(h,E,v,o)),v.negatives=C,v.positives=b,v.result=V9e(C,b,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&b.length+C.length>1&&(v.result=`(?:${v.result})`),ud.cache[p]=v,v.result};function V9e(t,e,r){let o=DN(t,e,"-",!1,r)||[],a=DN(e,t,"",!1,r)||[],n=DN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function K9e(t,e){let r=1,o=1,a=OX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=OX(t,r);for(a=UX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+_X(A.count),u=h+1;continue}r.isPadded&&(I=$9e(h,r,o)),E.string=I+E.pattern+_X(E.count),n.push(E),u=h+1,A=E}return n}function DN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!MX(e,"string",A)&&n.push(r+A),o&&MX(e,"string",A)&&n.push(r+A)}return n}function z9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function MX(t,e,r){return t.some(o=>o[e]===r)}function OX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function UX(t,e){return t-t%Math.pow(10,e)}function _X(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Z9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function HX(t){return/^-?(0+)\d/.test(t)}function $9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}ud.cache={};ud.clearCache=()=>ud.cache={};jX.exports=ud});var xN=_((HQt,XX)=>{"use strict";var e7e=Be("util"),WX=qX(),GX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),t7e=t=>e=>t===!0?Number(e):String(e),PN=t=>typeof t=="number"||typeof t=="string"&&t!=="",SI=t=>Number.isInteger(+t),SN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},r7e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,n7e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},YX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},VX=(t,e,r,o)=>{if(r)return WX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},KX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return WX(t,e,r)},JX=(...t)=>new RangeError("Invalid range arguments: "+e7e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw JX([t,e]);return[]},s7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},o7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw JX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=SN(A)||SN(p)||SN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&r7e(t,e,o)===!1,b=o.transform||t7e(v);if(o.toRegex&&r===1)return VX(YX(t,I),YX(e,I),!0,o);let C={negatives:[],positives:[]},T=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?T(a):L.push(n7e(b(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?i7e(C,o):KX(L,null,{wrap:!1,...o}):L},a7e=(t,e,r=1,o={})=>{if(!SI(t)&&t.length>1||!SI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return VX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?KX(E,null,{wrap:!1,options:o}):E},TP=(t,e,r,o={})=>{if(e==null&&PN(t))return[t];if(!PN(t)||!PN(e))return zX(t,e,o);if(typeof r=="function")return TP(t,e,1,{transform:r});if(GX(r))return TP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,SI(r)?SI(t)&&SI(e)?o7e(t,e,r,a):a7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!GX(r)?s7e(r,a):TP(t,e,1,r)};XX.exports=TP});var eZ=_((jQt,$X)=>{"use strict";var l7e=xN(),ZX=QP(),c7e=(t,e={})=>{let r=(o,a={})=>{let n=ZX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=ZX.reduce(o.nodes),I=l7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};$X.exports=c7e});var nZ=_((qQt,rZ)=>{"use strict";var u7e=xN(),tZ=FP(),Fy=QP(),Ad=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Fy.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(Ad(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?Ad(a,n,r):a+n);return Fy.flatten(o)},A7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(Ad(A.pop(),tZ(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(Ad(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Fy.reduce(a.nodes);if(Fy.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=u7e(...I,e);v.length===0&&(v=tZ(a,e)),A.push(Ad(A.pop(),v)),a.nodes=[];return}let p=Fy.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";iZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` -`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var uZ=_((YQt,cZ)=>{"use strict";var f7e=FP(),{MAX_LENGTH:oZ,CHAR_BACKSLASH:bN,CHAR_BACKTICK:p7e,CHAR_COMMA:h7e,CHAR_DOT:g7e,CHAR_LEFT_PARENTHESES:d7e,CHAR_RIGHT_PARENTHESES:m7e,CHAR_LEFT_CURLY_BRACE:y7e,CHAR_RIGHT_CURLY_BRACE:E7e,CHAR_LEFT_SQUARE_BRACKET:aZ,CHAR_RIGHT_SQUARE_BRACKET:lZ,CHAR_DOUBLE_QUOTE:C7e,CHAR_SINGLE_QUOTE:w7e,CHAR_NO_BREAK_SPACE:I7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:B7e}=sZ(),v7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(oZ,r.maxLength):oZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,b={},C=()=>t[E++],T=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(T({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:f7e(u)}]}T({type:"comma",value:v}),u.commas++;continue}if(v===g7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){T({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}T({type:"dot",value:v});continue}T({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return T({type:"eos"}),a};cZ.exports=v7e});var pZ=_((WQt,fZ)=>{"use strict";var AZ=FP(),D7e=eZ(),P7e=nZ(),S7e=uZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>S7e(t,e);rl.stringify=(t,e={})=>AZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),D7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=P7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);fZ.exports=rl});var xI=_((VQt,yZ)=>{"use strict";var x7e=Be("path"),Vu="\\\\/",hZ=`[^${Vu}]`,Bf="\\.",b7e="\\+",k7e="\\?",RP="\\/",Q7e="(?=.)",gZ="[^/]",kN=`(?:${RP}|$)`,dZ=`(?:^|${RP})`,QN=`${Bf}{1,2}${kN}`,F7e=`(?!${Bf})`,T7e=`(?!${dZ}${QN})`,R7e=`(?!${Bf}{0,1}${kN})`,N7e=`(?!${QN})`,L7e=`[^.${RP}]`,M7e=`${gZ}*?`,mZ={DOT_LITERAL:Bf,PLUS_LITERAL:b7e,QMARK_LITERAL:k7e,SLASH_LITERAL:RP,ONE_CHAR:Q7e,QMARK:gZ,END_ANCHOR:kN,DOTS_SLASH:QN,NO_DOT:F7e,NO_DOTS:T7e,NO_DOT_SLASH:R7e,NO_DOTS_SLASH:N7e,QMARK_NO_DOT:L7e,STAR:M7e,START_ANCHOR:dZ},O7e={...mZ,SLASH_LITERAL:`[${Vu}]`,QMARK:hZ,STAR:`${hZ}*?`,DOTS_SLASH:`${Bf}{1,2}(?:[${Vu}]|$)`,NO_DOT:`(?!${Bf})`,NO_DOTS:`(?!(?:^|[${Vu}])${Bf}{1,2}(?:[${Vu}]|$))`,NO_DOT_SLASH:`(?!${Bf}{0,1}(?:[${Vu}]|$))`,NO_DOTS_SLASH:`(?!${Bf}{1,2}(?:[${Vu}]|$))`,QMARK_NO_DOT:`[^.${Vu}]`,START_ANCHOR:`(?:^|[${Vu}])`,END_ANCHOR:`(?:[${Vu}]|$)`},U7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};yZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:U7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:x7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?O7e:mZ}}});var bI=_(Pa=>{"use strict";var _7e=Be("path"),H7e=process.platform==="win32",{REGEX_BACKSLASH:j7e,REGEX_REMOVE_BACKSLASH:q7e,REGEX_SPECIAL_CHARS:G7e,REGEX_SPECIAL_CHARS_GLOBAL:Y7e}=xI();Pa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Pa.hasRegexChars=t=>G7e.test(t);Pa.isRegexChar=t=>t.length===1&&Pa.hasRegexChars(t);Pa.escapeRegex=t=>t.replace(Y7e,"\\$1");Pa.toPosixSlashes=t=>t.replace(j7e,"/");Pa.removeBackslashes=t=>t.replace(q7e,e=>e==="\\"?"":e);Pa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Pa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:H7e===!0||_7e.sep==="\\";Pa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Pa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Pa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Pa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var PZ=_((JQt,DZ)=>{"use strict";var EZ=bI(),{CHAR_ASTERISK:FN,CHAR_AT:W7e,CHAR_BACKWARD_SLASH:kI,CHAR_COMMA:V7e,CHAR_DOT:TN,CHAR_EXCLAMATION_MARK:RN,CHAR_FORWARD_SLASH:vZ,CHAR_LEFT_CURLY_BRACE:NN,CHAR_LEFT_PARENTHESES:LN,CHAR_LEFT_SQUARE_BRACKET:K7e,CHAR_PLUS:J7e,CHAR_QUESTION_MARK:CZ,CHAR_RIGHT_CURLY_BRACE:z7e,CHAR_RIGHT_PARENTHESES:wZ,CHAR_RIGHT_SQUARE_BRACKET:X7e}=xI(),IZ=t=>t===vZ||t===kI,BZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},Z7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,b=!1,C=!1,T=!1,L=!1,U=!1,J=!1,te=!1,le=!1,pe=!1,Ae=0,ye,ae,we={value:"",depth:0,isGlob:!1},Pe=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(ye=ae,p.charCodeAt(++h));for(;h0&&(ce=p.slice(0,E),p=p.slice(E),I-=E),De&&C===!0&&I>0?(De=p.slice(0,I),ne=p.slice(I)):C===!0?(De="",ne=p):De=p,De&&De!==""&&De!=="/"&&De!==p&&IZ(De.charCodeAt(De.length-1))&&(De=De.slice(0,-1)),r.unescape===!0&&(ne&&(ne=EZ.removeBackslashes(ne)),De&&J===!0&&(De=EZ.removeBackslashes(De)));let ee={prefix:ce,input:t,start:E,base:De,glob:ne,isBrace:v,isBracket:b,isGlob:C,isExtglob:T,isGlobstar:L,negated:te,negatedExtglob:le};if(r.tokens===!0&&(ee.maxDepth=0,IZ(ae)||u.push(we),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let ke=0;ke{"use strict";var NP=xI(),nl=bI(),{MAX_LENGTH:LP,POSIX_REGEX_SOURCE:$7e,REGEX_NON_SPECIAL_CHARS:eYe,REGEX_SPECIAL_CHARS_BACKREF:tYe,REPLACEMENTS:SZ}=NP,rYe=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,MN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=SZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NP.globChars(p),E=NP.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:T,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:le,STAR:pe,START_ANCHOR:Ae}=h,ye=x=>`(${A}(?:(?!${Ae}${x.dot?T:I}).)*?)`,ae=r.dot?"":L,we=r.dot?te:le,Pe=r.bash===!0?ye(r):pe;r.capture&&(Pe=`(${Pe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],De=[],ce=[],ne=n,ee,Ie=()=>g.index===a-1,ke=g.peek=(x=1)=>t[g.index+x],ht=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),lt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Re=x=>{g.output+=x.output!=null?x.output:x.value,lt(x.value)},Qe=()=>{let x=1;for(;ke()==="!"&&(ke(2)!=="("||ke(3)==="?");)ht(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},be=x=>{g[x]++,ce.push(x)},_e=x=>{g[x]--,ce.pop()},Te=x=>{if(ne.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),S=x.extglob===!0||Ee.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=Pe,g.output+=ne.output)}if(Ee.length&&x.type!=="paren"&&(Ee[Ee.length-1].inner+=x.value),(x.value||x.output)&&Re(x),ne&&ne.type==="text"&&x.type==="text"){ne.value+=x.value,ne.output=(ne.output||"")+x.value;return}x.prev=ne,u.push(x),ne=x},Je=(x,w)=>{let S={...E[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;be("parens"),Te({type:x,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:ht(),output:y}),Ee.push(S)},He=x=>{let w=x.close+(r.capture?")":""),S;if(x.type==="negate"){let y=Pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=ye(r)),(y!==Pe||Ie()||/^\)+$/.test(H()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let F=MN(S,{...e,fastpaths:!1}).output;w=x.close=`)${F})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),_e("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace(tYe,(S,y,F,z,X,Z)=>z==="\\"?(x=!0,S):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?we+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?Pe:""):Pe:y?S:`\\${S}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=ht(),ee==="\0")continue;if(ee==="\\"){let S=ke();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=ht():ee+=ht(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=$7e[z];if(X){ne.value=F+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&ke()!==":"||ee==="-"&&ke()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){be("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let S=Ee[Ee.length-1];if(S&&g.parens===S.parens+1){He(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),_e("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else be("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}_e("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(S))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){be("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};De.push(S),Te(S);continue}if(ee==="}"){let S=De[De.length-1];if(r.nobrace===!0||!S){Te({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=rYe(z,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let F=g.output.slice(0,S.outputIndex),z=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),_e("braces"),De.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let S=ee,y=De[De.length-1];y&&ce[ce.length-1]==="braces"&&(y.comma=!0,S="|"),Te({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:b});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=De[De.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=ke(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:le});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&ke()==="("&&(ke(2)!=="?"||!/[!=<:]/.test(ke(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){Qe();continue}}if(ee==="+"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=eYe.exec(H());S&&(ee+=S[0],g.index+=S[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=Pe,g.backtrack=!0,g.globstar=!0,lt(ee);continue}let x=H();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){lt(ee);continue}let S=ne.prev,y=S.prev,F=S.type==="slash"||S.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||x[0]&&x[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=Ee.length&&(S.type==="pipe"||S.type==="paren");if(!F&&S.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;x.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;x=x.slice(3),lt("/**",3)}if(S.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=ye(r),g.output=ne.output,g.globstar=!0,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=ye(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&x[0]==="/"){let ie=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${ye(r)}${b}|${b}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&x[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${b}|${ye(r)}${b})`,g.output=ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=ye(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,lt(ee);continue}let w={type:"star",value:ee,output:Pe};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=ae+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=ae,ne.output+=ae),ke()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),_e("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),_e("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),_e("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${b}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};MN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=SZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:b,START_ANCHOR:C}=NP.globChars(n),T=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":b;r.capture&&(te=`(${te})`);let le=ae=>ae.noglobstar===!0?te:`(${U}(?:(?!${C}${ae.dot?h:u}).)*?)`,pe=ae=>{switch(ae){case"*":return`${T}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${T}${te}${u}${p}${te}`;case"*/*":return`${T}${te}${A}${p}${L}${te}`;case"**":return T+le(r);case"**/*":return`(?:${T}${le(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${T}${le(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${T}${le(r)}${A})?${u}${p}${te}`;default:{let we=/^(.*?)\.(\w+)$/.exec(ae);if(!we)return;let Pe=pe(we[1]);return Pe?Pe+u+we[2]:void 0}}},Ae=nl.removePrefix(t,J),ye=pe(Ae);return ye&&r.strictSlashes!==!0&&(ye+=`${A}?`),ye};xZ.exports=MN});var QZ=_((XQt,kZ)=>{"use strict";var nYe=Be("path"),iYe=PZ(),ON=bZ(),UN=bI(),sYe=xI(),oYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Oi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Oi(v,e,r));return v=>{for(let b of E){let C=b(v);if(C)return C}return!1}}let o=oYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=UN.isWindows(e),u=o?Oi.compileRe(t,e):Oi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Oi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:b,output:C}=Oi.test(E,u,e,{glob:t,posix:n}),T={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:b,isMatch:v};return typeof a.onResult=="function"&&a.onResult(T),v===!1?(T.isMatch=!1,I?T:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(T),T.isMatch=!1,I?T:!1):(typeof a.onMatch=="function"&&a.onMatch(T),I?T:!0)};return r&&(h.state=A),h};Oi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?UN.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Oi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Oi.matchBase=(t,e,r,o=UN.isWindows(r))=>(e instanceof RegExp?e:Oi.makeRe(e,r)).test(nYe.basename(t));Oi.isMatch=(t,e,r)=>Oi(e,r)(t);Oi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Oi.parse(r,e)):ON(t,{...e,fastpaths:!1});Oi.scan=(t,e)=>iYe(t,e);Oi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Oi.toRegex(A,e);return o===!0&&(p.state=t),p};Oi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=ON.fastpaths(t,e)),a.output||(a=ON(t,e)),Oi.compileRe(a,e,r,o)};Oi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Oi.constants=sYe;kZ.exports=Oi});var TZ=_((ZQt,FZ)=>{"use strict";FZ.exports=QZ()});var Zo=_(($Qt,MZ)=>{"use strict";var NZ=Be("util"),LZ=pZ(),Ku=TZ(),_N=bI(),RZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Ku(t,e);yi.isMatch=(t,e,r)=>Ku(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(RZ(t)||RZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!_N.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);return[].concat(e).every(o=>Ku(o,r)(t))};yi.capture=(t,e,r)=>{let o=_N.isWindows(r),n=Ku.makeRe(String(t),{...r,capture:!0}).exec(o?_N.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Ku.makeRe(...t);yi.scan=(...t)=>Ku.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of LZ(String(o),e))r.push(Ku.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:LZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};MZ.exports=yi});var UZ=_((eFt,OZ)=>{"use strict";OZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var MP=_((tFt,_Z)=>{"use strict";var aYe=UZ();_Z.exports=t=>typeof t=="string"?t.replace(aYe(),""):t});var jZ=_((rFt,HZ)=>{function lYe(){this.__data__=[],this.size=0}HZ.exports=lYe});var Ry=_((nFt,qZ)=>{function cYe(t,e){return t===e||t!==t&&e!==e}qZ.exports=cYe});var QI=_((iFt,GZ)=>{var uYe=Ry();function AYe(t,e){for(var r=t.length;r--;)if(uYe(t[r][0],e))return r;return-1}GZ.exports=AYe});var WZ=_((sFt,YZ)=>{var fYe=QI(),pYe=Array.prototype,hYe=pYe.splice;function gYe(t){var e=this.__data__,r=fYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():hYe.call(e,r,1),--this.size,!0}YZ.exports=gYe});var KZ=_((oFt,VZ)=>{var dYe=QI();function mYe(t){var e=this.__data__,r=dYe(e,t);return r<0?void 0:e[r][1]}VZ.exports=mYe});var zZ=_((aFt,JZ)=>{var yYe=QI();function EYe(t){return yYe(this.__data__,t)>-1}JZ.exports=EYe});var ZZ=_((lFt,XZ)=>{var CYe=QI();function wYe(t,e){var r=this.__data__,o=CYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}XZ.exports=wYe});var FI=_((cFt,$Z)=>{var IYe=jZ(),BYe=WZ(),vYe=KZ(),DYe=zZ(),PYe=ZZ();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var SYe=FI();function xYe(){this.__data__=new SYe,this.size=0}e$.exports=xYe});var n$=_((AFt,r$)=>{function bYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}r$.exports=bYe});var s$=_((fFt,i$)=>{function kYe(t){return this.__data__.get(t)}i$.exports=kYe});var a$=_((pFt,o$)=>{function QYe(t){return this.__data__.has(t)}o$.exports=QYe});var HN=_((hFt,l$)=>{var FYe=typeof global=="object"&&global&&global.Object===Object&&global;l$.exports=FYe});var _l=_((gFt,c$)=>{var TYe=HN(),RYe=typeof self=="object"&&self&&self.Object===Object&&self,NYe=TYe||RYe||Function("return this")();c$.exports=NYe});var fd=_((dFt,u$)=>{var LYe=_l(),MYe=LYe.Symbol;u$.exports=MYe});var h$=_((mFt,p$)=>{var A$=fd(),f$=Object.prototype,OYe=f$.hasOwnProperty,UYe=f$.toString,TI=A$?A$.toStringTag:void 0;function _Ye(t){var e=OYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=UYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}p$.exports=_Ye});var d$=_((yFt,g$)=>{var HYe=Object.prototype,jYe=HYe.toString;function qYe(t){return jYe.call(t)}g$.exports=qYe});var pd=_((EFt,E$)=>{var m$=fd(),GYe=h$(),YYe=d$(),WYe="[object Null]",VYe="[object Undefined]",y$=m$?m$.toStringTag:void 0;function KYe(t){return t==null?t===void 0?VYe:WYe:y$&&y$ in Object(t)?GYe(t):YYe(t)}E$.exports=KYe});var il=_((CFt,C$)=>{function JYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}C$.exports=JYe});var OP=_((wFt,w$)=>{var zYe=pd(),XYe=il(),ZYe="[object AsyncFunction]",$Ye="[object Function]",eWe="[object GeneratorFunction]",tWe="[object Proxy]";function rWe(t){if(!XYe(t))return!1;var e=zYe(t);return e==$Ye||e==eWe||e==ZYe||e==tWe}w$.exports=rWe});var B$=_((IFt,I$)=>{var nWe=_l(),iWe=nWe["__core-js_shared__"];I$.exports=iWe});var P$=_((BFt,D$)=>{var jN=B$(),v$=function(){var t=/[^.]+$/.exec(jN&&jN.keys&&jN.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function sWe(t){return!!v$&&v$ in t}D$.exports=sWe});var qN=_((vFt,S$)=>{var oWe=Function.prototype,aWe=oWe.toString;function lWe(t){if(t!=null){try{return aWe.call(t)}catch{}try{return t+""}catch{}}return""}S$.exports=lWe});var b$=_((DFt,x$)=>{var cWe=OP(),uWe=P$(),AWe=il(),fWe=qN(),pWe=/[\\^$.*+?()[\]{}|]/g,hWe=/^\[object .+?Constructor\]$/,gWe=Function.prototype,dWe=Object.prototype,mWe=gWe.toString,yWe=dWe.hasOwnProperty,EWe=RegExp("^"+mWe.call(yWe).replace(pWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function CWe(t){if(!AWe(t)||uWe(t))return!1;var e=cWe(t)?EWe:hWe;return e.test(fWe(t))}x$.exports=CWe});var Q$=_((PFt,k$)=>{function wWe(t,e){return t?.[e]}k$.exports=wWe});var Jp=_((SFt,F$)=>{var IWe=b$(),BWe=Q$();function vWe(t,e){var r=BWe(t,e);return IWe(r)?r:void 0}F$.exports=vWe});var UP=_((xFt,T$)=>{var DWe=Jp(),PWe=_l(),SWe=DWe(PWe,"Map");T$.exports=SWe});var RI=_((bFt,R$)=>{var xWe=Jp(),bWe=xWe(Object,"create");R$.exports=bWe});var M$=_((kFt,L$)=>{var N$=RI();function kWe(){this.__data__=N$?N$(null):{},this.size=0}L$.exports=kWe});var U$=_((QFt,O$)=>{function QWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}O$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=RI(),TWe="__lodash_hash_undefined__",RWe=Object.prototype,NWe=RWe.hasOwnProperty;function LWe(t){var e=this.__data__;if(FWe){var r=e[t];return r===TWe?void 0:r}return NWe.call(e,t)?e[t]:void 0}_$.exports=LWe});var q$=_((TFt,j$)=>{var MWe=RI(),OWe=Object.prototype,UWe=OWe.hasOwnProperty;function _We(t){var e=this.__data__;return MWe?e[t]!==void 0:UWe.call(e,t)}j$.exports=_We});var Y$=_((RFt,G$)=>{var HWe=RI(),jWe="__lodash_hash_undefined__";function qWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=HWe&&e===void 0?jWe:e,this}G$.exports=qWe});var V$=_((NFt,W$)=>{var GWe=M$(),YWe=U$(),WWe=H$(),VWe=q$(),KWe=Y$();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var K$=V$(),JWe=FI(),zWe=UP();function XWe(){this.size=0,this.__data__={hash:new K$,map:new(zWe||JWe),string:new K$}}J$.exports=XWe});var Z$=_((MFt,X$)=>{function ZWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}X$.exports=ZWe});var NI=_((OFt,$$)=>{var $We=Z$();function eVe(t,e){var r=t.__data__;return $We(e)?r[typeof e=="string"?"string":"hash"]:r.map}$$.exports=eVe});var tee=_((UFt,eee)=>{var tVe=NI();function rVe(t){var e=tVe(this,t).delete(t);return this.size-=e?1:0,e}eee.exports=rVe});var nee=_((_Ft,ree)=>{var nVe=NI();function iVe(t){return nVe(this,t).get(t)}ree.exports=iVe});var see=_((HFt,iee)=>{var sVe=NI();function oVe(t){return sVe(this,t).has(t)}iee.exports=oVe});var aee=_((jFt,oee)=>{var aVe=NI();function lVe(t,e){var r=aVe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}oee.exports=lVe});var _P=_((qFt,lee)=>{var cVe=z$(),uVe=tee(),AVe=nee(),fVe=see(),pVe=aee();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var hVe=FI(),gVe=UP(),dVe=_P(),mVe=200;function yVe(t,e){var r=this.__data__;if(r instanceof hVe){var o=r.__data__;if(!gVe||o.length{var EVe=FI(),CVe=t$(),wVe=n$(),IVe=s$(),BVe=a$(),vVe=uee();function Oy(t){var e=this.__data__=new EVe(t);this.size=e.size}Oy.prototype.clear=CVe;Oy.prototype.delete=wVe;Oy.prototype.get=IVe;Oy.prototype.has=BVe;Oy.prototype.set=vVe;Aee.exports=Oy});var pee=_((WFt,fee)=>{var DVe="__lodash_hash_undefined__";function PVe(t){return this.__data__.set(t,DVe),this}fee.exports=PVe});var gee=_((VFt,hee)=>{function SVe(t){return this.__data__.has(t)}hee.exports=SVe});var mee=_((KFt,dee)=>{var xVe=_P(),bVe=pee(),kVe=gee();function jP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new xVe;++e{function QVe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function FVe(t,e){return t.has(e)}Cee.exports=FVe});var GN=_((XFt,Iee)=>{var TVe=mee(),RVe=Eee(),NVe=wee(),LVe=1,MVe=2;function OVe(t,e,r,o,a,n){var u=r&LVe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,b=r&MVe?new TVe:void 0;for(n.set(t,e),n.set(e,t);++I{var UVe=_l(),_Ve=UVe.Uint8Array;Bee.exports=_Ve});var Dee=_(($Ft,vee)=>{function HVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}vee.exports=HVe});var See=_((eTt,Pee)=>{function jVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}Pee.exports=jVe});var Fee=_((tTt,Qee)=>{var xee=fd(),bee=YN(),qVe=Ry(),GVe=GN(),YVe=Dee(),WVe=See(),VVe=1,KVe=2,JVe="[object Boolean]",zVe="[object Date]",XVe="[object Error]",ZVe="[object Map]",$Ve="[object Number]",eKe="[object RegExp]",tKe="[object Set]",rKe="[object String]",nKe="[object Symbol]",iKe="[object ArrayBuffer]",sKe="[object DataView]",kee=xee?xee.prototype:void 0,WN=kee?kee.valueOf:void 0;function oKe(t,e,r,o,a,n,u){switch(r){case sKe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case iKe:return!(t.byteLength!=e.byteLength||!n(new bee(t),new bee(e)));case JVe:case zVe:case $Ve:return qVe(+t,+e);case XVe:return t.name==e.name&&t.message==e.message;case eKe:case rKe:return t==e+"";case ZVe:var A=YVe;case tKe:var p=o&VVe;if(A||(A=WVe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=KVe,u.set(t,e);var E=GVe(A(t),A(e),o,a,n,u);return u.delete(t),E;case nKe:if(WN)return WN.call(t)==WN.call(e)}return!1}Qee.exports=oKe});var qP=_((rTt,Tee)=>{function aKe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var lKe=Array.isArray;Ree.exports=lKe});var VN=_((iTt,Nee)=>{var cKe=qP(),uKe=Hl();function AKe(t,e,r){var o=e(t);return uKe(t)?o:cKe(o,r(t))}Nee.exports=AKe});var Mee=_((sTt,Lee)=>{function fKe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function pKe(){return[]}Oee.exports=pKe});var GP=_((aTt,_ee)=>{var hKe=Mee(),gKe=KN(),dKe=Object.prototype,mKe=dKe.propertyIsEnumerable,Uee=Object.getOwnPropertySymbols,yKe=Uee?function(t){return t==null?[]:(t=Object(t),hKe(Uee(t),function(e){return mKe.call(t,e)}))}:gKe;_ee.exports=yKe});var jee=_((lTt,Hee)=>{function EKe(t,e){for(var r=-1,o=Array(t);++r{function CKe(t){return t!=null&&typeof t=="object"}qee.exports=CKe});var Yee=_((uTt,Gee)=>{var wKe=pd(),IKe=Ju(),BKe="[object Arguments]";function vKe(t){return IKe(t)&&wKe(t)==BKe}Gee.exports=vKe});var LI=_((ATt,Kee)=>{var Wee=Yee(),DKe=Ju(),Vee=Object.prototype,PKe=Vee.hasOwnProperty,SKe=Vee.propertyIsEnumerable,xKe=Wee(function(){return arguments}())?Wee:function(t){return DKe(t)&&PKe.call(t,"callee")&&!SKe.call(t,"callee")};Kee.exports=xKe});var zee=_((fTt,Jee)=>{function bKe(){return!1}Jee.exports=bKe});var OI=_((MI,Uy)=>{var kKe=_l(),QKe=zee(),$ee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Xee=$ee&&typeof Uy=="object"&&Uy&&!Uy.nodeType&&Uy,FKe=Xee&&Xee.exports===$ee,Zee=FKe?kKe.Buffer:void 0,TKe=Zee?Zee.isBuffer:void 0,RKe=TKe||QKe;Uy.exports=RKe});var UI=_((pTt,ete)=>{var NKe=9007199254740991,LKe=/^(?:0|[1-9]\d*)$/;function MKe(t,e){var r=typeof t;return e=e??NKe,!!e&&(r=="number"||r!="symbol"&&LKe.test(t))&&t>-1&&t%1==0&&t{var OKe=9007199254740991;function UKe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=OKe}tte.exports=UKe});var nte=_((gTt,rte)=>{var _Ke=pd(),HKe=YP(),jKe=Ju(),qKe="[object Arguments]",GKe="[object Array]",YKe="[object Boolean]",WKe="[object Date]",VKe="[object Error]",KKe="[object Function]",JKe="[object Map]",zKe="[object Number]",XKe="[object Object]",ZKe="[object RegExp]",$Ke="[object Set]",eJe="[object String]",tJe="[object WeakMap]",rJe="[object ArrayBuffer]",nJe="[object DataView]",iJe="[object Float32Array]",sJe="[object Float64Array]",oJe="[object Int8Array]",aJe="[object Int16Array]",lJe="[object Int32Array]",cJe="[object Uint8Array]",uJe="[object Uint8ClampedArray]",AJe="[object Uint16Array]",fJe="[object Uint32Array]",ui={};ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=ui[lJe]=ui[cJe]=ui[uJe]=ui[AJe]=ui[fJe]=!0;ui[qKe]=ui[GKe]=ui[rJe]=ui[YKe]=ui[nJe]=ui[WKe]=ui[VKe]=ui[KKe]=ui[JKe]=ui[zKe]=ui[XKe]=ui[ZKe]=ui[$Ke]=ui[eJe]=ui[tJe]=!1;function pJe(t){return jKe(t)&&HKe(t.length)&&!!ui[_Ke(t)]}rte.exports=pJe});var WP=_((dTt,ite)=>{function hJe(t){return function(e){return t(e)}}ite.exports=hJe});var VP=_((_I,_y)=>{var gJe=HN(),ste=typeof _I=="object"&&_I&&!_I.nodeType&&_I,HI=ste&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,dJe=HI&&HI.exports===ste,JN=dJe&&gJe.process,mJe=function(){try{var t=HI&&HI.require&&HI.require("util").types;return t||JN&&JN.binding&&JN.binding("util")}catch{}}();_y.exports=mJe});var KP=_((mTt,lte)=>{var yJe=nte(),EJe=WP(),ote=VP(),ate=ote&&ote.isTypedArray,CJe=ate?EJe(ate):yJe;lte.exports=CJe});var zN=_((yTt,cte)=>{var wJe=jee(),IJe=LI(),BJe=Hl(),vJe=OI(),DJe=UI(),PJe=KP(),SJe=Object.prototype,xJe=SJe.hasOwnProperty;function bJe(t,e){var r=BJe(t),o=!r&&IJe(t),a=!r&&!o&&vJe(t),n=!r&&!o&&!a&&PJe(t),u=r||o||a||n,A=u?wJe(t.length,String):[],p=A.length;for(var h in t)(e||xJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||DJe(h,p)))&&A.push(h);return A}cte.exports=bJe});var JP=_((ETt,ute)=>{var kJe=Object.prototype;function QJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||kJe;return t===r}ute.exports=QJe});var XN=_((CTt,Ate)=>{function FJe(t,e){return function(r){return t(e(r))}}Ate.exports=FJe});var pte=_((wTt,fte)=>{var TJe=XN(),RJe=TJe(Object.keys,Object);fte.exports=RJe});var gte=_((ITt,hte)=>{var NJe=JP(),LJe=pte(),MJe=Object.prototype,OJe=MJe.hasOwnProperty;function UJe(t){if(!NJe(t))return LJe(t);var e=[];for(var r in Object(t))OJe.call(t,r)&&r!="constructor"&&e.push(r);return e}hte.exports=UJe});var jI=_((BTt,dte)=>{var _Je=OP(),HJe=YP();function jJe(t){return t!=null&&HJe(t.length)&&!_Je(t)}dte.exports=jJe});var zP=_((vTt,mte)=>{var qJe=zN(),GJe=gte(),YJe=jI();function WJe(t){return YJe(t)?qJe(t):GJe(t)}mte.exports=WJe});var ZN=_((DTt,yte)=>{var VJe=VN(),KJe=GP(),JJe=zP();function zJe(t){return VJe(t,JJe,KJe)}yte.exports=zJe});var wte=_((PTt,Cte)=>{var Ete=ZN(),XJe=1,ZJe=Object.prototype,$Je=ZJe.hasOwnProperty;function eze(t,e,r,o,a,n){var u=r&XJe,A=Ete(t),p=A.length,h=Ete(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:$Je.call(e,v)))return!1}var b=n.get(t),C=n.get(e);if(b&&C)return b==e&&C==t;var T=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var tze=Jp(),rze=_l(),nze=tze(rze,"DataView");Ite.exports=nze});var Dte=_((xTt,vte)=>{var ize=Jp(),sze=_l(),oze=ize(sze,"Promise");vte.exports=oze});var Ste=_((bTt,Pte)=>{var aze=Jp(),lze=_l(),cze=aze(lze,"Set");Pte.exports=cze});var bte=_((kTt,xte)=>{var uze=Jp(),Aze=_l(),fze=uze(Aze,"WeakMap");xte.exports=fze});var qI=_((QTt,Lte)=>{var $N=Bte(),eL=UP(),tL=Dte(),rL=Ste(),nL=bte(),Nte=pd(),Hy=qN(),kte="[object Map]",pze="[object Object]",Qte="[object Promise]",Fte="[object Set]",Tte="[object WeakMap]",Rte="[object DataView]",hze=Hy($N),gze=Hy(eL),dze=Hy(tL),mze=Hy(rL),yze=Hy(nL),hd=Nte;($N&&hd(new $N(new ArrayBuffer(1)))!=Rte||eL&&hd(new eL)!=kte||tL&&hd(tL.resolve())!=Qte||rL&&hd(new rL)!=Fte||nL&&hd(new nL)!=Tte)&&(hd=function(t){var e=Nte(t),r=e==pze?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case hze:return Rte;case gze:return kte;case dze:return Qte;case mze:return Fte;case yze:return Tte}return e});Lte.exports=hd});var Gte=_((FTt,qte)=>{var iL=HP(),Eze=GN(),Cze=Fee(),wze=wte(),Mte=qI(),Ote=Hl(),Ute=OI(),Ize=KP(),Bze=1,_te="[object Arguments]",Hte="[object Array]",XP="[object Object]",vze=Object.prototype,jte=vze.hasOwnProperty;function Dze(t,e,r,o,a,n){var u=Ote(t),A=Ote(e),p=u?Hte:Mte(t),h=A?Hte:Mte(e);p=p==_te?XP:p,h=h==_te?XP:h;var E=p==XP,I=h==XP,v=p==h;if(v&&Ute(t)){if(!Ute(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new iL),u||Ize(t)?Eze(t,e,r,o,a,n):Cze(t,e,p,r,o,a,n);if(!(r&Bze)){var b=E&&jte.call(t,"__wrapped__"),C=I&&jte.call(e,"__wrapped__");if(b||C){var T=b?t.value():t,L=C?e.value():e;return n||(n=new iL),a(T,L,r,o,n)}}return v?(n||(n=new iL),wze(t,e,r,o,a,n)):!1}qte.exports=Dze});var Kte=_((TTt,Vte)=>{var Pze=Gte(),Yte=Ju();function Wte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Yte(t)&&!Yte(e)?t!==t&&e!==e:Pze(t,e,r,o,Wte,a)}Vte.exports=Wte});var zte=_((RTt,Jte)=>{var Sze=Kte();function xze(t,e){return Sze(t,e)}Jte.exports=xze});var sL=_((NTt,Xte)=>{var bze=Jp(),kze=function(){try{var t=bze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Xte.exports=kze});var ZP=_((LTt,$te)=>{var Zte=sL();function Qze(t,e,r){e=="__proto__"&&Zte?Zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}$te.exports=Qze});var oL=_((MTt,ere)=>{var Fze=ZP(),Tze=Ry();function Rze(t,e,r){(r!==void 0&&!Tze(t[e],r)||r===void 0&&!(e in t))&&Fze(t,e,r)}ere.exports=Rze});var rre=_((OTt,tre)=>{function Nze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}tre.exports=Nze});var ire=_((UTt,nre)=>{var Lze=rre(),Mze=Lze();nre.exports=Mze});var aL=_((GI,jy)=>{var Oze=_l(),lre=typeof GI=="object"&&GI&&!GI.nodeType&&GI,sre=lre&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,Uze=sre&&sre.exports===lre,ore=Uze?Oze.Buffer:void 0,are=ore?ore.allocUnsafe:void 0;function _ze(t,e){if(e)return t.slice();var r=t.length,o=are?are(r):new t.constructor(r);return t.copy(o),o}jy.exports=_ze});var $P=_((_Tt,ure)=>{var cre=YN();function Hze(t){var e=new t.constructor(t.byteLength);return new cre(e).set(new cre(t)),e}ure.exports=Hze});var lL=_((HTt,Are)=>{var jze=$P();function qze(t,e){var r=e?jze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}Are.exports=qze});var eS=_((jTt,fre)=>{function Gze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var Yze=il(),pre=Object.create,Wze=function(){function t(){}return function(e){if(!Yze(e))return{};if(pre)return pre(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();hre.exports=Wze});var tS=_((GTt,dre)=>{var Vze=XN(),Kze=Vze(Object.getPrototypeOf,Object);dre.exports=Kze});var cL=_((YTt,mre)=>{var Jze=gre(),zze=tS(),Xze=JP();function Zze(t){return typeof t.constructor=="function"&&!Xze(t)?Jze(zze(t)):{}}mre.exports=Zze});var Ere=_((WTt,yre)=>{var $ze=jI(),eXe=Ju();function tXe(t){return eXe(t)&&$ze(t)}yre.exports=tXe});var uL=_((VTt,wre)=>{var rXe=pd(),nXe=tS(),iXe=Ju(),sXe="[object Object]",oXe=Function.prototype,aXe=Object.prototype,Cre=oXe.toString,lXe=aXe.hasOwnProperty,cXe=Cre.call(Object);function uXe(t){if(!iXe(t)||rXe(t)!=sXe)return!1;var e=nXe(t);if(e===null)return!0;var r=lXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Cre.call(r)==cXe}wre.exports=uXe});var AL=_((KTt,Ire)=>{function AXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Ire.exports=AXe});var rS=_((JTt,Bre)=>{var fXe=ZP(),pXe=Ry(),hXe=Object.prototype,gXe=hXe.hasOwnProperty;function dXe(t,e,r){var o=t[e];(!(gXe.call(t,e)&&pXe(o,r))||r===void 0&&!(e in t))&&fXe(t,e,r)}Bre.exports=dXe});var gd=_((zTt,vre)=>{var mXe=rS(),yXe=ZP();function EXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function CXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Dre.exports=CXe});var xre=_((ZTt,Sre)=>{var wXe=il(),IXe=JP(),BXe=Pre(),vXe=Object.prototype,DXe=vXe.hasOwnProperty;function PXe(t){if(!wXe(t))return BXe(t);var e=IXe(t),r=[];for(var o in t)o=="constructor"&&(e||!DXe.call(t,o))||r.push(o);return r}Sre.exports=PXe});var qy=_(($Tt,bre)=>{var SXe=zN(),xXe=xre(),bXe=jI();function kXe(t){return bXe(t)?SXe(t,!0):xXe(t)}bre.exports=kXe});var Qre=_((eRt,kre)=>{var QXe=gd(),FXe=qy();function TXe(t){return QXe(t,FXe(t))}kre.exports=TXe});var Mre=_((tRt,Lre)=>{var Fre=oL(),RXe=aL(),NXe=lL(),LXe=eS(),MXe=cL(),Tre=LI(),Rre=Hl(),OXe=Ere(),UXe=OI(),_Xe=OP(),HXe=il(),jXe=uL(),qXe=KP(),Nre=AL(),GXe=Qre();function YXe(t,e,r,o,a,n,u){var A=Nre(t,r),p=Nre(e,r),h=u.get(p);if(h){Fre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Rre(p),b=!v&&UXe(p),C=!v&&!b&&qXe(p);E=p,v||b||C?Rre(A)?E=A:OXe(A)?E=LXe(A):b?(I=!1,E=RXe(p,!0)):C?(I=!1,E=NXe(p,!0)):E=[]:jXe(p)||Tre(p)?(E=A,Tre(A)?E=GXe(A):(!HXe(A)||_Xe(A))&&(E=MXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),Fre(t,r,E)}Lre.exports=YXe});var _re=_((rRt,Ure)=>{var WXe=HP(),VXe=oL(),KXe=ire(),JXe=Mre(),zXe=il(),XXe=qy(),ZXe=AL();function Ore(t,e,r,o,a){t!==e&&KXe(e,function(n,u){if(a||(a=new WXe),zXe(n))JXe(t,e,u,r,Ore,o,a);else{var A=o?o(ZXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),VXe(t,u,A)}},XXe)}Ure.exports=Ore});var fL=_((nRt,Hre)=>{function $Xe(t){return t}Hre.exports=$Xe});var qre=_((iRt,jre)=>{function eZe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}jre.exports=eZe});var pL=_((sRt,Yre)=>{var tZe=qre(),Gre=Math.max;function rZe(t,e,r){return e=Gre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=Gre(o.length-e,0),u=Array(n);++a{function nZe(t){return function(){return t}}Wre.exports=nZe});var zre=_((aRt,Jre)=>{var iZe=Vre(),Kre=sL(),sZe=fL(),oZe=Kre?function(t,e){return Kre(t,"toString",{configurable:!0,enumerable:!1,value:iZe(e),writable:!0})}:sZe;Jre.exports=oZe});var Zre=_((lRt,Xre)=>{var aZe=800,lZe=16,cZe=Date.now;function uZe(t){var e=0,r=0;return function(){var o=cZe(),a=lZe-(o-r);if(r=o,a>0){if(++e>=aZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Xre.exports=uZe});var hL=_((cRt,$re)=>{var AZe=zre(),fZe=Zre(),pZe=fZe(AZe);$re.exports=pZe});var tne=_((uRt,ene)=>{var hZe=fL(),gZe=pL(),dZe=hL();function mZe(t,e){return dZe(gZe(t,e,hZe),t+"")}ene.exports=mZe});var nne=_((ARt,rne)=>{var yZe=Ry(),EZe=jI(),CZe=UI(),wZe=il();function IZe(t,e,r){if(!wZe(r))return!1;var o=typeof e;return(o=="number"?EZe(r)&&CZe(e,r.length):o=="string"&&e in r)?yZe(r[e],t):!1}rne.exports=IZe});var sne=_((fRt,ine)=>{var BZe=tne(),vZe=nne();function DZe(t){return BZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&vZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var PZe=_re(),SZe=sne(),xZe=SZe(function(t,e,r,o){PZe(t,e,r,o)});one.exports=xZe});var je={};Kt(je,{AsyncActions:()=>mL,BufferStream:()=>dL,CachingStrategy:()=>Ene,DefaultStream:()=>yL,allSettledSafe:()=>Uc,assertNever:()=>CL,bufferStream:()=>Vy,buildIgnorePattern:()=>NZe,convertMapsToIndexableObjects:()=>iS,dynamicRequire:()=>vf,escapeRegExp:()=>kZe,getArrayWithDefault:()=>Gy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Yy,getSetWithDefault:()=>dd,groupBy:()=>BL,isIndexableObject:()=>gL,isPathLike:()=>LZe,isTaggedYarnVersion:()=>bZe,makeDeferred:()=>dne,mapAndFilter:()=>sl,mapAndFind:()=>WI,mergeIntoTarget:()=>wne,overrideType:()=>QZe,parseBoolean:()=>VI,parseInt:()=>Ky,parseOptionalBoolean:()=>Cne,plural:()=>nS,prettifyAsyncErrors:()=>Wy,prettifySyncErrors:()=>wL,releaseAfterUseAsync:()=>TZe,replaceEnvVariables:()=>sS,sortMap:()=>ks,toMerged:()=>MZe,tryParseOptionalBoolean:()=>IL,validateEnum:()=>FZe});function bZe(t){return!!(pne.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function kZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function QZe(t){}function CL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function FZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==hne&&r.push(a)}return r}function WI(t,e){for(let r of t){let o=e(r);if(o!==gne)return o}}function gL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),gL(t))for(let e of Object.keys(t)){let r=t[e];gL(r)&&(t[e]=iS(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Gy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function dd(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function TZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Wy(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function wL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function dne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function mne(t){return YI(ue.fromPortablePath(t))}function yne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=YI.cache[physicalPath];delete YI.cache[physicalPath];let result;try{result=mne(physicalPath);let freshCacheEntry=YI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{YI.cache[physicalPath]=currentCacheEntry}return result}function RZe(t){let e=lne.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=yne(t);return lne.set(t,{mtime:r.mtimeMs,instance:o}),o}function vf(t,{cachingStrategy:e=2}={}){switch(e){case 0:return yne(t);case 1:return RZe(t);case 2:return mne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function NZe(t){return t.length===0?null:t.map(e=>`(${Ane.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function Cne(t){return typeof t>"u"?t:VI(t)}function IL(t){try{return Cne(t)}catch{return null}}function LZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function wne(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,une.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,cne.default)(h,p))||u.push(p);return u}});return n}function MZe(...t){return wne({},...t)}function BL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Ky(t){return typeof t=="string"?Number.parseInt(t,10):t}var cne,une,Ane,fne,pne,EL,hne,gne,dL,mL,yL,YI,lne,Ene,jl=Et(()=>{Pt();qt();cne=$e(zte()),une=$e(ane()),Ane=$e(Zo()),fne=$e(nd()),pne=$e(zn()),EL=Be("stream");hne=Symbol();sl.skip=hne;gne=Symbol();WI.skip=gne;dL=class extends EL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};mL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,fne.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=dne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},yL=class extends EL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},YI=eval("require");lne=new Map;Ene=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(Ene||{})});var Jy,vL,DL,Ine=Et(()=>{Jy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(Jy||{}),vL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(vL||{}),DL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(DL||{})});var de={};Kt(de,{LogLevel:()=>uS,Style:()=>aS,Type:()=>yt,addLogFilterSupport:()=>zI,applyColor:()=>Ks,applyHyperlink:()=>Xy,applyStyle:()=>md,json:()=>yd,jsonOrPretty:()=>_Ze,mark:()=>kL,pretty:()=>Ot,prettyField:()=>zu,prettyList:()=>bL,prettyTruncatedLocatorList:()=>cS,stripAnsi:()=>zy.default,supportsColor:()=>lS,supportsHyperlinks:()=>xL,tuple:()=>_c});function Bne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function md(t,e,r){return t.get("enableColors")&&r&2&&(e=JI.default.bold(e)),e}function Ks(t,e,r){if(!t.get("enableColors"))return e;let o=OZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:SL.level>=3?o[0]:o[1],n=typeof a=="number"?PL.ansi256(a):a.startsWith("#")?PL.hex(a):PL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Xy(t,e,r){return t.get("enableHyperlinks")?UZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ot(t,e,r){if(e===null)return Ks(t,"null",yt.NULL);if(Object.hasOwn(oS,r))return oS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Ks(t,e,r)}function bL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ot(t,a,r)).join(o)}function yd(t,e){if(t===null)return null;if(Object.hasOwn(oS,e))return oS[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function _Ze(t,e,[r,o]){return t?yd(r,o):Ot(e,r,o)}function kL(t){return{Check:Ks(t,"\u2713","green"),Cross:Ks(t,"\u2718","red"),Question:Ks(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Ot(t,e,yt.CODE)}: ${Ot(t,r,o)}`}function cS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${jr(t,h)}, `,I=QL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ot(t,p,yt.NUMBER))].join("")}function zI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let b=I.get("code");typeof b<"u"&&o.set(b,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let T=I.get("pattern");typeof T<"u"&&n.push([vne.default.matcher(T,{contains:!0}),v])}n.reverse();let u=(I,v,b)=>{if(I===null||I===0)return b;let C=a.size>0||n.length>0?(0,zy.default)(v):v;if(a.size>0){let T=a.get(C);if(typeof T<"u")return T??b}if(n.length>0){for(let[T,L]of n)if(T(C))return L??b}if(o.size>0){let T=o.get(Wu(I));if(typeof T<"u")return T??b}return b},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,b,C){switch(u(v,b,C)){case"info":A.call(I,v,b);break;case"warning":p.call(I,v??0,b);break;case"error":h.call(I,v??0,b);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var JI,KI,vne,zy,Dne,yt,aS,SL,lS,xL,PL,OZe,So,oS,UZe,uS,ql=Et(()=>{Pt();JI=$e(vN()),KI=$e(ed());qt();vne=$e(Zo()),zy=$e(MP()),Dne=Be("util");pP();xo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aS=(e=>(e[e.BOLD=2]="BOLD",e))(aS||{}),SL=KI.default.GITHUB_ACTIONS?{level:2}:JI.default.supportsColor?{level:JI.default.supportsColor.level}:{level:0},lS=SL.level!==0,xL=lS&&!KI.default.GITHUB_ACTIONS&&!KI.default.CIRCLE&&!KI.default.GITLAB,PL=new JI.default.Instance(SL),OZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),So=t=>t;oS={[yt.ID]:So({pretty:(t,e)=>typeof e=="number"?Ks(t,`${e}`,yt.NUMBER):Ks(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:So({pretty:(t,e)=>(0,Dne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:So({pretty:(t,e)=>Ks(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:So({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:So({pretty:(t,e)=>jr(t,e),json:t=>xa(t)}),[yt.DESCRIPTOR]:So({pretty:(t,e)=>qn(t,e),json:t=>Sa(t)}),[yt.RESOLUTION]:So({pretty:(t,{descriptor:e,locator:r})=>XI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?xa(e):null})}),[yt.DEPENDENT]:So({pretty:(t,{locator:e,descriptor:r})=>FL(t,e,r),json:({locator:t,descriptor:e})=>({locator:xa(t),descriptor:Sa(e)})}),[yt.PACKAGE_EXTENSION]:So({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Ks(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:So({pretty:(t,e)=>(t.get(e),Xy(t,Ks(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:So({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:So({pretty:(t,e)=>Ks(t,Bne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:So({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Ks(t,`${r} ${Bne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:So({pretty:(t,e)=>Ks(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:So({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:So({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ot(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>md(t,a,2)),e),json:t=>t})};UZe=!!process.env.KONSOLE_VERSION;uS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uS||{})});var Pne=_(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.splitWhen=Zy.flatten=void 0;function HZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}Zy.flatten=HZe;function jZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}Zy.splitWhen=jZe});var Sne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.isEnoentCodeError=void 0;function qZe(t){return t.code==="ENOENT"}AS.isEnoentCodeError=qZe});var xne=_(fS=>{"use strict";Object.defineProperty(fS,"__esModule",{value:!0});fS.createDirentFromStats=void 0;var TL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function GZe(t,e){return new TL(t,e)}fS.createDirentFromStats=GZe});var bne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var YZe=Be("path"),WZe=2,VZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function KZe(t){return t.replace(/\\/g,"/")}Xu.unixify=KZe;function JZe(t,e){return YZe.resolve(t,e)}Xu.makeAbsolute=JZe;function zZe(t){return t.replace(VZe,"\\$2")}Xu.escape=zZe;function XZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(WZe)}return t}Xu.removeLeadingDotSegment=XZe});var Qne=_((xRt,kne)=>{kne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Rne=_((bRt,Tne)=>{var ZZe=Qne(),Fne={"{":"}","(":")","[":"]"},$Ze=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=Fne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},e$e=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var t$e=Rne(),r$e=Be("path").posix.dirname,n$e=Be("os").platform()==="win32",RL="/",i$e=/\\/g,s$e=/[\{\[].*[\}\]]$/,o$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,a$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Nne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&n$e&&e.indexOf(RL)<0&&(e=e.replace(i$e,RL)),s$e.test(e)&&(e+=RL),e+="a";do e=r$e(e);while(t$e(e)||o$e.test(e));return e.replace(a$e,"$1")}});var Gne=_(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.matchAny=qr.convertPatternsToRe=qr.makeRe=qr.getPatternParts=qr.expandBraceExpansion=qr.expandPatternsWithBraceExpansion=qr.isAffectDepthOfReadingPattern=qr.endsWithSlashGlobStar=qr.hasGlobStar=qr.getBaseDirectory=qr.isPatternRelatedToParentDirectory=qr.getPatternsOutsideCurrentDirectory=qr.getPatternsInsideCurrentDirectory=qr.getPositivePatterns=qr.getNegativePatterns=qr.isPositivePattern=qr.isNegativePattern=qr.convertToNegativePattern=qr.convertToPositivePattern=qr.isDynamicPattern=qr.isStaticPattern=void 0;var l$e=Be("path"),c$e=Lne(),NL=Zo(),Mne="**",u$e="\\",A$e=/[*?]|^!/,f$e=/\[[^[]*]/,p$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,h$e=/[!*+?@]\([^(]*\)/,g$e=/,|\.\./;function One(t,e={}){return!Une(t,e)}qr.isStaticPattern=One;function Une(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(u$e)||A$e.test(t)||f$e.test(t)||p$e.test(t)||e.extglob!==!1&&h$e.test(t)||e.braceExpansion!==!1&&d$e(t))}qr.isDynamicPattern=Une;function d$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return g$e.test(o)}function m$e(t){return pS(t)?t.slice(1):t}qr.convertToPositivePattern=m$e;function y$e(t){return"!"+t}qr.convertToNegativePattern=y$e;function pS(t){return t.startsWith("!")&&t[1]!=="("}qr.isNegativePattern=pS;function _ne(t){return!pS(t)}qr.isPositivePattern=_ne;function E$e(t){return t.filter(pS)}qr.getNegativePatterns=E$e;function C$e(t){return t.filter(_ne)}qr.getPositivePatterns=C$e;function w$e(t){return t.filter(e=>!LL(e))}qr.getPatternsInsideCurrentDirectory=w$e;function I$e(t){return t.filter(LL)}qr.getPatternsOutsideCurrentDirectory=I$e;function LL(t){return t.startsWith("..")||t.startsWith("./..")}qr.isPatternRelatedToParentDirectory=LL;function B$e(t){return c$e(t,{flipBackslashes:!1})}qr.getBaseDirectory=B$e;function v$e(t){return t.includes(Mne)}qr.hasGlobStar=v$e;function Hne(t){return t.endsWith("/"+Mne)}qr.endsWithSlashGlobStar=Hne;function D$e(t){let e=l$e.basename(t);return Hne(t)||One(e)}qr.isAffectDepthOfReadingPattern=D$e;function P$e(t){return t.reduce((e,r)=>e.concat(jne(r)),[])}qr.expandPatternsWithBraceExpansion=P$e;function jne(t){return NL.braces(t,{expand:!0,nodupes:!0})}qr.expandBraceExpansion=jne;function S$e(t,e){let{parts:r}=NL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}qr.getPatternParts=S$e;function qne(t,e){return NL.makeRe(t,e)}qr.makeRe=qne;function x$e(t,e){return t.map(r=>qne(r,e))}qr.convertPatternsToRe=x$e;function b$e(t,e){return e.some(r=>r.test(t))}qr.matchAny=b$e});var Kne=_((FRt,Vne)=>{"use strict";var k$e=Be("stream"),Yne=k$e.PassThrough,Q$e=Array.prototype.slice;Vne.exports=F$e;function F$e(){let t=[],e=Q$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Yne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function b(C){function T(){C.removeListener("merge2UnpipeEnd",T),C.removeListener("end",T),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",T),C.on("end",T),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.merge=void 0;var T$e=Kne();function R$e(t){let e=T$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Jne(t)),e.once("end",()=>Jne(t)),e}hS.merge=R$e;function Jne(t){t.forEach(e=>e.emit("close"))}});var Xne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.isEmpty=$y.isString=void 0;function N$e(t){return typeof t=="string"}$y.isString=N$e;function L$e(t){return t===""}$y.isEmpty=L$e});var Df=_(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.string=bo.stream=bo.pattern=bo.path=bo.fs=bo.errno=bo.array=void 0;var M$e=Pne();bo.array=M$e;var O$e=Sne();bo.errno=O$e;var U$e=xne();bo.fs=U$e;var _$e=bne();bo.path=_$e;var H$e=Gne();bo.pattern=H$e;var j$e=zne();bo.stream=j$e;var q$e=Xne();bo.string=q$e});var eie=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Df();function G$e(t,e){let r=Zne(t),o=$ne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=ML(a,o,!1),A=ML(n,o,!0);return u.concat(A)}ko.generate=G$e;function ML(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=OL(a),A=OL(n);return o.push(...UL(u,e,r)),"."in A?o.push(_L(".",n,e,r)):o.push(...UL(A,e,r)),o}ko.convertPatternsToTasks=ML;function Zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=Zne;function $ne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=$ne;function OL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=OL;function UL(t,e,r){return Object.keys(t).map(o=>_L(o,t[o],e,r))}ko.convertPatternGroupsToTasks=UL;function _L(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=_L});var rie=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.removeDuplicateSlashes=eE.transform=void 0;var Y$e=/(?!^)\/{2,}/g;function W$e(t){return t.map(e=>tie(e))}eE.transform=W$e;function tie(t){return t.replace(Y$e,"/")}eE.removeDuplicateSlashes=tie});var iie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function V$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){nie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){HL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){nie(r,n);return}HL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),HL(r,u)})})}gS.read=V$e;function nie(t,e){t(e)}function HL(t,e){t(null,e)}});var sie=_(dS=>{"use strict";Object.defineProperty(dS,"__esModule",{value:!0});dS.read=void 0;function K$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dS.read=K$e});var oie=_(zp=>{"use strict";Object.defineProperty(zp,"__esModule",{value:!0});zp.createFileSystemAdapter=zp.FILE_SYSTEM_ADAPTER=void 0;var mS=Be("fs");zp.FILE_SYSTEM_ADAPTER={lstat:mS.lstat,stat:mS.stat,lstatSync:mS.lstatSync,statSync:mS.statSync};function J$e(t){return t===void 0?zp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},zp.FILE_SYSTEM_ADAPTER),t)}zp.createFileSystemAdapter=J$e});var aie=_(qL=>{"use strict";Object.defineProperty(qL,"__esModule",{value:!0});var z$e=oie(),jL=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=z$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};qL.default=jL});var Ed=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.statSync=Xp.stat=Xp.Settings=void 0;var lie=iie(),X$e=sie(),YL=aie();Xp.Settings=YL.default;function Z$e(t,e,r){if(typeof e=="function"){lie.read(t,WL(),e);return}lie.read(t,WL(e),r)}Xp.stat=Z$e;function $$e(t,e){let r=WL(e);return X$e.read(t,r)}Xp.statSync=$$e;function WL(t={}){return t instanceof YL.default?t:new YL.default(t)}});var uie=_((qRt,cie)=>{cie.exports=eet;function eet(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var VL=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yS=process.versions.node.split(".");if(yS[0]===void 0||yS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Aie=Number.parseInt(yS[0],10),tet=Number.parseInt(yS[1],10),fie=10,ret=10,net=Aie>fie,iet=Aie===fie&&tet>=ret;ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=net||iet});var pie=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.createDirentFromStats=void 0;var KL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function set(t,e){return new KL(t,e)}CS.createDirentFromStats=set});var JL=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.fs=void 0;var oet=pie();wS.fs=oet});var zL=_(IS=>{"use strict";Object.defineProperty(IS,"__esModule",{value:!0});IS.joinPathSegments=void 0;function aet(t,e,r){return t.endsWith(r)?t+e:t+r+e}IS.joinPathSegments=aet});var Eie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.readdir=Zp.readdirWithFileTypes=Zp.read=void 0;var cet=Ed(),hie=uie(),uet=VL(),gie=JL(),die=zL();function Aet(t,e,r){if(!e.stats&&uet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){mie(t,e,r);return}yie(t,e,r)}Zp.read=Aet;function mie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:die.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){XL(r,n);return}let u=n.map(A=>fet(A,e));hie(u,(A,p)=>{if(A!==null){BS(r,A);return}XL(r,p)})})}Zp.readdirWithFileTypes=mie;function fet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=gie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function yie(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(u=>{let A=die.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{cet.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:gie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});hie(n,(u,A)=>{if(u!==null){BS(r,u);return}XL(r,A)})})}Zp.readdir=yie;function BS(t,e){t(e)}function XL(t,e){t(null,e)}});var vie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var pet=Ed(),het=VL(),Cie=JL(),wie=zL();function get(t,e){return!e.stats&&het.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Iie(t,e):Bie(t,e)}$p.read=get;function Iie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:wie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=Cie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}$p.readdirWithFileTypes=Iie;function Bie(t,e){return e.fs.readdirSync(t).map(o=>{let a=wie.joinPathSegments(t,o,e.pathSegmentSeparator),n=pet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:Cie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}$p.readdir=Bie});var Die=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.createFileSystemAdapter=eh.FILE_SYSTEM_ADAPTER=void 0;var tE=Be("fs");eh.FILE_SYSTEM_ADAPTER={lstat:tE.lstat,stat:tE.stat,lstatSync:tE.lstatSync,statSync:tE.statSync,readdir:tE.readdir,readdirSync:tE.readdirSync};function det(t){return t===void 0?eh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},eh.FILE_SYSTEM_ADAPTER),t)}eh.createFileSystemAdapter=det});var Pie=_($L=>{"use strict";Object.defineProperty($L,"__esModule",{value:!0});var met=Be("path"),yet=Ed(),Eet=Die(),ZL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Eet.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,met.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new yet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};$L.default=ZL});var vS=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.Settings=th.scandirSync=th.scandir=void 0;var Sie=Eie(),Cet=vie(),eM=Pie();th.Settings=eM.default;function wet(t,e,r){if(typeof e=="function"){Sie.read(t,tM(),e);return}Sie.read(t,tM(e),r)}th.scandir=wet;function Iet(t,e){let r=tM(e);return Cet.read(t,r)}th.scandirSync=Iet;function tM(t={}){return t instanceof eM.default?t:new eM.default(t)}});var bie=_(($Rt,xie)=>{"use strict";function Bet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}xie.exports=Bet});var Qie=_((eNt,rM)=>{"use strict";var vet=bie();function kie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=vet(Det),a=null,n=null,u=0,A=null,p={push:T,drain:Gl,saturated:Gl,pause:E,paused:!1,concurrency:r,running:h,resume:b,idle:C,length:I,getQueue:v,unshift:L,empty:Gl,kill:J,killAndDrain:te,error:le};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var pe=a,Ae=0;pe;)pe=pe.next,Ae++;return Ae}function v(){for(var pe=a,Ae=[];pe;)Ae.push(pe.value),pe=pe.next;return Ae}function b(){if(!!p.paused){p.paused=!1;for(var pe=0;pe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function xet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=xet;function bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=bet;function ket(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=ket;function Qet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Qet});var sM=_(iM=>{"use strict";Object.defineProperty(iM,"__esModule",{value:!0});var Fet=DS(),nM=class{constructor(e,r){this._root=e,this._settings=r,this._root=Fet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};iM.default=nM});var lM=_(aM=>{"use strict";Object.defineProperty(aM,"__esModule",{value:!0});var Tet=Be("events"),Ret=vS(),Net=Qie(),PS=DS(),Let=sM(),oM=class extends Let.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Ret.scandir,this._emitter=new Tet.EventEmitter,this._queue=Net(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!PS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=PS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&PS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};aM.default=oM});var Fie=_(uM=>{"use strict";Object.defineProperty(uM,"__esModule",{value:!0});var Met=lM(),cM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Met.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Oet(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Uet(e,this._storage)}),this._reader.read()}};uM.default=cM;function Oet(t,e){t(e)}function Uet(t,e){t(null,e)}});var Tie=_(fM=>{"use strict";Object.defineProperty(fM,"__esModule",{value:!0});var _et=Be("stream"),Het=lM(),AM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Het.default(this._root,this._settings),this._stream=new _et.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};fM.default=AM});var Rie=_(hM=>{"use strict";Object.defineProperty(hM,"__esModule",{value:!0});var jet=vS(),SS=DS(),qet=sM(),pM=class extends qet.default{constructor(){super(...arguments),this._scandir=jet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!SS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=SS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&SS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};hM.default=pM});var Nie=_(dM=>{"use strict";Object.defineProperty(dM,"__esModule",{value:!0});var Get=Rie(),gM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Get.default(this._root,this._settings)}read(){return this._reader.read()}};dM.default=gM});var Lie=_(yM=>{"use strict";Object.defineProperty(yM,"__esModule",{value:!0});var Yet=Be("path"),Wet=vS(),mM=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Yet.sep),this.fsScandirSettings=new Wet.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};yM.default=mM});var bS=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Mie=Fie(),Vet=Tie(),Ket=Nie(),EM=Lie();$u.Settings=EM.default;function Jet(t,e,r){if(typeof e=="function"){new Mie.default(t,xS()).read(e);return}new Mie.default(t,xS(e)).read(r)}$u.walk=Jet;function zet(t,e){let r=xS(e);return new Ket.default(t,r).read()}$u.walkSync=zet;function Xet(t,e){let r=xS(e);return new Vet.default(t,r).read()}$u.walkStream=Xet;function xS(t={}){return t instanceof EM.default?t:new EM.default(t)}});var kS=_(wM=>{"use strict";Object.defineProperty(wM,"__esModule",{value:!0});var Zet=Be("path"),$et=Ed(),Oie=Df(),CM=class{constructor(e){this._settings=e,this._fsStatSettings=new $et.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Zet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Oie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Oie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};wM.default=CM});var vM=_(BM=>{"use strict";Object.defineProperty(BM,"__esModule",{value:!0});var ett=Be("stream"),ttt=Ed(),rtt=bS(),ntt=kS(),IM=class extends ntt.default{constructor(){super(...arguments),this._walkStream=rtt.walkStream,this._stat=ttt.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new ett.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};BM.default=IM});var Uie=_(PM=>{"use strict";Object.defineProperty(PM,"__esModule",{value:!0});var itt=bS(),stt=kS(),ott=vM(),DM=class extends stt.default{constructor(){super(...arguments),this._walkAsync=itt.walk,this._readerStream=new ott.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};PM.default=DM});var _ie=_(xM=>{"use strict";Object.defineProperty(xM,"__esModule",{value:!0});var rE=Df(),SM=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=rE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return rE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>rE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:rE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return rE.array.splitWhen(e,r=>r.dynamic&&rE.pattern.hasGlobStar(r.pattern))}};xM.default=SM});var Hie=_(kM=>{"use strict";Object.defineProperty(kM,"__esModule",{value:!0});var att=_ie(),bM=class extends att.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};kM.default=bM});var jie=_(FM=>{"use strict";Object.defineProperty(FM,"__esModule",{value:!0});var QS=Df(),ltt=Hie(),QM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ltt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QS.pattern.isAffectDepthOfReadingPattern);return QS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QS.pattern.matchAny(e,r)}};FM.default=QM});var qie=_(RM=>{"use strict";Object.defineProperty(RM,"__esModule",{value:!0});var Cd=Df(),TM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Cd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Cd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=Cd.path.makeAbsolute(this._settings.cwd,e);return Cd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Cd.path.removeLeadingDotSegment(e),n=Cd.pattern.matchAny(a,r);return!n&&o?Cd.pattern.matchAny(a+"/",r):n}};RM.default=TM});var Gie=_(LM=>{"use strict";Object.defineProperty(LM,"__esModule",{value:!0});var ctt=Df(),NM=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return ctt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};LM.default=NM});var Wie=_(OM=>{"use strict";Object.defineProperty(OM,"__esModule",{value:!0});var Yie=Df(),MM=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Yie.path.makeAbsolute(this._settings.cwd,r),r=Yie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};OM.default=MM});var TS=_(_M=>{"use strict";Object.defineProperty(_M,"__esModule",{value:!0});var utt=Be("path"),Att=jie(),ftt=qie(),ptt=Gie(),htt=Wie(),UM=class{constructor(e){this._settings=e,this.errorFilter=new ptt.default(this._settings),this.entryFilter=new ftt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Att.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new htt.default(this._settings)}_getRootDirectory(e){return utt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};_M.default=UM});var Vie=_(jM=>{"use strict";Object.defineProperty(jM,"__esModule",{value:!0});var gtt=Uie(),dtt=TS(),HM=class extends dtt.default{constructor(){super(...arguments),this._reader=new gtt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};jM.default=HM});var Kie=_(GM=>{"use strict";Object.defineProperty(GM,"__esModule",{value:!0});var mtt=Be("stream"),ytt=vM(),Ett=TS(),qM=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new mtt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};GM.default=qM});var Jie=_(WM=>{"use strict";Object.defineProperty(WM,"__esModule",{value:!0});var Ctt=Ed(),wtt=bS(),Itt=kS(),YM=class extends Itt.default{constructor(){super(...arguments),this._walkSync=wtt.walkSync,this._statSync=Ctt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};WM.default=YM});var zie=_(KM=>{"use strict";Object.defineProperty(KM,"__esModule",{value:!0});var Btt=Jie(),vtt=TS(),VM=class extends vtt.default{constructor(){super(...arguments),this._reader=new Btt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};KM.default=VM});var Xie=_(iE=>{"use strict";Object.defineProperty(iE,"__esModule",{value:!0});iE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var nE=Be("fs"),Dtt=Be("os"),Ptt=Math.max(Dtt.cpus().length,1);iE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:nE.lstat,lstatSync:nE.lstatSync,stat:nE.stat,statSync:nE.statSync,readdir:nE.readdir,readdirSync:nE.readdirSync};var JM=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,Ptt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},iE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};iE.default=JM});var RS=_((DNt,ese)=>{"use strict";var Zie=eie(),$ie=rie(),Stt=Vie(),xtt=Kie(),btt=zie(),zM=Xie(),wd=Df();async function XM(t,e){sE(t);let r=ZM(t,Stt.default,e),o=await Promise.all(r);return wd.array.flatten(o)}(function(t){function e(u,A){sE(u);let p=ZM(u,btt.default,A);return wd.array.flatten(p)}t.sync=e;function r(u,A){sE(u);let p=ZM(u,xtt.default,A);return wd.stream.merge(p)}t.stream=r;function o(u,A){sE(u);let p=$ie.transform([].concat(u)),h=new zM.default(A);return Zie.generate(p,h)}t.generateTasks=o;function a(u,A){sE(u);let p=new zM.default(A);return wd.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return sE(u),wd.path.escape(u)}t.escapePath=n})(XM||(XM={}));function ZM(t,e,r){let o=$ie.transform([].concat(t)),a=new zM.default(r),n=Zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function sE(t){if(![].concat(t).every(o=>wd.string.isString(o)&&!wd.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}ese.exports=XM});var wn={};Kt(wn,{checksumFile:()=>LS,checksumPattern:()=>MS,makeHash:()=>zs});function zs(...t){let e=(0,NS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function LS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,NS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function MS(t,{cwd:e}){let o=(await(0,$M.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,$M.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,NS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var NS,$M,rh=Et(()=>{Pt();NS=Be("crypto"),$M=$e(RS())});var W={};Kt(W,{areDescriptorsEqual:()=>sse,areIdentsEqual:()=>r1,areLocatorsEqual:()=>n1,areVirtualPackagesEquivalent:()=>Ott,bindDescriptor:()=>Ltt,bindLocator:()=>Mtt,convertDescriptorToLocator:()=>OS,convertLocatorToDescriptor:()=>tO,convertPackageToLocator:()=>Ttt,convertToIdent:()=>Ftt,convertToManifestRange:()=>Ktt,copyPackage:()=>$I,devirtualizeDescriptor:()=>e1,devirtualizeLocator:()=>t1,ensureDevirtualizedDescriptor:()=>Rtt,ensureDevirtualizedLocator:()=>Ntt,getIdentVendorPath:()=>sO,isPackageCompatible:()=>qS,isVirtualDescriptor:()=>Sf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>HS,parseDescriptor:()=>nh,parseFileStyleRange:()=>Wtt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Id,prettyDependent:()=>FL,prettyDescriptor:()=>qn,prettyIdent:()=>cs,prettyLocator:()=>jr,prettyLocatorNoColors:()=>QL,prettyRange:()=>lE,prettyReference:()=>s1,prettyResolution:()=>XI,prettyWorkspace:()=>o1,renamePackage:()=>rO,slugifyIdent:()=>eO,slugifyLocator:()=>aE,sortDescriptors:()=>cE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>fn,stringifyLocator:()=>xa,tryParseDescriptor:()=>i1,tryParseIdent:()=>ose,tryParseLocator:()=>_S,tryParseRange:()=>Ytt,virtualizeDescriptor:()=>nO,virtualizePackage:()=>iO});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ftt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function tO(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function Ttt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function rO(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function $I(t){return rO(t,t)}function nO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function iO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return rO(t,Qs(t,`virtual:${e}#${t.reference}`))}function Sf(t){return t.range.startsWith(ZI)}function Hc(t){return t.reference.startsWith(ZI)}function e1(t){if(!Sf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(US,""))}function t1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(US,""))}function Rtt(t){return Sf(t)?In(t,t.range.replace(US,"")):t}function Ntt(t){return Hc(t)?Qs(t,t.reference.replace(US,"")):t}function Ltt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${oE.default.stringify(e)}`)}function Mtt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${oE.default.stringify(e)}`)}function r1(t,e){return t.identHash===e.identHash}function sse(t,e){return t.descriptorHash===e.descriptorHash}function n1(t,e){return t.locatorHash===e.locatorHash}function Ott(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!r1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!sse(r,o))return!1}return!0}function Js(t){let e=ose(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ose(t){let e=t.match(Utt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function nh(t,e=!1){let r=i1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function i1(t,e=!1){let r=e?t.match(_tt):t.match(Htt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=_S(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function _S(t,e=!1){let r=e?t.match(jtt):t.match(qtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Id(t,e){let r=t.match(Gtt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?oE.default.parse(n):n,A=typeof r[4]<"u"?oE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function Ytt(t,e){try{return Id(t,e)}catch{return null}}function Wtt(t,{protocol:e}){let{selector:r,params:o}=Id(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function tse(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Vtt(t){return t===null?!1:Object.entries(t).length>0}function HS({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${tse(e)}#`),a+=tse(r),Vtt(o)&&(a+=`::${oE.default.stringify(o)}`),a}function Ktt(t){let{params:e,protocol:r,source:o,selector:a}=Id(t);for(let n in e)n.startsWith("__")&&delete e[n];return HS({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function xa(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function eO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function aE(t){let{protocol:e,selector:r}=Id(t.reference),o=e!==null?e.replace(Jtt,""):"exotic",a=rse.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Ot(t,`@${e.scope}/`,yt.SCOPE)}${Ot(t,e.name,yt.NAME)}`:`${Ot(t,e.name,yt.NAME)}`}function jS(t){if(t.startsWith(ZI)){let e=jS(t.substring(t.indexOf("#")+1)),r=t.substring(ZI.length,ZI.length+ktt);return`${e} [${r}]`}else return t.replace(ztt,"?[...]")}function lE(t,e){return`${Ot(t,jS(e),yt.RANGE)}`}function qn(t,e){return`${cs(t,e)}${Ot(t,"@",yt.RANGE)}${lE(t,e.range)}`}function s1(t,e){return`${Ot(t,jS(e),yt.REFERENCE)}`}function jr(t,e){return`${cs(t,e)}${Ot(t,"@",yt.REFERENCE)}${s1(t,e.reference)}`}function QL(t){return`${fn(t)}@${jS(t.reference)}`}function cE(t){return ks(t,[e=>fn(e),e=>e.range])}function o1(t,e){return cs(t,e.anchoredLocator)}function XI(t,e,r){let o=Sf(e)?e1(e):e;return r===null?`${qn(t,o)} \u2192 ${kL(t).Cross}`:o.identHash===r.identHash?`${qn(t,o)} \u2192 ${s1(t,r.reference)}`:`${qn(t,o)} \u2192 ${jr(t,r)}`}function FL(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${lE(t,r.range)})`}function sO(t){return`node_modules/${fn(t)}`}function qS(t,e){return t.conditions?Qtt(t.conditions,r=>{let[,o,a]=r.match(ise),n=e[o];return n?n.includes(a):!0}):!0}var oE,rse,nse,ZI,ktt,ise,Qtt,US,Utt,_tt,Htt,jtt,qtt,Gtt,Jtt,ztt,xo=Et(()=>{oE=$e(Be("querystring")),rse=$e(zn()),nse=$e(rX());ql();rh();jl();xo();ZI="virtual:",ktt=5,ise=/(os|cpu|libc)=([a-z0-9_-]+)/,Qtt=(0,nse.makeParser)(ise);US=/^[^#]*#/;Utt=/^(?:@([^/]+?)\/)?([^@/]+)$/;_tt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Htt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;jtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,qtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Gtt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Jtt=/:$/;ztt=/\?.*/});var ase,lse=Et(()=>{xo();ase={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=o1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var a1,Xn,Bd=Et(()=>{a1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(a1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(a1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(a1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=a1;Xn.protocol="workspace:"});var kr={};Kt(kr,{SemVer:()=>pse.SemVer,clean:()=>Ztt,getComparator:()=>Ase,mergeComparators:()=>oO,satisfiesWithPrereleases:()=>bf,simplifyRanges:()=>aO,stringifyComparator:()=>fse,validRange:()=>ba});function bf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=cse.get(o);if(typeof a>"u")try{a=new ih.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{cse.set(o,a||null)}else if(a===null)return!1;let n;try{n=new ih.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function ba(t){if(t.indexOf(":")!==-1)return null;let e=use.get(t);if(typeof e<"u")return e;try{e=new ih.default.Range(t)}catch{e=null}return use.set(t,e),e}function Ztt(t){let e=Xtt.exec(t);return e?e[1]:null}function Ase(t){if(t.semver===ih.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function oO(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?ih.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?ih.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=ih.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function fse(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function aO(t){let e=t.map(o=>ba(o).set.map(a=>a.map(n=>Ase(n)))),r=e.shift().map(o=>oO(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=oO([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>fse(o)).join(" || ")}var ih,pse,cse,use,Xtt,kf=Et(()=>{ih=$e(zn()),pse=$e(zn()),cse=new Map;use=new Map;Xtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function hse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function gse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function GS(t,{yamlCompatibilityMode:e}){return e?IL(t):typeof t>"u"||typeof t=="boolean"?t:null}function dse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function lO(t,e){return e.length===1?dse(t,e[0]):`(${e.map(r=>dse(t,r)).join(" | ")})`}var mse,uE,Mt,AE=Et(()=>{Pt();Nl();mse=$e(zn());Bd();jl();kf();xo();uE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Rn}={}){let o=K.join(e,"package.json");try{return await uE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await uE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Rn}={}){let o=new uE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new uE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(gse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=hse(e)}async loadFile(e,{baseFs:r=new Rn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(gse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=hse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!ba(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=nh(n),p=this.ensureDependencyMeta(A),h=GS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=GS(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=GS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=nh(n),p=this.ensurePeerDependencyMeta(A),h=GS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:UD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(lO("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(lO("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(lO("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!mse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...cE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...cE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...cE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...cE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[_D(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Mt=uE;Mt.fileName="package.json",Mt.allDependencies=["dependencies","devDependencies","peerDependencies"],Mt.hardDependencies=["dependencies","devDependencies"]});var Ese=_((_Nt,yse)=>{var $tt=_l(),ert=function(){return $tt.Date.now()};yse.exports=ert});var wse=_((HNt,Cse)=>{var trt=/\s/;function rrt(t){for(var e=t.length;e--&&trt.test(t.charAt(e)););return e}Cse.exports=rrt});var Bse=_((jNt,Ise)=>{var nrt=wse(),irt=/^\s+/;function srt(t){return t&&t.slice(0,nrt(t)+1).replace(irt,"")}Ise.exports=srt});var fE=_((qNt,vse)=>{var ort=pd(),art=Ju(),lrt="[object Symbol]";function crt(t){return typeof t=="symbol"||art(t)&&ort(t)==lrt}vse.exports=crt});var xse=_((GNt,Sse)=>{var urt=Bse(),Dse=il(),Art=fE(),Pse=0/0,frt=/^[-+]0x[0-9a-f]+$/i,prt=/^0b[01]+$/i,hrt=/^0o[0-7]+$/i,grt=parseInt;function drt(t){if(typeof t=="number")return t;if(Art(t))return Pse;if(Dse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Dse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=urt(t);var r=prt.test(t);return r||hrt.test(t)?grt(t.slice(2),r?2:8):frt.test(t)?Pse:+t}Sse.exports=drt});var Qse=_((YNt,kse)=>{var mrt=il(),cO=Ese(),bse=xse(),yrt="Expected a function",Ert=Math.max,Crt=Math.min;function wrt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(yrt);e=bse(e)||0,mrt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?Ert(bse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function b(Ae){var ye=o,ae=a;return o=a=void 0,h=Ae,u=t.apply(ae,ye),u}function C(Ae){return h=Ae,A=setTimeout(U,e),E?b(Ae):u}function T(Ae){var ye=Ae-p,ae=Ae-h,we=e-ye;return I?Crt(we,n-ae):we}function L(Ae){var ye=Ae-p,ae=Ae-h;return p===void 0||ye>=e||ye<0||I&&ae>=n}function U(){var Ae=cO();if(L(Ae))return J(Ae);A=setTimeout(U,T(Ae))}function J(Ae){return A=void 0,v&&o?b(Ae):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:J(cO())}function pe(){var Ae=cO(),ye=L(Ae);if(o=arguments,a=this,p=Ae,ye){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),b(p)}return A===void 0&&(A=setTimeout(U,e)),u}return pe.cancel=te,pe.flush=le,pe}kse.exports=wrt});var uO=_((WNt,Fse)=>{var Irt=Qse(),Brt=il(),vrt="Expected a function";function Drt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(vrt);return Brt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),Irt(t,e,{leading:o,maxWait:e,trailing:a})}Fse.exports=Drt});function Srt(t){return typeof t.reportCode<"u"}var Tse,Rse,Nse,Prt,zt,Xs,Yl=Et(()=>{Tse=$e(uO()),Rse=Be("stream"),Nse=Be("string_decoder"),Prt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Tse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/Prt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Srt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Rse.PassThrough,o=new Nse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` -`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var pE,AO=Et(()=>{Yl();xo();pE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var vd,fO=Et(()=>{xo();vd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${qn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var hE,pO=Et(()=>{Pt();xo();hE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return aE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:K});return{...r,packageFs:p}}}});var gE,l1,Lse=Et(()=>{gE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(gE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(gE.protocol)}supportsDescriptor(e,r){return gE.isVirtualDescriptor(e)}supportsLocator(e,r){return gE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},l1=gE;l1.protocol="virtual:"});var dE,hO=Et(()=>{Pt();Bd();dE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function c1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Mse(t){return typeof t>"u"?3:c1(t)?0:Array.isArray(t)?1:2}function mO(t,e){return Object.hasOwn(t,e)}function brt(t){return c1(t)&&mO(t,"onConflict")&&typeof t.onConflict=="string"}function krt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!brt(t))return{onConflict:"default",value:t};if(mO(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Ose(t,e){let r=c1(t)&&mO(t,e)?t[e]:void 0;return krt(r)}function mE(t,e){return[t,e,Use]}function yO(t){return Array.isArray(t)?t[2]===Use:!1}function gO(t,e){if(c1(t)){let r={};for(let o of Object.keys(t))r[o]=gO(t[o],e);return mE(e,r)}return Array.isArray(t)?mE(e,t.map(r=>gO(r,e))):mE(e,t)}function dO(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:b,value:C}=Ose(v,r),T=Mse(C);if(T!==3){if(n??=T,T!==n||b==="hardReset"){p=A;break}if(T===2)return mE(I,C);if(u.unshift([I,C]),b==="reset"){p=E;break}b==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return mE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>gO(v,E)))));case 0:{let E=Object.assign({},...u.map(([,T])=>T)),I=Object.keys(E),v={},b=t.map(([T,L])=>[T,Ose(L,r).value]),C=xrt(b,([T,L])=>{let U=Mse(L);return U!==0&&U!==3});if(C!==-1){let T=b.slice(C+1);for(let L of I)v[L]=dO(T,e,L,0,T.length)}else for(let T of I)v[T]=dO(b,e,T,p,b.length);return mE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function _se(t){return dO(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function u1(t){return yO(t)?t[1]:t}function YS(t){let e=yO(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>YS(r));if(c1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=YS(a);return r}return e}function EO(t){return yO(t)?t[0]:null}var xrt,Use,Hse=Et(()=>{xrt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Use=Symbol()});var WS={};Kt(WS,{getDefaultGlobalFolder:()=>wO,getHomeFolder:()=>yE,isFolderInside:()=>IO});function wO(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,CO.homedir)(),"AppData","Local"));return K.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return K.resolve(t,"yarn/berry")}return K.resolve(yE(),".yarn/berry")}function yE(){return ue.toPortablePath((0,CO.homedir)()||"/usr/local/share")}function IO(t,e){let r=K.relative(e,t);return r&&!r.startsWith("..")&&!K.isAbsolute(r)}var CO,VS=Et(()=>{Pt();CO=Be("os")});var Yse=_(EE=>{"use strict";var sLt=Be("net"),Frt=Be("tls"),BO=Be("http"),jse=Be("https"),Trt=Be("events"),oLt=Be("assert"),Rrt=Be("util");EE.httpOverHttp=Nrt;EE.httpsOverHttp=Lrt;EE.httpOverHttps=Mrt;EE.httpsOverHttps=Ort;function Nrt(t){var e=new Qf(t);return e.request=BO.request,e}function Lrt(t){var e=new Qf(t);return e.request=BO.request,e.createSocket=qse,e.defaultPort=443,e}function Mrt(t){var e=new Qf(t);return e.request=jse.request,e}function Ort(t){var e=new Qf(t);return e.request=jse.request,e.createSocket=qse,e.defaultPort=443,e}function Qf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||BO.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=Gse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Qf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=vO({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),sh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,b){process.nextTick(function(){h(I,v,b)})}function h(I,v,b){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){sh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(b.length>0){sh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return sh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),sh(`tunneling socket could not be established, cause=%s -`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Qf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function qse(t,e){var r=this;Qf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=vO({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Frt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function Gse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function vO(t){for(var e=1,r=arguments.length;e{Wse.exports=Yse()});var Tf=_((Ff,KS)=>{"use strict";Object.defineProperty(Ff,"__esModule",{value:!0});var Kse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Urt(t){return Kse.includes(t)}var _rt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Kse];function Hrt(t){return _rt.includes(t)}var jrt=["null","undefined","string","number","bigint","boolean","symbol"];function qrt(t){return jrt.includes(t)}function CE(t){return e=>typeof e===t}var{toString:Jse}=Object.prototype,A1=t=>{let e=Jse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&xe.domElement(t))return"HTMLElement";if(Hrt(e))return e},ei=t=>e=>A1(e)===t;function xe(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(xe.observable(t))return"Observable";if(xe.array(t))return"Array";if(xe.buffer(t))return"Buffer";let e=A1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}xe.undefined=CE("undefined");xe.string=CE("string");var Grt=CE("number");xe.number=t=>Grt(t)&&!xe.nan(t);xe.bigint=CE("bigint");xe.function_=CE("function");xe.null_=t=>t===null;xe.class_=t=>xe.function_(t)&&t.toString().startsWith("class ");xe.boolean=t=>t===!0||t===!1;xe.symbol=CE("symbol");xe.numericString=t=>xe.string(t)&&!xe.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));xe.array=(t,e)=>Array.isArray(t)?xe.function_(e)?t.every(e):!0:!1;xe.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};xe.nullOrUndefined=t=>xe.null_(t)||xe.undefined(t);xe.object=t=>!xe.null_(t)&&(typeof t=="object"||xe.function_(t));xe.iterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};xe.asyncIterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};xe.generator=t=>xe.iterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.asyncGenerator=t=>xe.asyncIterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.nativePromise=t=>ei("Promise")(t);var Yrt=t=>{var e,r;return xe.function_((e=t)===null||e===void 0?void 0:e.then)&&xe.function_((r=t)===null||r===void 0?void 0:r.catch)};xe.promise=t=>xe.nativePromise(t)||Yrt(t);xe.generatorFunction=ei("GeneratorFunction");xe.asyncGeneratorFunction=t=>A1(t)==="AsyncGeneratorFunction";xe.asyncFunction=t=>A1(t)==="AsyncFunction";xe.boundFunction=t=>xe.function_(t)&&!t.hasOwnProperty("prototype");xe.regExp=ei("RegExp");xe.date=ei("Date");xe.error=ei("Error");xe.map=t=>ei("Map")(t);xe.set=t=>ei("Set")(t);xe.weakMap=t=>ei("WeakMap")(t);xe.weakSet=t=>ei("WeakSet")(t);xe.int8Array=ei("Int8Array");xe.uint8Array=ei("Uint8Array");xe.uint8ClampedArray=ei("Uint8ClampedArray");xe.int16Array=ei("Int16Array");xe.uint16Array=ei("Uint16Array");xe.int32Array=ei("Int32Array");xe.uint32Array=ei("Uint32Array");xe.float32Array=ei("Float32Array");xe.float64Array=ei("Float64Array");xe.bigInt64Array=ei("BigInt64Array");xe.bigUint64Array=ei("BigUint64Array");xe.arrayBuffer=ei("ArrayBuffer");xe.sharedArrayBuffer=ei("SharedArrayBuffer");xe.dataView=ei("DataView");xe.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;xe.urlInstance=t=>ei("URL")(t);xe.urlString=t=>{if(!xe.string(t))return!1;try{return new URL(t),!0}catch{return!1}};xe.truthy=t=>Boolean(t);xe.falsy=t=>!t;xe.nan=t=>Number.isNaN(t);xe.primitive=t=>xe.null_(t)||qrt(typeof t);xe.integer=t=>Number.isInteger(t);xe.safeInteger=t=>Number.isSafeInteger(t);xe.plainObject=t=>{if(Jse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};xe.typedArray=t=>Urt(A1(t));var Wrt=t=>xe.safeInteger(t)&&t>=0;xe.arrayLike=t=>!xe.nullOrUndefined(t)&&!xe.function_(t)&&Wrt(t.length);xe.inRange=(t,e)=>{if(xe.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(xe.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Vrt=1,Krt=["innerHTML","ownerDocument","style","attributes","nodeValue"];xe.domElement=t=>xe.object(t)&&t.nodeType===Vrt&&xe.string(t.nodeName)&&!xe.plainObject(t)&&Krt.every(e=>e in t);xe.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};xe.nodeStream=t=>xe.object(t)&&xe.function_(t.pipe)&&!xe.observable(t);xe.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>xe.integer(e)&&Math.abs(e%2)===t;xe.evenInteger=zse(0);xe.oddInteger=zse(1);xe.emptyArray=t=>xe.array(t)&&t.length===0;xe.nonEmptyArray=t=>xe.array(t)&&t.length>0;xe.emptyString=t=>xe.string(t)&&t.length===0;xe.nonEmptyString=t=>xe.string(t)&&t.length>0;var Jrt=t=>xe.string(t)&&!/\S/.test(t);xe.emptyStringOrWhitespace=t=>xe.emptyString(t)||Jrt(t);xe.emptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length===0;xe.nonEmptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length>0;xe.emptySet=t=>xe.set(t)&&t.size===0;xe.nonEmptySet=t=>xe.set(t)&&t.size>0;xe.emptyMap=t=>xe.map(t)&&t.size===0;xe.nonEmptyMap=t=>xe.map(t)&&t.size>0;xe.propertyKey=t=>xe.any([xe.string,xe.number,xe.symbol],t);xe.formData=t=>ei("FormData")(t);xe.urlSearchParams=t=>ei("URLSearchParams")(t);var Xse=(t,e,r)=>{if(!xe.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};xe.any=(t,...e)=>(xe.array(t)?t:[t]).some(o=>Xse(Array.prototype.some,o,e));xe.all=(t,...e)=>Xse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${xe(u)}\``))].join(", ")}`:`received value of type \`${xe(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Ff.assert={undefined:t=>Ht(xe.undefined(t),"undefined",t),string:t=>Ht(xe.string(t),"string",t),number:t=>Ht(xe.number(t),"number",t),bigint:t=>Ht(xe.bigint(t),"bigint",t),function_:t=>Ht(xe.function_(t),"Function",t),null_:t=>Ht(xe.null_(t),"null",t),class_:t=>Ht(xe.class_(t),"Class",t),boolean:t=>Ht(xe.boolean(t),"boolean",t),symbol:t=>Ht(xe.symbol(t),"symbol",t),numericString:t=>Ht(xe.numericString(t),"string with a number",t),array:(t,e)=>{Ht(xe.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(xe.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(xe.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(xe.object(t),"Object",t),iterable:t=>Ht(xe.iterable(t),"Iterable",t),asyncIterable:t=>Ht(xe.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(xe.generator(t),"Generator",t),asyncGenerator:t=>Ht(xe.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(xe.nativePromise(t),"native Promise",t),promise:t=>Ht(xe.promise(t),"Promise",t),generatorFunction:t=>Ht(xe.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(xe.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(xe.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(xe.boundFunction(t),"Function",t),regExp:t=>Ht(xe.regExp(t),"RegExp",t),date:t=>Ht(xe.date(t),"Date",t),error:t=>Ht(xe.error(t),"Error",t),map:t=>Ht(xe.map(t),"Map",t),set:t=>Ht(xe.set(t),"Set",t),weakMap:t=>Ht(xe.weakMap(t),"WeakMap",t),weakSet:t=>Ht(xe.weakSet(t),"WeakSet",t),int8Array:t=>Ht(xe.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(xe.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(xe.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(xe.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(xe.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(xe.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(xe.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(xe.float32Array(t),"Float32Array",t),float64Array:t=>Ht(xe.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(xe.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(xe.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(xe.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(xe.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(xe.dataView(t),"DataView",t),urlInstance:t=>Ht(xe.urlInstance(t),"URL",t),urlString:t=>Ht(xe.urlString(t),"string with a URL",t),truthy:t=>Ht(xe.truthy(t),"truthy",t),falsy:t=>Ht(xe.falsy(t),"falsy",t),nan:t=>Ht(xe.nan(t),"NaN",t),primitive:t=>Ht(xe.primitive(t),"primitive",t),integer:t=>Ht(xe.integer(t),"integer",t),safeInteger:t=>Ht(xe.safeInteger(t),"integer",t),plainObject:t=>Ht(xe.plainObject(t),"plain object",t),typedArray:t=>Ht(xe.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(xe.arrayLike(t),"array-like",t),domElement:t=>Ht(xe.domElement(t),"HTMLElement",t),observable:t=>Ht(xe.observable(t),"Observable",t),nodeStream:t=>Ht(xe.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(xe.infinite(t),"infinite number",t),emptyArray:t=>Ht(xe.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(xe.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(xe.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(xe.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(xe.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(xe.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(xe.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(xe.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(xe.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(xe.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(xe.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(xe.propertyKey(t),"PropertyKey",t),formData:t=>Ht(xe.formData(t),"FormData",t),urlSearchParams:t=>Ht(xe.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(xe.evenInteger(t),"even integer",t),oddInteger:t=>Ht(xe.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(xe.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(xe.inRange(t,e),"in range",t),any:(t,...e)=>Ht(xe.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(xe.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(xe,{class:{value:xe.class_},function:{value:xe.function_},null:{value:xe.null_}});Object.defineProperties(Ff.assert,{class:{value:Ff.assert.class_},function:{value:Ff.assert.function_},null:{value:Ff.assert.null_}});Ff.default=xe;KS.exports=xe;KS.exports.default=xe;KS.exports.assert=Ff.assert});var Zse=_((cLt,DO)=>{"use strict";var JS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},wE=class{static fn(e){return(...r)=>new wE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new JS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(wE.prototype,Promise.prototype);DO.exports=wE;DO.exports.CancelError=JS});var $se=_((SO,xO)=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var zrt=Be("tls"),PO=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof zrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};SO.default=PO;xO.exports=PO;xO.exports.default=PO});var eoe=_((kO,QO)=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var Xrt=$se(),Zrt=Number(process.versions.node.split(".")[0]),bO=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Zrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Xrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};kO.default=bO;QO.exports=bO;QO.exports.default=bO});var aoe=_((uLt,RO)=>{"use strict";var{V4MAPPED:$rt,ADDRCONFIG:ent,ALL:ooe,promises:{Resolver:toe},lookup:tnt}=Be("dns"),{promisify:FO}=Be("util"),rnt=Be("os"),IE=Symbol("cacheableLookupCreateConnection"),TO=Symbol("cacheableLookupInstance"),roe=Symbol("expires"),nnt=typeof ooe=="number",noe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},int=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},ioe=()=>{let t=!1,e=!1;for(let r of Object.values(rnt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},snt=t=>Symbol.iterator in t,soe={ttl:!0},ont={all:!0},zS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new toe,lookup:u=tnt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=FO(u),this._resolver instanceof toe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=FO(this._resolver.resolve4.bind(this._resolver)),this._resolve6=FO(this._resolver.resolve6.bind(this._resolver))),this._iface=ioe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&$rt&&(nnt&&r.hints&ooe||a.length===0)?int(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&ent){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,soe),this._resolve6(e,soe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[roe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}snt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,ont);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[roe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[IE](r,o))}uninstall(e){if(noe(e),e[IE]){if(e[TO]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[IE],delete e[IE],delete e[TO]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=ioe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};RO.exports=zS;RO.exports.default=zS});var uoe=_((ALt,NO)=>{"use strict";var ant=typeof URL>"u"?Be("url").URL:URL,lnt="text/plain",cnt="us-ascii",loe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),unt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(b=>b.trim());return I==="charset"&&(v=v.toLowerCase(),v===cnt)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==lnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},coe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return unt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new ant(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];loe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])loe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};NO.exports=coe;NO.exports.default=coe});var poe=_((fLt,foe)=>{foe.exports=Aoe;function Aoe(t,e){if(t&&e)return Aoe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var hoe=poe();LO.exports=hoe(XS);LO.exports.strict=hoe(goe);XS.proto=XS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return XS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return goe(this)},configurable:!0})});function XS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function goe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var OO=_((hLt,moe)=>{var Ant=MO(),fnt=function(){},pnt=function(t){return t.setHeader&&typeof t.abort=="function"},hnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},doe=function(t,e,r){if(typeof e=="function")return doe(t,null,e);e||(e={}),r=Ant(r||fnt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return pnt(t)?(t.on("complete",p),t.on("abort",v),t.req?b():t.on("request",b)):u&&!o&&(t.on("end",A),t.on("close",A)),hnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};moe.exports=doe});var Coe=_((gLt,Eoe)=>{var gnt=MO(),dnt=OO(),UO=Be("fs"),f1=function(){},mnt=/^v?\.0/.test(process.version),ZS=function(t){return typeof t=="function"},ynt=function(t){return!mnt||!UO?!1:(t instanceof(UO.ReadStream||f1)||t instanceof(UO.WriteStream||f1))&&ZS(t.close)},Ent=function(t){return t.setHeader&&ZS(t.abort)},Cnt=function(t,e,r,o){o=gnt(o);var a=!1;t.on("close",function(){a=!0}),dnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,ynt(t))return t.close(f1);if(Ent(t))return t.abort();if(ZS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},yoe=function(t){t()},wnt=function(t,e){return t.pipe(e)},Int=function(){var t=Array.prototype.slice.call(arguments),e=ZS(t[t.length-1]||f1)&&t.pop()||f1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return Cnt(a,u,A,function(p){r||(r=p),p&&o.forEach(yoe),!u&&(o.forEach(yoe),e(r))})});return t.reduce(wnt)};Eoe.exports=Int});var Ioe=_((dLt,woe)=>{"use strict";var{PassThrough:Bnt}=Be("stream");woe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Bnt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var Boe=_((mLt,BE)=>{"use strict";var vnt=Coe(),Dnt=Ioe(),$S=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function ex(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=vnt(t,Dnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new $S)})}),o.getBufferedValue()}BE.exports=ex;BE.exports.default=ex;BE.exports.buffer=(t,e)=>ex(t,{...e,encoding:"buffer"});BE.exports.array=(t,e)=>ex(t,{...e,array:!0});BE.exports.MaxBufferError=$S});var Doe=_((ELt,voe)=>{"use strict";var Pnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Snt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),xnt=new Set([500,502,503,504]),bnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},knt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Dd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Qnt(t){return t?xnt.has(t.status):!0}function _O(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Fnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}voe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=_O(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=_O(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Fnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Snt.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||Pnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=_O(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)bnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Dd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Dd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Dd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Dd(this._rescc["stale-if-error"]),o=e+Dd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Dd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Dd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Qnt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!knt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var tx=_((CLt,Poe)=>{"use strict";Poe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var xoe=_((wLt,Soe)=>{"use strict";var Tnt=Be("stream").Readable,Rnt=tx(),HO=class extends Tnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=Rnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Soe.exports=HO});var koe=_((ILt,boe)=>{"use strict";var Nnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];boe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Nnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var Foe=_((BLt,Qoe)=>{"use strict";var Lnt=Be("stream").PassThrough,Mnt=koe(),Ont=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Lnt;return Mnt(t,e),t.pipe(e)};Qoe.exports=Ont});var Toe=_(jO=>{jO.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};jO.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Loe=_((DLt,Noe)=>{"use strict";var Unt=Be("events"),Roe=Toe(),_nt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(Be(e[r]))(t)}return new Map},qO=class extends Unt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Roe.stringify,deserialize:Roe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=_nt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Noe.exports=qO});var Uoe=_((SLt,Ooe)=>{"use strict";var Hnt=Be("events"),rx=Be("url"),jnt=uoe(),qnt=Boe(),GO=Doe(),Moe=xoe(),Gnt=tx(),Ynt=Foe(),Wnt=Loe(),jc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Wnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=YO(rx.parse(r)),r={};else if(r instanceof rx.URL)a=YO(rx.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),b=v.length>0?`?${v.join("?")}`:"";a=YO({...r,pathname:I,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Vnt(a)},r.headers=Gnt(r.headers);let n=new Hnt,u=jnt(rx.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,b,C=new Promise(L=>{b=()=>{v||(v=!0,L())}}),T=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=GO.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Moe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new GO(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=Ynt(L),(async()=>{try{let J=qnt.buffer(L);if(await Promise.race([C,new Promise(Ae=>L.once("end",Ae))]),v)return;let te=await J,le={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},pe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(pe=pe?Math.min(pe,I.maxTtl):I.maxTtl),await this.cache.set(A,le,pe)}catch(J){n.emit("error",new jc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new jc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,T);L.once("error",b),L.once("abort",b),n.emit("request",L)}catch(L){n.emit("error",new jc.RequestError(L))}};return(async()=>{let I=async b=>{await Promise.resolve();let C=b.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(b);let T=GO.fromObject(C.cachePolicy);if(T.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let L=T.responseHeaders(),U=new Moe(C.statusCode,L,C.body,C.url);U.cachePolicy=T,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,b.headers=T.revalidationHeaders(b),E(b)},v=b=>n.emit("error",new jc.CacheError(b));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(b){r.automaticFailover&&!h&&E(r),n.emit("error",new jc.CacheError(b))}})(),n}}};function Vnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function YO(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}jc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};jc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=jc});var Hoe=_((kLt,_oe)=>{"use strict";var Knt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];_oe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(Knt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var qoe=_((QLt,joe)=>{"use strict";var{Transform:Jnt,PassThrough:znt}=Be("stream"),WO=Be("zlib"),Xnt=Hoe();joe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof WO.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Jnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new znt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?WO.createBrotliDecompress():WO.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Xnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var KO=_((FLt,Goe)=>{"use strict";var VO=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};Goe.exports=VO});var zO=_((TLt,Koe)=>{"use strict";var Znt=Be("events"),$nt=Be("tls"),eit=Be("http2"),tit=KO(),ea=Symbol("currentStreamsCount"),Yoe=Symbol("request"),Wl=Symbol("cachedOriginSet"),vE=Symbol("gracefullyClosing"),rit=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],nit=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},iit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,JO=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Voe(r)},sit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Voe(e)},Woe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[vE]=!0,t[ea]===0&&t.close()},tA=class extends Znt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new tit({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of rit)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,b;for(let C of E){let T=C.remoteSettings.maxConcurrentStreams;if(T=T||C[vE]||C.destroyed)continue;b||(I=T),L>v&&(b=C,v=L)}}if(b){if(o.length!==1){for(let{reject:C}of o){let T=new Error(`Expected the length of listeners to be 1, got ${o.length}. -Please report this to https://github.com/szmarczak/http2-wrapper/`);C(T)}return}o[0].resolve(b);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=eit.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[vE]=!1;let b=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let T=()=>{if(!(!(u in this.queue)||!b())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&b();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!b())break}}};v.on("origin",()=>{v[Wl]=v.originSet,b()&&(T(),JO(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(nit(U,v,iit),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),T(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{T(),JO(this.sessions[u],v)})}),v[Yoe]=v.request,v.request=(L,U)=>{if(v[vE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[Yoe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=b(),--v[ea],!v.destroyed&&!v.closed&&(sit(this.sessions[u],v),b()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[vE])?v.close():(JO(this.sessions[u],v),T())}}),J}}catch(v){for(let b of o)b.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),$nt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Woe({agent:this,isFree:!0})}get busySessions(){return Woe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=vE;Koe.exports={Agent:tA,globalAgent:new tA}});var ZO=_((RLt,Joe)=>{"use strict";var{Readable:oit}=Be("stream"),XO=class extends oit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Joe.exports=XO});var $O=_((NLt,zoe)=>{"use strict";zoe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var eae=_((MLt,$oe)=>{"use strict";$oe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var rae=_((ULt,tae)=>{"use strict";var DE=(t,e,r)=>{tae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};DE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});DE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);DE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);DE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);DE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);DE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var i4=_((_Lt,cae)=>{"use strict";var ait=Be("http2"),{Writable:lit}=Be("stream"),{Agent:nae,globalAgent:cit}=zO(),uit=ZO(),Ait=$O(),fit=Zoe(),pit=eae(),{ERR_INVALID_ARG_TYPE:e4,ERR_INVALID_PROTOCOL:hit,ERR_HTTP_HEADERS_SENT:iae,ERR_INVALID_HTTP_TOKEN:git,ERR_HTTP_INVALID_HEADER_VALUE:dit,ERR_INVALID_CHAR:mit}=rae(),{HTTP2_HEADER_STATUS:sae,HTTP2_HEADER_METHOD:oae,HTTP2_HEADER_PATH:aae,HTTP2_METHOD_CONNECT:yit}=ait.constants,Qo=Symbol("headers"),t4=Symbol("origin"),r4=Symbol("session"),lae=Symbol("options"),nx=Symbol("flushedHeaders"),p1=Symbol("jobs"),Eit=/^[\^`\-\w!#$%&*+.|~]+$/,Cit=/[^\t\u0020-\u007E\u0080-\u00FF]/,n4=class extends lit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=Ait(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[r4]=r.h2session;else if(r.agent===!1)this.agent=new nae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new nae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=cit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new e4("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new hit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[p1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[lae]=r,n===443?(this[t4]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[t4]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[nx]=!1}get method(){return this[Qo][oae]}set method(e){e&&(this[Qo][oae]=e.toUpperCase())}get path(){return this[Qo][aae]}set path(e){e&&(this[Qo][aae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[p1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[p1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[nx]||this.destroyed)return;this[nx]=!0;let e=this.method===yit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||fit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new uit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[sae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[sae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[p1])u();this.emit("socket",this.socket)};if(this[r4])try{r(this[r4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[t4],this[lae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new e4("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[nx]}removeHeader(e){if(typeof e!="string")throw new e4("name","string",e);if(this.headersSent)throw new iae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new iae("set");if(typeof e!="string"||!Eit.test(e)&&!pit(e))throw new git("Header name",e);if(typeof r>"u")throw new dit(r,e);if(Cit.test(r))throw new mit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[p1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};cae.exports=n4});var Aae=_((HLt,uae)=>{"use strict";var wit=Be("tls");uae.exports=(t={})=>new Promise((e,r)=>{let o=wit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var pae=_((jLt,fae)=>{"use strict";var Iit=Be("net");fae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),Iit.isIP(e)?"":e}});var dae=_((qLt,o4)=>{"use strict";var hae=Be("http"),s4=Be("https"),Bit=Aae(),vit=KO(),Dit=i4(),Pit=pae(),Sit=$O(),ix=new vit({maxSize:100}),h1=new Map,gae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},xit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!ix.has(e)){if(h1.has(e))return(await h1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Bit(t);h1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(ix.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=s4,p=s4.Agent.prototype.createConnection;o?o.createConnection===p?gae(o,n,t):n.destroy():A.createConnection===p?gae(A,n,t):n.destroy()}return h1.delete(e),u}catch(n){throw h1.delete(e),n}}return ix.get(e)};o4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Sit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Pit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?s4.globalAgent:hae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await xit(e)==="h2"?(a&&(e.agent=a.http2),new Dit(e,r)):hae.request(e,r)};o4.exports.protocolCache=ix});var yae=_((GLt,mae)=>{"use strict";var bit=Be("http2"),kit=zO(),a4=i4(),Qit=ZO(),Fit=dae(),Tit=(t,e,r)=>new a4(t,e,r),Rit=(t,e,r)=>{let o=new a4(t,e,r);return o.end(),o};mae.exports={...bit,ClientRequest:a4,IncomingMessage:Qit,...kit,request:Tit,get:Rit,auto:Fit}});var c4=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=Tf();l4.default=t=>Eae.default.nodeStream(t)&&Eae.default.function_(t.getBoundary)});var Bae=_(u4=>{"use strict";Object.defineProperty(u4,"__esModule",{value:!0});var wae=Be("fs"),Iae=Be("util"),Cae=Tf(),Nit=c4(),Lit=Iae.promisify(wae.stat);u4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Cae.default.string(t))return Buffer.byteLength(t);if(Cae.default.buffer(t))return t.length;if(Nit.default(t))return Iae.promisify(t.getLength.bind(t))();if(t instanceof wae.ReadStream){let{size:r}=await Lit(t.path);return r===0?void 0:r}}});var f4=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});function Mit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}A4.default=Mit});var vae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});p4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Pae=_(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.TimeoutError=void 0;var Oit=Be("net"),Uit=vae(),Dae=Symbol("reentry"),_it=()=>{},sx=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};g1.TimeoutError=sx;g1.default=(t,e,r)=>{if(Dae in t)return _it;t[Dae]=!0;let o=[],{once:a,unhandleAll:n}=Uit.default(),u=(I,v,b)=>{var C;let T=setTimeout(v,I,I,b);(C=T.unref)===null||C===void 0||C.call(T);let L=()=>{clearTimeout(T)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new sx(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:b}=t;if(I.connecting){let C=Boolean(b??Oit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let T=u(e.lookup,h,"lookup");a(I,"lookup",T)}if(typeof e.connect<"u"){let T=()=>u(e.connect,h,"connect");C?a(I,"connect",T()):a(I,"lookup",L=>{L===null&&a(I,"connect",T())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let T=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",T)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var xae=_(h4=>{"use strict";Object.defineProperty(h4,"__esModule",{value:!0});var Sae=Tf();h4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Sae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Sae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var Hit=Be("url"),jit=["protocol","host","hostname","port","pathname","search"];g4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Hit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of jit)e[n]&&(a[n]=e[n].toString());return a}});var kae=_(m4=>{"use strict";Object.defineProperty(m4,"__esModule",{value:!0});var d4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};m4.default=d4});var E4=_(y4=>{"use strict";Object.defineProperty(y4,"__esModule",{value:!0});var qit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};y4.default=qit});var Fae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var Qae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in Qae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return Qae[t];throw new Error("Invalid DNS lookup IP version")}});var C4=_(ox=>{"use strict";Object.defineProperty(ox,"__esModule",{value:!0});ox.isResponseOk=void 0;ox.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Rae=_(w4=>{"use strict";Object.defineProperty(w4,"__esModule",{value:!0});var Tae=new Set;w4.default=t=>{Tae.has(t)||(Tae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Nae=_(I4=>{"use strict";Object.defineProperty(I4,"__esModule",{value:!0});var Ai=Tf(),Git=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};I4.default=Git});var Lae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.retryAfterStatusCodes=void 0;d1.retryAfterStatusCodes=new Set([413,429,503]);var Yit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};d1.default=Yit});var E1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Mae=Be("util"),Oae=Be("stream"),Wit=Be("fs"),oh=Be("url"),Uae=Be("http"),B4=Be("http"),Vit=Be("https"),Kit=eoe(),Jit=aoe(),_ae=Uoe(),zit=qoe(),Xit=yae(),Zit=tx(),st=Tf(),$it=Bae(),Hae=c4(),est=f4(),jae=Pae(),tst=xae(),qae=bae(),rst=kae(),nst=E4(),Gae=Fae(),ist=C4(),ah=Rae(),sst=Nae(),ost=Lae(),v4,Zs=Symbol("request"),cx=Symbol("response"),PE=Symbol("responseSize"),SE=Symbol("downloadedSize"),xE=Symbol("bodySize"),bE=Symbol("uploadedSize"),ax=Symbol("serverResponsesPiped"),Yae=Symbol("unproxyEvents"),Wae=Symbol("isFromCache"),D4=Symbol("cancelTimeouts"),Vae=Symbol("startedReading"),kE=Symbol("stopReading"),lx=Symbol("triggerRead"),lh=Symbol("body"),m1=Symbol("jobs"),Kae=Symbol("originalResponse"),Jae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var ast=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function lst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function cst(t){return st.default.object(t)&&!("statusCode"in t)}var P4=new rst.default,ust=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),Ast=new Set([300,301,302,303,304,307,308]),fst=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of fst)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Ki=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof dx?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[cx]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` -`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` -`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` -`)}${A.reverse().join(` -`)}`}}};Bn.RequestError=Ki;var ux=class extends Ki{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ux;var Ax=class extends Ki{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ax;var fx=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fx;var px=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=px;var hx=class extends Ki{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hx;var y1=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=y1;var gx=class extends Ki{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gx;var pst=["socket","connect","continue","information","upgrade","timeout"],dx=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[SE]=0,this[bE]=0,this.requestInitialized=!1,this[ax]=new Set,this.redirects=[],this[kE]=!1,this[lx]=!1,this[m1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof B4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Wit.ReadStream&&await ust(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[m1])I();this[m1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Ki){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new oh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([Gae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Zit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let b;if(st.default.string(r.searchParams)||r.searchParams instanceof oh.URLSearchParams)b=new oh.URLSearchParams(r.searchParams);else{lst(r.searchParams),b=new oh.URLSearchParams;for(let C in r.searchParams){let T=r.searchParams[C];T===null?b.append(C,""):T!==void 0&&b.append(C,T)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,T)=>{b.has(T)||b.append(T,C)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=qae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=qae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:b}=r;Object.defineProperty(r,"prefixUrl",{set:T=>{let L=r.url;if(!L.href.startsWith(T))throw new Error(`Cannot change \`prefixUrl\` from ${b} to ${T}: ${L.href}`);r.url=new oh.URL(T+L.href.slice(b.length)),b=T},get:()=>b});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new oh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gx(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:b,getCookieString:C}=E;st.assert.function_(b),st.assert.function_(C),b.length===4&&C.length===0&&(b=Mae.promisify(b.bind(r.cookieJar)),C=Mae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:C})}let{cache:I}=r;if(I&&(P4.has(I)||P4.set(I,new _ae((b,C)=>{let T=b[Zs](b,C);return st.default.promise(T)&&(T.once=(L,U)=>{if(L==="error")T.catch(U);else if(L==="abort")(async()=>{try{(await T).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return T}),T},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)v4||(v4=new Jit.default),r.dnsCache=v4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let b of Bn.knownHookEvents)if(b in r.hooks)if(st.default.array(r.hooks[b]))r.hooks[b]=[...r.hooks[b]];else throw new TypeError(`Parameter \`${b}\` must be an Array, got ${st.default(r.hooks[b])}`);else r.hooks[b]=[];if(o&&!v)for(let b of Bn.knownHookEvents)o.hooks[b].length>0&&(r.hooks[b]=[...o.hooks[b],...r.hooks[b]]);if("family"in r&&ah.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ah.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ah.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ah.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ah.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ah.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ah.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ah.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let b in r.agent)if(b!=="http"&&b!=="https"&&b!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${b}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),sst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Hae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Hae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[lh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[lh]=new oh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[lh]=e.stringifyJson(e.json));let h=await $it.default(this[lh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=zit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Uae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Wae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[cx]=e,e.once("end",()=>{this[PE]=this[SE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new y1(A,this))}),e.once("aborted",()=>{this._beforeError(new y1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&Ast.has(a)){if(e.resume(),this[Zs]&&(this[D4](),delete this[Zs],this[Yae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[lh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ux(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new oh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!ist.isResponseOk(n)){this._beforeError(new Ax(n));return}e.on("readable",()=>{this[lx]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ax])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Kit.default(e),this[D4]=jae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof jae.TimeoutError?new hx(p,this.timings,this):new Ki(p.message,p,this),this._beforeError(p)}),this[Yae]=est.default(e,this,pst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[lh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new px(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,tst.default(e)),delete r.url;let n,u=P4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=ast?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[lh]!==u.body&&(this[lh]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",b;u.http2?b=Xit.auto:b=v?Vit.request:Uae.request;let C=(e=u.request)!==null&&e!==void 0?e:b,T=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=Gae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await T(I,L);st.default.undefined(U)&&(U=b(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),cst(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof _ae.CacheError?new fx(U,this):new Ki(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Ki(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[kE])return;let{options:r}=this,o=this.retryCount+1;this[kE]=!0,e instanceof Ki||(e=new Ki(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await nst.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:ost.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Ki(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Ki(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Jae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[lx]=!0;let e=this[cx];if(e&&!this[kE]){e.readableLength&&(this[lx]=!1);let r;for(;(r=e.read())!==null;){this[SE]+=r.length,this[Vae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[m1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[bE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[bE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[m1].push(r)}_destroy(e,r){var o;this[kE]=!0,clearTimeout(this[Jae]),Zs in this&&(this[D4](),!((o=this[cx])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Ki)&&(e=new Ki(e.message,e,this)),r(e)}get _isAboutToError(){return this[kE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[SE]/this[PE]:this[PE]===this[SE]?e=1:e=0,{percent:e,transferred:this[SE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[bE]/this[xE]:this[xE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Wae]}pipe(e,r){if(this[Vae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof B4.ServerResponse&&this[ax].add(e),super.pipe(e,r)}unpipe(e){return e instanceof B4.ServerResponse&&this[ax].delete(e),super.unpipe(e),this}};Bn.default=dx});var C1=_(qc=>{"use strict";var hst=qc&&qc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),gst=qc&&qc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&hst(e,t,r)};Object.defineProperty(qc,"__esModule",{value:!0});qc.CancelError=qc.ParseError=void 0;var zae=E1(),S4=class extends zae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};qc.ParseError=S4;var x4=class extends zae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};qc.CancelError=x4;gst(E1(),qc)});var Zae=_(b4=>{"use strict";Object.defineProperty(b4,"__esModule",{value:!0});var Xae=C1(),dst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Xae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Xae.ParseError(n,t)}};b4.default=dst});var k4=_(ch=>{"use strict";var mst=ch&&ch.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),yst=ch&&ch.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&mst(e,t,r)};Object.defineProperty(ch,"__esModule",{value:!0});var Est=Be("events"),Cst=Tf(),wst=Zse(),mx=C1(),$ae=Zae(),ele=E1(),Ist=f4(),Bst=E4(),tle=C4(),vst=["request","response","redirect","uploadProgress","downloadProgress"];function rle(t){let e,r,o=new Est.EventEmitter,a=new wst((u,A,p)=>{let h=E=>{let I=new ele.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mx.CancelError(I))),e=I,I.once("response",async C=>{var T;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await Bst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((T=C.headers["content-encoding"])!==null&&T!==void 0?T:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=$ae.default(C,te.responseType,te.parseJson,te.encoding)}catch(le){if(C.body=L.toString(),tle.isResponseOk(C)){I._beforeError(le);return}}try{for(let[le,pe]of te.hooks.afterResponse.entries())C=await pe(C,async Ae=>{let ye=ele.default.normalizeArguments(void 0,{...Ae,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);ye.hooks.afterResponse=ye.hooks.afterResponse.slice(0,le);for(let we of ye.hooks.beforeRetry)await we(ye);let ae=rle(ye);return p(()=>{ae.catch(()=>{}),ae.cancel()}),ae})}catch(le){I._beforeError(new mx.RequestError(le.message,le,I));return}if(!tle.isResponseOk(C)){I._beforeError(new mx.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:T}=I;if(C instanceof mx.HTTPError&&!T.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let b=I.options.body;I.once("retry",(C,T)=>{var L,U;if(b===((L=T.request)===null||L===void 0?void 0:L.options.body)&&Cst.default.nodeStream((U=T.request)===null||U===void 0?void 0:U.options.body)){v(T);return}h(C)}),Ist.default(I,o,vst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return $ae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}ch.default=rle;yst(C1(),ch)});var nle=_(Q4=>{"use strict";Object.defineProperty(Q4,"__esModule",{value:!0});var Dst=C1();function Pst(t,...e){let r=(async()=>{if(t instanceof Dst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}Q4.default=Pst});var ole=_(F4=>{"use strict";Object.defineProperty(F4,"__esModule",{value:!0});var ile=Tf();function sle(t){for(let e of Object.values(t))(ile.default.plainObject(e)||ile.default.array(e))&&sle(e);return Object.freeze(t)}F4.default=sle});var lle=_(ale=>{"use strict";Object.defineProperty(ale,"__esModule",{value:!0})});var T4=_(Kl=>{"use strict";var Sst=Kl&&Kl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),xst=Kl&&Kl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Sst(e,t,r)};Object.defineProperty(Kl,"__esModule",{value:!0});Kl.defaultHandler=void 0;var cle=Tf(),Vl=k4(),bst=nle(),Ex=E1(),kst=ole(),Qst={RequestError:Vl.RequestError,CacheError:Vl.CacheError,ReadError:Vl.ReadError,HTTPError:Vl.HTTPError,MaxRedirectsError:Vl.MaxRedirectsError,TimeoutError:Vl.TimeoutError,ParseError:Vl.ParseError,CancelError:Vl.CancelError,UnsupportedProtocolError:Vl.UnsupportedProtocolError,UploadError:Vl.UploadError},Fst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yx}=Ex.default,ule=(...t)=>{let e;for(let r of t)e=yx(void 0,r,e);return e},Tst=t=>t.isStream?new Ex.default(void 0,t):Vl.default(t),Rst=t=>"defaults"in t&&"options"in t.defaults,Nst=["get","post","put","patch","head","delete"];Kl.defaultHandler=(t,e)=>e(t);var Ale=(t,e)=>{if(t)for(let r of t)r(e)},fle=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?Tst:h);if(cle.default.plainObject(o)){let E={...o,...a};Ex.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{Ale(t.options.hooks.init,a),Ale((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yx(o,a,n??t.options);if(I[Ex.kIsNormalizedAlready]=!0,E)throw new Vl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return bst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)Rst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Kl.defaultHandler),n.length===0&&n.push(Kl.defaultHandler),fle({options:ule(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yx(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!cle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Nst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Qst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:kst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=ule,e};Kl.default=fle;xst(lle(),Kl)});var gle=_((Rf,Cx)=>{"use strict";var Lst=Rf&&Rf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ple=Rf&&Rf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lst(e,t,r)};Object.defineProperty(Rf,"__esModule",{value:!0});var Mst=Be("url"),hle=T4(),Ost={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Mst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[hle.defaultHandler],mutableDefaults:!1},R4=hle.default(Ost);Rf.default=R4;Cx.exports=R4;Cx.exports.default=R4;Cx.exports.__esModule=!0;ple(T4(),Rf);ple(k4(),Rf)});var rn={};Kt(rn,{Method:()=>Ile,del:()=>qst,get:()=>O4,getNetworkSettings:()=>wle,post:()=>U4,put:()=>jst,request:()=>w1});function yle(t){let e=new wx.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function N4(t){return ol(mle,t,()=>oe.readFilePromise(t).then(e=>(mle.set(t,e),e)))}function Hst({statusCode:t,statusMessage:e},r){let o=Ot(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Xy(r,`${o}${e?` (${e})`:""}`,a)}async function Ix(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ot(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Hst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,bL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Ot(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Ot(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function wle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new wx.URL(t):t;for(let[u,A]of r)if(M4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function w1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Gst(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function O4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>Ix(w1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(dle,t,()=>u().then(p=>(dle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function jst(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function U4(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function qst(t,{customErrorMessage:e,...r}){return(await Ix(w1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Gst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new wx.URL(t):t,p=wle(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!M4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?L4.default.httpOverHttp(yle(p.httpProxy)):Ust,https:p.httpsProxy?L4.default.httpsOverHttp(yle(p.httpsProxy)):_st},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),b=r.get("enableStrictSsl"),C=p.httpsCaFilePath,T=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(gle())),J=C?await N4(C):void 0,te=T?await N4(T):void 0,le=L?await N4(L):void 0,pe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:b,certificateAuthority:J,certificate:te,key:le},...E});return r.getLimit("networkConcurrency")(()=>pe(A))}var Ele,Cle,M4,L4,wx,dle,mle,Ust,_st,Ile,Bx=Et(()=>{Pt();Ele=Be("https"),Cle=Be("http"),M4=$e(Zo()),L4=$e(Vse()),wx=Be("url");Yl();ql();jl();dle=new Map,mle=new Map,Ust=new Cle.Agent({keepAlive:!0}),_st=new Ele.Agent({keepAlive:!0});Ile=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Ile||{})});var Ji={};Kt(Ji,{availableParallelism:()=>H4,getArchitecture:()=>I1,getArchitectureName:()=>Jst,getArchitectureSet:()=>_4,getCaller:()=>$st,major:()=>Yst,openUrl:()=>Wst});function Kst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(Vst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return WI(r,a=>{let n=a.match(o);if(!n)return WI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function I1(){return vle=vle??{os:process.platform,cpu:process.arch,libc:Kst()}}function Jst(t=I1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function _4(){let t=I1();return Dle=Dle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Zst(t){let e=zst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Xst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function $st(){let e=new Error().stack.split(` -`)[3];return Zst(e)}function H4(){return typeof vx.default.availableParallelism<"u"?vx.default.availableParallelism():Math.max(1,vx.default.cpus().length)}var vx,Yst,Ble,Wst,Vst,vle,Dle,zst,Xst,Dx=Et(()=>{Pt();vx=$e(Be("os"));Px();jl();Yst=Number(process.versions.node.split(".")[0]),Ble=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Wst=typeof Ble<"u"?async t=>{try{return await j4(Ble,[t],{cwd:K.cwd()}),!0}catch{return!1}}:void 0,Vst="/usr/bin/ldd";zst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Xst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function V4(t,e,r,o,a){let n=u1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>q4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>q4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return q4(t,e,r,o,a)}function q4(t,e,r,o,a){let n=u1(r);switch(o.type){case"ANY":return YS(n);case"SHAPE":return not(t,e,r,o,a);case"MAP":return iot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=EO(r);return E&&E[0]!=="<"&&(h=K.dirname(E)),K.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function not(t,e,r,o,a){let n=u1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=K4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,V4(t,h,p,o.properties[A],a))}return u}function iot(t,e,r,o,a){let n=u1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,V4(t,E,p,I,a))}return u}function K4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,K4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>K.normalize(o)):K.isAbsolute(e.default)?K.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>K.resolve(t.projectCwd,o)):K.resolve(t.projectCwd,e.default);default:return e.default}}function xx(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return rot;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(xx(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=xx(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=xx(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function sot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bx)&&(e=(0,Sle.default)(e.slice(bx.length)),t[e]=r);return t}function Y4(){let t=`${bx}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return W4}async function Ple(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function oot(t,e){return Buffer.compare(...await Promise.all([Ple(t),Ple(e)]))===0}async function aot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function cot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await lot(r,e)?null:r}var Sle,Nf,xle,ble,kle,G4,eot,B1,tot,QE,bx,W4,rot,v1,Qle,kx,Sx,lot,rA,Ve,D1=Et(()=>{Pt();Nl();Sle=$e(aK()),Nf=$e(ed());qt();xle=$e(eJ()),ble=Be("module"),kle=$e(nd()),G4=Be("stream");lse();AE();AO();fO();pO();Lse();hO();Bd();Hse();VS();ql();rh();Bx();jl();Dx();kf();xo();eot=function(){if(!Nf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),B1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),tot=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),QE=/^(?!v)[a-z0-9._-]+$/i,bx="yarn_",W4=".yarnrc.yml",rot="********",v1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(v1||{}),Qle=yt,kx=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(kx||{}),Sx={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:wO()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:Y4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:xL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Nf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:H4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uS),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Nf.isPR&&eot,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};lot=process.platform==="win32"?oot:aot;rA=class{constructor(e){this.isCI=Nf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sx);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=sot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(yE());h&&(p.find(ye=>ye.path===h.path)||p.unshift(h));let E=_se(p.map(Ae=>[Ae.path,Ae.data])),I=Bt.dot,v=new Set(Object.keys(Sx)),b=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae})=>({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae}),C=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae,...we})=>{let Pe={};for(let[g,Ee]of Object.entries(we))v.has(g)&&(Pe[g]=Ee);return Pe},T=({yarnPath:Ae,ignorePath:ye,...ae})=>{let we={};for(let[Pe,g]of Object.entries(ae))v.has(Pe)||(we[Pe]=g);return we};if(A.importSettings(b(Sx)),A.useWithSource("",b(u),e,{strict:!1}),E){let[Ae,ye]=E;A.useWithSource(Ae,b(ye),I,{strict:!1})}if(a){if(await cot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async Ae=>{let ye=Ae.endsWith("?")?await oe.readFilePromise(Ae.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(Ae,"utf8");return(0,xle.parse)(ye)}));for(let Ae of J)for(let[ye,ae]of Object.entries(Ae))A.env[ye]=sS(ae,{env:U});if(A.importSettings(C(Sx)),A.useWithSource("",C(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,C(ye),I,{strict:o})}let te=Ae=>"default"in Ae?Ae.default:Ae,le=new Map([["@@core",ase]]);if(r!==null)for(let Ae of r.plugins.keys())le.set(Ae,te(r.modules.get(Ae)));for(let[Ae,ye]of le)A.activatePlugin(Ae,ye);let pe=new Map([]);if(r!==null){let Ae=new Map;for(let we of ble.builtinModules)Ae.set(we,()=>vf(we));for(let[we,Pe]of r.modules)Ae.set(we,()=>Pe);let ye=new Set,ae=async(we,Pe)=>{let{factory:g,name:Ee}=vf(we);if(!g||ye.has(Ee))return;let De=new Map(Ae),ce=ee=>{if(De.has(ee))return De.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Wy(async()=>te(await g(ce)),ee=>`${ee} (when initializing ${Ee}, defined in ${Pe})`);Ae.set(Ee,()=>ne),ye.add(Ee),pe.set(Ee,ne)};if(u.plugins)for(let we of u.plugins.split(";")){let Pe=K.resolve(e,ue.toPortablePath(we));await ae(Pe,"")}for(let{path:we,cwd:Pe,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let De=typeof Ee!="string"?Ee.path:Ee,ce=Ee?.spec??"",ne=Ee?.checksum??"";if(B1.has(ce))continue;let ee=K.resolve(Pe,ue.toPortablePath(De));if(!await oe.existsPromise(ee)){if(!ce){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,".gitignore",yt.NAME),lt=Ot(A,A.values.get("rcFilename"),yt.NAME),Re=Ot(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${lt} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!ce.match(/^https?:/)){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await O4(ce,{configuration:A}),ke=zs(Ie);if(ne&&ne!==ke){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME),lt=Ot(A,`yarn plugin import ${ce}`,yt.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${lt} to reimport it.`)}await oe.mkdirPromise(K.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await ae(ee,we)}}for(let[Ae,ye]of pe)A.activatePlugin(Ae,ye);if(A.useWithSource("",T(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,T(ye),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=Y4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=K.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Vi(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=K.dirname(n)}return o}static async findFolderRcFile(e){let r=K.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Vi(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(K.join(a,dr.lockfile)))return a;oe.existsSync(K.join(a,dr.manifest))&&(r=a),o=K.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=Y4(),n=K.join(e,a),u=oe.existsSync(n)?Vi(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=yE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,K4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ot(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=EO(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&tot.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bx}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=yE(),v=e[0]!=="<"?K.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=V4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Ot(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return xx(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ot(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ot(this,"STDERR","red")}`);n=new G4.PassThrough,n.pipe(p),n.pipe(A),u=new G4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} -`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new vd([new l1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new pE([new hE,new dE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=I1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!ba(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Mt;u.load(a,{yamlCompatibilityMode:!0});let A=Gy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,b]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:b})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(nh(o,!0),iS(a),{userProvided:!0});return e}normalizeLocator(e){return ba(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):QE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return ba(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):QE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=$I(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!bf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:CL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,kle.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ve=rA;Ve.deleteProperty=Symbol(),Ve.telemetry=null});var Ur={};Kt(Ur,{EndStrategy:()=>Z4,ExecError:()=>Qx,PipeError:()=>P1,execvp:()=>j4,pipevp:()=>Gc});function Sd(t){return t!==null&&typeof t.fd=="number"}function J4(){}function z4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":Sd(n)&&(h[0]=n),Sd(u)&&(h[1]=u),Sd(A)&&(h[2]=A);let E=(0,X4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",J4),process.on("SIGTERM",z4)),!Sd(n)&&n!==null&&n.pipe(E.stdin),Sd(u)||E.stdout.pipe(u,{end:!1}),Sd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))Sd(v)||v.end()};return new Promise((v,b)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1)&&I(),b(C)}),E.on("close",(C,T)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:$4(C,T)}):b(new P1({fileName:t,code:C,signal:T}))})})}async function j4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,X4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",b=>{let C=Ve.create(r),T=Ot(C,t,yt.PATH);v(new zt(1,`Process ${T} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,b.message)})}`)}))}),E.on("close",(b,C)=>{let T=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?I({code:$4(b,C),stdout:T,stderr:L}):v(new Qx({fileName:t,code:b,signal:C,stdout:T,stderr:L}))})})}function $4(t,e){let r=uot.get(e);return typeof r<"u"?128+r:t??1}function Aot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var X4,Z4,P1,Qx,xd,uot,Px=Et(()=>{Pt();X4=$e(aR());D1();Yl();ql();Z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(Z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ve.create(K.cwd()),u=Ot(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{Aot(o,a,{configuration:n,report:A})});this.code=$4(o,a)}},Qx=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;uot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Tle(t){Fle=t}function S1(){return typeof eU>"u"&&(eU=Fle()),eU}var eU,Fle,tU=Et(()=>{Fle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Rle=_((Fx,nU)=>{var fot=Object.assign({},Be("fs")),rU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function b(We){return r.locateFile?r.locateFile(We,v):v+We}var C,T,L,U;I&&(E?v=Be("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=fot),U||(U=Be("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},T=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,pe=function(We){le=We},Ae;r.wasmBinary&&(Ae=r.wasmBinary);var ye=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ri("no native wasm support detected");function ae(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return _e[We>>0];case"i8":return _e[We>>0];case"i16":return lp((We>>1)*2);case"i32":return Ms((We>>2)*4);case"i64":return Ms((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return ap((We>>3)*8);default:Ri("invalid type for getValue: "+tt)}return null}var we,Pe=!1,g;function Ee(We,tt){We||Ri("Assertion failed: "+tt)}function De(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function ce(We,tt,It,nr,$){var me={string:function(es){var xi=0;if(es!=null&&es!==0){var jo=(es.length<<2)+1;xi=Un(jo),ht(es,xi,jo)}return xi},array:function(es){var xi=Un(es.length);return Re(es,xi),xi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var ft=De(We),pt=[],Rt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function ke(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,me=It+nr-1,Le=0;Le=55296&&ft<=57343){var pt=We.charCodeAt(++Le);ft=65536+((ft&1023)<<10)|pt&1023}if(ft<=127){if(It>=me)break;tt[It++]=ft}else if(ft<=2047){if(It+1>=me)break;tt[It++]=192|ft>>6,tt[It++]=128|ft&63}else if(ft<=65535){if(It+2>=me)break;tt[It++]=224|ft>>12,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}else{if(It+3>=me)break;tt[It++]=240|ft>>18,tt[It++]=128|ft>>12&63,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}}return tt[It]=0,It-$}function ht(We,tt,It){return ke(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function lt(We){var tt=H(We)+1,It=Li(tt);return It&&ke(We,_e,It,tt),It}function Re(We,tt){_e.set(We,tt)}function Qe(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var be,_e,Te,Je,He,x,w,S,y,F;function z(We){be=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=_e=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=x=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=He=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Se=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)xt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Se)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function xt(We){ie.unshift(We)}function an(We){Se.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,xr=null,Wr=null;function Vn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(xr!==null&&(clearInterval(xr),xr=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ri(We){r.onAbort&&r.onAbort(We),We+="",te(We),Pe=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Si="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRlZABPcGVyYXRpb24gbm90IHN1cHBvcnRlZABFbmNyeXB0aW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAENvbXByZXNzaW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAEVudHJ5IGhhcyBiZWVuIGRlbGV0ZWQAQ29udGFpbmluZyB6aXAgYXJjaGl2ZSB3YXMgY2xvc2VkAENsb3NpbmcgemlwIGFyY2hpdmUgZmFpbGVkAFJlbmFtaW5nIHRlbXBvcmFyeSBmaWxlIGZhaWxlZABFbnRyeSBoYXMgYmVlbiBjaGFuZ2VkAE5vIHBhc3N3b3JkIHByb3ZpZGVkAFdyb25nIHBhc3N3b3JkIHByb3ZpZGVkAFVua25vd24gZXJyb3IgJWQAQUUAKG51bGwpADogAFBLBgcAUEsGBgBQSwUGAFBLAwQAUEsBAgAAAAA/BQAAwAcAAJMIAAB4CAAAbwUAAJEFAAB6BQAAsgUAAFYIAAAbBwAA1gQAAAsHAADqBgAAnAUAAMgGAACyCAAAHggAACgHAABHBAAAoAYAAGAFAAAuBAAAPgcAAD8IAAD+BwAAjgYAAMkIAADeCAAA5gcAALIGAABVBQAAqAcAACAAQcgTCxEBAAAAAQAAAAEAAAABAAAAAQBB7BMLCQEAAAABAAAAAgBBmBQLAQEAQbgUCwEBAEHSFAukLDomOyZlJmYmYyZgJiIg2CXLJdklQiZAJmomayY8JrolxCWVITwgtgCnAKwlqCGRIZMhkiGQIR8ilCGyJbwlIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AAIjxwD8AOkA4gDkAOAA5QDnAOoA6wDoAO8A7gDsAMQAxQDJAOYAxgD0APYA8gD7APkA/wDWANwAogCjAKUApyCSAeEA7QDzAPoA8QDRAKoAugC/ABAjrAC9ALwAoQCrALsAkSWSJZMlAiUkJWElYiVWJVUlYyVRJVclXSVcJVslECUUJTQlLCUcJQAlPCVeJV8lWiVUJWklZiVgJVAlbCVnJWglZCVlJVklWCVSJVMlayVqJRglDCWIJYQljCWQJYAlsQPfAJMDwAOjA8MDtQDEA6YDmAOpA7QDHiLGA7UDKSJhIrEAZSJkIiAjISP3AEgisAAZIrcAGiJ/ILIAoCWgAAAAAACWMAd3LGEO7rpRCZkZxG0Hj/RqcDWlY+mjlWSeMojbDqS43Hke6dXgiNnSlytMtgm9fLF+By2455Edv5BkELcd8iCwakhxufPeQb6EfdTaGuvk3W1RtdT0x4XTg1aYbBPAqGtkevli/ezJZYpPXAEU2WwGY2M9D/r1DQiNyCBuO14QaUzkQWDVcnFnotHkAzxH1ARL/YUN0mu1CqX6qLU1bJiyQtbJu9tA+bys42zYMnVc30XPDdbcWT3Rq6ww2SY6AN5RgFHXyBZh0L+19LQhI8SzVpmVus8Ppb24nrgCKAiIBV+y2QzGJOkLsYd8by8RTGhYqx1hwT0tZraQQdx2BnHbAbwg0pgqENXviYWxcR+1tgal5L+fM9S46KLJB3g0+QAPjqgJlhiYDuG7DWp/LT1tCJdsZJEBXGPm9FFra2JhbBzYMGWFTgBi8u2VBmx7pQEbwfQIglfED/XG2bBlUOm3Euq4vot8iLn83x3dYkkt2hXzfNOMZUzU+1hhsk3OUbU6dAC8o+Iwu9RBpd9K15XYPW3E0aT79NbTaulpQ/zZbjRGiGet0Lhg2nMtBETlHQMzX0wKqsl8Dd08cQVQqkECJxAQC76GIAzJJbVoV7OFbyAJ1Ga5n+Rhzg753l6YydkpIpjQsLSo18cXPbNZgQ20LjtcvbetbLrAIIO47bazv5oM4rYDmtKxdDlH1eqvd9KdFSbbBIMW3HMSC2PjhDtklD5qbQ2oWmp6C88O5J3/CZMnrgAKsZ4HfUSTD/DSowiHaPIBHv7CBmldV2L3y2dlgHE2bBnnBmtudhvU/uAr04laetoQzErdZ2/fufn5776OQ763F9WOsGDoo9bWfpPRocTC2DhS8t9P8We70WdXvKbdBrU/SzaySNorDdhMGwqv9koDNmB6BEHD72DfVd9nqO+ObjF5vmlGjLNhyxqDZryg0m8lNuJoUpV3DMwDRwu7uRYCIi8mBVW+O7rFKAu9spJatCsEarNcp//XwjHP0LWLntksHa7eW7DCZJsm8mPsnKNqdQqTbQKpBgmcPzYO64VnB3ITVwAFgkq/lRR6uOKuK7F7OBu2DJuO0pINvtXlt+/cfCHf2wvU0tOGQuLU8fiz3Whug9ofzRa+gVsmufbhd7Bvd0e3GOZaCIhwag//yjsGZlwLARH/nmWPaa5i+NP/a2FFz2wWeOIKoO7SDddUgwROwrMDOWEmZ6f3FmDQTUdpSdt3bj5KatGu3FrW2WYL30DwO9g3U668qcWeu95/z7JH6f+1MBzyvb2KwrrKMJOzU6ajtCQFNtC6kwbXzSlX3lS/Z9kjLnpms7hKYcQCG2hdlCtvKje+C7ShjgzDG98FWo3vAi0AAAAARjtnZYx2zsrKTamvWevtTh/QiivVnSOEk6ZE4bLW25307bz4PqAVV3ibcjLrPTbTrQZRtmdL+BkhcJ98JavG4GOQoYWp3Qgq7+ZvT3xAK646e0zL8DblZLYNggGXfR190UZ6GBsL07ddMLTSzpbwM4itl1ZC4D75BNtZnAtQ/BpNa5t/hyYy0MEdVbVSuxFUFIB2Md7N356Y9rj7uYYnh/+9QOI18OlNc8uOKOBtysmmVq2sbBsEAyogY2Yu+zr6aMBdn6KN9DDktpNVdxDXtDErsNH7Zhl+vV1+G5wt4WfaFoYCEFsvrVZgSMjFxgwpg/1rTEmwwuMPi6WGFqD4NVCbn1Ca1jb/3O1Rmk9LFXsJcHIewz3bsYUGvNSkdiOo4k1EzSgA7WJuO4oH/Z3O5rumqYNx6wAsN9BnSTMLPtV1MFmwv33wH/lGl3pq4NObLNu0/uaWHVGgrXo0gd3lSMfmgi0NqyuCS5BM59g2CAaeDW9jVEDGzBJ7oakd8AQvW8tjSpGGyuXXva2ARBvpYQIgjgTIbSerjlZAzq8m37LpHbjXI1AReGVrdh32zTL8sPZVmXq7/DY8gJtTOFvCz35gpaq0LQwF8hZrYGGwL4Eni0jk7cbhS6v9hi6KjRlSzLZ+Nwb715hAwLD902b0HJVdk3lfEDrWGStdsyxA8Wtqe5YOoDY/oeYNWMR1qxwlM5B7QPnd0u+/5rWKnpYq9titTZMS4OQ8VNuDWcd9x7iBRqDdSwsJcg0wbhcJ6zeLT9BQ7oWd+UHDpp4kUADaxRY7vaDcdhQPmk1zars97Bb9BotzN0si3HFwRbni1gFYpO1mPW6gz5Iom6j3JxANcWErahSrZsO77V2k3n774D84wIda8o0u9bS2SZCVxtbs0/2xiRmwGCZfi39DzC07oooWXMdAW/VoBmCSDQK7y5FEgKz0js0FW8j2Yj5bUCbfHWtButcm6BWRHY9wsG0QDPZWd2k8G97GeiC5o+mG/UKvvZonZfAziCPLVO064AlefNtuO7aWx5TwraDxYwvkECUwg3XvfSraqUZNv4g20sPODbWmBEAcCUJ7e2zR3T+Nl+ZY6F2r8UcbkJYiH0vPvllwqNuTPQF01QZmEUagIvAAm0WVytbsOozti1+tnRQj66ZzRiHr2uln0L2M9Hb5bbJNngh4ADenPjtQwjGw9UR3i5IhvcY7jvv9XOtoWxgKLmB/b+Qt1sCiFrGlg2Yu2cVdSbwPEOATSSuHdtqNw5ectqTyVvsNXRDAajgUGzOkUiBUwZht/W7eVpoLTfDe6gvLuY/BhhAgh713RabN6Dng9o9cKrsm82yAQZb/JgV3uR1iEnNQy701a6zYAAAAAFiA4tfxBrR0qYZWo+INaOm6jYo+EwvcnUuLPkqFHaEJ3Z1D3nQbFX0sm/eqZxDJ4D+QKzeWFn2UzpafQwo7QhNSu6DE+z32Z6O9FLDoNir6sLbILRkwno5BsHxZjybjGtemAc1+IFduJqC1uW0ri/M1q2kknC0/h8St3VAUdoQmTPZm8eVwMFK98NKF9nvsz677DhgHfVi7X/26bJFrJS/J68f4YG2RWzjtc4xzZk3GK+avEYJg+bLa4BtlHk3GNUbNJOLvS3JBt8uQlvxArtykwEwLDUYaqFXG+H+bUGc8w9CF62pW00gy1jGfeV0P1SHd7QKIW7uh0NtZdijsCE1wbOqa2eq8OYFqXu7K4WCkkmGCczvn1NBjZzYHrfGpRPVxS5Nc9x0wBHf/50/8wa0XfCN6vvp12eZ6lw4i10peeleoidPR/iqLURz9wNoit5hawGAx3JbDaVx0FKfK61f/SgmAVsxfIw5MvfRFx4O+HUdhabTBN8rsQdUdPJqMa2QabrzNnDgflRzayN6X5IKGFwZVL5FQ9ncRsiG5hy1i4QfPtUiBmRYQAXvBW4pFiwMKp1yqjPH/8gwTKDahznhuISyvx6d6DJ8nmNvUrKaRjCxERiWqEuV9KvAys7xvces8jaZCutsFGjo50lGxB5gJMeVPoLez7Pg3UTtQ2BGaCFjzTaHepe75Xkc5stV5c+pVm6RD080HG1Mv0NXFsJONRVJEJMME53xD5jA3yNh6b0g6rcbObA6eTo7ZWuNTiQJjsV6r5ef982UFKrjuO2Dgbtm3SeiPFBFobcPf/vKAh34QVy74RvR2eKQjPfOaaWVzeL7M9S4dlHXMykSulbwcLndrtaghyO0owx+mo/1V/iMfglelSSEPJav2wbM0tZkz1mIwtYDBaDViFiO+XFx7Pr6L0rjoKIo4Cv9OldevFhU1eL+TY9vnE4EMrJi/RvQYXZFdngsyBR7p5cuIdqaTCJRxOo7C0mIOIAUphR5PcQX8mNiDqjuAA0jseDQZ1yC0+wCJMq2j0bJPdJo5cT7CuZPpaz/FSjO/J539KbjepalaCQwvDKpUr+59HyTQN0ekMuDuImRDtqKGlHIPW8Qqj7kTgwnvsNuJDWeQAjMtyILR+mEEh1k5hGWO9xL6za+SGBoGFE65XpSsbhUfkiRNn3Dz5BkmULyZxIdsQp3xNMJ/Jp1EKYXFxMtSjk/1GNbPF89/SUFsJ8mju+lfPPix394vGFmIjEDZalsLUlQRU9K2xvpU4GWi1AKyZnnf4j75PTWXf2uWz/+JQYR0twvc9FXcdXIDfy3y4ajjZH7ru+ScPBJiyp9K4ihIAWkWAlnp9NXwb6J2qO9AoQAAAADhtlLvg2vUBWLdhuoG16gL52H65IW8fA5kCi7hDK5RF+0YA/iPxYUSbnPX/Qp5+Rzrz6vziRItGWikf/YYXKMu+erxwZs3dyt6gSXEHosLJf89Wcqd4N8gfFaNzxTy8jn1RKDWl5kmPHYvdNMSJVoy85MI3ZFOjjdw+NzYMLhGXdEOFLKz05JYUmXAtzZv7lbX2by5tQQ6U1SyaLw8FhdK3aBFpb99w09ey5GgOsG/Qdt37a65qmtEWBw5qyjk5XPJUrecq48xdko5Y5kuM014z4Ufl61YmX1M7suSJEq0ZMX85ounIWBhRpcyjiKdHG/DK06AofbIakBAmoVgcI26gcbfVeMbWb8CrQtQZqclsYcRd17lzPG0BHqjW2ze3K2NaI5C77UIqA4DWkdqCXSmi78mSelioKMI1PJMeCwulJmafHv7R/qRGvGofn77hp+fTdRw/ZBSmhwmAHV0gn+DlTQtbPfpq4YWX/lpclXXiJPjhWfxPgONEIhRYlDIy+exfpkI06Mf4jIVTQ1WH2Pst6kxA9V0t+k0wuUGXGaa8L3QyB/fDU71PrscGlqxMvu7B2AU2drm/jhstBFIlGjJqSI6Jsv/vMwqSe4jTkPAwq/1ki3NKBTHLJ5GKEQ6Od6ljGsxx1Ht2ybnvzRC7ZHVo1vDOsGGRdAgMBc/geZrrmBQOUECjb+r4zvtRIcxw6Vmh5FKBFoXoOXsRU+NSDq5bP5oVg4j7rzvlbxTi5+SsmopwF0I9Ea36UIUWJm6yIB4DJpvGtEchftnTmqfbWCLftsyZBwGtI79sOZhlRSZl3Siy3gWf02S98kffZPDMZxydWNzEKjlmfEet3axXi3zUOh/HDI1+fbTg6sZt4mF+FY/1xc04lH91VQDEr3wfORcRi4LPpuo4d8t+g67J9TvWpGGADhMAOrZ+lIFqQKO3Ui03DIqaVrYy98IN6/VJtZOY3Q5LL7y080IoDylrN/KRBqNJSbHC8/HcVkgo3t3wULNJS4gEKPEwabxK+GW5hQAILT7Yv0yEYNLYP7nQU4fBvcc8GQqmhqFnMj17Ti3AwyO5exuU2MGj+Ux6evvHwgKWU3naITLDYkymeL5ykU6GHwX1XqhkT+bF8PQ/x3tMR6rv958djk0ncBr2/VkFC0U0kbCdg/AKJe5ksfzs7wmEgXuyXDYaCORbjrM0S6gSTCY8qZSRXRMs/Mmo9f5CEI2T1qtVJLcR7UkjqjdgPFePDajsV7rJVu/XXe021dZVTrhC7pYPI1QuYrfv8lyA2coxFGIShnXYquvhY3PpatsLhP5g0zOf2mteC2GxdxScCRqAJ9Gt4Z1pwHUmsML+nsivaiUQGAufqHWfJEAAAAAQ8umh8eQPNSEW5pTzycIc4zsrvQItzSnS3ySIJ5PEObdhLZhWd8sMhoUirVRaBiVEqO+Epb4JEHVM4LGfZlRFz5S95C6CW3D+cLLRLK+WWTxdf/jdS5lsDblwzfj1kHxoB3ndiRGfSVnjduiLPFJgm867wXrYXVWqKrT0foyoy65+QWpPaKf+n5pOX01Fatddt4N2vKFl4mxTjEOZH2zyCe2FU+j7Y8c4CYpm6tau7vokR08bMqHby8BIeiHq/I5xGBUvkA7zu0D8GhqSIz6SgtHXM2PHMaezNdgGRnk4t9aL0RY3nTeC52/eIzWw+qslQhMKxFT1nhSmHD/9GVGXbeu4Noz9XqJcD7cDjtCTi54ieip/NJy+r8Z1H1qKla7KeHwPK26am/ucczopQ1eyObG+E9inWIcIVbEm4n8F0rKN7HNTmwrng2njRlG2x85BRC5voFLI+3CgIVqF7MHrFR4oSvQIzt4k+id/9iUD9+bX6lYHwQzC1zPlYwOV+VzTZxD9MnH2aeKDH8gwXDtAIK7S4cG4NHURSt3U5AY9ZXT01MSV4jJQRRDb8ZfP/3mHPRbYZivwTLbZGe1c860ZDAFEuO0Xoiw95UuN7zpvBf/IhqQe3mAwziyJkTtgaSCrkoCBSoRmFZp2j7RIqas8WFtCnblNpAlpv02oujLjLqrACo9L1uwbmyQFukn7ITJZCciTuB8uB2jtx6adoScXDVPOtuxFKCI8t8GD7mjlC/6aDKofjOo+z34DnyVUt2t1pl7KlLC4XkRCUf+WnXV3hm+c1md5ekK3i5PjQsdzUtI1mvMzI3xn49GVxjEOsU4h/FjvwOq+exAYV9rEvkvlFEyiRPVaRNAlqK1x93eJ+eeFYFgGk4bM1mFvbSMtj9yz32Z9UsmA6YI7aUhQ5E3AQBakYaEAQvVx8qtUm9gfoMsq9gEqPBCV+s75NCgR3bw44zQd2fXSiQkHOyj8S9uZbLkyOI2v1KxdXT0Nj4IZhZ9w8CR+ZhawrpT/EUcrsrnX2VsYNs+9jOY9VC004nClJBCZBMUGf5AV9JYx4Lh2gHBKnyGRXHm1Qa6QFJNxtJyDg109YpW7qbJnUghYTeb8CL8PXemp6ck5WwBo64Qk4Pt2zUEaYCvVypLCdD/eIsWvLMtkTjot8J7IxFFMF+DZXOUJeL3z7+xtAQZNuacacmlV89OIQxVHWLH85opu2G6anDHPe4rXW6t4PvpeNN5LzsY36i/Q0X7/IjjfLf0cVz0P9fbcGRNiDOv6w+bBTje2M6eWVyVBAofXqKNVCIwrRfpliqTsgx50Hmq/gVKKDhGgY6/wtoU7IERsmvKbSBLiaaGzA39HJ9ONroYFAQAAJ0HAAAsCQAAhgUAAEgFAACnBQAAAAQAADIFAAC8BQAALAkAQYDBAAv3CQwACACMAAgATAAIAMwACAAsAAgArAAIAGwACADsAAgAHAAIAJwACABcAAgA3AAIADwACAC8AAgAfAAIAPwACAACAAgAggAIAEIACADCAAgAIgAIAKIACABiAAgA4gAIABIACACSAAgAUgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Si)||(Si=b(Si));function Ls(We){try{if(We==Si&&Ae)return new Uint8Array(Ae);var tt=ii(We);if(tt)return tt;if(T)return T(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ri(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var me=Le.toString();throw te("failed to compile wasm module: "+me),(me.includes("imported Memory")||me.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Oa};function tt($,me){var Le=$.exports;r.asm=Le,we=r.asm.g,z(we.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Vn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Si,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function ap(We){return F.getFloat64(We,!0)}function lp(We){return F.getInt16(We,!0)}function Ms(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Os(We,tt){var It=new Date(Ms((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Os.GMTString||(Os.GMTString=lt("GMT")),Dn((tt+40>>2)*4,Os.GMTString),tt}function ml(We,tt){return Os(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return we.grow(We-be.byteLength+65535>>>16),z(we.buffer),1}catch{}}function Kn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var me=Math.min(It,Qe(Math.max(We,$),65536)),Le=ao(me);if(Le)return!0}return!1}function Mn(We){pe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function On(){if(On.called)return;On.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),me=Math.max(nr,$);Dn((ds()>>2)*4,me*60),Dn((gs()>>2)*4,Number(nr!=$));function Le(Zr){var qi=Zr.toTimeString().match(/\(([A-Za-z ]+)\)$/);return qi?qi[1]:"GMT"}var ft=Le(tt),pt=Le(It),Rt=lt(ft),er=lt(pt);$>2)*4,Rt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Rt))}function _i(We){On();var tt=Date.UTC(Ms((We+20>>2)*4)+1900,Ms((We+16>>2)*4),Ms((We+12>>2)*4),Ms((We+8>>2)*4),Ms((We+4>>2)*4),Ms((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,me,Le,ft,pt,Rt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),ft=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),Rt=tt.indexOf(We.charAt(er++)),nr=Le<<2|ft>>4,$=(ft&15)<<4|pt>>2,me=(pt&3)<<6|Rt,It=It+String.fromCharCode(nr),pt!==64&&(It=It+String.fromCharCode($)),Rt!==64&&(It=It+String.fromCharCode(me));while(er0||(dt(),mr>0))return;function tt(){Pn||(Pn=!0,r.calledRun=!0,!Pe&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Fx=="object"&&typeof nU=="object"?nU.exports=rU:typeof define=="function"&&define.amd?define([],function(){return rU}):typeof Fx=="object"&&(Fx.createModule=rU)});var Lf,Nle,Lle,Mle=Et(()=>{Lf=["number","number"],Nle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Nle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Nle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Lf,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Lf,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Lf,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Lf,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Lf,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Lf,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Lf,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Lf,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Lf,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function iU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==K.sep);){if(t[r-1]===K.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==K.sep?null:t.slice(0,o)}var Jl,Ole=Et(()=>{Pt();Pt();nA();Jl=class extends _p{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>iU(A,".zip"):A=>{for(let p of r){let h=iU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function pot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ule.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Tx(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,sU,Ule,oU,_le,Rx,zi,aU=Et(()=>{Pt();Pt();Pt();Pt();Pt();Pt();ta=Be("fs"),sU=Be("stream"),Ule=Be("util"),oU=$e(Be("zlib"));tU();_le="mixed";Rx=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Ou{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:_le,r??=Tx(),typeof r=="string"){let{baseFs:A=new Rn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=S1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Tx():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(o,o+r);return Buffer.from(n)}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return K.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return SD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new sU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new sU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=K.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),b=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=b,T=b,L=b,U=new Date(C),J=new Date(T),te=new Date(L),le=new Date(b),pe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,Ae=pe===ta.constants.S_IFDIR?493:420,ye=pe|this.getUnixMode(n,Ae)&511,ae=this.libzip.struct.statCrc(u),we=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:le,atimeMs:C,birthtimeMs:T,ctimeMs:L,mtimeMs:b,mode:ye,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(we):we}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,b=this.stats.mtimeMs,C=this.stats.mtimeMs,T=new Date(I),L=new Date(v),U=new Date(b),J=new Date(C),te=ta.constants.S_IFDIR|493,le=0,pe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:T,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:b,mtimeMs:C,mode:te,crc:le});return a.bigint===!0?Ea.convertToBigIntStats(pe):pe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(K.dirname(r)).add(K.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(K.dirname(r)).add(K.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(K.dirname(r))?.delete(K.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=K.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,K.resolve(K.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,K.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=K.resolve(p,K.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=K.resolve(K.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=K.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),b=Buffer.from(v);if(p===0)return this.fileSources.set(r,b),b;if(o.asyncDecompress)return new Promise((C,T)=>{oU.default.inflateRaw(b,(L,U)=>{L?T(L):(this.fileSources.set(r,U),C(U))})});{let C=oU.default.inflateRawSync(b);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,pot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,K.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",K.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=K.join(A.path,A.name),h=this.listings.get(K.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",K.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(K.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(K.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",K.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=K.resolve(Bt.root,r);return ry(this,n,o,a)}unwatchFile(r,o){let a=K.resolve(Bt.root,r);return Mg(this,a,o)}}});function jle(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Rn(p),E=new _p({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Ww(Hle.default,new Hp(E)),a}var Hle,qle=Et(()=>{Pt();Hle=$e(Be("fs"));aU()});var Gle=Et(()=>{Ole();aU();qle()});var x1={};Kt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>_le,LibzipError:()=>Rx,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>iU,getLibzipPromise:()=>got,getLibzipSync:()=>hot,makeEmptyArchive:()=>Tx,mountMemoryDrive:()=>jle});function hot(){return S1()}async function got(){return S1()}var Yle,nA=Et(()=>{tU();Yle=$e(Rle());Mle();Gle();Tle(()=>{let t=(0,Yle.default)();return Lle(t)})});var FE,Wle=Et(()=>{Pt();qt();b1();FE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};FE.usage={description:"run a command using yarn's portable shell",details:` - This command will run a command using Yarn's portable shell. - - Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. - - Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. - - Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. - - For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. - `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Vle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Mx={};Kt(Mx,{fastGlobOptions:()=>zle,isBraceExpansion:()=>lU,isGlobPattern:()=>dot,match:()=>mot,micromatchOptions:()=>Lx});function dot(t){if(!Nx.default.scan(t,Lx).isGlob)return!1;try{Nx.default.parse(t,Lx)}catch{return!1}return!0}function mot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...zle,cwd:ue.fromPortablePath(e),fs:TD(Jle.default,new Hp(r))})}function lU(t){return Nx.default.scan(t,Lx).isBrace}var Kle,Jle,Nx,Lx,zle,Xle=Et(()=>{Pt();Kle=$e(RS()),Jle=$e(Be("fs")),Nx=$e(Zo()),Lx={strictBrackets:!0},zle={onlyDirectories:!1,onlyFiles:!1}});function cU(){}function uU(){for(let t of bd)t.kill()}function tce(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,$le.default)(t,e,{...o,stdio:[n,u,A]});return bd.add(p),bd.size===1&&(process.on("SIGINT",cU),process.on("SIGTERM",uU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} -`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} -`),h(128);break;default:a[2].write(`uncaught error: ${E.message} -`),h(1);break}}),p.on("close",E=>{bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),h(E!==null?E:129)})})}}}function rce(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ox(t,e){return RE.start(t,e)}function Zle(t,e=null){let r=new iA.PassThrough,o=new ece.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` -`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function nce(t,{prefix:e}){return{stdout:Zle(r=>t.stdout.write(`${r} -`),t.stdout.isTTY?e:null),stderr:Zle(r=>t.stderr.write(`${r} -`),t.stderr.isTTY?e:null)}}var $le,iA,ece,bd,zl,AU,RE,fU=Et(()=>{$le=$e(aR()),iA=Be("stream"),ece=Be("string_decoder"),bd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},AU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},RE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new RE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new RE(this,e),a=new AU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Kt(T1,{EntryCommand:()=>FE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Mx});function ice(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function _x(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function Eot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await Hx(t,e,_x(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function sce(t,e,r){let o=t.map(async n=>{let u=await kd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Ux(t){return t.match(/[^ \r\n\t]+/g)||[]}async function Ace(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Ux(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await kd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Ux(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?k1({type:"variable",name:o.join(" ")},e,r):k1({type:"number",value:a},e,r)}else return Cot[t.type](await k1(t.left,e,r),await k1(t.right,e,r))}async function kd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let b=JSON.stringify({type:E,fd:I}),C=o.get(b);typeof C>"u"&&o.set(b,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await kd(E.args,e,r);for(let b of v)h(E.subtype,E.fd,b)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let b=await Eot(v.shell,e,r);if(v.quoted)u(b);else{let C=Ux(b);for(let T=0;T"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let b=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let C=lU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of b.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function Q1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return tce(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return rce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=b}})}function wot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,_x(r,{stdin:a}));return{stdin:a,promise:n}}}function Iot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,r);return{stdin:a,promise:n}}}function oce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,Q1([...e,"__ysh_run_procedure",a],r,o)}}async function ace(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await kd(o.args,e,r),h=await sce(o.envs,e,r);A=o.envs.length?Q1(p,e,_x(u,{environment:h})):Q1(p,e,u)}break;case"subshell":{let p=await kd(o.args,e,r),h=wot(o.subshell,e,u);A=oce(h,p,e,u)}break;case"group":{let p=await kd(o.args,e,r),h=Iot(o.group,e,u);A=oce(h,p,e,u)}break;case"envs":{let p=await sce(o.envs,e,r);u.environment={...u.environment,...p},A=Q1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ox(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Bot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return lce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=nce(r,{prefix:p});return r.backgroundJobs.push(ace(t,e,_x(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} -`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(cy(t))}' has ended -`)})),0}return await ace(t,e,r)}async function vot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Bot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} -`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function Hx(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await vot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function fce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>F1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>F1(e));case"arithmetic":return pU(t.arithmetic);case"shell":return hU(t.shell);default:return!1}}function F1(t){switch(t.type){case"redirection":return t.args.some(e=>F1(e));case"argument":return t.segments.some(e=>fce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function pU(t){switch(t.type){case"variable":return fce(t);case"number":return!1;default:return pU(t.left)||pU(t.right)}}function hU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=hU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>F1(n)))||r.args.some(a=>F1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Rn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Mx}={}){let I={};for(let[C,T]of Object.entries(n))typeof T<"u"&&(I[C]=T);let v=new Map(yot);for(let[C,T]of Object.entries(o))v.set(C,T);u===null&&(u=new ll.PassThrough,u.end());let b=LD(t,E);if(!hU(b)&&b.length>0&&e.length>0){let{command:C}=b[b.length-1];for(;C.then;)C=C.then.line;let T=C.chain;for(;T.then;)T=T.then.chain;T.type==="command"&&(T.args=T.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await Hx(b,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var lce,cce,ll,uce,yot,Cot,b1=Et(()=>{Pt();Nl();lce=$e(vN()),cce=Be("os"),ll=Be("stream"),uce=Be("timers/promises");Wle();Vle();Xle();fU();fU();yot=new Map([["cd",async([t=(0,cce.homedir)(),...e],r,o)=>{let a=K.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} -`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} -`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,uce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ox(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:b}=JSON.parse(I),C=J=>{switch(b){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},T=J=>{switch(b){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(K.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} -`),te.end()}),te});break;case"<&":C(()=>ice(Number(t[J]),1,r));break;case">":case">>":{let te=K.resolve(r.cwd,ue.toPortablePath(t[J]));T(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(le,pe,Ae){setImmediate(Ae)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":T(ice(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=b=>{if(b===u.length)I.end();else{let C=u[b]();C.pipe(I,{end:!1}),C.on("end",()=>{v(b+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ox(Q1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);Cot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var jx=_((n4t,pce)=>{function Dot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var hce=fd(),Pot=jx(),Sot=Hl(),xot=fE(),bot=1/0,gce=hce?hce.prototype:void 0,dce=gce?gce.toString:void 0;function mce(t){if(typeof t=="string")return t;if(Sot(t))return Pot(t,mce)+"";if(xot(t))return dce?dce.call(t):"";var e=t+"";return e=="0"&&1/t==-bot?"-0":e}yce.exports=mce});var R1=_((s4t,Cce)=>{var kot=Ece();function Qot(t){return t==null?"":kot(t)}Cce.exports=Qot});var gU=_((o4t,wce)=>{function Fot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var Tot=gU();function Rot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:Tot(t,e,r)}Ice.exports=Rot});var dU=_((l4t,vce)=>{var Not="\\ud800-\\udfff",Lot="\\u0300-\\u036f",Mot="\\ufe20-\\ufe2f",Oot="\\u20d0-\\u20ff",Uot=Lot+Mot+Oot,_ot="\\ufe0e\\ufe0f",Hot="\\u200d",jot=RegExp("["+Hot+Not+Uot+_ot+"]");function qot(t){return jot.test(t)}vce.exports=qot});var Pce=_((c4t,Dce)=>{function Got(t){return t.split("")}Dce.exports=Got});var Rce=_((u4t,Tce)=>{var Sce="\\ud800-\\udfff",Yot="\\u0300-\\u036f",Wot="\\ufe20-\\ufe2f",Vot="\\u20d0-\\u20ff",Kot=Yot+Wot+Vot,Jot="\\ufe0e\\ufe0f",zot="["+Sce+"]",mU="["+Kot+"]",yU="\\ud83c[\\udffb-\\udfff]",Xot="(?:"+mU+"|"+yU+")",xce="[^"+Sce+"]",bce="(?:\\ud83c[\\udde6-\\uddff]){2}",kce="[\\ud800-\\udbff][\\udc00-\\udfff]",Zot="\\u200d",Qce=Xot+"?",Fce="["+Jot+"]?",$ot="(?:"+Zot+"(?:"+[xce,bce,kce].join("|")+")"+Fce+Qce+")*",eat=Fce+Qce+$ot,tat="(?:"+[xce+mU+"?",mU,bce,kce,zot].join("|")+")",rat=RegExp(yU+"(?="+yU+")|"+tat+eat,"g");function nat(t){return t.match(rat)||[]}Tce.exports=nat});var Lce=_((A4t,Nce)=>{var iat=Pce(),sat=dU(),oat=Rce();function aat(t){return sat(t)?oat(t):iat(t)}Nce.exports=aat});var Oce=_((f4t,Mce)=>{var lat=Bce(),cat=dU(),uat=Lce(),Aat=R1();function fat(t){return function(e){e=Aat(e);var r=cat(e)?uat(e):void 0,o=r?r[0]:e.charAt(0),a=r?lat(r,1).join(""):e.slice(1);return o[t]()+a}}Mce.exports=fat});var _ce=_((p4t,Uce)=>{var pat=Oce(),hat=pat("toUpperCase");Uce.exports=hat});var EU=_((h4t,Hce)=>{var gat=R1(),dat=_ce();function mat(t){return dat(gat(t).toLowerCase())}Hce.exports=mat});var jce=_((g4t,qx)=>{function yat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,b=13,C=14,T=15,L=16,U=17,J=0,te=1,le=2,pe=3,Ae=4;function ye(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function ae(g,Ee){Ee===void 0&&(Ee=0);var De=g.charCodeAt(Ee);if(55296<=De&&De<=56319&&Ee=1){var ce=g.charCodeAt(Ee-1),ne=De;return 55296<=ce&&ce<=56319?(ce-55296)*1024+(ne-56320)+65536:ne}return De}function we(g,Ee,De){var ce=[g].concat(Ee).concat([De]),ne=ce[ce.length-2],ee=De,Ie=ce.lastIndexOf(C);if(Ie>1&&ce.slice(1,Ie).every(function(H){return H==o})&&[o,b,U].indexOf(g)==-1)return le;var ke=ce.lastIndexOf(a);if(ke>0&&ce.slice(1,ke).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return ce.filter(function(H){return H==a}).length%2==1?pe:Ae;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?le:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==T)return J;if(ee==n)return J;if(ne==v)return J;var ht=ce.indexOf(o)!=-1?ce.lastIndexOf(o)-1:ce.length-2;return[b,U].indexOf(ce[ht])!=-1&&ce.slice(ht+1,-1).every(function(H){return H==o})&&ee==C||ne==T&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?le:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var De=Pe(ae(g,Ee)),ce=[],ne=Ee+1;ne{var Eat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,Gx;function Cat(){if(Gx)return Gx;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return Gx=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=jce(),e=new t;return Gx=r=>e.splitGraphemes(r)}}qce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(Eat)||[t,t,void 0],p=Cat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var tn,N1=Et(()=>{tn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.0.2"});function zce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Ot(e,a,"grey"):a}function CU(t,{configuration:e,json:r}){let o=zce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Xy(e,o,n)}async function NE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,Yx,wat,Yce,Wce,uh,Jce,Vce,Iat,Bat,Wx,vat,Nt,L1=Et(()=>{Kce=$e(Gce()),Yx=$e(ed());pP();Yl();N1();ql();wat="\xB7",Yce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Wce=80,uh=Yx.default.GITHUB_ACTIONS?{start:t=>`::group::${t} -`,end:t=>`::endgroup:: -`}:Yx.default.TRAVIS?{start:t=>`travis_fold:start:${t} -`,end:t=>`travis_fold:end:${t} -`}:Yx.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} -`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Jce=uh!==null,Vce=new Date,Iat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Bat=t=>t,Wx=Bat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),vat=Iat&&Object.keys(Wx).find(t=>{let e=Wx[t];return!(e.date&&(e.date[0]!==Vce.getDate()||e.date[1]!==Vce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(zI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||vat;if(!Object.hasOwn(Wx,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Wx[v];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,md(r.configuration,`Yarn ${tn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,uh!==null&&!this.json&&this.includeInfos&&this.stdout.write(uh.start(r))},reportFooter:A=>{if(this.indent-=1,uh!==null&&!this.json&&this.includeInfos){this.stdout.write(uh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ot(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!uh)return;let a=`${uh.start(r)}${o}${uh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ot(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} -`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} -`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Wce&&(this.progressFrame=(this.progressFrame+1)%Yce.length,this.progressTime=r);let o=Yce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ot(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} -`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Wce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?zce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ot(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?CU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${wat} `}}});var un={};Kt(un,{PackageManager:()=>$ce,detectPackageManager:()=>eue,executePackageAccessibleBinary:()=>sue,executePackageScript:()=>Vx,executePackageShellcode:()=>wU,executeWorkspaceAccessibleBinary:()=>Qat,executeWorkspaceLifecycleScript:()=>nue,executeWorkspaceScript:()=>rue,getPackageAccessibleBinaries:()=>Kx,getWorkspaceAccessibleBinaries:()=>iue,hasPackageScript:()=>xat,hasWorkspaceScript:()=>IU,isNodeScript:()=>BU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>kat,prepareExternalProject:()=>Sat});async function Ah(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(K.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(K.join(t,e),`#!/bin/sh -exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" -`,{mode:493})}async function eue(t){let e=await Mt.tryFind(t);if(e?.packageManager){let o=_S(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(K.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(K.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(K.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([Ah(r,"node",process.execPath),...tn!==null?[Ah(r,"run",process.execPath,[p,"run"]),Ah(r,"yarn",process.execPath,[p]),Ah(r,"yarnpkg",process.execPath,[p]),Ah(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),T={project:t,report:new Nt({stdout:new fh.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(b,T));if(!L)throw new Error(`The package ${jr(t.configuration,b)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(b,T)}u.npm_package_json=ue.fromPortablePath(K.join(v,dr.manifest))}let h=tn!==null?`yarn/${tn}`:`yarn/${vf("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await Ah(r,E,I,v)),u}async function Sat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Pat(async()=>{await oe.mktempPromise(async u=>{let A=K.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?t1(n):n,v=I?xa(I):"an external project";h.write(`Packing ${v} from sources -`);let b=await eue(t),C;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} - -`),C=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn - -`),C="Yarn");let T=C==="Yarn"&&!b?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:T}),te=new Map([["Yarn Classic",async()=>{let pe=a!==null?["workspace",a]:[],Ae=K.join(t,dr.manifest),ye=await oe.readFilePromise(Ae),ae=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ae.code!==0)return ae.code;await oe.writeFilePromise(Ae,ye),await oe.appendFilePromise(K.join(t,".npmignore"),`/.yarn -`),h.write(` -`),delete U.NODE_ENV;let we=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(we.code!==0)return we.code;h.write(` -`);let Pe=await Gc("yarn",[...pe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Pe.code!==0?Pe.code:0}],["Yarn",async()=>{let pe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let Ae=K.join(t,dr.lockfile);await oe.existsPromise(Ae)||await oe.writeFilePromise(Ae,"");let ye=await Gc("yarn",[...pe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return ye.code!==0?ye.code:0}],["npm",async()=>{if(a!==null){let Ee=new fh.PassThrough,De=Vy(Ee);Ee.pipe(h,{end:!1});let ce=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),ce.code!==0)return h.end(),E.end(),ce.code;let ne=(await De).toString().trim();if(!bf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),ke=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${qn(r,Ie)}; please upgrade to ${qn(r,ke)} (npm has been detected as the primary package manager for ${Ot(r,t,yt.PATH)})`)}}let pe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let Ae=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Ae.code!==0)return Ae.code;let ye=new fh.PassThrough,ae=Vy(ye);ye.pipe(h);let we=await Gc("npm",["pack","--silent",...pe],{cwd:t,env:U,stdin:p,stdout:ye,stderr:E});if(we.code!==0)return we.code;let Pe=(await ae).toString().trim().replace(/^.*\n/s,""),g=K.resolve(t,ue.toPortablePath(Pe));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${Ot(r,A,yt.PATH)})`)})})})}async function xat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return IU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new fh.PassThrough,configuration:u})},h=A.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Mt.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Vx(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await tue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let b=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(T=>T.wrapScriptExecution,b,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function wU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await tue(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function bat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await vU(e,await iue(t)),typeof r>"u"&&(r=K.dirname(await oe.realpathPromise(K.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function tue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return bat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new fh.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await vU(r,await Kx(t,{project:e}));let b=await I.findPackageLocation(u,E),C=new gn(b,{baseFs:A}),T=await Mt.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=b),{manifest:T,binFolder:r,env:v,cwd:o}})}async function rue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Vx(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function IU(t,e){return t.manifest.scripts.has(e)}async function nue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=K.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") -`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await rue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Xce.default)(e)} script failed (exit code ${Ot(a,I,yt.NUMBER)}, logs can be found here: ${Ot(a,A,yt.PATH)}); run ${Ot(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function kat(t,e,r){IU(t,e)&&await nue(t,e,r)}function BU(t){let e=K.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kx(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new fh.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${qn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let b=null;try{b=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:b}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[b,C]of I.bin){let T=K.resolve(v,C);o.set(b,[I,ue.fromPortablePath(T),BU(T)])}}return o}async function iue(t){return await Kx(t.anchoredLocator,{project:t.project})}async function vU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?Ah(t,r,process.execPath,[o]):Ah(t,r,o,[])))}async function sue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kx(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,b=await M1({project:a,locator:t,binFolder:I});await vU(b.BERRY_BIN_FOLDER,h);let C=BU(ue.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:b,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:b,stdin:n,stdout:u,stderr:A}),T;try{T=await C}finally{await oe.removePromise(b.BERRY_BIN_FOLDER)}return T.code})}async function Qat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await sue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Xce,Zce,fh,$ce,Dat,Pat,DU=Et(()=>{Pt();Pt();nA();b1();Xce=$e(EU()),Zce=$e(nd()),fh=Be("stream");AE();Yl();L1();N1();Px();ql();jl();kf();xo();$ce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))($ce||{});Dat=2,Pat=(0,Zce.default)(Dat)});var LE=_((M4t,aue)=>{"use strict";var oue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);aue.exports=t=>t?Object.keys(t).map(e=>[oue.has(e)?oue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var OE=_((O4t,due)=>{"use strict";var lue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Fat=Be("events"),cue=Be("stream"),uue=Be("string_decoder").StringDecoder,Mf=Symbol("EOF"),Of=Symbol("maybeEmitEnd"),ph=Symbol("emittedEnd"),Jx=Symbol("emittingEnd"),O1=Symbol("emittedError"),zx=Symbol("closed"),Aue=Symbol("read"),Xx=Symbol("flush"),fue=Symbol("flushChunk"),ka=Symbol("encoding"),Uf=Symbol("decoder"),Zx=Symbol("flowing"),U1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),PU=Symbol("bufferPush"),SU=Symbol("bufferShift"),Fo=Symbol("objectMode"),To=Symbol("destroyed"),xU=Symbol("emitData"),pue=Symbol("emitEnd"),bU=Symbol("emitEnd2"),_f=Symbol("async"),_1=t=>Promise.resolve().then(t),hue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",Tat=hue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Rat=hue&&Symbol.iterator||Symbol("iterator not implemented"),Nat=t=>t==="end"||t==="finish"||t==="prefinish",Lat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Mat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),$x=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},kU=class extends $x{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};due.exports=class gue extends cue{constructor(e){super(),this[Zx]=!1,this[U1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[_f]=e&&!!e.async||!1,this[Uf]=this[ka]?new uue(this[ka]):null,this[Mf]=!1,this[ph]=!1,this[Jx]=!1,this[zx]=!1,this[O1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[To]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[Uf]&&this[Uf].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[Uf]=e?new uue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Uf].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[_f]}set async(e){this[_f]=this[_f]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[To])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[_f]?_1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Mat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Lat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[Uf].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[Uf].write(e)),this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[To])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Of](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[Aue](e||null,this.buffer[0]);return this[Of](),r}[Aue](e,r){return e===r.length||e===null?this[SU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[U1])&&this[Of](),this}[ME](){this[To]||(this[U1]=!1,this[Zx]=!0,this.emit("resume"),this.buffer.length?this[Xx]():this[Mf]?this[Of]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Zx]=!1,this[U1]=!0}get destroyed(){return this[To]}get flowing(){return this[Zx]}get paused(){return this[U1]}[PU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[SU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[Xx](e){do;while(this[fue](this[SU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[fue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[To])return;let o=this[ph];return r=r||{},e===lue.stdout||e===lue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new kU(this,e,r):new $x(this,e,r)),this[_f]?_1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):Nat(e)&&this[ph]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[O1]&&(this[_f]?_1(()=>r.call(this,this[O1])):r.call(this,this[O1])),o}get emittedEnd(){return this[ph]}[Of](){!this[Jx]&&!this[ph]&&!this[To]&&this.buffer.length===0&&this[Mf]&&(this[Jx]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[zx]&&this.emit("close"),this[Jx]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==To&&this[To])return;if(e==="data")return r?this[_f]?_1(()=>this[xU](r)):this[xU](r):!1;if(e==="end")return this[pue]();if(e==="close"){if(this[zx]=!0,!this[ph]&&!this[To])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[O1]=r;let n=super.emit("error",r);return this[Of](),n}else if(e==="resume"){let n=super.emit("resume");return this[Of](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Of](),a}[xU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Of](),r}[pue](){this[ph]||(this[ph]=!0,this.readable=!1,this[_f]?_1(()=>this[bU]()):this[bU]())}[bU](){if(this[Uf]){let r=this[Uf].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(To,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[Tat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(To,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[Rat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[To]?(e?this.emit("error",e):this.emit(To),this):(this[To]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[zx]&&this.close(),e?this.emit("error",e):this.emit(To),this)}static isStream(e){return!!e&&(e instanceof gue||e instanceof cue||e instanceof Fat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var yue=_((U4t,mue)=>{var Oat=Be("zlib").constants||{ZLIB_VERNUM:4736};mue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Oat))});var WU=_(cl=>{"use strict";var NU=Be("assert"),hh=Be("buffer").Buffer,wue=Be("zlib"),Qd=cl.constants=yue(),Uat=OE(),Eue=hh.concat,Fd=Symbol("_superWrite"),_E=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},_at=Symbol("opts"),H1=Symbol("flushFlag"),Cue=Symbol("finishFlushFlag"),YU=Symbol("fullFlushFlag"),ti=Symbol("handle"),eb=Symbol("onError"),UE=Symbol("sawError"),QU=Symbol("level"),FU=Symbol("strategy"),TU=Symbol("ended"),_4t=Symbol("_defaultFullFlush"),tb=class extends Uat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[UE]=!1,this[TU]=!1,this[_at]=e,this[H1]=e.flush,this[Cue]=e.finishFlush;try{this[ti]=new wue[r](e)}catch(o){throw new _E(o)}this[eb]=o=>{this[UE]||(this[UE]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[eb](new _E(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[UE])return NU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[YU]),this.write(Object.assign(hh.alloc(0),{[H1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Cue]),this[TU]=!0,super.end(null,null,o)}get ended(){return this[TU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=hh.from(e,r)),this[UE])return;NU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},hh.concat=h=>h;let A;try{let h=typeof e[H1]=="number"?e[H1]:this[H1];A=this[ti]._processChunk(e,h),hh.concat=Eue}catch(h){hh.concat=Eue,this[eb](new _E(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[eb](new _E(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Fd](hh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[QU]=e,this[FU]=r)}}}},LU=class extends Hf{constructor(e){super(e,"Deflate")}},MU=class extends Hf{constructor(e){super(e,"Inflate")}},RU=Symbol("_portable"),OU=class extends Hf{constructor(e){super(e,"Gzip"),this[RU]=e&&!!e.portable}[Fd](e){return this[RU]?(this[RU]=!1,e[9]=255,super[Fd](e)):super[Fd](e)}},UU=class extends Hf{constructor(e){super(e,"Gunzip")}},_U=class extends Hf{constructor(e){super(e,"DeflateRaw")}},HU=class extends Hf{constructor(e){super(e,"InflateRaw")}},jU=class extends Hf{constructor(e){super(e,"Unzip")}},rb=class extends tb{constructor(e,r){e=e||{},e.flush=e.flush||Qd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Qd.BROTLI_OPERATION_FINISH,super(e,r),this[YU]=Qd.BROTLI_OPERATION_FLUSH}},qU=class extends rb{constructor(e){super(e,"BrotliCompress")}},GU=class extends rb{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=LU;cl.Inflate=MU;cl.Gzip=OU;cl.Gunzip=UU;cl.DeflateRaw=_U;cl.InflateRaw=HU;cl.Unzip=jU;typeof wue.BrotliCompress=="function"?(cl.BrotliCompress=qU,cl.BrotliDecompress=GU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var HE=_((q4t,Iue)=>{var Hat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Iue.exports=Hat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var nb=_((Y4t,Bue)=>{"use strict";var jat=OE(),VU=HE(),KU=Symbol("slurp");Bue.exports=class extends jat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=VU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=VU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[KU](r),o&&this[KU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[KU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?VU(e[o]):e[o])}}});var JU=_(ib=>{"use strict";ib.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);ib.code=new Map(Array.from(ib.name).map(t=>[t[1],t[0]]))});var Sue=_((V4t,Pue)=>{"use strict";var qat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Yat(t,e):Gat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Gat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Yat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=vue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Due(a))}},Wat=t=>{let e=t[0],r=e===128?Kat(t.slice(1,t.length)):e===255?Vat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},Vat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=vue(n):n===0?u=n:(o=!0,u=Due(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Kat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},vue=t=>(255^t)&255,Due=t=>(255^t)+1&255;Pue.exports={encode:qat,parse:Wat}});var qE=_((K4t,bue)=>{"use strict";var zU=JU(),jE=Be("path").posix,xue=Sue(),XU=Symbol("slurp"),ul=Symbol("type"),e3=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=gh(e,r+100,8),this.uid=gh(e,r+108,8),this.gid=gh(e,r+116,8),this.size=gh(e,r+124,12),this.mtime=ZU(e,r+136,12),this.cksum=gh(e,r+148,12),this[XU](o),this[XU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=gh(e,r+329,8),this.devmin=gh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=ZU(e,r+476,12),this.ctime=ZU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Jat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Rd(e,r,100,n)||this.needPax,this.needPax=dh(e,r+100,8,this.mode)||this.needPax,this.needPax=dh(e,r+108,8,this.uid)||this.needPax,this.needPax=dh(e,r+116,8,this.gid)||this.needPax,this.needPax=dh(e,r+124,12,this.size)||this.needPax,this.needPax=$U(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Rd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Rd(e,r+265,32,this.uname)||this.needPax,this.needPax=Rd(e,r+297,32,this.gname)||this.needPax,this.needPax=dh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=dh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Rd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Rd(e,r+345,155,u)||this.needPax:(this.needPax=Rd(e,r+345,130,u)||this.needPax,this.needPax=$U(e,r+476,12,this.atime)||this.needPax,this.needPax=$U(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),ZU=(t,e,r)=>zat(gh(t,e,r)),zat=t=>t===null?null:new Date(t*1e3),gh=(t,e,r)=>t[e]&128?xue.parse(t.slice(e,e+r)):Zat(t,e,r),Xat=t=>isNaN(t)?null:t,Zat=(t,e,r)=>Xat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),$at={12:8589934591,8:2097151},dh=(t,e,r,o)=>o===null?!1:o>$at[r]||o<0?(xue.encode(o,t.slice(e,e+r)),!0):(elt(t,e,r,o),!1),elt=(t,e,r,o)=>t.write(tlt(o,r),e,r,"ascii"),tlt=(t,e)=>rlt(Math.floor(t).toString(8),e),rlt=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",$U=(t,e,r,o)=>o===null?!1:dh(t,e,r,o.getTime()/1e3),nlt=new Array(156).join("\0"),Rd=(t,e,r,o)=>o===null?!1:(t.write(o+nlt,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);bue.exports=e3});var sb=_((J4t,kue)=>{"use strict";var ilt=qE(),slt=Be("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new ilt({path:("PaxHeader/"+slt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(olt(alt(t),e),r);var olt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,alt=t=>t.replace(/\n$/,"").split(` -`).reduce(llt,Object.create(null)),llt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};kue.exports=j1});var GE=_((z4t,Que)=>{Que.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var ob=_((X4t,Fue)=>{"use strict";Fue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var r3=_(($4t,Tue)=>{"use strict";var ab=["|","<",">","?",":"],t3=ab.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),clt=new Map(ab.map((t,e)=>[t,t3[e]])),ult=new Map(t3.map((t,e)=>[t,ab[e]]));Tue.exports={encode:t=>ab.reduce((e,r)=>e.split(r).join(clt.get(r)),t),decode:t=>t3.reduce((e,r)=>e.split(r).join(ult.get(r)),t)}});var n3=_((eUt,Nue)=>{var{isAbsolute:Alt,parse:Rue}=Be("path").win32;Nue.exports=t=>{let e="",r=Rue(t);for(;Alt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Rue(t)}return[e,t]}});var Mue=_((tUt,Lue)=>{"use strict";Lue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var p3=_((iUt,Xue)=>{"use strict";var Gue=OE(),Yue=sb(),Wue=qE(),oA=Be("fs"),Oue=Be("path"),sA=HE(),flt=GE(),Vue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),flt(e)+"/"+t):sA(t),plt=16*1024*1024,Uue=Symbol("process"),_ue=Symbol("file"),Hue=Symbol("directory"),s3=Symbol("symlink"),jue=Symbol("hardlink"),q1=Symbol("header"),lb=Symbol("read"),o3=Symbol("lstat"),ub=Symbol("onlstat"),a3=Symbol("onread"),l3=Symbol("onreadlink"),c3=Symbol("openfile"),u3=Symbol("onopenfile"),mh=Symbol("close"),Ab=Symbol("mode"),A3=Symbol("awaitDrain"),i3=Symbol("ondrain"),aA=Symbol("prefix"),que=Symbol("hadError"),Kue=ob(),hlt=r3(),Jue=n3(),zue=Mue(),fb=Kue(class extends Gue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||plt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=hlt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[ub](this.statCache.get(this.absolute)):this[o3]()}emit(e,...r){return e==="error"&&(this[que]=!0),super.emit(e,...r)}[o3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[ub](r)})}[ub](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=dlt(e),this.emit("stat",e),this[Uue]()}[Uue](){switch(this.type){case"File":return this[_ue]();case"Directory":return this[Hue]();case"SymbolicLink":return this[s3]();default:return this.end()}}[Ab](e){return zue(e,this.type==="Directory",this.portable)}[aA](e){return Vue(e,this.prefix)}[q1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[Ab](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Hue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[q1](),this.end()}[s3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){this.linkpath=sA(e),this[q1](),this.end()}[jue](e){this.type="Link",this.linkpath=sA(Oue.relative(this.cwd,e)),this.stat.size=0,this[q1](),this.end()}[_ue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[jue](r)}this.linkCache.set(e,this.absolute)}if(this[q1](),this.stat.size===0)return this.end();this[c3]()}[c3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[u3](r)})}[u3](e){if(this.fd=e,this[que])return this[mh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[lb]()}[lb](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[mh](()=>this.emit("error",u));this[a3](A)})}[mh](e){oA.close(this.fd,e)}[a3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[i3]())}[A3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[lb]()}}),f3=class extends fb{[o3](){this[ub](oA.lstatSync(this.absolute))}[s3](){this[l3](oA.readlinkSync(this.absolute))}[c3](){this[u3](oA.openSync(this.absolute,"r"))}[lb](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[a3](A),e=!1}finally{if(e)try{this[mh](()=>{})}catch{}}}[A3](e){e()}[mh](e){oA.closeSync(this.fd),e()}},glt=Kue(class extends Gue{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[Ab](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Vue(e,this.prefix)}[Ab](e){return zue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});fb.Sync=f3;fb.Tar=glt;var dlt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Xue.exports=fb});var wb=_((oUt,iAe)=>{"use strict";var Eb=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},mlt=OE(),ylt=WU(),Elt=nb(),I3=p3(),Clt=I3.Sync,wlt=I3.Tar,Ilt=BP(),Zue=Buffer.alloc(1024),gb=Symbol("onStat"),pb=Symbol("ended"),lA=Symbol("queue"),YE=Symbol("current"),Nd=Symbol("process"),hb=Symbol("processing"),$ue=Symbol("processJob"),cA=Symbol("jobs"),h3=Symbol("jobDone"),db=Symbol("addFSEntry"),eAe=Symbol("addTarEntry"),y3=Symbol("stat"),E3=Symbol("readdir"),mb=Symbol("onreaddir"),yb=Symbol("pipe"),tAe=Symbol("entry"),g3=Symbol("entryOpt"),C3=Symbol("writeEntryClass"),nAe=Symbol("write"),d3=Symbol("ondrain"),Cb=Be("fs"),rAe=Be("path"),Blt=ob(),m3=HE(),B3=Blt(class extends mlt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=m3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[C3]=I3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new ylt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[d3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[d3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new Ilt,this[cA]=0,this.jobs=+e.jobs||4,this[hb]=!1,this[pb]=!1}[nAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[pb]=!0,this[Nd](),this}write(e){if(this[pb])throw new Error("write after end");return e instanceof Elt?this[eAe](e):this[db](e),this.flowing}[eAe](e){let r=m3(rAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new Eb(e.path,r,!1);o.entry=new wlt(e,this[g3](o)),o.entry.on("end",a=>this[h3](o)),this[cA]+=1,this[lA].push(o)}this[Nd]()}[db](e){let r=m3(rAe.resolve(this.cwd,e));this[lA].push(new Eb(e,r)),this[Nd]()}[y3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";Cb[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[gb](e,a)})}[gb](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Nd]()}[E3](e){e.pending=!0,this[cA]+=1,Cb.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[mb](e,o)})}[mb](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Nd]()}[Nd](){if(!this[hb]){this[hb]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[tAe](e){this[cA]+=1;try{return new this[C3](e.path,this[g3](e)).on("end",()=>this[h3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[d3](){this[YE]&&this[YE].entry&&this[YE].entry.resume()}[yb](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),w3=class extends B3{constructor(e){super(e),this[C3]=Clt}pause(){}resume(){}[y3](e){let r=this.follow?"statSync":"lstatSync";this[gb](e,Cb[r](e.absolute))}[E3](e,r){this[mb](e,Cb.readdirSync(e.absolute))}[yb](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[nAe](a)})}};B3.Sync=w3;iAe.exports=B3});var $E=_(Y1=>{"use strict";var vlt=OE(),Dlt=Be("events").EventEmitter,Qa=Be("fs"),P3=Qa.writev;if(!P3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;P3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var XE=Symbol("_autoClose"),Yc=Symbol("_close"),G1=Symbol("_ended"),Gn=Symbol("_fd"),sAe=Symbol("_finished"),Eh=Symbol("_flags"),v3=Symbol("_flush"),S3=Symbol("_handleChunk"),x3=Symbol("_makeBuf"),Pb=Symbol("_mode"),Ib=Symbol("_needDrain"),JE=Symbol("_onerror"),ZE=Symbol("_onopen"),D3=Symbol("_onread"),VE=Symbol("_onwrite"),Ch=Symbol("_open"),jf=Symbol("_path"),Ld=Symbol("_pos"),uA=Symbol("_queue"),KE=Symbol("_read"),oAe=Symbol("_readSize"),yh=Symbol("_reading"),Bb=Symbol("_remain"),aAe=Symbol("_size"),vb=Symbol("_write"),WE=Symbol("_writing"),Db=Symbol("_defaultFlag"),zE=Symbol("_errored"),Sb=class extends vlt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[zE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[jf]=e,this[oAe]=r.readSize||16*1024*1024,this[yh]=!1,this[aAe]=typeof r.size=="number"?r.size:1/0,this[Bb]=this[aAe],this[XE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[KE]():this[Ch]()}get fd(){return this[Gn]}get path(){return this[jf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ch](){Qa.open(this[jf],"r",(e,r)=>this[ZE](e,r))}[ZE](e,r){e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[KE]())}[x3](){return Buffer.allocUnsafe(Math.min(this[oAe],this[Bb]))}[KE](){if(!this[yh]){this[yh]=!0;let e=this[x3]();if(e.length===0)return process.nextTick(()=>this[D3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[D3](r,o,a))}}[D3](e,r,o){this[yh]=!1,e?this[JE](e):this[S3](r,o)&&this[KE]()}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[JE](e){this[yh]=!0,this[Yc](),this.emit("error",e)}[S3](e,r){let o=!1;return this[Bb]-=e,e>0&&(o=super.write(ethis[ZE](e,r))}[ZE](e,r){this[Db]&&this[Eh]==="r+"&&e&&e.code==="ENOENT"?(this[Eh]="w",this[Ch]()):e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[v3]())}end(e,r){return e&&this.write(e,r),this[G1]=!0,!this[WE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[G1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[WE]||this[uA].length?(this[uA].push(e),this[Ib]=!0,!1):(this[WE]=!0,this[vb](e),!0)}[vb](e){Qa.write(this[Gn],e,0,e.length,this[Ld],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[JE](e):(this[Ld]!==null&&(this[Ld]+=r),this[uA].length?this[v3]():(this[WE]=!1,this[G1]&&!this[sAe]?(this[sAe]=!0,this[Yc](),this.emit("finish")):this[Ib]&&(this[Ib]=!1,this.emit("drain"))))}[v3](){if(this[uA].length===0)this[G1]&&this[VE](null,0);else if(this[uA].length===1)this[vb](this[uA].pop());else{let e=this[uA];this[uA]=[],P3(this[Gn],e,this[Ld],(r,o)=>this[VE](r,o))}}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},k3=class extends xb{[Ch](){let e;if(this[Db]&&this[Eh]==="r+")try{e=Qa.openSync(this[jf],this[Eh],this[Pb])}catch(r){if(r.code==="ENOENT")return this[Eh]="w",this[Ch]();throw r}else e=Qa.openSync(this[jf],this[Eh],this[Pb]);this[ZE](null,e)}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[vb](e){let r=!0;try{this[VE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Ld])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};Y1.ReadStream=Sb;Y1.ReadStreamSync=b3;Y1.WriteStream=xb;Y1.WriteStreamSync=k3});var Nb=_((cUt,hAe)=>{"use strict";var Plt=ob(),Slt=qE(),xlt=Be("events"),blt=BP(),klt=1024*1024,Qlt=nb(),lAe=sb(),Flt=WU(),Q3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),qf=Symbol("readEntry"),F3=Symbol("nextEntry"),cAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),W1=Symbol("globalExtendedHeader"),wh=Symbol("meta"),uAe=Symbol("emitMeta"),fi=Symbol("buffer"),Gf=Symbol("queue"),Od=Symbol("ended"),AAe=Symbol("emittedEnd"),Ud=Symbol("emit"),Fa=Symbol("unzip"),bb=Symbol("consumeChunk"),kb=Symbol("consumeChunkSub"),T3=Symbol("consumeBody"),fAe=Symbol("consumeMeta"),pAe=Symbol("consumeHeader"),Qb=Symbol("consuming"),R3=Symbol("bufferConcat"),N3=Symbol("maybeEnd"),V1=Symbol("writing"),Ih=Symbol("aborted"),Fb=Symbol("onDone"),_d=Symbol("sawValidEntry"),Tb=Symbol("sawNullBlock"),Rb=Symbol("sawEOF"),Tlt=t=>!0;hAe.exports=Plt(class extends xlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[_d]=null,this.on(Fb,r=>{(this[Xl]==="begin"||this[_d]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(Fb,e.ondone):this.on(Fb,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||klt,this.filter=typeof e.filter=="function"?e.filter:Tlt,this.writable=!0,this.readable=!1,this[Gf]=new blt,this[fi]=null,this[qf]=null,this[Md]=null,this[Xl]="begin",this[wh]="",this[Zl]=null,this[W1]=null,this[Od]=!1,this[Fa]=null,this[Ih]=!1,this[Tb]=!1,this[Rb]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[pAe](e,r){this[_d]===null&&(this[_d]=!1);let o;try{o=new Slt(e,r,this[Zl],this[W1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Tb]?(this[Rb]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[Ud]("eof")):(this[Tb]=!0,this[Ud]("nullBlock"));else if(this[Tb]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Qlt(o,this[Zl],this[W1]);if(!this[_d])if(n.remain){let u=()=>{n.invalid||(this[_d]=!0)};n.on("end",u)}else this[_d]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Ud]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[wh]="",n.on("data",u=>this[wh]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Ud]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[qf]?this[Gf].push(n):(this[Gf].push(n),this[F3]())))}}}[cAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[qf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[F3]()),r=!1)):(this[qf]=null,r=!1),r}[F3](){do;while(this[cAe](this[Gf].shift()));if(!this[Gf].length){let e=this[qf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[T3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[fAe](e,r){let o=this[Md],a=this[T3](e,r);return this[Md]||this[uAe](o),a}[Ud](e,r,o){!this[Gf].length&&!this[qf]?this.emit(e,r,o):this[Gf].push([e,r,o])}[uAe](e){switch(this[Ud]("meta",this[wh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=lAe.parse(this[wh],this[Zl],!1);break;case"GlobalExtendedHeader":this[W1]=lAe.parse(this[wh],this[W1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[wh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[wh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Ih]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Ih])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[bb](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Od]=!0,this[bb]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[bb](e),this[V1]=!1;let r=this[Gf].length?!1:this[qf]?this[qf].flowing:!0;return!r&&!this[Gf].length&&this[qf].once("drain",o=>this.emit("drain")),r}[R3](e){e&&!this[Ih]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[N3](){if(this[Od]&&!this[AAe]&&!this[Ih]&&!this[Qb]){this[AAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[Ud](Fb)}}[bb](e){if(this[Qb])this[R3](e);else if(!e&&!this[fi])this[N3]();else{if(this[Qb]=!0,this[fi]){this[R3](e);let r=this[fi];this[fi]=null,this[kb](r)}else this[kb](e);for(;this[fi]&&this[fi].length>=512&&!this[Ih]&&!this[Rb];){let r=this[fi];this[fi]=null,this[kb](r)}this[Qb]=!1}(!this[fi]||this[Od])&&this[N3]()}[kb](e){let r=0,o=e.length;for(;r+512<=o&&!this[Ih]&&!this[Rb];)switch(this[Xl]){case"begin":case"header":this[pAe](e,r),r+=512;break;case"ignore":case"body":r+=this[T3](e,r);break;case"meta":r+=this[fAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var Rlt=LE(),dAe=Nb(),eC=Be("fs"),Nlt=$E(),gAe=Be("path"),L3=GE();yAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Rlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Mlt(o,e),o.noResume||Llt(o),o.file&&o.sync?Olt(o):o.file?Ult(o,r):mAe(o)};var Llt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Mlt=(t,e)=>{let r=new Map(e.map(n=>[L3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||gAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(gAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(L3(n)):n=>a(L3(n))},Olt=t=>{let e=mAe(t),r=t.file,o=!0,a;try{let n=eC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new dAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),eC.stat(a,(p,h)=>{if(p)A(p);else{let E=new Nlt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},mAe=t=>new dAe(t)});var vAe=_((AUt,BAe)=>{"use strict";var _lt=LE(),Mb=wb(),EAe=$E(),CAe=Lb(),wAe=Be("path");BAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=_lt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Hlt(o,e):o.file?jlt(o,e,r):o.sync?qlt(o,e):Glt(o,e)};var Hlt=(t,e)=>{let r=new Mb.Sync(t),o=new EAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),IAe(r,e)},jlt=(t,e,r)=>{let o=new Mb(t),a=new EAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return M3(o,e),r?n.then(r,r):n},IAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?CAe({file:wAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},M3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return CAe({file:wAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>M3(t,e));t.add(r)}t.end()},qlt=(t,e)=>{let r=new Mb.Sync(t);return IAe(r,e),r},Glt=(t,e)=>{let r=new Mb(t);return M3(r,e),r}});var O3=_((fUt,QAe)=>{"use strict";var Ylt=LE(),DAe=wb(),Al=Be("fs"),PAe=$E(),SAe=Lb(),xAe=Be("path"),bAe=qE();QAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Wlt(o,e):Klt(o,e,r)};var Wlt=(t,e)=>{let r=new DAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,Vlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},Vlt=(t,e,r,o,a)=>{let n=new PAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Jlt(e,a)},Klt=(t,e,r)=>{e=Array.from(e);let o=new DAe(t),a=(u,A,p)=>{let h=(C,T)=>{C?Al.close(u,L=>p(C)):p(null,T)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),b=(C,T)=>{if(C)return h(C);if(I+=T,I<512&&T)return Al.read(u,v,I,v.length-I,E+I,b);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new bAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,b)};Al.read(u,v,0,512,E,b)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,b)=>{if(v)return Al.close(I,()=>A(v));a(I,b.size,(C,T)=>{if(C)return A(C);let L=new PAe.WriteStream(t.file,{fd:I,start:T});o.pipe(L),L.on("error",A),L.on("close",u),kAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Jlt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?SAe({file:xAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},kAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return SAe({file:xAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>kAe(t,e));t.add(r)}t.end()}});var TAe=_((pUt,FAe)=>{"use strict";var zlt=LE(),Xlt=O3();FAe.exports=(t,e,r)=>{let o=zlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Zlt(o),Xlt(o,e,r)};var Zlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((hUt,NAe)=>{var{promisify:RAe}=Be("util"),Bh=Be("fs"),$lt=t=>{if(!t)t={mode:511,fs:Bh};else if(typeof t=="object")t={mode:511,fs:Bh,...t};else if(typeof t=="number")t={mode:t,fs:Bh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Bh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Bh.mkdir,t.mkdirAsync=RAe(t.mkdir),t.stat=t.stat||t.fs.stat||Bh.stat,t.statAsync=RAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Bh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Bh.mkdirSync,t};NAe.exports=$lt});var OAe=_((gUt,MAe)=>{var ect=process.platform,{resolve:tct,parse:rct}=Be("path"),nct=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=tct(t),ect==="win32"){let e=/[*|"<>?:]/,{root:r}=rct(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};MAe.exports=nct});var qAe=_((dUt,jAe)=>{var{dirname:UAe}=Be("path"),_Ae=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?_Ae(t,UAe(e),e):void 0),HAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?HAe(t,UAe(e),e):void 0}};jAe.exports={findMade:_Ae,findMadeSync:HAe}});var H3=_((mUt,YAe)=>{var{dirname:GAe}=Be("path"),U3=(t,e,r)=>{e.recursive=!1;let o=GAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return U3(o,e).then(n=>U3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},_3=(t,e,r)=>{let o=GAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return _3(t,e,_3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};YAe.exports={mkdirpManual:U3,mkdirpManualSync:_3}});var KAe=_((yUt,VAe)=>{var{dirname:WAe}=Be("path"),{findMade:ict,findMadeSync:sct}=qAe(),{mkdirpManual:oct,mkdirpManualSync:act}=H3(),lct=(t,e)=>(e.recursive=!0,WAe(t)===t?e.mkdirAsync(t,e):ict(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return oct(t,e);throw a}))),cct=(t,e)=>{if(e.recursive=!0,WAe(t)===t)return e.mkdirSync(t,e);let o=sct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return act(t,e);throw a}};VAe.exports={mkdirpNative:lct,mkdirpNativeSync:cct}});var ZAe=_((EUt,XAe)=>{var JAe=Be("fs"),uct=process.version,j3=uct.replace(/^v/,"").split("."),zAe=+j3[0]>10||+j3[0]==10&&+j3[1]>=12,Act=zAe?t=>t.mkdir===JAe.mkdir:()=>!1,fct=zAe?t=>t.mkdirSync===JAe.mkdirSync:()=>!1;XAe.exports={useNative:Act,useNativeSync:fct}});var ife=_((CUt,nfe)=>{var tC=LAe(),rC=OAe(),{mkdirpNative:$Ae,mkdirpNativeSync:efe}=KAe(),{mkdirpManual:tfe,mkdirpManualSync:rfe}=H3(),{useNative:pct,useNativeSync:hct}=ZAe(),nC=(t,e)=>(t=rC(t),e=tC(e),pct(e)?$Ae(t,e):tfe(t,e)),gct=(t,e)=>(t=rC(t),e=tC(e),hct(e)?efe(t,e):rfe(t,e));nC.sync=gct;nC.native=(t,e)=>$Ae(rC(t),tC(e));nC.manual=(t,e)=>tfe(rC(t),tC(e));nC.nativeSync=(t,e)=>efe(rC(t),tC(e));nC.manualSync=(t,e)=>rfe(rC(t),tC(e));nfe.exports=nC});var Afe=_((wUt,ufe)=>{"use strict";var $l=Be("fs"),Hd=Be("path"),dct=$l.lchown?"lchown":"chown",mct=$l.lchownSync?"lchownSync":"chownSync",ofe=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),sfe=(t,e,r)=>{try{return $l[mct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},yct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},Ect=ofe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,q3=ofe?(t,e,r)=>{try{return sfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;yct(t,e,r)}}:(t,e,r)=>sfe(t,e,r),Cct=process.version,afe=(t,e,r)=>$l.readdir(t,e,r),wct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(Cct)&&(afe=(t,e,r)=>$l.readdir(t,r));var Ob=(t,e,r,o)=>{$l[dct](t,e,r,Ect(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},lfe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(Hd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,lfe(t,u,r,o,a)});if(e.isDirectory())G3(Hd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Hd.resolve(t,e.name);Ob(u,r,o,a)});else{let n=Hd.resolve(t,e.name);Ob(n,r,o,a)}},G3=(t,e,r,o)=>{afe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Ob(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Ob(t,e,r,o)}};n.forEach(h=>lfe(t,h,e,r,p))})},Ict=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(Hd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&cfe(Hd.resolve(t,e.name),r,o),q3(Hd.resolve(t,e.name),r,o)},cfe=(t,e,r)=>{let o;try{o=wct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return q3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>Ict(t,a,e,r)),q3(t,e,r)};ufe.exports=G3;G3.sync=cfe});var gfe=_((IUt,Y3)=>{"use strict";var ffe=ife(),ec=Be("fs"),Ub=Be("path"),pfe=Afe(),Wc=HE(),_b=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Hb=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},jb=(t,e)=>t.get(Wc(e)),K1=(t,e,r)=>t.set(Wc(e),r),Bct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Hb(t,r&&r.code||"ENOTDIR")),e(r)})};Y3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),b=(L,U)=>{L?r(L):(K1(I,t,!0),U&&p?pfe(U,u,A,J=>b(J)):n?ec.chmod(t,a,r):r())};if(I&&jb(I,t)===!0)return b();if(t===v)return Bct(t,b);if(h)return ffe(t,{mode:a}).then(L=>b(null,L),b);let T=Wc(Ub.relative(v,t)).split("/");qb(v,T,a,I,E,v,null,b)};var qb=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ub.resolve(t+"/"+p));if(jb(o,h))return qb(h,e,r,o,a,n,u,A);ec.mkdir(h,r,hfe(h,e,r,o,a,n,u,A))},hfe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())qb(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,hfe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new _b(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,qb(t,e,r,o,a,n,u,A))},vct=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Hb(t,r)}};Y3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{K1(E,t,!0),L&&A&&pfe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&jb(E,t)===!0)return v();if(t===I)return vct(I),v();if(p)return v(ffe.sync(t,o));let C=Wc(Ub.relative(I,t)).split("/"),T=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ub.resolve(U)),!jb(E,U))try{ec.mkdirSync(U,o),T=T||U,K1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){K1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),T=T||U,K1(E,U,!0);continue}else if(te.isSymbolicLink())return new _b(U,U+"/"+C.join("/"))}return v(T)}});var V3=_((BUt,dfe)=>{var W3=Object.create(null),{hasOwnProperty:Dct}=Object.prototype;dfe.exports=t=>(Dct.call(W3,t)||(W3[t]=t.normalize("NFKD")),W3[t])});var Cfe=_((vUt,Efe)=>{var mfe=Be("assert"),Pct=V3(),Sct=GE(),{join:yfe}=Be("path"),xct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,bct=xct==="win32";Efe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=yfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(b=>{let C=t.get(b);mfe.equal(C[0],h),C.length===1?t.delete(b):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(T=>v.add(T)))}),I.forEach(b=>{let C=t.get(b);mfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(b):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(b=>u(b)),!0};return{check:n,reserve:(h,E)=>{h=bct?["win32 parallelization disabled"]:h.map(v=>Pct(Sct(yfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,b)=>v.concat(b)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let b=t.get(v);b?b.push(E):t.set(v,[E])}),I.forEach(v=>{let b=t.get(v);b?b[b.length-1]instanceof Set?b[b.length-1].add(E):b.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var Bfe=_((DUt,Ife)=>{var kct=process.platform,Qct=kct==="win32",Fct=global.__FAKE_TESTING_FS__||Be("fs"),{O_CREAT:Tct,O_TRUNC:Rct,O_WRONLY:Nct,UV_FS_O_FILEMAP:wfe=0}=Fct.constants,Lct=Qct&&!!wfe,Mct=512*1024,Oct=wfe|Rct|Tct|Nct;Ife.exports=Lct?t=>t"w"});var r_=_((PUt,Mfe)=>{"use strict";var Uct=Be("assert"),_ct=Nb(),vn=Be("fs"),Hct=$E(),Yf=Be("path"),Rfe=gfe(),vfe=r3(),jct=Cfe(),qct=n3(),fl=HE(),Gct=GE(),Yct=V3(),Dfe=Symbol("onEntry"),z3=Symbol("checkFs"),Pfe=Symbol("checkFs2"),Wb=Symbol("pruneCache"),X3=Symbol("isReusable"),tc=Symbol("makeFs"),Z3=Symbol("file"),$3=Symbol("directory"),Vb=Symbol("link"),Sfe=Symbol("symlink"),xfe=Symbol("hardlink"),bfe=Symbol("unsupported"),kfe=Symbol("checkPath"),vh=Symbol("mkdir"),Ro=Symbol("onError"),Gb=Symbol("pending"),Qfe=Symbol("pend"),iC=Symbol("unpend"),K3=Symbol("ended"),J3=Symbol("maybeClose"),e_=Symbol("skip"),J1=Symbol("doChown"),z1=Symbol("uid"),X1=Symbol("gid"),Z1=Symbol("checkedCwd"),Nfe=Be("crypto"),Lfe=Bfe(),Wct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,$1=Wct==="win32",Vct=(t,e)=>{if(!$1)return vn.unlink(t,e);let r=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Kct=t=>{if(!$1)return vn.unlinkSync(t);let e=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Ffe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Tfe=t=>Yct(Gct(fl(t))).toLowerCase(),Jct=(t,e)=>{e=Tfe(e);for(let r of t.keys()){let o=Tfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},zct=t=>{for(let e of t.keys())t.delete(e)},e2=class extends _ct{constructor(e){if(e||(e={}),e.ondone=r=>{this[K3]=!0,this[J3]()},super(e),this[Z1]=!1,this.reservations=jct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[Gb]=0,this[K3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||$1,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Yf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Dfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[J3](){this[K3]&&this[Gb]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[kfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||$1&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=qct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Yf.isAbsolute(e.path)?e.absolute=fl(Yf.resolve(e.path)):e.absolute=fl(Yf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Yf.win32.parse(e.absolute);e.absolute=r+vfe.encode(e.absolute.substr(r.length));let{root:o}=Yf.win32.parse(e.path);e.path=o+vfe.encode(e.path.substr(o.length))}return!0}[Dfe](e){if(!this[kfe](e))return e.resume();switch(Uct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[z3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[bfe](e)}}[Ro](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[iC](),r.resume())}[vh](e,r,o){Rfe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[J1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[z1](e){return Ffe(this.uid,e.uid,this.processUid)}[X1](e){return Ffe(this.gid,e.gid,this.processGid)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=new Hct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[Ro](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[Ro](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[Ro](h,e):this[iC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,b=>b?vn.utimes(h,I,v,C=>u(C&&b)):u())}if(this[J1](e)){n++;let I=this[z1](e),v=this[X1](e);vn.fchown(E,I,v,b=>b?vn.chown(h,I,v,C=>u(C&&b)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[Ro](p,e),r()}),e.pipe(A)),A.pipe(a)}[$3](e,r){let o=e.mode&4095||this.dmode;this[vh](e.absolute,o,a=>{if(a){this[Ro](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[iC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[J1](e)&&(n++,vn.chown(e.absolute,this[z1](e),this[X1](e),u)),u()})}[bfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Sfe](e,r){this[Vb](e,e.linkpath,"symlink",r)}[xfe](e,r){let o=fl(Yf.resolve(this.cwd,e.linkpath));this[Vb](e,o,"link",r)}[Qfe](){this[Gb]++}[iC](){this[Gb]--,this[J3]()}[e_](e){this[iC](),e.resume()}[X3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!$1}[z3](e){this[Qfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Pfe](e,o))}[Wb](e){e.type==="SymbolicLink"?zct(this.dirCache):e.type!=="Directory"&&Jct(this.dirCache,e.absolute)}[Pfe](e,r){this[Wb](e);let o=A=>{this[Wb](e),r(A)},a=()=>{this[vh](this.cwd,this.dmode,A=>{if(A){this[Ro](A,e),o();return}this[Z1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Yf.dirname(e.absolute));if(A!==this.cwd)return this[vh](A,this.dmode,p=>{if(p){this[Ro](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[e_](e),o();return}if(A||this[X3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);Vct(e.absolute,h=>this[tc](h,e,o))})};this[Z1]?n():a()}[tc](e,r,o){if(e){this[Ro](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[Z3](r,o);case"Link":return this[xfe](r,o);case"SymbolicLink":return this[Sfe](r,o);case"Directory":case"GNUDumpDir":return this[$3](r,o)}}[Vb](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[Ro](n,e):(this[iC](),e.resume()),a()})}},Yb=t=>{try{return[null,t()]}catch(e){return[e,null]}},t_=class extends e2{[tc](e,r){return super[tc](e,r,()=>{})}[z3](e){if(this[Wb](e),!this[Z1]){let n=this[vh](this.cwd,this.dmode);if(n)return this[Ro](n,e);this[Z1]=!0}if(e.absolute!==this.cwd){let n=fl(Yf.dirname(e.absolute));if(n!==this.cwd){let u=this[vh](n,this.dmode);if(u)return this[Ro](u,e)}}let[r,o]=Yb(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[e_](e);if(r||this[X3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Yb(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=Yb(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:Yb(()=>Kct(e.absolute));this[tc](a,e)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[Ro](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[Ro](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[J1](e)){let h=this[z1](e),E=this[X1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[$3](e,r){let o=e.mode&4095||this.dmode,a=this[vh](e.absolute,o);if(a){this[Ro](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[J1](e))try{vn.chownSync(e.absolute,this[z1](e),this[X1](e))}catch{}r(),e.resume()}[vh](e,r){try{return Rfe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Vb](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Ro](n,e)}}};e2.Sync=t_;Mfe.exports=e2});var jfe=_((SUt,Hfe)=>{"use strict";var Xct=LE(),Kb=r_(),Ufe=Be("fs"),_fe=$E(),Ofe=Be("path"),n_=GE();Hfe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Xct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Zct(o,e),o.file&&o.sync?$ct(o):o.file?eut(o,r):o.sync?tut(o):rut(o)};var Zct=(t,e)=>{let r=new Map(e.map(n=>[n_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(n_(n)):n=>a(n_(n))},$ct=t=>{let e=new Kb.Sync(t),r=t.file,o=Ufe.statSync(r),a=t.maxReadSize||16*1024*1024;new _fe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},eut=(t,e)=>{let r=new Kb(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ufe.stat(a,(p,h)=>{if(p)A(p);else{let E=new _fe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},tut=t=>new Kb.Sync(t),rut=t=>new Kb(t)});var qfe=_(us=>{"use strict";us.c=us.create=vAe();us.r=us.replace=O3();us.t=us.list=Lb();us.u=us.update=TAe();us.x=us.extract=jfe();us.Pack=wb();us.Unpack=r_();us.Parse=Nb();us.ReadEntry=nb();us.WriteEntry=p3();us.Header=qE();us.Pax=sb();us.types=JU()});var i_,Gfe,Dh,t2,r2,Yfe=Et(()=>{i_=$e(nd()),Gfe=Be("worker_threads"),Dh=Symbol("kTaskInfo"),t2=class{constructor(e,r){this.fn=e;this.limit=(0,i_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},r2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,i_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Gfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Dh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Dh].resolve(r),e[Dh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Dh]?.reject(r),e[Dh]=null}),e.on("exit",r=>{r!==0&&e[Dh]?.reject(new Error(`Worker exited with code ${r}`)),e[Dh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Dh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Vfe=_((QUt,Wfe)=>{var s_;Wfe.exports.getContent=()=>(typeof s_>"u"&&(s_=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),s_)});var Xi={};Kt(Xi,{convertToZip:()=>out,convertToZipWorker:()=>l_,extractArchiveTo:()=>Zfe,getDefaultTaskPool:()=>zfe,getTaskPoolForConfiguration:()=>Xfe,makeArchiveFromDirectory:()=>sut});function nut(t,e){switch(t){case"async":return new t2(l_,{poolSize:e});case"workers":return new r2((0,a_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function zfe(){return typeof o_>"u"&&(o_=nut("workers",Ji.availableParallelism())),o_}function Xfe(t){return typeof t>"u"?zfe():ol(iut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new t2(l_,{poolSize:r});case"workers":return new r2((0,a_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function l_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Zfe(u,n,a),n.saveAndClose(),e}async function sut(t,{baseFs:e=new Rn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=K.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=K.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function out(t,e={}){let r=await oe.mktempPromise(),o=K.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Xfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*aut(t){let e=new Jfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of aut(t)){if(a(n))continue;let u=K.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=K.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,Jfe,a_,o_,iut,$fe=Et(()=>{Ye();Pt();nA();Kfe=Be("stream"),Jfe=$e(qfe());Yfe();jl();a_=$e(Vfe());iut=new WeakMap});var tpe=_((c_,epe)=>{(function(t,e){typeof c_=="object"?epe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(c_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,b,C,T=A.slice(0);if(T.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){b=++v===L.length,r(U,n[U],b,T,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` -`}),A},o})});var $s={};Kt($s,{emitList:()=>lut,emitTree:()=>spe,treeNodeToJson:()=>ipe,treeNodeToTreeify:()=>npe});function npe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,b=[];typeof E<"u"&&b.push(md(e,E,2)),typeof I<"u"&&b.push(Ot(e,I[0],I[1])),b.length===0&&b.push(md(e,`${p}`,2));let C=b.join(": ").trim(),T=`\0${o++}\0`,L=u[`${T}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function ipe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return yd(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[cut(n)]=e(u));return typeof r.value>"u"?a:{value:yd(r.value[0],r.value[1]),children:a}};return e(t)}function lut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));spe({children:a},{configuration:e,stdout:r,json:o})}function spe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(ipe(A))} -`);return}let n=(0,rpe.asTree)(npe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 -$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 -$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function cut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var rpe,ope=Et(()=>{rpe=$e(tpe());ql()});function n2(t){let e=t.match(uut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var ape,u_,A_,Jb,Lr,uut,f_=Et(()=>{Ye();Pt();Pt();nA();ape=Be("crypto"),u_=$e(Be("fs"));Yl();rh();jl();xo();A_=Ky(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Jb=Ky(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ape.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Jb,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${aE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=n2(r).hash.slice(0,10);return`${aE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=n2(e);if(r===null||r{let ae=new zi,we=K.join(Bt.root,sO(e));return ae.mkdirSync(we,{recursive:!0}),ae.writeJsonSync(K.join(we,dr.manifest),{name:fn(e),mocked:!0}),ae},E=async(ae,{isColdHit:we,controlPath:Pe=null})=>{if(Pe===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!we?n2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await LS(ae)}`:r;if(Pe!==null){let ce=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await LS(Pe)}`:r;if(Ee!==ce)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let De=null;switch(r!==null&&Ee!==r&&(this.check?De="throw":n2(r).cacheKey!==n2(Ee).cacheKey?De="update":De=this.configuration.get("checksumBehavior")),De){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async ae=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let we=await n(),Pe=we.getRealPath();we.saveAndClose(),await oe.chmodPromise(Pe,420);let g=await E(ae,{controlPath:Pe,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let ae=await n(),we=ae.getRealPath();return ae.saveAndClose(),{source:"loader",path:we}}return{source:"mirror",path:A}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:ae,source:we}=await v(),{hash:Pe}=await E(ae,{isColdHit:!0}),g=this.getLocatorPath(e,Pe),Ee=[];we!=="mirror"&&A!==null&&Ee.push(async()=>{let ce=`${A}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let ce=`${g}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,g)});let De=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(ce=>ce())),[!1,De,Pe]},C=async()=>{let we=(async()=>{let Pe=u.unstablePackages?.has(e.locatorHash),g=Pe||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,De=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),ce=De||Ee,ne=ce?o:a;if(ne&&ne(),ce){let ee=null,Ie=g;if(!De)if(this.check)ee=await I(Ie);else{let ke=await E(Ie,{isColdHit:!1});if(ke.isValid)ee=ke.hash;else return b()}return[De,Ie,ee]}else{if(this.immutable&&Pe)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,we);try{return await we}finally{this.mutexes.delete(e.locatorHash)}};for(let ae;ae=this.mutexes.get(e.locatorHash);)await ae;let[T,L,U]=await C();T||this.markedFiles.add(L);let J,te=T?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),le=new ny(()=>wL(()=>J=te(),ae=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${ae}`),K),pe=new Uu(L,{baseFs:le,pathUtils:K}),Ae=()=>{J?.discardAndClose()},ye=u.unstablePackages?.has(e.locatorHash)?null:U;return[pe,Ae,ye]}},uut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var zb,lpe=Et(()=>{zb=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(zb||{})});var Aut,sC,p_=Et(()=>{Pt();Nl();kf();xo();Aut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>HS({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],sC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=K.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Vi(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=i1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=ba(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,T]of Aut){let L=I.match(C);if(L){v=T(E,...L);break}}if(!v){r.reportWarning(14,`${qn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let b=h;try{let C=Id(h.range),T=i1(C.selector,!0);T&&(b=T)}catch{}u.set(h.descriptorHash,Qs(b,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=tO(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,cpe=Et(()=>{Yl();L1();ql();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;zI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} -`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` -`),this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. -`),this.suggestInstall&&this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. -`))}formatNameWithHyperlink(r){return CU(r,{configuration:this.configuration,json:!1})}}});var oC,h_=Et(()=>{xo();oC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Wf(){}function fut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nb.length?T:b}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function put(t){return{newPos:t.newPos,components:t.components.slice(0)}}function hut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function fpe(t,e,r){return r=hut(r,{ignoreWhitespace:!0}),E_.diff(t,e,r)}function gut(t,e,r){return C_.diff(t,e,r)}function Xb(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Xb=function(e){return typeof e}:Xb=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xb(t)}function g_(t){return yut(t)||Eut(t)||Cut(t)||wut()}function yut(t){if(Array.isArray(t))return d_(t)}function Eut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function Cut(t,e){if(!!t){if(typeof t=="string")return d_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d_(t,e)}}function d_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=gut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],b=1,C=1,T=function(J){var te=A[J],le=te.lines||te.value.replace(/\n$/,"").split(` -`);if(te.lines=le,te.added||te.removed){var pe;if(!E){var Ae=A[J-1];E=b,I=C,Ae&&(v=u.context>0?p(Ae.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(pe=v).push.apply(pe,g_(le.map(function(ce){return(te.added?"+":"-")+ce}))),te.added?C+=le.length:b+=le.length}else{if(E)if(le.length<=u.context*2&&J=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),De=le.length==0&&v.length>Pe.oldLines;!g&&De&&r.length>0&&v.splice(Pe.oldLines,0,"\\ No newline at end of file"),(!g&&!De||!Ee)&&v.push("\\ No newline at end of file")}h.push(Pe),E=0,I=0,v=[]}b+=le.length,C+=le.length}},L=0;L{Wf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(T){return a?(setTimeout(function(){a(void 0,T)},0),!0):T}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function b(){for(var T=-1*h;T<=h;T+=2){var L=void 0,U=I[T-1],J=I[T+1],te=(J?J.newPos:0)-T;U&&(I[T-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(fut(n,L.components,r,e,n.useLongestToken));I[T]=L}h++}if(a)(function T(){setTimeout(function(){if(h>E)return a();b()||T()},0)})();else for(;h<=E;){var C=b();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(m_(t,null,null,a),a," ")};i2.equals=function(t,e){return Wf.prototype.equals.call(i2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};y_=new Wf;y_.tokenize=function(t){return t.slice()};y_.join=y_.removeEmpty=function(t){return t}});var gpe=_((o3t,hpe)=>{var But=Hl(),vut=fE(),Dut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Put=/^\w*$/;function Sut(t,e){if(But(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||vut(t)?!0:Put.test(t)||!Dut.test(t)||e!=null&&t in Object(e)}hpe.exports=Sut});var ype=_((a3t,mpe)=>{var dpe=_P(),xut="Expected a function";function I_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(xut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(I_.Cache||dpe),r}I_.Cache=dpe;mpe.exports=I_});var Cpe=_((l3t,Epe)=>{var but=ype(),kut=500;function Qut(t){var e=but(t,function(o){return r.size===kut&&r.clear(),o}),r=e.cache;return e}Epe.exports=Qut});var B_=_((c3t,wpe)=>{var Fut=Cpe(),Tut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Rut=/\\(\\)?/g,Nut=Fut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(Tut,function(r,o,a,n){e.push(a?n.replace(Rut,"$1"):o||r)}),e});wpe.exports=Nut});var jd=_((u3t,Ipe)=>{var Lut=Hl(),Mut=gpe(),Out=B_(),Uut=R1();function _ut(t,e){return Lut(t)?t:Mut(t,e)?[t]:Out(Uut(t))}Ipe.exports=_ut});var aC=_((A3t,Bpe)=>{var Hut=fE(),jut=1/0;function qut(t){if(typeof t=="string"||Hut(t))return t;var e=t+"";return e=="0"&&1/t==-jut?"-0":e}Bpe.exports=qut});var Zb=_((f3t,vpe)=>{var Gut=jd(),Yut=aC();function Wut(t,e){e=Gut(e,t);for(var r=0,o=e.length;t!=null&&r{var Vut=rS(),Kut=jd(),Jut=UI(),Dpe=il(),zut=aC();function Xut(t,e,r,o){if(!Dpe(t))return t;e=Kut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Zut=Zb(),$ut=v_(),eAt=jd();function tAt(t,e,r){for(var o=-1,a=e.length,n={};++o{function rAt(t,e){return t!=null&&e in Object(t)}bpe.exports=rAt});var D_=_((d3t,Qpe)=>{var nAt=jd(),iAt=LI(),sAt=Hl(),oAt=UI(),aAt=YP(),lAt=aC();function cAt(t,e,r){e=nAt(e,t);for(var o=-1,a=e.length,n=!1;++o{var uAt=kpe(),AAt=D_();function fAt(t,e){return t!=null&&AAt(t,e,uAt)}Fpe.exports=fAt});var Npe=_((y3t,Rpe)=>{var pAt=xpe(),hAt=Tpe();function gAt(t,e){return pAt(t,e,function(r,o){return hAt(t,o)})}Rpe.exports=gAt});var Upe=_((E3t,Ope)=>{var Lpe=fd(),dAt=LI(),mAt=Hl(),Mpe=Lpe?Lpe.isConcatSpreadable:void 0;function yAt(t){return mAt(t)||dAt(t)||!!(Mpe&&t&&t[Mpe])}Ope.exports=yAt});var jpe=_((C3t,Hpe)=>{var EAt=qP(),CAt=Upe();function _pe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=CAt),a||(a=[]);++n0&&r(A)?e>1?_pe(A,e-1,r,o,a):EAt(a,A):o||(a[a.length]=A)}return a}Hpe.exports=_pe});var Gpe=_((w3t,qpe)=>{var wAt=jpe();function IAt(t){var e=t==null?0:t.length;return e?wAt(t,1):[]}qpe.exports=IAt});var P_=_((I3t,Ype)=>{var BAt=Gpe(),vAt=pL(),DAt=hL();function PAt(t){return DAt(vAt(t,void 0,BAt),t+"")}Ype.exports=PAt});var S_=_((B3t,Wpe)=>{var SAt=Npe(),xAt=P_(),bAt=xAt(function(t,e){return t==null?{}:SAt(t,e)});Wpe.exports=bAt});var $b,Vpe=Et(()=>{Yl();$b=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,x_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,lC,b_=Et(()=>{Pt();Kpe=$e(RS());AE();Bd();ql();rh();kf();xo();lC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Mt.tryFind(this.cwd)??new Mt,this.relativeCwd=K.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=K.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(K.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${o1(this.project.configuration,this)} (${Ot(this.project.configuration,K.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&K.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=ba(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${K.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&n1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=K.join(this.cwd,Mt.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} -`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function NAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map(t.workspaces.map(Ae=>{let ye=Ae.anchoredLocator.locatorHash,ae=o.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ye,$I(ae)]})),U=()=>{let Ae=oe.mktempSync(),ye=K.join(Ae,"stacktrace.log"),ae=String(E.length+1).length,we=E.map((Pe,g)=>`${`${g+1}.`.padStart(ae," ")} ${xa(Pe)} -`).join("");throw oe.writeFileSync(ye,we),oe.detachTemp(Ae),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(ye)}`)},J=Ae=>{let ye=r.get(Ae.descriptorHash);if(typeof ye>"u")throw new Error("Assertion failed: The resolution should have been registered");let ae=o.get(ye);if(!ae)throw new Error("Assertion failed: The package could not be found");return ae},te=(Ae,ye,ae,{top:we,optional:Pe})=>{E.length>1e3&&U(),E.push(ye);let g=le(Ae,ye,ae,{top:we,optional:Pe});return E.pop(),g},le=(Ae,ye,ae,{top:we,optional:Pe})=>{if(a.has(ye.locatorHash))return;a.add(ye.locatorHash),Pe||n.delete(ye.locatorHash);let g=o.get(ye.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${jr(t.configuration,ye)}) should have been registered`);let Ee=[],De=[],ce=[],ne=[],ee=[];for(let ke of Array.from(g.dependencies.values())){if(g.peerDependencies.has(ke.identHash)&&g.locatorHash!==we)continue;if(Sf(ke))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(ke.descriptorHash);let ht=Pe;if(!ht){let Te=g.dependenciesMeta.get(fn(ke));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(ht=!0)}}let H=r.get(ke.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${qn(t.configuration,ke)}) should have been registered`);let lt=L.get(H)||o.get(H);if(!lt)throw new Error(`Assertion failed: The package (${H}, resolved from ${qn(t.configuration,ke)}) should have been registered`);if(lt.peerDependencies.size===0){te(ke,lt,new Map,{top:we,optional:ht});continue}let Re,Qe,be=new Set,_e;De.push(()=>{Re=nO(ke,ye.locatorHash),Qe=iO(lt,ye.locatorHash),g.dependencies.delete(ke.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,Qe.locatorHash),e.set(Re.descriptorHash,Re),o.set(Qe.locatorHash,Qe),Ee.push([lt,Re,Qe])}),ce.push(()=>{_e=new Map;for(let Te of Qe.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&r1(ye,Te)&&(Ae.identHash===ye.identHash?Je=Ae:(Je=In(ye,Ae.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,ye.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&Qe.dependencies.has(Te.identHash)){Qe.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),Qe.dependencies.set(Je.identHash,Je),Sf(Je)&&dd(b,Je.descriptorHash).add(Qe.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&be.add(Je.identHash),_e.set(Te.identHash,ae.get(Te.identHash)??Qe.locatorHash)}Qe.dependencies=new Map(ks(Qe.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(Qe.locatorHash))return;let Te=h.get(lt.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(lt.locatorHash),He=typeof Je<"u"?Je+1:1;h.set(lt.locatorHash,He),te(Re,Qe,_e,{top:we,optional:ht}),h.set(lt.locatorHash,He-1)}),ee.push(()=>{let Te=g.dependencies.get(ke.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(dd(T,Je).add(ye.locatorHash),!!o.has(Qe.locatorHash)){for(let He of Qe.peerDependencies.values()){let x=_e.get(He.identHash);if(typeof x>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Gy(Yy(C,x),fn(He)).push(Qe.locatorHash)}for(let He of be)Qe.dependencies.delete(He)}})}for(let ke of[...De,...ce])ke();let Ie;do{Ie=!0;for(let[ke,ht,H]of Ee){let lt=Yy(v,ke.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${qn(t.configuration,Te)} to have been registered`);return Je===we?`${Je} (top)`:Je}),ht.identHash),Qe=lt.get(Re);if(typeof Qe>"u"){lt.set(Re,ht);continue}if(Qe===ht)continue;o.delete(H.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(H.locatorHash);let be=b.get(ht.descriptorHash)||[],_e=[g.locatorHash,...be];b.delete(ht.descriptorHash);for(let Te of _e){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(ht.identHash).descriptorHash!==Qe.descriptorHash&&(Ie=!1),Je.dependencies.set(ht.identHash,Qe))}}}while(!Ie);for(let ke of[...ne,...ee])ke()};for(let Ae of t.workspaces){let ye=Ae.anchoredLocator;p.delete(Ae.anchoredDescriptor.descriptorHash),te(Ae.anchoredDescriptor,ye,new Map,{top:ye.locatorHash,optional:!1})}let pe=new Map;for(let[Ae,ye]of T){let ae=o.get(Ae);if(typeof ae>"u")throw new Error("Assertion failed: Expected the root to be registered");let we=C.get(Ae);if(!(typeof we>"u"))for(let Pe of ye){let g=o.get(Pe);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,De]of we){let ce=Js(Ee);if(g.peerDependencies.has(ce.identHash))continue;let ne=`p${zs(Pe,Ee,Ae).slice(0,5)}`;u.set(ne,{subject:Pe,requested:ce,rootRequester:Ae,allRequesters:De});let ee=ae.dependencies.get(ce.identHash);if(typeof ee<"u"){let Ie=J(ee),ke=Ie.version??"0.0.0",ht=new Set;for(let lt of De){let Re=o.get(lt);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let Qe=Re.peerDependencies.get(ce.identHash);if(typeof Qe>"u")throw new Error("Assertion failed: Expected the ident to be registered");ht.add(Qe.range)}if(![...ht].every(lt=>{if(lt.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;lt=lt.slice(Xn.protocol.length),(lt==="^"||lt==="~")&&(lt="*")}return bf(ke,lt)})){let lt=ol(pe,Ie.locatorHash,()=>({type:2,requested:ce,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:ke,hash:`p${Ie.locatorHash.slice(0,5)}`}));lt.dependents.set(g.locatorHash,g),lt.requesters.set(ae.locatorHash,ae);for(let Re of De)lt.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:ce,requester:ae,version:ke,hash:ne,requirementCount:De.length})}}else ae.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:ce,requester:ae,hash:ne})}}}A.push(...pe.values())}function LAt(t,e){let r=BL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=aO(u),h=p?lE(t.configuration,p):Ot(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${s1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Ot(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${jr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Ot(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Ot(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Ot(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>zy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>zy.default(u)))e.reportWarning(2,n)})}var ek,tk,rk,Xpe,F_,Q_,T_,nk,kAt,QAt,Jpe,FAt,TAt,RAt,pl,k_,ik,zpe,St,Zpe=Et(()=>{Pt();Pt();Nl();qt();ek=Be("crypto");w_();tk=$e(S_()),rk=$e(nd()),Xpe=$e(zn()),F_=Be("util"),Q_=$e(Be("v8")),T_=$e(Be("zlib"));f_();D1();p_();h_();AE();fO();Yl();Vpe();L1();x_();Bd();b_();VS();ql();rh();jl();Dx();DU();kf();xo();nk=Ky(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),kAt=3,QAt=/ *, */g,Jpe=/\/$/,FAt=32,TAt=(0,F_.promisify)(T_.default.gzip),RAt=(0,F_.promisify)(T_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),k_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},ik=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(ik||{}),zpe=t=>zs(`${kAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(K.join(n,dr.manifest))){o=n;break}a=K.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ve.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ve.telemetry?.reportWorkspaceCount(u.workspaces.length),Ve.telemetry?.reportDependencyCount(u.workspaces.reduce((C,T)=>C+T.manifest.dependencies.size+T.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ot(e,u.cwd,yt.PATH),E=Ot(e,K.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,b=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ot(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Ot(e,u.cwd,yt.PATH)}. - -${[I,v,b].join(` -`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=K.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=zpe(o);let a=Vi(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Mt;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,b=p.linkType.toUpperCase(),C=p.conditions??null,T=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let pe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,pe)}let le={...h,version:I,languageName:v,linkType:b,conditions:C,dependencies:T,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(le.locatorHash,le);for(let pe of A.split(QAt)){let Ae=nh(pe);n<=6&&(Ae=this.configuration.normalizeDependency(Ae),Ae=In(Ae,Ae.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(Ae.descriptorHash,Ae),this.storedResolutions.set(Ae.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,rk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new lC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){K.isAbsolute(e)||(e=K.resolve(this.cwd,e)),e=K.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)K.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!ba(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(Sf(e)&&(e=e1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${qn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=t1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)Sf(o)&&e.dependencies.set(r,e1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Xpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Jpe,"")!==e.replace(Jpe,""))continue;return A}}return null}async loadUserConfig(){let e=K.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&vf(e).setup();let r=K.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?vf(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!r1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new sC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new $b(a)]:[n,a],A=new vd([new oC(a),...u]),p=new vd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],le=_4(),pe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ce=>{let ne=async H=>{let lt=await Wy(async()=>await A.resolve(H,E),_e=>`${jr(this.configuration,H)}: ${_e}`);if(!n1(H,lt))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,H)} to ${jr(this.configuration,lt)})`);C.set(lt.locatorHash,lt),!r.delete(lt.locatorHash)&&!this.tryWorkspaceByLocator(lt)&&o.push(lt);let Qe=await this.preparePackage(lt,{resolver:A,resolveOptions:E}),be=Uc([...Qe.dependencies.values()].map(_e=>ht(_e)));return te.push(be),be.catch(()=>{}),v.set(Qe.locatorHash,Qe),Qe},ee=async H=>{let lt=T.get(H.locatorHash);if(typeof lt<"u")return lt;let Re=Promise.resolve().then(()=>ne(H));return T.set(H.locatorHash,Re),Re},Ie=async(H,lt)=>{let Re=await ht(lt);return I.set(H.descriptorHash,H),b.set(H.descriptorHash,Re.locatorHash),Re},ke=async H=>{ce.setTitle(qn(this.configuration,H));let lt=this.resolutionAliases.get(H.descriptorHash);if(typeof lt<"u")return Ie(H,this.storedDescriptors.get(lt));let Re=A.getResolutionDependencies(H,E),Qe=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let He=A.bindDescriptor(Je,U,E),x=await ht(He);return J.add(x.locatorHash),[Te,x]}))),_e=(await Wy(async()=>await A.getCandidates(H,Qe,E),Te=>`${qn(this.configuration,H)}: ${Te}`))[0];if(typeof _e>"u")throw new zt(82,`${qn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,Qe,[_e],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===_e.locatorHash))throw new zt(78,`Invalid resolution ${XI(this.configuration,H,_e)}`)}return I.set(H.descriptorHash,H),b.set(H.descriptorHash,_e.locatorHash),ee(_e)},ht=H=>{let lt=L.get(H.descriptorHash);if(typeof lt<"u")return lt;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>ke(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let lt=H.anchoredDescriptor;te.push(ht(lt))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let Ae=sl(r.values(),ce=>this.tryWorkspaceByLocator(ce)?sl.skip:ce);if(o.length>0||Ae.length>0){let ce=new Set(this.workspaces.flatMap(H=>{let lt=v.get(H.anchoredLocator.locatorHash);if(!lt)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(lt.dependencies.values(),Re=>{let Qe=b.get(Re.descriptorHash);if(!Qe)throw new Error("Assertion failed: The resolution should have been registered");return Qe})})),ne=H=>ce.has(H.locatorHash)?"0":"1",ee=H=>xa(H),Ie=ks(o,[ne,ee]),ke=ks(Ae,[ne,ee]),ht=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"+",yt.ADDED)} ${cS(this.configuration,Ie,ht)}`),ke.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"-",yt.REMOVED)} ${cS(this.configuration,ke,ht)}`)}let ye=new Set(this.resolutionAliases.values()),ae=new Set(v.keys()),we=new Set,Pe=new Map,g=[];NAt({project:this,accessibleLocators:we,volatileDescriptors:ye,optionalBuilds:ae,peerRequirements:Pe,peerWarnings:g,allDescriptors:I,allResolutions:b,allPackages:v});for(let ce of J)ae.delete(ce);for(let ce of ye)I.delete(ce),b.delete(ce);let Ee=new Set,De=new Set;for(let ce of v.values())ce.conditions!=null&&(!ae.has(ce.locatorHash)||(qS(ce,pe)||(qS(ce,le)&&e.report.reportWarningOnce(77,`${jr(this.configuration,ce)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ot(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),De.add(ce.locatorHash)),Ee.add(ce.locatorHash)));this.storedResolutions=b,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=we,this.conditionalLocators=Ee,this.disabledLocators=De,this.originalPackages=C,this.optionalBuilds=ae,this.peerRequirements=Pe,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");return xa(T)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,rk.default)(FAt);if(await Uc(h.map(C=>v(async()=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");if(Hc(T))return;let L;try{L=await A.fetch(T,p)}catch(U){U.message=`${jr(this.configuration,T)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(T.locatorHash,L.checksum):this.storedChecksums.delete(T.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let b=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||b){let T=(await Promise.all([...r.cacheMisses].map(async Ae=>{let ye=this.storedPackages.get(Ae),ae=this.storedChecksums.get(Ae)??null,we=e.getLocatorPath(ye,ae);return(await oe.statPromise(we)).size}))).reduce((Ae,ye)=>Ae+ye,0)-(b?.size??0),L=r.cacheMisses.size,U=b?.count??0,J=`${nS(L,{zero:"No new packages",one:"A package was",more:`${Ot(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nS(U,{zero:"none were",one:"one was",more:`${Ot(this.configuration,U,yt.NUMBER)} were`})} removed`,le=T!==0?` (${Ot(this.configuration,T,yt.SIZE_DIFF)})`:"",pe=U>0?L>0?`${J}, and ${te}${le}.`:`${J}, but ${te}${le}.`:`${J}${le}.`;r.reportInfo(13,pe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ce=>{let ne=ce.makeInstaller(h),ee=ce.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[ce,ne]})),I=new Map,v=new Map,b=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async ce=>{let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[ce,await u.fetch(ne,A)]}))),T=[],L=new Set,U=[];for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],ke=H=>{Ie.push(H)},ht=this.tryWorkspaceByLocator(ne);if(ht!==null){let H=[],{scripts:lt}=ht.manifest;for(let Qe of["preinstall","install","postinstall"])lt.has(Qe)&&H.push({type:0,script:Qe});try{for(let[Qe,be]of E)if(Qe.supportsPackage(ne,h)&&(await be.installPackage(ne,ee,{holdFetchResult:ke})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=K.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&b.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(Qe=>Qe.supportsPackage(ne,h));if(!H)throw new zt(12,`${jr(this.configuration,ne)} isn't supported by any available linker`);let lt=E.get(H);if(!lt)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await lt.installPackage(ne,ee,{holdFetchResult:ke})}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):b.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(ke,ht)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,ne)}) should have been registered`);let lt=[];for(let Re of ne.dependencies.values()){let Qe=this.storedResolutions.get(Re.descriptorHash);if(typeof Qe>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,Re)}, from ${jr(this.configuration,ne)})should have been registered`);let be=this.storedPackages.get(Qe);if(typeof be>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);let _e=this.tryWorkspaceByLocator(be)===null?I.get(Qe):null;if(typeof _e>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);_e===ke||_e===null?v.get(be.locatorHash)!==null&<.push([Re,be]):!ee&&H!==null&&Gy(J,Qe).push(H)}H!==null&&await ht.attachInternalDependencies(ne,lt)};if(ee)for(let[ke,ht]of E)ke.supportsPackage(ne,h)&&await Ie(ke,ht);else{let ke=I.get(ne.locatorHash);if(!ke)throw new Error("Assertion failed: The linker should have been found");let ht=E.get(ke);if(!ht)throw new Error("Assertion failed: The installer should have been registered");await Ie(ke,ht)}}for(let[ce,ne]of J){let ee=this.storedPackages.get(ce);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let ke=E.get(Ie);if(!ke)throw new Error("Assertion failed: The installer should have been registered");await ke.attachExternalDependents(ee,ne)}let te=new Map;for(let[ce,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):b.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(ce.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(T),a==="skip-build")return;for(let[,ce]of ks(U,([ne])=>xa(ne)))ce(r);let le=new Set(this.storedPackages.keys()),pe=new Set(b.keys());for(let ce of pe)le.delete(ce);let Ae=(0,ek.createHash)("sha512");Ae.update(process.versions.node),await this.configuration.triggerHook(ce=>ce.globalHashGeneration,this,ce=>{Ae.update("\0"),Ae.update(ce)});let ye=Ae.digest("hex"),ae=new Map,we=ce=>{let ne=ae.get(ce.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(ce.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,ek.createHash)("sha512");Ie.update(ce.locatorHash),ae.set(ce.locatorHash,"");for(let ke of ee.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);let H=this.storedPackages.get(ht);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(we(H))}return ne=Ie.digest("hex"),ae.set(ce.locatorHash,ne),ne},Pe=(ce,ne)=>{let ee=(0,ek.createHash)("sha512");ee.update(ye),ee.update(we(ce));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,De=ce=>{let ne=new Set([ce.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let ke of Ie.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(!ht)throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);if(ht!==ce.locatorHash&&pe.has(ht))return!1;let H=this.storedPackages.get(ht);if(!H)throw new Error("Assertion failed: The package should have been registered");let lt=this.tryWorkspaceByLocator(H);if(lt){if(lt.anchoredLocator.locatorHash!==ce.locatorHash&&pe.has(lt.anchoredLocator.locatorHash))return!1;ne.add(lt.anchoredLocator.locatorHash)}ne.add(ht)}}return!0};for(;pe.size>0;){let ce=pe.size,ne=[];for(let ee of pe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!De(Ie))continue;let ke=b.get(Ie.locatorHash);if(!ke)throw new Error("Assertion failed: The build directive should have been registered");let ht=Pe(Ie,ke.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===ht){g.set(Ie.locatorHash,ht),pe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${jr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=ke.buildLocations.map(async lt=>{if(!K.isAbsolute(lt))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${lt})`);for(let Re of ke.buildDirectives){let Qe=`# This file contains the result of Yarn building a package (${xa(Ie)}) -`;switch(Re.type){case 0:Qe+=`# Script name: ${Re.script} -`;break;case 1:Qe+=`# Script code: ${Re.script} -`;break}let be=null;if(!await oe.mktempPromise(async Te=>{let Je=K.join(Te,"build.log"),{stdout:He,stderr:x}=this.configuration.getSubprocessStreams(Je,{header:Qe,prefix:jr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Vx(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break;case 1:w=await wU(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break}}catch(F){x.write(F.stack),w=1}if(He.end(),x.end(),w===0)return!0;oe.detachTemp(Te);let S=`${jr(this.configuration,Ie)} couldn't be built successfully (exit code ${Ot(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Ot(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),Jce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(lt=>{pe.delete(ee),lt.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,ht)}))}if(await Uc(ne),ce===pe.size){let ee=Array.from(pe).map(Ie=>{let ke=this.storedPackages.get(Ie);if(!ke)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,ke)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ve.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=K.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{LAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let b=Ot(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${b}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${b}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=Ug(u,this.generateLockfile());if(E!==u){let I=ppe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let b of v.lines)b.startsWith("+")?e.report.reportError(28,Ot(this.configuration,b,yt.ADDED)):b.startsWith("-")?e.report.reportError(28,Ot(this.configuration,b,yt.REMOVED)):e.report.reportInfo(null,Ot(this.configuration,b,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ve.telemetry?.reportPackageExtension(yd(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>MS(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ot(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>MS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:nk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let b of u){let C=this.storedDescriptors.get(b);if(!C)throw new Error("Assertion failed: The descriptor should have been registered");p.push(C)}let h=p.map(b=>Sa(b)).sort().join(", "),E=new Mt;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin);let I,v=this.storedChecksums.get(A.locatorHash);if(typeof v<"u"){let b=v.indexOf("/");if(b===-1)throw new Error("Assertion failed: Expected the checksum to reference its cache key");let C=v.slice(0,b),T=v.slice(b+1);C===o?I=T:I=v}r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:xa(A),checksum:I,conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. -`,`# Manual changes might be lost - proceed with caution! -`].join("")} -`+Ba(r)}async persistLockfile(){let e=K.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Ug(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=zpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(k_))e.push(...u);let r=(0,tk.default)(this,e),o=Q_.default.serialize(r),a=zs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(K.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await TAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await RAt(await oe.readFilePromise(a));n=Q_.default.deserialize(u),this.installStateChecksum=zs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,tk.default)(n,k_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,tk.default)(n,k_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,rk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!IO(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=K.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ot(this.configuration,K.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function MAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var cC,$pe=Et(()=>{Pt();N1();rh();Bx();jl();kf();cC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&tn?bf(tn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){dd(this.values,e).add(r)}reportEnumerator(e,r){dd(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Yy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return K.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=MAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(K.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>U4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let b=v;b.userId=I,b.reportType="primary";for(let L of Object.keys(b.enumerators??{}))b.enumerators[L]=b.enumerators[L].length;E(b);let C=new Map,T=20;for(let[L,U]of Object.entries(b.values))U.length>0&&C.set(L,U.slice(0,T));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(K.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var s2={};Kt(s2,{BuildDirectiveType:()=>zb,CACHE_CHECKPOINT:()=>A_,CACHE_VERSION:()=>Jb,Cache:()=>Lr,Configuration:()=>Ve,DEFAULT_RC_FILENAME:()=>W4,FormatType:()=>Qle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>B1,LOCKFILE_VERSION:()=>nk,LegacyMigrationResolver:()=>sC,LightReport:()=>AA,LinkType:()=>Jy,LockfileResolver:()=>oC,Manifest:()=>Mt,MessageName:()=>wr,MultiFetcher:()=>pE,PackageExtensionStatus:()=>DL,PackageExtensionType:()=>vL,PeerWarningType:()=>ik,Project:()=>St,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>v1,StreamReport:()=>Nt,TAG_REGEXP:()=>QE,TelemetryManager:()=>cC,ThrowReport:()=>Qi,VirtualFetcher:()=>hE,WindowsLinkType:()=>kx,Workspace:()=>lC,WorkspaceFetcher:()=>dE,WorkspaceResolver:()=>Xn,YarnVersion:()=>tn,execUtils:()=>Ur,folderUtils:()=>WS,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>rn,miscUtils:()=>je,nodeUtils:()=>Ji,parseMessageName:()=>fP,reportOptionDeprecations:()=>NE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Px();VS();ql();rh();Bx();jl();Dx();DU();kf();xo();$fe();ope();f_();D1();D1();lpe();p_();cpe();h_();AE();pP();AO();Zpe();Yl();L1();$pe();x_();pO();hO();Bd();b_();N1();Ine()});var she=_((K_t,a2)=>{"use strict";var UAt=process.env.TERM_PROGRAM==="Hyper",_At=process.platform==="win32",rhe=process.platform==="linux",R_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},nhe=Object.assign({},R_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),ihe=Object.assign({},R_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:rhe?"\u25B8":"\u276F",pointerSmall:rhe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});a2.exports=_At&&!UAt?nhe:ihe;Reflect.defineProperty(a2.exports,"common",{enumerable:!1,value:R_});Reflect.defineProperty(a2.exports,"windows",{enumerable:!1,value:nhe});Reflect.defineProperty(a2.exports,"other",{enumerable:!1,value:ihe})});var Vc=_((J_t,N_)=>{"use strict";var HAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),jAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ohe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` -`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=jAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!HAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=she(),t.define=a,t};N_.exports=ohe();N_.exports.create=ohe});var No=_(nn=>{"use strict";var qAt=Object.prototype.toString,rc=Vc(),ahe=!1,L_=[],lhe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};nn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);nn.hasColor=t=>!!t&&rc.hasColor(t);var ok=nn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);nn.nativeType=t=>qAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");nn.isAsyncFn=t=>nn.nativeType(t)==="asyncfunction";nn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";nn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;nn.scrollDown=(t=[])=>[...t.slice(1),t[0]];nn.scrollUp=(t=[])=>[t.pop(),...t];nn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};nn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};nn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};nn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` -`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};nn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};nn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";nn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+nn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};nn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[lhe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=lhe[o];return a&&rc["bg"+nn.pascal(a)]||t}return rc.none};nn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};nn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!nn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};nn.mixin=(t,e)=>{if(!ok(t))return e;if(!ok(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ok(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ok(a.value)?t[r]=nn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};nn.merge=(...t)=>{let e={};for(let r of t)nn.mixin(e,r);return e};nn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?nn.define(t,o,a.bind(e)):nn.define(t,o,a)}};nn.onExit=t=>{let e=(r,o)=>{ahe||(ahe=!0,L_.forEach(a=>a()),r===!0&&process.exit(128+o))};L_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),L_.push(t)};nn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};nn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var che=_(pC=>{"use strict";pC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};pC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};pC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};pC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};pC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var fhe=_((Z_t,Ahe)=>{"use strict";var uhe=Be("readline"),GAt=che(),YAt=/^(?:\x1b)([a-zA-Z0-9])$/,WAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,VAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function KAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function JAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var ak=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` -`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=YAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=WAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=VAt[n],o.shift=KAt(n)||o.shift,o.ctrl=JAt(n)||o.ctrl}return o};ak.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=uhe.createInterface({terminal:!0,input:r});uhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,ak(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};ak.action=(t,e,r)=>{let o={...GAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};Ahe.exports=ak});var hhe=_(($_t,phe)=>{"use strict";phe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),zAt(t,r,o)}};function zAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var dhe=_((e8t,ghe)=>{"use strict";var{define:XAt,width:ZAt}=No(),M_=class{constructor(e){let r=e.options;XAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=ZAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};ghe.exports=M_});var yhe=_((t8t,mhe)=>{"use strict";var O_=No(),eo=Vc(),U_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||O_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||O_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};U_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=O_.merge({},U_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var __=process.platform==="win32",Vf=Vc(),$At=No(),H_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:__?"( )":"\u25EF",on:__?"(*)":"\u25C9",disabled:__?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};H_.merge=t=>{let e=$At.merge({},Vf.symbols,H_,t.symbols);return delete e.merge,e};Ehe.exports=H_});var Ihe=_((n8t,whe)=>{"use strict";var eft=yhe(),tft=Che(),rft=No();whe.exports=t=>{t.options=rft.merge({},t.options.theme,t.options),t.symbols=tft.merge(t.options),t.styles=eft.merge(t.options)}});var She=_((Dhe,Phe)=>{"use strict";var Bhe=process.env.TERM_PROGRAM==="Apple_Terminal",nft=Vc(),j_=No(),Kc=Phe.exports=Dhe,Di="\x1B[",vhe="\x07",q_=!1,Ph=Kc.code={bell:vhe,beep:vhe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(Bhe?"8":"u"),savePosition:Di+(Bhe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},qd=Kc.cursor={get hidden(){return q_},hide(){return q_=!0,Ph.hide},show(){return q_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?qd.left(-t):t>0?qd.right(t):"",r+=e<0?qd.up(-e):e>0?qd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=j_.isPrimitive(o)?String(o):"",a=j_.isPrimitive(a)?String(a):"",A=j_.isPrimitive(A)?String(A):"",u){let p=Kc.cursor.up(u)+Kc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Kc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Kc.cursor.move(p)}}},G_=Kc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return G_.line+qd.to(0);let r=n=>[...nft.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(G_.line+qd.prevLine()).repeat(a-1)+G_.line+qd.to(0)}});var hC=_((i8t,bhe)=>{"use strict";var ift=Be("events"),xhe=Vc(),Y_=fhe(),sft=hhe(),oft=dhe(),aft=Ihe(),Ta=No(),Gd=She(),l2=class extends ift{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,aft(this),sft(this),this.state=new oft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=cft(this.options.margin),this.setMaxListeners(0),lft(this)}async keypress(e,r={}){this.keypressed=!0;let o=Y_.action(e,Y_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Gd.code.beep)}cursorHide(){this.stdout.write(Gd.cursor.hide()),Ta.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Gd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Gd.cursor.down(e)+Gd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Gd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=xhe.unstyle(o);let a=xhe.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` -`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,b=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ta.isObject(e)&&(e=e[o.status]||e.pending),Ta.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ta.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ta.isObject(n)&&(n=n[o.status]||n.pending),Ta.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ta.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ta.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ta.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ta.resolve(this,e,...r)}get base(){return l2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ta.height(this.stdout,25)}get width(){return this.options.columns||Ta.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function lft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function cft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` -`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}bhe.exports=l2});var Fhe=_((s8t,Qhe)=>{"use strict";var uft=No(),khe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return khe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};Qhe.exports=(t,e={})=>{let r=uft.merge({},khe,e.roles);return r[t]||r.default}});var c2=_((o8t,Nhe)=>{"use strict";var Aft=Vc(),fft=hC(),pft=Fhe(),lk=No(),{reorder:W_,scrollUp:hft,scrollDown:gft,isObject:The,swap:dft}=lk,V_=class extends fft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");The(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=pft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,lk.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,Aft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Rhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=W_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=W_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=W_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=hft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=gft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){dft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(The(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=lk.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Rhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Rhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(lk.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Nhe.exports=V_});var Sh=_((a8t,Lhe)=>{"use strict";var mft=c2(),K_=No(),J_=class extends mft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!K_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!K_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(K_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` -`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` -`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=J_});var Ohe=_((l8t,Mhe)=>{"use strict";var yft=Sh(),Eft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},z_=class extends yft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=Eft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Mhe.exports=z_});var Z_=_((c8t,Uhe)=>{"use strict";var X_=No();Uhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=X_.inverse(t.styles.primary),h=T=>p(t.styles.black(T)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=T=>T,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=X_.isPrimitive(o)?`${o}`:"",r=X_.isPrimitive(r)?`${r}`:"";let b=o&&o.startsWith(r)&&o!==r,C=b?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),b){let T=t.styles.unstyle(E+C);return E+C+A(o.slice(T.length))}return E+C}});var ck=_((u8t,_he)=>{"use strict";var Cft=Vc(),wft=Sh(),Ift=Z_(),$_=class extends wft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:b}=a,C=p,T=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(le="danger");let pe=a[le],Ae=pe(await this.indicator(e,r))+(e.pad||""),ye=this.indent(e),ae=()=>[ye,Ae,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=Cft.unstyle(J),h=I(h),C="",ae();if(e.format)h=await e.format.call(this,h,e,r);else{let we=this.styles.muted;h=Ift(this,{input:h,initial:u,pos:n,showCursor:T,color:we})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),T&&(J=v(J)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),ae()}async submit(){return this.value=this.values,super.base.submit.call(this)}};_he.exports=$_});var e8=_((A8t,jhe)=>{"use strict";var Bft=ck(),vft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Hhe=(t=vft)=>{class e extends Bft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Hhe(o)}}return e};jhe.exports=Hhe()});var Yhe=_((f8t,Ghe)=>{"use strict";var Dft=e8();function Pft(t,e){return t.username===this.options.username&&t.password===this.options.password}var qhe=(t=Pft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Dft.create(t){constructor(a){super({...a,choices:e})}static create(a){return qhe(a)}}return r};Ghe.exports=qhe()});var uk=_((p8t,Whe)=>{"use strict";var Sft=hC(),{isPrimitive:xft,hasColor:bft}=No(),t8=class extends Sft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return xft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return bft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` -`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Whe.exports=t8});var Khe=_((h8t,Vhe)=>{"use strict";var kft=uk(),r8=class extends kft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Vhe.exports=r8});var zhe=_((g8t,Jhe)=>{"use strict";var Qft=Sh(),Fft=ck(),gC=Fft.prototype,n8=class extends Qft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():gC.dispatch.call(this,e,r)}append(e,r){return gC.append.call(this,e,r)}delete(e,r){return gC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?gC.next.call(this):super.next()}prev(){return this.focused.editable?gC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?gC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Jhe.exports=n8});var Yd=_((d8t,Xhe)=>{"use strict";var Tft=hC(),Rft=Z_(),{isPrimitive:Nft}=No(),i8=class extends Tft{constructor(e){super(e),this.initial=Nft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` -`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):Rft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` -`)),this.restore()}};Xhe.exports=i8});var $he=_((m8t,Zhe)=>{"use strict";var Lft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),Ak=t=>Lft(t).filter(Boolean);Zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:Ak([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:Ak([...n,r]),present:u};case"save":return{past:Ak([...o,r]),present:""};case"remove":return u=Ak(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var o8=_((y8t,t0e)=>{"use strict";var Mft=Yd(),e0e=$he(),s8=class extends Mft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=e0e(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=e0e("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};t0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Oft=Yd(),a8=class extends Oft{format(){return""}};r0e.exports=a8});var s0e=_((C8t,i0e)=>{"use strict";var Uft=Yd(),l8=class extends Uft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};i0e.exports=l8});var a0e=_((w8t,o0e)=>{"use strict";var _ft=Sh(),c8=class extends _ft{constructor(e){super({...e,multiple:!0})}};o0e.exports=c8});var A8=_((I8t,l0e)=>{"use strict";var Hft=Yd(),u8=class extends Hft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};l0e.exports=u8});var u0e=_((B8t,c0e)=>{c0e.exports=A8()});var f0e=_((v8t,A0e)=>{"use strict";var jft=Yd(),f8=class extends jft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};A0e.exports=f8});var g0e=_((D8t,h0e)=>{"use strict";var qft=Vc(),Gft=c2(),p0e=No(),p8=class extends Gft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` - `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` -`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!p0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=qft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let b=p0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` -`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),b=b.map(C=>this.styles.info(C))),b[0]+=E,this.linebreak&&b.push(""),[p+a,b.join(` -`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` -`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),b=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&b!=null&&(u+=this.styles.danger(b)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` -`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};h0e.exports=p8});var y0e=_((P8t,m0e)=>{"use strict";var d0e=Vc(),Yft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",g8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Yft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Wft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],b=C=>{C.line=h,u.push(C)};for(b({type:"bos",value:""});Ele.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new g8(U),A.push(te)),te.lines.push(U.line-1);continue}let T=u[u.length-1];T.type==="text"&&T.line===h?T.value+=C:b({type:"text",value:C})}return b({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};m0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Wft(e,o),A=h8("result",t,e),p=h8("format",t,e),h=h8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let b=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,le,pe)=>{let Ae=await h(J,te,le,pe);return Ae===!1?"Invalid field "+le.name:Ae};for(let J of a){let te=J.value,le=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let pe=n.find(Pe=>Pe.name===le);e.required===!0&&I.required.add(pe.name);let Ae=[pe.input,I.values[pe.value],pe.value,te].find(E),ae=(pe.field||{}).message||J.inner;if(v){let Pe=await C(I.values[le],I,pe,b);if(Pe&&typeof Pe=="string"||Pe===!1){I.invalid.set(le,Pe);continue}I.invalid.delete(le);let g=await A(I.values[le],I,pe,b);I.output+=d0e.unstyle(g);continue}pe.placeholder=!1;let we=te;te=await p(te,I,pe,b),Ae!==te?(I.values[le]=Ae,te=t.styles.typing(Ae),I.missing.delete(ae)):(I.values[le]=void 0,Ae=`<${ae}>`,te=t.styles.primary(Ae),pe.placeholder=!0,I.required.has(le)&&I.missing.add(ae)),I.missing.has(ae)&&I.validating&&(te=t.styles.warning(Ae)),I.invalid.has(le)&&I.validating&&(te=t.styles.danger(Ae)),b===I.index&&(we!==te?te=t.styles.underline(te):te=t.styles.heading(d0e.unstyle(te))),b++}te&&(I.output+=te)}let T=I.output.split(` -`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{T[te][0]===" "&&(T[te]=I.styles.danger(I.symbols.bullet)+T[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=T.join(` -`),I.output}};function h8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var C0e=_((S8t,E0e)=>{"use strict";var Vft=Vc(),Kft=y0e(),Jft=hC(),d8=class extends Jft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Kft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` -`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",b=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",T=await this.format(C),L=await this.footer();T&&(h+=" "+T),v&&!T&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,b,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} -`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=Vft.unstyle(o).split(` -`).map(A=>A.slice(1)).join(` -`);return this.value={values:a,result:u},super.submit()}};E0e.exports=d8});var I0e=_((x8t,w0e)=>{"use strict";var zft="(Use + to sort)",Xft=Sh(),m8=class extends Xft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,zft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};w0e.exports=m8});var v0e=_((b8t,B0e)=>{"use strict";var Zft=c2(),y8=class extends Zft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` - `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=$ft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),b=this.indent(e),C=b+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),T=te=>te===e.scaleIdx?I(te):te,L=b+e.scale.map((te,le)=>T(le)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` -`);return o&&(C=this.styles.cyan(C),L=this.styles.cyan(L)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` -`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].filter(Boolean).join(` -`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function $ft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{D0e.exports=o8()});var x0e=_((Q8t,S0e)=>{"use strict";var ept=uk(),E8=class extends ept{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};S0e.exports=E8});var k0e=_((F8t,b0e)=>{"use strict";var tpt=Sh(),C8=class extends tpt{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};b0e.exports=C8});var F0e=_(w8=>{"use strict";var Q0e=No(),As=(t,e)=>{Q0e.defineExport(w8,t,e),Q0e.defineExport(w8,t.toLowerCase(),e)};As("AutoComplete",()=>Ohe());As("BasicAuth",()=>Yhe());As("Confirm",()=>Khe());As("Editable",()=>zhe());As("Form",()=>ck());As("Input",()=>o8());As("Invisible",()=>n0e());As("List",()=>s0e());As("MultiSelect",()=>a0e());As("Numeral",()=>u0e());As("Password",()=>f0e());As("Scale",()=>g0e());As("Select",()=>Sh());As("Snippet",()=>C0e());As("Sort",()=>I0e());As("Survey",()=>v0e());As("Text",()=>P0e());As("Toggle",()=>x0e());As("Quiz",()=>k0e())});var R0e=_((R8t,T0e)=>{T0e.exports={ArrayPrompt:c2(),AuthPrompt:e8(),BooleanPrompt:uk(),NumberPrompt:A8(),StringPrompt:Yd()}});var A2=_((N8t,L0e)=>{"use strict";var N0e=Be("assert"),B8=Be("events"),xh=No(),Jc=class extends B8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}N0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];N0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||hC()}static get prompts(){return F0e()}static get types(){return R0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new B8),e}};xh.mixinEmitter(Jc,new B8);var I8=Jc.prompts;for(let t of Object.keys(I8)){let e=t.toLowerCase(),r=o=>new I8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>I8[t]})}var u2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};u2("ArrayPrompt");u2("AuthPrompt");u2("BooleanPrompt");u2("NumberPrompt");u2("StringPrompt");L0e.exports=Jc});var g2=_((mHt,q0e)=>{var apt=Zb();function lpt(t,e,r){var o=t==null?void 0:apt(t,e);return o===void 0?r:o}q0e.exports=lpt});var W0e=_((BHt,Y0e)=>{function cpt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var upt=gd(),Apt=zP();function fpt(t,e){return t&&upt(e,Apt(e),t)}V0e.exports=fpt});var z0e=_((DHt,J0e)=>{var ppt=gd(),hpt=qy();function gpt(t,e){return t&&ppt(e,hpt(e),t)}J0e.exports=gpt});var Z0e=_((PHt,X0e)=>{var dpt=gd(),mpt=GP();function ypt(t,e){return dpt(t,mpt(t),e)}X0e.exports=ypt});var b8=_((SHt,$0e)=>{var Ept=qP(),Cpt=tS(),wpt=GP(),Ipt=KN(),Bpt=Object.getOwnPropertySymbols,vpt=Bpt?function(t){for(var e=[];t;)Ept(e,wpt(t)),t=Cpt(t);return e}:Ipt;$0e.exports=vpt});var tge=_((xHt,ege)=>{var Dpt=gd(),Ppt=b8();function Spt(t,e){return Dpt(t,Ppt(t),e)}ege.exports=Spt});var k8=_((bHt,rge)=>{var xpt=VN(),bpt=b8(),kpt=qy();function Qpt(t){return xpt(t,kpt,bpt)}rge.exports=Qpt});var ige=_((kHt,nge)=>{var Fpt=Object.prototype,Tpt=Fpt.hasOwnProperty;function Rpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&Tpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}nge.exports=Rpt});var oge=_((QHt,sge)=>{var Npt=$P();function Lpt(t,e){var r=e?Npt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}sge.exports=Lpt});var lge=_((FHt,age)=>{var Mpt=/\w*$/;function Opt(t){var e=new t.constructor(t.source,Mpt.exec(t));return e.lastIndex=t.lastIndex,e}age.exports=Opt});var pge=_((THt,fge)=>{var cge=fd(),uge=cge?cge.prototype:void 0,Age=uge?uge.valueOf:void 0;function Upt(t){return Age?Object(Age.call(t)):{}}fge.exports=Upt});var gge=_((RHt,hge)=>{var _pt=$P(),Hpt=oge(),jpt=lge(),qpt=pge(),Gpt=lL(),Ypt="[object Boolean]",Wpt="[object Date]",Vpt="[object Map]",Kpt="[object Number]",Jpt="[object RegExp]",zpt="[object Set]",Xpt="[object String]",Zpt="[object Symbol]",$pt="[object ArrayBuffer]",eht="[object DataView]",tht="[object Float32Array]",rht="[object Float64Array]",nht="[object Int8Array]",iht="[object Int16Array]",sht="[object Int32Array]",oht="[object Uint8Array]",aht="[object Uint8ClampedArray]",lht="[object Uint16Array]",cht="[object Uint32Array]";function uht(t,e,r){var o=t.constructor;switch(e){case $pt:return _pt(t);case Ypt:case Wpt:return new o(+t);case eht:return Hpt(t,r);case tht:case rht:case nht:case iht:case sht:case oht:case aht:case lht:case cht:return Gpt(t,r);case Vpt:return new o;case Kpt:case Xpt:return new o(t);case Jpt:return jpt(t);case zpt:return new o;case Zpt:return qpt(t)}}hge.exports=uht});var mge=_((NHt,dge)=>{var Aht=qI(),fht=Ju(),pht="[object Map]";function hht(t){return fht(t)&&Aht(t)==pht}dge.exports=hht});var wge=_((LHt,Cge)=>{var ght=mge(),dht=WP(),yge=VP(),Ege=yge&&yge.isMap,mht=Ege?dht(Ege):ght;Cge.exports=mht});var Bge=_((MHt,Ige)=>{var yht=qI(),Eht=Ju(),Cht="[object Set]";function wht(t){return Eht(t)&&yht(t)==Cht}Ige.exports=wht});var Sge=_((OHt,Pge)=>{var Iht=Bge(),Bht=WP(),vge=VP(),Dge=vge&&vge.isSet,vht=Dge?Bht(Dge):Iht;Pge.exports=vht});var Q8=_((UHt,Qge)=>{var Dht=HP(),Pht=W0e(),Sht=rS(),xht=K0e(),bht=z0e(),kht=aL(),Qht=eS(),Fht=Z0e(),Tht=tge(),Rht=ZN(),Nht=k8(),Lht=qI(),Mht=ige(),Oht=gge(),Uht=cL(),_ht=Hl(),Hht=OI(),jht=wge(),qht=il(),Ght=Sge(),Yht=zP(),Wht=qy(),Vht=1,Kht=2,Jht=4,xge="[object Arguments]",zht="[object Array]",Xht="[object Boolean]",Zht="[object Date]",$ht="[object Error]",bge="[object Function]",e0t="[object GeneratorFunction]",t0t="[object Map]",r0t="[object Number]",kge="[object Object]",n0t="[object RegExp]",i0t="[object Set]",s0t="[object String]",o0t="[object Symbol]",a0t="[object WeakMap]",l0t="[object ArrayBuffer]",c0t="[object DataView]",u0t="[object Float32Array]",A0t="[object Float64Array]",f0t="[object Int8Array]",p0t="[object Int16Array]",h0t="[object Int32Array]",g0t="[object Uint8Array]",d0t="[object Uint8ClampedArray]",m0t="[object Uint16Array]",y0t="[object Uint32Array]",ri={};ri[xge]=ri[zht]=ri[l0t]=ri[c0t]=ri[Xht]=ri[Zht]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=ri[h0t]=ri[t0t]=ri[r0t]=ri[kge]=ri[n0t]=ri[i0t]=ri[s0t]=ri[o0t]=ri[g0t]=ri[d0t]=ri[m0t]=ri[y0t]=!0;ri[$ht]=ri[bge]=ri[a0t]=!1;function pk(t,e,r,o,a,n){var u,A=e&Vht,p=e&Kht,h=e&Jht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!qht(t))return t;var E=_ht(t);if(E){if(u=Mht(t),!A)return Qht(t,u)}else{var I=Lht(t),v=I==bge||I==e0t;if(Hht(t))return kht(t,A);if(I==kge||I==xge||v&&!a){if(u=p||v?{}:Uht(t),!A)return p?Tht(t,bht(u,t)):Fht(t,xht(u,t))}else{if(!ri[I])return a?t:{};u=Oht(t,I,A)}}n||(n=new Dht);var b=n.get(t);if(b)return b;n.set(t,u),Ght(t)?t.forEach(function(L){u.add(pk(L,e,r,L,t,n))}):jht(t)&&t.forEach(function(L,U){u.set(U,pk(L,e,r,U,t,n))});var C=h?p?Nht:Rht:p?Wht:Yht,T=E?void 0:C(t);return Pht(T||t,function(L,U){T&&(U=L,L=t[U]),Sht(u,U,pk(L,e,r,U,t,n))}),u}Qge.exports=pk});var F8=_((_Ht,Fge)=>{var E0t=Q8(),C0t=1,w0t=4;function I0t(t){return E0t(t,C0t|w0t)}Fge.exports=I0t});var T8=_((HHt,Tge)=>{var B0t=v_();function v0t(t,e,r){return t==null?t:B0t(t,e,r)}Tge.exports=v0t});var Oge=_((VHt,Mge)=>{var D0t=Object.prototype,P0t=D0t.hasOwnProperty;function S0t(t,e){return t!=null&&P0t.call(t,e)}Mge.exports=S0t});var _ge=_((KHt,Uge)=>{var x0t=Oge(),b0t=D_();function k0t(t,e){return t!=null&&b0t(t,e,x0t)}Uge.exports=k0t});var jge=_((JHt,Hge)=>{function Q0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Hge.exports=Q0t});var Gge=_((zHt,qge)=>{var F0t=Zb(),T0t=gU();function R0t(t,e){return e.length<2?t:F0t(t,T0t(e,0,-1))}qge.exports=R0t});var N8=_((XHt,Yge)=>{var N0t=jd(),L0t=jge(),M0t=Gge(),O0t=aC();function U0t(t,e){return e=N0t(e,t),t=M0t(t,e),t==null||delete t[O0t(L0t(e))]}Yge.exports=U0t});var L8=_((ZHt,Wge)=>{var _0t=N8();function H0t(t,e){return t==null?!0:_0t(t,e)}Wge.exports=H0t});var Xge=_((S6t,G0t)=>{G0t.exports={name:"@yarnpkg/cli",version:"4.0.2",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var Y8=_((n5t,ude)=>{"use strict";ude.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var fde=_((i5t,Ade)=>{"use strict";var cgt=Y8();function ugt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=cgt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}Ade.exports=ugt});var gde=_((s5t,hde)=>{"use strict";var Agt=fde();function fgt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var pgt=fgt(Agt),hgt="text/plain",ggt="us-ascii",pde=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),dgt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,b=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(b=b.toLowerCase(),b===ggt)?"":`${v}${b?`=${b}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==hgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function mgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return dgt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,b=a.pathname.slice(A,v);p+=b.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];pde(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])pde(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var W8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>W8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=mgt(t,e));let a=pgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};W8.MAX_INPUT_LENGTH=2048;hde.exports=W8});var yde=_((o5t,mde)=>{"use strict";var ygt=Y8();function dde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=ygt(t);if(t=t.substring(t.indexOf("://")+3),dde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var Egt=gde(),Ede=yde();function Cgt(t){var e=Egt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),Ede(e.protocols)||e.protocols.length===0&&Ede(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}Cde.exports=Cgt});var Bde=_((l5t,Ide)=>{"use strict";var wgt=wde();function V8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=wgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return V8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var b=a.length>n&&a[n+1]==="-"?n+1:n;a.length>b+2&&["raw","src","blob","tree","edit"].indexOf(a[b+1])>=0&&(r.filepathtype=a[b+1],r.ref=a[b+2],a.length>b+3&&(r.filepath=a.slice(b+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,T=C.exec(r.pathname);return T!=null&&(r.source="bitbucket-server",T[1]==="users"?r.owner="~"+T[2]:r.owner=T[2],r.organization=r.owner,r.name=T[3],a=T[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}V8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?Igt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+Bgt(t)+a;default:return t.href}};function Igt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function Bgt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ide.exports=V8});var Ude=_((H9t,Ode)=>{var Rgt=jx(),Ngt=eS(),Lgt=Hl(),Mgt=fE(),Ogt=B_(),Ugt=aC(),_gt=R1();function Hgt(t){return Lgt(t)?Rgt(t,Ugt):Mgt(t)?[t]:Ngt(Ogt(_gt(t)))}Ode.exports=Hgt});function Ygt(t,e){return e===1&&Ggt.has(t[0])}function I2(t){let e=Array.isArray(t)?t:(0,jde.default)(t);return e.map((o,a)=>jgt.test(o)?`[${o}]`:qgt.test(o)&&!Ygt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Wgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function mk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(b=>({text:b,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[b,C]of p){if(C.size>1){let T=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Wgt(t.configuration,U.values().next().value):null;return te!==null?` -${J} at ${te}`:` -${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,b,de.Type.CODE)}; conflicting values are:${T}`,fixable:!1})}else{let[[T]]=C,L=(0,_de.default)(v,b);if(JSON.stringify(L)===JSON.stringify(T))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}`:typeof T>"u"?`Extraneous field ${de.pretty(t.configuration,b,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof T>"u"?(0,qde.default)(v,b):(0,Hde.default)(v,b,T),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Gde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:je.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=je.sortMap(r.children,o=>o.value[1]),r}var _de,Hde,jde,qde,CC,jgt,qgt,Ggt,B2=Et(()=>{Ye();_de=$e(g2()),Hde=$e(T8()),jde=$e(Ude()),qde=$e(L8()),CC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;je.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},jgt=/^[0-9]+$/,qgt=/^[a-zA-Z0-9_]+$/,Ggt=new Set(["scripts",...Mt.allDependencies])});var Yde=_(($9t,aH)=>{var Vgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),b=I.length-1;b>=0;b--)v=new t.type.Term(".",[new t.type.Term("-",[I[b],I[b].pair]),v]),delete I[b].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,b=0;b=0;b--)I=new t.type.Term(".",[E[b],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof aH<"u"?aH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Vgt)});var ome=_(Yr=>{"use strict";var Zd=process.platform==="win32",lH="aes-256-cbc",Kgt="sha256",Kde="The current environment doesn't support interactive reading from TTY.",Yn=Be("fs"),Wde=process.binding("tty_wrap").TTY,uH=Be("child_process"),l0=Be("path"),AH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},Jf="none",Xc,IC,Vde=!1,a0,Ek,cH,Jgt=0,dH="",Xd=[],Ck,Jde=!1,fH=!1,v2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return Ek.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function zgt(t,e){function r(U){var J,te="",le;for(cH=cH||Be("os").tmpdir();;){J=l0.join(cH,U+te);try{le=Yn.openSync(J,"wx")}catch(pe){if(pe.code==="EEXIST"){te++;continue}else throw pe}Yn.closeSync(le);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),b=Be("crypto"),C,T,L;C=b.createHash(Kgt),C.update(""+process.pid+Jgt+++Math.random()),L=C.digest("hex"),T=b.createDecipher(lH,L),o=zde(t),Zd?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+a0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+lH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+a0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+lH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),v2&&v2("_execFileSync",o);try{uH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=T.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+T.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Kde+(p?` -`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Xgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(a0||(Zd?process.env.PSModulePath?(a0="powershell.exe",Ek=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(a0="cscript.exe",Ek=["//nologo",__dirname+"\\read.cs.js"]):(a0="/bin/sh",Ek=[__dirname+"/read.sh"])),Zd&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),uH.execFileSync){e=zde(t),v2&&v2("execFileSync",e);try{r.input=uH.execFileSync(a0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Kde+(o?` -`+o:"")),r.error.method="execFileSync",r.error.program=a0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=zgt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function pH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Xgt(t);if(n.error)throw n.error;return n.input}return fH&&fH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Jf=="string")if(Jf=null,Zd){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Jf=process.stdin.fd,IC=process.stdin._handle;else try{Jf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),IC=new Wde(Jf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Jf=Yn.openSync("/dev/tty","r"),IC=process.stdin._handle}catch{}}else try{Jf=Yn.openSync("/dev/tty","r"),IC=new Wde(Jf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;Ck="";function b(C){return C===Vde?!0:IC.setRawMode(C)!==0?!1:(Vde=C,!0)}if(Jde||!IC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!b(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(Jf,p,0,h)}catch(C){if(C.code!=="EOF"){b(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),Ck+=I):(I=` -`,Ck+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` -`),b(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` -`),t.encoding),t.displayOnly?"":dH=t.keepWhitespace||t.keyIn?e:e.trim()}function Zgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function mH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Ts(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(AH),t.unshift(AH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Zgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function hH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function yH(t,e){var r=l0.normalize(Zd?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=l0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+mH(r)+"(?=\\/|\\\\|$)",Zd?"i":""),"~")}function BC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Xde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,b;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(b=I.charCodeAt(0),v&&v===n&&b===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=b),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Zde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function $de(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Xde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Zde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=dH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=l0.basename(r):t==="cwdHome"&&(r=yH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Xd[Xd.length-n]||"")}return r}function eme(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o -And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(b){return b==="charlist"?r.text:b==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=BC(e.charlist?e.charlist+"":"$",eme),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+mH(u)+"]{"+o+","+a+"}$"),r=Xde([u],n.caseSensitive,!0),r.text=Zde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function nme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Ts({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return nme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return nme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Ts({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=yH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var b=l0.resolve(I+=v+l0.sep);if(!Yn.existsSync(b))Yn.mkdirSync(b);else if(!Yn.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):l0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(l0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function ime(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=gH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=gH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Ts({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Ts({hideEchoBack:!1,history:!0},t,{prompt:function(){return Zd?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function sme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Ts(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return sme(t,e)};Yr.keyInYNStrict=function(t,e){return sme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Ts({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Ts({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` -`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` -`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` -`),o.limit=a,A+=` -`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return Ck};function D2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return D2("print",arguments)};Yr.setPrompt=function(){return D2("prompt",arguments)};Yr.setEncoding=function(){return D2("encoding",arguments)};Yr.setMask=function(){return D2("mask",arguments)};Yr.setBufferSize=function(){return D2("bufferSize",arguments)}});var EH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:S,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,S){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var S,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var Se=[],Ne=!1;if(/^\n/.exec(S)!==null){F++,z=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in T)if(T.hasOwnProperty(ot)){var dt=T[ot].exec(S);dt&&Se.push({value:dt[0],name:ot,matches:dt})}if(!Se.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Se,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,S=S.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var xt=this.set_last_tokens(X);return xt.length===0?null:xt};function J(w,S,y,F,z){if(!S[y])return{type:A,value:x.error.syntax(S[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new x.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Num(n(Z.value,Se),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Term(Z.value.charAt(Se),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_paren"?(xt.len++,xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],") or operator expected",!S[xt.len])};case"l_bracket":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_bracket"?(xt.len++,xt.value=new H("{}",[xt.value]),xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],"} or operator expected",!S[xt.len])}}var Ne=te(w,S,y,z);return Ne.type===p||Ne.derived||(Ne=le(w,S,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:x.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),jt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var xt=J(w,S,y,F,z);if(xt.type!==A)return Z.value==="-"&&!Z.space&&x.type.is_number(xt.value)?{value:new x.type.Num(-xt.value.value,xt.value.is_float),len:xt.len,type:p}:{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}else if($t&&$t.indexOf("fx")>-1){var xt=J(w,S,y,dt,z);if(xt.type!==A)return{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}}y=jt;var xt=J(w,S,y,dt,z);if(xt.type===p){y=xt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new x.type.Term(Z.value,[xt.value]),len:++xt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,S,y+1,an,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,S,y+1,Qr,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(xt.type!==A)for(;;){y=xt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)xt={value:new x.type.Term(Z.value,[xt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,S,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,xt={value:new x.type.Term(Z.value,[xt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:x.error.syntax(S[xt.len-1],"operator expected")};return xt}return xt}function te(w,S,y,F){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!F&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:x.error.syntax(S[y-1],"unfounded token")};var z=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new x.type.Term(z.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:x.error.syntax(S[y+1],"argument expected")};var Z=J(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=J(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new x.type.Term(z.value,X)}}return{type:A,derived:!1,value:x.error.syntax(S[y],"term expected")}}function le(w,S,y){if(!S[y])return{type:A,derived:!1,value:x.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var F=J(w,S,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:A,derived:!0,value:x.error.syntax(S[y],"] expected")};for(y=F.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};z.push(F.value),y=F.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=F.value,y=F.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:x.error.syntax(S[y],"list expected")}}function pe(w,S,y){var F=S[y].line,z=J(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,x.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new x.type.Rule(z.value.args[0],Pe(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=ae(new x.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=Pe(X.body),Z={value:X,len:y,type:x.type.is_rule(X)?p:A}):(X=new x.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(x.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:x.error.syntax(S[y],"callable expected")};else return{type:A,value:x.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return z}function Ae(w,S,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(S);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Se=pe(w,ie,Z);if(Se.type===A)return new H("throw",[Se.value]);if(Se.value.body===null&&Se.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Se.value.head.args[0]),Ne.answer(function(dt){x.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(x.warning.failed_goal(Se.value.head.args[0],Se.len))}),Z=Se.len;var ot=!0}else if(Se.value.body===null&&Se.value.head.indicator===":-/1"){var ot=w.run_directive(Se.value.head.args[0]);Z=Se.len,Se.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Se.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),z[X]=!0);var ot=w.add_rule(Se.value,y);Z=Se.len}if(!ot)return ot}while(!0);return!0}function ye(w,S){var y=new U(w);y.new_text(S);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(Pe(X.value));else{var Se=z[Z];return new H("throw",[x.error.syntax(Se||z[Z-1],". or operator expected",!Se)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function ae(w,S){w=w.rename(S);var y=S.next_free_variable(),F=we(w.body,y,S);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function we(w,S,y){var F;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var z=we(w.args[0],S,y);if(z.error)return z;var X=we(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(x.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(x.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return x.type.is_variable(Z)?{value:x.error.instantiation("DCG"),variable:S,error:!0}:x.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[S,w]),variable:F,error:!1}):{value:x.error.type("list",w,"DCG"),variable:S,error:!0}}else return x.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([S,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:S,error:!0}}}function Pe(w){return x.type.is_variable(w)?new H("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[Pe(w.args[0]),Pe(w.args[1])]):w}function g(w,S){for(var y=S||new x.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new x.type.Term(".",[w[F],y]);return y}function Ee(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function De(w){for(var S={},y=[],F=0;F=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new ke(parseInt(w.substring(S+1)),!1)])}function Ie(w){this.id=w}function ke(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var ht=0;function H(w,S,y){this.ref=y||++ht,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var lt=0;function Re(w,S,y,F,z,X){this.id=lt++,this.stream=w,this.mode=S,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Qe(w){w=w||{},this.links=w}function be(w,S,y){S=S||new Qe,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function _e(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function He(w,S,y){this.id=w,this.rules=S,this.exports=y,x.module[w]=this}He.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new Qe(y)},ke.prototype.unify=function(w,S){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Qe:null},H.prototype.unify=function(w,S){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Qe,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Se=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Se)&&Se!=="{}"&&Se!=="[]"&&(Se="'"+b(Se)+"'"),Se+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>S.priority||Ne.priority===S.priority&&(Ne.class==="xfy"&&this.indicator!==S.indicator||Ne.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Se+" "+this.args[0].toString(w,Ne)+jt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Se+jt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+jt}},Re.prototype.toString=function(w){return"("+this.id+")"},Qe.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},be.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},_e.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var S="",y=0;y=0;z--)F=new H(".",[S[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},_e.prototype.apply=function(w){return new _e(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Qe.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new Qe(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&F0&&(S=this.head_point().substitution.domain());e(S,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(x.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},Te.prototype.success=function(w,S){return this.thread.success(w,S)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new be(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new be(new H("throw",[w]),new Qe,null,null)])},Te.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},Je.prototype.step_rule=function(w,S){var y=S.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},Je.prototype.answers=function(w,S,y){var F=S||1e3,z=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,S-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var S,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):x.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],z(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),z(S))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Se=S.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new _e(Se,Ne))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return x.error.instantiation(w.level)},ke.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},ke.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SF)return 1;if(w.constructor===ke){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Qe},is_state:function(w){return w instanceof be},is_rule:function(w){return w instanceof _e},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof ke},is_integer:function(w){return w instanceof ke&&!w.is_float},is_float:function(w){return w instanceof ke&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof ke&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(!!x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):x.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.throw_error(x.error.type("predicate_indicator",y,S.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],S.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],S.indicator));else{var F=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,S){var y=S.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(S.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,S.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],S.indicator)):w.throw_error(x.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,F)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new H("+",[y,F]),S.indicator)):w.throw_error(x.error.domain("prolog_flag",y,S.indicator)):w.throw_error(x.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,S.indicator));else if(x.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_character(y)?x.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(x.error.type("character",F,S.indicator)):w.throw_error(x.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],F=S.args[1],z=S.args[2];if(x.type.is_variable(y)||x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,S.indicator));else if(!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,S.indicator));else if(!x.type.is_atom(z))w.throw_error(x.error.type("atom",z,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,S.indicator));else if(z.id===",")w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(x.error.domain("operator_specifier",F,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Se;switch(F.id){case"fy":case"fx":Se="prefix";break;case"yf":case"xf":Se="postfix";break;default:Se="infix";break}if(((X.prefix&&Se==="prefix"||X.postfix&&Se==="postfix"||X.infix&&Se==="infix")&&X[Se].type!==F.id||X.infix&&Se==="postfix"||X.postfix&&Se==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",z,S.indicator));else return X[Se]&&(Ee(w.session.__operators[X[Se].priority][z.id],F.id),w.session.__operators[X[Se].priority][z.id].length===0&&delete w.session.__operators[X[Se].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,S,y){x.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Se in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new be(y.args[0].args[0],S.substitution,S)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new be(S.goal.replace(y.args[1]),S.substitution,S)]):x.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new be(S.goal.replace(y.args[0].args[1]).apply(Ne),S.substitution.apply(Ne),S)])};w.__calls.unshift(Z)}else{var ie=new be(S.goal.replace(y.args[0]),S.substitution,S),Se=new be(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,Se])}},"!/0":function(w,S,y){var F,z,X=[];for(F=S,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Se=w.points[ie],Ne=Se.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Se)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(F)?w.prepend([new be(S.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new be(S.goal.replace(null),S.substitution,S)]):w.throw_error(x.error.type("callable",F,w.level))},"->/2":function(w,S,y){var F=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new be(F,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new be(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var F=w.points;w.points=[],w.prepend([new be(y.args[0],S.substitution,S)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Se=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,x.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Ne.push($t)}w.points=Ne;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new be,xt=x.unify(ie.args[0],y.args[1],jt);xt!==null?($t.substitution=S.substitution.apply(xt),$t.goal=S.goal.replace(y.args[2]).apply(xt),$t.parent=S,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new be(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],Qr=[],ot=Se.length-1;ot>=0;ot--){Qr.push(Se[ot]);var mr=Se[ot].goal!==null?Se[ot].goal.select():null;if(x.type.is_term(mr)&&mr.indicator==="!/0")break}var xr=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new be(S.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),S.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(xr),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new be,X=x.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=S.goal.apply(X).replace(null),z.substitution=S.substitution.apply(X),z.parent=S,w.prepend([z]))},"unify_with_occurs_check/2":function(w,S,y){var F=new be,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=S.goal.apply(z).replace(null),F.substitution=S.substitution.apply(z),F.parent=S,w.prepend([F]))},"\\=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],F);z===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))w.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Se=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,S);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!x.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Se,w.session.limit=Ne,w.session.format_success=ot,x.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var xt=new H("[]"),an=dt.length-1;an>=0;an--)xt=new H(".",[dt[an],xt]);w.prepend([new be(S.goal.replace(new H("=",[X,xt])),S.substitution,S)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(X)&&!x.type.is_atomic(X))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(X)&&x.type.is_integer(Z)&&Z.value!==0)w.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Se=0;Se0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new be(S.goal.replace(z),S.substitution,S)])}}},"=../2":function(w,S,y){var F;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):X.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new be(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(x.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var F=y.args[0].rename(w);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))w.throw_error(x.error.type("list",z,y.indicator));else{var X=g(o(De(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new be(S.goal.replace(Z),S.substitution,S))}w.prepend(F)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var F=y.args[0];if(!x.type.is_variable(F)&&(!x.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[0])&&!x.type.is_atom(F.args[0]))w.throw_error(x.error.type("atom",F.args[0],y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[1])&&!x.type.is_integer(F.args[1]))w.throw_error(x.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Se=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new ke(Se,!1)]),ot=new H("=",[Ne,F]);z.push(new be(S.goal.replace(ot),S.substitution,S))}w.prepend(z)}},"asserta/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new _e(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"assertz/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new _e(F,z,!0)),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"retract/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new ke(y.args[0].id.length,!1);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(x.type.is_variable(ie)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_atom(ie))w.throw_error(x.error.type("atom",ie,y.indicator));else{var Se=x.type.is_variable(X),Ne=x.type.is_variable(Z);if(!Se&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]);else if(Se&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else if(Ne&&!Se)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new be(S.goal.replace(z),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Se=y.args[4];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_integer(ie))w.throw_error(x.error.type("integer",ie,y.indicator));else if(x.type.is_integer(X)&&X.value<0)w.throw_error(x.error.domain("not_less_than_zero",X,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer(ie)&&ie.value<0)w.throw_error(x.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(x.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(x.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(x.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var jt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var xt in ot)if(!!ot.hasOwnProperty(xt)){var an=ot[xt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var xr=new H("=",[new H(mr),Se]),Wr=new H("=",[X,new ke(F)]),Vn=new H("=",[Z,new ke(an)]),Ns=new H("=",[ie,new ke(Qr)]),Ri=new H(",",[new H(",",[new H(",",[Wr,Vn]),Ns]),xr]);jt.push(new be(S.goal.replace(Ri),S.substitution,S))}}}}w.prepend(jt)}},"atom_chars/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new ke(n(F.id,Z),!1),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_character(F))w.throw_error(x.error.type("character",F,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var X=new ke(n(F.id,0),!1);w.prepend([new be(S.goal.replace(new H("=",[X,z])),S.substitution,S)])}else{var Z=new H(u(z.value));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new H(F.charAt(jt)),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new ke(n(F,jt),!1),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(F)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_list(F))w.throw_error(x.error.type("list",F,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(x.type.is_variable(X)){for(var ie="",Se=F;x.type.is_term(Se)&&Se.indicator==="./2";){if(!x.type.is_atom(Se.args[0])&&!x.type.is_number(Se.args[0])){w.throw_error(x.error.type("atomic",Se.args[0],y.indicator));return}ie!==""&&(ie+=z.id),x.type.is_atom(Se.args[0])?ie+=Se.args[0].id:ie+=""+Se.args[0].value,Se=Se.args[1]}ie=new H(ie,[]),x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(Se)||Se.indicator!=="[]/0"?w.throw_error(x.error.type("list",F,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"@=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(x.type.domain("order",F,y.indicator));else{var Z=x.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new be(S.goal.replace(new H("=",[F,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var F=y.args[1].interpret(w);x.type.is_number(F)?w.prepend([new be(S.goal.replace(new H("=",[y.args[0],F],w.level)),S.substitution,S)]):w.throw_error(F)},"between/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(F))w.throw_error(x.error.type("integer",F,y.indicator));else if(!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(x.type.is_variable(X)){var Z=[new be(S.goal.replace(new H("=",[X,F])),S.substitution,S)];F.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)&&x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(F)&&!x.type.is_integer(F)?w.throw_error(x.error.type("integer",F,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?w.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(F)&&F.value<0?w.throw_error(x.error.domain("not_less_than_zero",F,y.indicator)):!x.type.is_variable(z)&&z.value<0?w.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(F)?w.prepend([new be(S.goal.replace(new H("=",[F,new ke(z.value-1,!1)])),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[z,new ke(F.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F===0&&w.success(S)},"=\\=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F!==0&&w.success(S)},"/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>0&&w.success(S)},">=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>=0&&w.success(S)},"var/1":function(w,S,y){x.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){x.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){x.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){x.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){x.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){x.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){x.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){x.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var F=S.substitution.apply(S.substitution),z=y.args[0].variables(),X=0;X0?xt[xt.length-1]:null,xt!==null&&(jt=J(w,xt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===xt.length-1&&an.value==="."){jt=jt.value.rename(w);var Qr=new H("=",[z,jt]);if(ie.variables){var mr=g(o(De(jt.variables()),function(xr){return new Ie(xr)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(De(jt.variables()),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new _e(jt,null).singleton_variables(),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new be(S.goal.replace(Qr),S.substitution,S)])}else jt.type===p?w.throw_error(x.error.syntax(xt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),S.substitution,S)])},"write/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),S.substitution,S)])},"writeq/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),S.substitution,S)])},"write_term/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=x.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(x.type.is_variable(F)||x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else if(!x.type.is_stream(F)&&!x.type.is_atom(F))w.throw_error(x.error.domain("stream_or_alias",F,y.indicator));else if(!x.type.is_stream(Z)||Z.stream===null)w.throw_error(x.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(x.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(x.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Se=X,Ne;x.type.is_term(Se)&&Se.indicator==="./2";){if(Ne=Se.args[0],x.type.is_variable(Ne)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Ne)){w.throw_error(x.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Se=Se.args[1]}if(Se.indicator!=="[]/0"){x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(F)?w.points=[]:w.throw_error(x.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_flag(F))w.throw_error(x.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in x.flag)if(!!x.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new be(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)||x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?x.type.is_flag(F)?x.type.is_value_flag(F,z)?x.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(S)):w.throw_error(x.error.permission("modify","flag",F)):w.throw_error(x.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",F,y.indicator)):w.throw_error(x.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new ke(Number.MAX_SAFE_INTEGER)],value:new ke(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new ke(Number.MIN_SAFE_INTEGER)],value:new ke(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)])],value:new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var F=[{left:w,right:S}],z={};F.length!==0;){var X=F.pop();if(w=X.left,S=X.right,x.type.is_term(w)&&x.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,S){if(x.type.is_operator(S)){for(var y=x.type.is_operator(S),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new ke(w.line+1)]),new H(".",[new H("column",[new ke(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(S)]),new H(".",[new H("line",[new ke(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new ke(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,F){S instanceof Te&&(S=S.thread);var F=F||{};if(F.session=S?S.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(x.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!x.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Se=typeof S>"u"||S.points.length>0?" ;":".";return z===0?"true"+Se:X+Se},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new x.type.Session(w)}};typeof hl<"u"?hl.exports=x:window.pl=x})()});function ame(t,e,r){t.prepend(r.map(o=>new Ra.default.type.State(e.goal.replace(o),e.substitution,e)))}function CH(t){let e=cme.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ume(t,e){cme.set(t,e),t.consult(`:- use_module(library(${tdt.id})).`)}var wH,Ra,lme,c0,$gt,edt,cme,tdt,Ame=Et(()=>{Ye();wH=$e(g2()),Ra=$e(EH()),lme=$e(Be("vm")),{is_atom:c0,is_variable:$gt,is_instantiated_list:edt}=Ra.default.type;cme=new WeakMap;tdt=new Ra.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=CH(t).tryWorkspaceByDescriptor(A);$gt(n)&&h!==null&&ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(String(h.relativeCwd))])]),c0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let A=CH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,wH.default)(A.manifest.raw,a.id);typeof p>"u"||ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ra.default.type.State(e.goal.replace(new Ra.default.type.Term("workspace_field_test",[o,a,n,new Ra.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!c0(o)||!c0(a)||!c0(n)||!edt(u)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let p=CH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,wH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,b]of u.toJavaScript().entries())E[`$${v}`]=b;lme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var S2={};Kt(S2,{Constraints:()=>P2,DependencyType:()=>gme});function to(t){if(t instanceof vC.default.type.Num)return t.value;if(t instanceof vC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof vC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function pme(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function $d(t){return t.id==="null"?null:`${t.toJavaScript()}`}function rdt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function u0(t){return typeof t=="string"?`'${t}'`:"[]"}var hme,vC,gme,fme,IH,P2,x2=Et(()=>{Ye();Ye();Pt();hme=$e(Yde()),vC=$e(EH());B2();Ame();(0,hme.default)(vC.default);gme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(gme||{}),fme=["dependencies","devDependencies","peerDependencies"];IH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=vC.default.create(o),ume(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw pme(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw pme(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of fme)e+=`dependency_type(${r}). -`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${u0(o)}). -`,e+=`workspace_ident(${u0(o)}, ${u0(W.stringifyIdent(r.anchoredLocator))}). -`,e+=`workspace_version(${u0(o)}, ${u0(r.manifest.version)}). -`;for(let a of fme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${u0(o)}, ${u0(W.stringifyIdent(n))}, ${u0(n.range)}, ${a}). -`}return e+=`workspace(_) :- false. -`,e+=`workspace_ident(_, _) :- false. -`,e+=`workspace_version(_, _) :- false. -`,e+=`workspace_has_dependency(_, _, _, _) :- false. -`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. -`,e+=`gen_enforced_field(_, _, _) :- false. -`,e}get fullSource(){return`${this.getProjectDatabase()} -${this.source} -${this.getDeclarations()}`}createSession(){return new IH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=I2([A,W.stringifyIdent(n)]),h=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=I2(n),p=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.DependencyIdent),u=$d(o.links.DependencyRange),A=$d(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return je.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.FieldPath),u=rdt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return je.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=$d(u));yield a}}}});var vme=_(vk=>{"use strict";Object.defineProperty(vk,"__esModule",{value:!0});function q2(t){let e=[...t.caches],r=e.shift();return r===void 0?Bme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>q2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>q2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>q2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>q2({caches:e}).clear())}}}function Bme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}vk.createFallbackableCache=q2;vk.createNullCache=Bme});var Pme=_((QWt,Dme)=>{Dme.exports=vme()});var Sme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});function wdt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}LH.createInMemoryCache=wdt});var bme=_((TWt,xme)=>{xme.exports=Sme()});var Qme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function Idt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===MH.WithinHeaders?o:{}},queryParameters(){return t===MH.WithinQueryParameters?o:{}}}}function Bdt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function kme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return kme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function vdt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Ddt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function Pdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Sdt="4.14.2",xdt=t=>()=>t.transporter.requester.destroy(),MH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=MH;Zc.addMethods=Ddt;Zc.createAuth=Idt;Zc.createRetryablePromise=Bdt;Zc.createWaitablePromise=kme;Zc.destroy=xdt;Zc.encode=Pdt;Zc.shuffle=vdt;Zc.version=Sdt});var G2=_((NWt,Fme)=>{Fme.exports=Qme()});var Tme=_(OH=>{"use strict";Object.defineProperty(OH,"__esModule",{value:!0});var bdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};OH.MethodEnum=bdt});var Y2=_((MWt,Rme)=>{Rme.exports=Tme()});var Jme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Lme=Y2();function UH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var W2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Mme=2*60*1e3;function HH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Ome(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Mme}function Ume(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Mme}function jH(t){return typeof t=="string"?{protocol:"https",url:t,accept:W2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||W2.Any}}function kdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(HH(r))))).then(r=>{let o=r.filter(A=>Ome(A)),a=r.filter(A=>Ume(A)),n=[...o,...a],u=n.length>0?n.map(A=>jH(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Qdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Fdt=t=>{let e=t.status;return t.isTimedOut||Qdt(t)||~~(e/100)!==2&&~~(e/100)!==4},Tdt=({status:t})=>~~(t/100)===2,Rdt=(t,e)=>Fdt(t)?e.onRetry(t):Tdt(t)?e.onSuccess(t):e.onFail(t);function Nme(t,e,r,o){let a=[],n=Gme(r,o),u=Yme(t,o),A=r.method,p=r.method!==Lme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,b)=>{let C=v.pop();if(C===void 0)throw Kme(_H(a));let T={data:n,headers:u,method:A,url:jme(C,r.path,h),connectTimeout:b(E,t.timeouts.connect),responseTimeout:b(E,o.timeout)},L=J=>{let te={request:T,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>_me(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",qH(te)),t.hostsCache.set(C,HH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,b))},onFail(J){throw L(J),Hme(J,_H(a))}};return t.requester.send(T).then(J=>Rdt(J,U))};return kdt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function Ndt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>jH(v)),read(v,b){let C=UH(b,I.timeouts.read),T=()=>Nme(I,I.hosts.filter(J=>(J.accept&W2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return T();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,T()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,b){return Nme(I,I.hosts.filter(C=>(C.accept&W2.Write)!==0),v,UH(b,I.timeouts.write))}};return I}function Ldt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function _me(t){try{return JSON.parse(t.content)}catch(e){throw Vme(e.message,t)}}function Hme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Wme(o,e,r)}function Mdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function jme(t,e,r){let o=qme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function qme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Mdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Gme(t,e){if(t.method===Lme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function Yme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function _H(t){return t.map(e=>qH(e))}function qH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Wme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Vme(t,e){return{name:"DeserializationError",message:t,response:e}}function Kme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=W2;Fi.HostStatusEnum=xC;Fi.createApiError=Wme;Fi.createDeserializationError=Vme;Fi.createMappedRequestOptions=UH;Fi.createRetryError=Kme;Fi.createStatefulHost=HH;Fi.createStatelessHost=jH;Fi.createTransporter=Ndt;Fi.createUserAgent=Ldt;Fi.deserializeFailure=Hme;Fi.deserializeSuccess=_me;Fi.isStatefulHostTimeouted=Ume;Fi.isStatefulHostUp=Ome;Fi.serializeData=Gme;Fi.serializeHeaders=Yme;Fi.serializeQueryParameters=qme;Fi.serializeUrl=jme;Fi.stackFrameWithoutCredentials=qH;Fi.stackTraceWithoutCredentials=_H});var V2=_((UWt,zme)=>{zme.exports=Jme()});var Xme=_(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});var bC=G2(),Odt=V2(),K2=Y2(),Udt=t=>{let e=t.region||"us",r=bC.createAuth(bC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Odt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return bC.addMethods({appId:a,transporter:o},t.methods)},_dt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:"2/abtests",data:e},r),Hdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Delete,path:bC.encode("2/abtests/%s",e)},r),jdt=t=>(e,r)=>t.transporter.read({method:K2.MethodEnum.Get,path:bC.encode("2/abtests/%s",e)},r),qdt=t=>e=>t.transporter.read({method:K2.MethodEnum.Get,path:"2/abtests"},e),Gdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:bC.encode("2/abtests/%s/stop",e)},r);d0.addABTest=_dt;d0.createAnalyticsClient=Udt;d0.deleteABTest=Hdt;d0.getABTest=jdt;d0.getABTests=qdt;d0.stopABTest=Gdt});var $me=_((HWt,Zme)=>{Zme.exports=Xme()});var tye=_(J2=>{"use strict";Object.defineProperty(J2,"__esModule",{value:!0});var GH=G2(),Ydt=V2(),eye=Y2(),Wdt=t=>{let e=t.region||"us",r=GH.createAuth(GH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Ydt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return GH.addMethods({appId:t.appId,transporter:o},t.methods)},Vdt=t=>e=>t.transporter.read({method:eye.MethodEnum.Get,path:"1/strategies/personalization"},e),Kdt=t=>(e,r)=>t.transporter.write({method:eye.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);J2.createPersonalizationClient=Wdt;J2.getPersonalizationStrategy=Vdt;J2.setPersonalizationStrategy=Kdt});var nye=_((qWt,rye)=>{rye.exports=tye()});var mye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=G2(),Na=V2(),Ir=Y2(),Jdt=Be("crypto");function Dk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var zdt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function iye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function sye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function oye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Xdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>z2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Zdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},$dt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),emt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>kC(t)(o.taskID,a)),Pk=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},tmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Rules]}),rmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Settings]}),nmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Synonyms]}),imt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),smt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},omt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},amt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=Jdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},z2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),lmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),umt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw oye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),fmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),pmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},X2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},hmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),gmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),dmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),mmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),ymt=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},Emt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>X2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},Cmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),wmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},Imt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return X2(t)(o.indexName,{methods:{searchForFacetValues:hye}}).searchForFacetValues(a,n,{...r,...u})})),Bmt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},vmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Dmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},Pmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Smt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),xmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),bmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>kC(t)(o.taskID,a)),kmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>Gt.createRetryablePromise(v=>z2(t)(e,I).then(b=>p(b)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},kC=t=>(e,r)=>Gt.createRetryablePromise(o=>aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),lye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Qmt=t=>e=>Dk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Fmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Tmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Sk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Nmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Lmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Mmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Omt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Umt=t=>(e,r)=>Gt.createWaitablePromise(cye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Sk(t)(o,rm.DeleteObject,r)},_mt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Hmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},jmt=t=>e=>uye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),qmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Gmt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>pye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw sye();return A()});return A()},Ymt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Wmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Vmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Kmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),uye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),zmt=t=>(e,r)=>Gt.createWaitablePromise(fye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),fye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?rm.PartialUpdateObject:rm.PartialUpdateObjectNoCreate;return Sk(t)(e,n,a)},Xmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,T,L,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:T}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=YH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let b=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,T,L])=>({objectIDs:T.objectIDs,taskIDs:[C.taskID,...T.taskIDs,L.taskID]}));return Gt.createWaitablePromise(b,(C,T)=>Promise.all(I.map(L=>L.wait(T))))},Zmt=t=>(e,r)=>WH(t)(e,{...r,clearExistingRules:!0}),$mt=t=>(e,r)=>VH(t)(e,{...r,clearExistingSynonyms:!0}),eyt=t=>(e,r)=>Gt.createWaitablePromise(YH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),YH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?rm.AddObject:rm.UpdateObject;if(n===rm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(iye()))}return Sk(t)(e,n,a)},tyt=t=>(e,r)=>WH(t)([e],r),WH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},ryt=t=>(e,r)=>VH(t)([e],r),VH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),hye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),gye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),dye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),nyt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>Aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),iyt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},rm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},xk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},syt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},oyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=iyt;Ft.BatchActionEnum=rm;Ft.ScopeEnum=xk;Ft.StrategyEnum=syt;Ft.SynonymEnum=oyt;Ft.addApiKey=Xdt;Ft.assignUserID=Zdt;Ft.assignUserIDs=$dt;Ft.batch=lye;Ft.browseObjects=Qmt;Ft.browseRules=Fmt;Ft.browseSynonyms=Tmt;Ft.chunkedBatch=Sk;Ft.clearDictionaryEntries=emt;Ft.clearObjects=Rmt;Ft.clearRules=Nmt;Ft.clearSynonyms=Lmt;Ft.copyIndex=Pk;Ft.copyRules=tmt;Ft.copySettings=rmt;Ft.copySynonyms=nmt;Ft.createBrowsablePromise=Dk;Ft.createMissingObjectIDError=iye;Ft.createObjectNotFoundError=sye;Ft.createSearchClient=zdt;Ft.createValidUntilNotFoundError=oye;Ft.customRequest=imt;Ft.deleteApiKey=smt;Ft.deleteBy=Mmt;Ft.deleteDictionaryEntries=omt;Ft.deleteIndex=Omt;Ft.deleteObject=Umt;Ft.deleteObjects=cye;Ft.deleteRule=_mt;Ft.deleteSynonym=Hmt;Ft.exists=jmt;Ft.findAnswers=qmt;Ft.findObject=Gmt;Ft.generateSecuredApiKey=amt;Ft.getApiKey=z2;Ft.getAppTask=aye;Ft.getDictionarySettings=lmt;Ft.getLogs=cmt;Ft.getObject=Ymt;Ft.getObjectPosition=Wmt;Ft.getObjects=Vmt;Ft.getRule=Kmt;Ft.getSecuredApiKeyRemainingValidity=umt;Ft.getSettings=uye;Ft.getSynonym=Jmt;Ft.getTask=Aye;Ft.getTopUserIDs=Amt;Ft.getUserID=fmt;Ft.hasPendingMappings=pmt;Ft.initIndex=X2;Ft.listApiKeys=hmt;Ft.listClusters=gmt;Ft.listIndices=dmt;Ft.listUserIDs=mmt;Ft.moveIndex=ymt;Ft.multipleBatch=Emt;Ft.multipleGetObjects=Cmt;Ft.multipleQueries=wmt;Ft.multipleSearchForFacetValues=Imt;Ft.partialUpdateObject=zmt;Ft.partialUpdateObjects=fye;Ft.removeUserID=Bmt;Ft.replaceAllObjects=Xmt;Ft.replaceAllRules=Zmt;Ft.replaceAllSynonyms=$mt;Ft.replaceDictionaryEntries=vmt;Ft.restoreApiKey=Dmt;Ft.saveDictionaryEntries=Pmt;Ft.saveObject=eyt;Ft.saveObjects=YH;Ft.saveRule=tyt;Ft.saveRules=WH;Ft.saveSynonym=ryt;Ft.saveSynonyms=VH;Ft.search=pye;Ft.searchDictionaryEntries=Smt;Ft.searchForFacetValues=hye;Ft.searchRules=gye;Ft.searchSynonyms=dye;Ft.searchUserIDs=xmt;Ft.setDictionarySettings=bmt;Ft.setSettings=nyt;Ft.updateApiKey=kmt;Ft.waitAppTask=kC;Ft.waitTask=Zi});var Eye=_((YWt,yye)=>{yye.exports=mye()});var Cye=_(bk=>{"use strict";Object.defineProperty(bk,"__esModule",{value:!0});function ayt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var lyt={Debug:1,Info:2,Error:3};bk.LogLevelEnum=lyt;bk.createNullLogger=ayt});var Iye=_((VWt,wye)=>{wye.exports=Cye()});var Pye=_(KH=>{"use strict";Object.defineProperty(KH,"__esModule",{value:!0});var Bye=Be("http"),vye=Be("https"),cyt=Be("url"),Dye={keepAlive:!0},uyt=new Bye.Agent(Dye),Ayt=new vye.Agent(Dye);function fyt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||uyt,n=r||t||Ayt;return{send(u){return new Promise(A=>{let p=cyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?vye:Bye).request(E,T=>{let L=[];T.on("data",U=>{L=L.concat(U)}),T.on("end",()=>{clearTimeout(b),clearTimeout(C),A({status:T.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(T,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},T*1e3),b=v(u.connectTimeout,"Connection timeout"),C;I.on("error",T=>{clearTimeout(b),clearTimeout(C),A({status:0,content:T.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(b),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}KH.createNodeHttpRequester=fyt});var xye=_((JWt,Sye)=>{Sye.exports=Pye()});var Fye=_((zWt,Qye)=>{"use strict";var bye=Pme(),pyt=bme(),QC=$me(),zH=G2(),JH=nye(),Ut=Eye(),hyt=Iye(),gyt=xye(),dyt=V2();function kye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:gyt.createNodeHttpRequester(),logger:hyt.createNullLogger(),responsesCache:bye.createNullCache(),requestsCache:bye.createNullCache(),hostsCache:pyt.createInMemoryCache(),userAgent:dyt.createUserAgent(zH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>JH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:JH.getPersonalizationStrategy,setPersonalizationStrategy:JH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:zH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>QC.createAnalyticsClient({...o,...u,methods:{addABTest:QC.addABTest,getABTest:QC.getABTest,getABTests:QC.getABTests,stopABTest:QC.stopABTest,deleteABTest:QC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}kye.version=zH.version;Qye.exports=kye});var ZH=_((XWt,XH)=>{var Tye=Fye();XH.exports=Tye;XH.exports.default=Tye});var t6=_(($Wt,Lye)=>{"use strict";var Nye=Object.getOwnPropertySymbols,yyt=Object.prototype.hasOwnProperty,Eyt=Object.prototype.propertyIsEnumerable;function Cyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function wyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Lye.exports=wyt()?Object.assign:function(t,e){for(var r,o=Cyt(t),a,n=1;n{"use strict";var o6=t6(),$c=typeof Symbol=="function"&&Symbol.for,Z2=$c?Symbol.for("react.element"):60103,Iyt=$c?Symbol.for("react.portal"):60106,Byt=$c?Symbol.for("react.fragment"):60107,vyt=$c?Symbol.for("react.strict_mode"):60108,Dyt=$c?Symbol.for("react.profiler"):60114,Pyt=$c?Symbol.for("react.provider"):60109,Syt=$c?Symbol.for("react.context"):60110,xyt=$c?Symbol.for("react.forward_ref"):60112,byt=$c?Symbol.for("react.suspense"):60113,kyt=$c?Symbol.for("react.memo"):60115,Qyt=$c?Symbol.for("react.lazy"):60116,Mye=typeof Symbol=="function"&&Symbol.iterator;function $2(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rkk.length&&kk.push(t)}function n6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case Z2:case Iyt:n=!0}}if(n)return r(o,t,e===""?"."+r6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Jye.exports=Kye()});var f6=_((rVt,A6)=>{"use strict";var An=A6.exports;A6.exports.default=An;var Ln="\x1B[",eB="\x1B]",TC="\x07",Qk=";",zye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=zye?"\x1B7":Ln+"s";An.cursorRestorePosition=zye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[eB,"8",Qk,Qk,e,TC,t,eB,"8",Qk,Qk,TC].join("");An.image=(t,e={})=>{let r=`${eB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${eB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${eB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Zye=_((nVt,p6)=>{"use strict";var Xye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};p6.exports=Xye;p6.exports.default=Xye});var eEe=_((iVt,Tk)=>{"use strict";var Myt=Zye(),Fk=new WeakMap,$ye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(Fk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Myt(n,t),Fk.set(n,o),n};Tk.exports=$ye;Tk.exports.default=$ye;Tk.exports.callCount=t=>{if(!Fk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return Fk.get(t)}});var tEe=_((sVt,Rk)=>{Rk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Rk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Rk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var d6=_((oVt,LC)=>{var Ei=global.process,nm=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};nm(Ei)?(rEe=Be("assert"),RC=tEe(),nEe=/^win/i.test(Ei.platform),tB=Be("events"),typeof tB!="function"&&(tB=tB.EventEmitter),Ei.__signal_exit_emitter__?Rs=Ei.__signal_exit_emitter__:(Rs=Ei.__signal_exit_emitter__=new tB,Rs.count=0,Rs.emitted={}),Rs.infinite||(Rs.setMaxListeners(1/0),Rs.infinite=!0),LC.exports=function(t,e){if(!nm(global.process))return function(){};rEe.equal(typeof t,"function","a callback must be provided for exit handler"),NC===!1&&h6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Rs.removeListener(r,t),Rs.listeners("exit").length===0&&Rs.listeners("afterexit").length===0&&Nk()};return Rs.on(r,t),o},Nk=function(){!NC||!nm(global.process)||(NC=!1,RC.forEach(function(e){try{Ei.removeListener(e,Lk[e])}catch{}}),Ei.emit=Mk,Ei.reallyExit=g6,Rs.count-=1)},LC.exports.unload=Nk,im=function(e,r,o){Rs.emitted[e]||(Rs.emitted[e]=!0,Rs.emit(e,r,o))},Lk={},RC.forEach(function(t){Lk[t]=function(){if(!!nm(global.process)){var r=Ei.listeners(t);r.length===Rs.count&&(Nk(),im("exit",null,t),im("afterexit",null,t),nEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),LC.exports.signals=function(){return RC},NC=!1,h6=function(){NC||!nm(global.process)||(NC=!0,Rs.count+=1,RC=RC.filter(function(e){try{return Ei.on(e,Lk[e]),!0}catch{return!1}}),Ei.emit=sEe,Ei.reallyExit=iEe)},LC.exports.load=h6,g6=Ei.reallyExit,iEe=function(e){!nm(global.process)||(Ei.exitCode=e||0,im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),g6.call(Ei,Ei.exitCode))},Mk=Ei.emit,sEe=function(e,r){if(e==="exit"&&nm(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Mk.apply(this,arguments);return im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),o}else return Mk.apply(this,arguments)}):LC.exports=function(){return function(){}};var rEe,RC,nEe,tB,Rs,Nk,im,Lk,NC,h6,g6,iEe,Mk,sEe});var aEe=_((aVt,oEe)=>{"use strict";var Oyt=eEe(),Uyt=d6();oEe.exports=Oyt(()=>{Uyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var m6=_(MC=>{"use strict";var _yt=aEe(),Ok=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Ok=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(_yt(),Ok=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Ok=t),Ok?MC.show(e):MC.hide(e)}});var AEe=_(rB=>{"use strict";var uEe=rB&&rB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(rB,"__esModule",{value:!0});var lEe=uEe(f6()),cEe=uEe(m6()),Hyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(cEe.default.hide(),a=!0);let A=u+` -`;A!==o&&(o=A,t.write(lEe.default.eraseLines(r)+A),r=A.split(` -`).length)};return n.clear=()=>{t.write(lEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(cEe.default.show(),a=!1)},n};rB.default={create:Hyt}});var fEe=_((uVt,jyt)=>{jyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var gEe=_(gl=>{"use strict";var hEe=fEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:hEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;hEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return pEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=pEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function pEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var mEe=_((fVt,dEe)=>{"use strict";dEe.exports=gEe().isCI});var EEe=_((pVt,yEe)=>{"use strict";var qyt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};yEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of qyt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var PEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var UC,sB,qk,Gk,v6;typeof window>"u"||typeof MessageChannel!="function"?(OC=null,y6=null,E6=function(){if(OC!==null)try{var t=kn.unstable_now();OC(!0,t),OC=null}catch(e){throw setTimeout(E6,0),e}},CEe=Date.now(),kn.unstable_now=function(){return Date.now()-CEe},UC=function(t){OC!==null?setTimeout(UC,0,t):(OC=t,setTimeout(E6,0))},sB=function(t,e){y6=setTimeout(t,e)},qk=function(){clearTimeout(y6)},Gk=function(){return!1},v6=kn.unstable_forceFrameRate=function(){}):(Uk=window.performance,C6=window.Date,wEe=window.setTimeout,IEe=window.clearTimeout,typeof console<"u"&&(BEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof BEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Uk=="object"&&typeof Uk.now=="function"?kn.unstable_now=function(){return Uk.now()}:(vEe=C6.now(),kn.unstable_now=function(){return C6.now()-vEe}),nB=!1,iB=null,_k=-1,w6=5,I6=0,Gk=function(){return kn.unstable_now()>=I6},v6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125jk(u,r))p!==void 0&&0>jk(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>jk(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function jk(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],m0=[],Gyt=1,na=null,Lo=3,Wk=!1,sm=!1,oB=!1;function Vk(t){for(var e=nc(m0);e!==null;){if(e.callback===null)Yk(m0);else if(e.startTime<=t)Yk(m0),e.sortIndex=e.expirationTime,D6(eu,e);else break;e=nc(m0)}}function P6(t){if(oB=!1,Vk(t),!sm)if(nc(eu)!==null)sm=!0,UC(S6);else{var e=nc(m0);e!==null&&sB(P6,e.startTime-t)}}function S6(t,e){sm=!1,oB&&(oB=!1,qk()),Wk=!0;var r=Lo;try{for(Vk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!Gk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&Yk(eu),Vk(e)}else Yk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(m0);u!==null&&sB(P6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Wk=!1}}function DEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var Yyt=v6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,D6(m0,t),nc(eu)===null&&t===nc(m0)&&(oB?qk():oB=!0,sB(P6,a-o))):(t.sortIndex=r,D6(eu,t),sm||Wk||(sm=!0,UC(S6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Vk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";SEe.exports=PEe()});var xEe=_((dVt,aB)=>{aB.exports=function t(e){"use strict";var r=t6(),o=sn(),a=x6();function n(P){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+P,R=1;Rao||(P.current=yl[ao],yl[ao]=null,ao--)}function Mn(P,D){ao++,yl[ao]=P.current,P.current=D}var Ni={},On={current:Ni},_i={current:!1},tr=Ni;function Me(P,D){var R=P.type.contextTypes;if(!R)return Ni;var j=P.stateNode;if(j&&j.__reactInternalMemoizedUnmaskedChildContext===D)return j.__reactInternalMemoizedMaskedChildContext;var Y={},fe;for(fe in R)Y[fe]=D[fe];return j&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=D,P.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(P){return P=P.childContextTypes,P!=null}function Oa(P){Kn(_i,P),Kn(On,P)}function hr(P){Kn(_i,P),Kn(On,P)}function uc(P,D,R){if(On.current!==Ni)throw Error(n(168));Mn(On,D,P),Mn(_i,R,P)}function uu(P,D,R){var j=P.stateNode;if(P=D.childContextTypes,typeof j.getChildContext!="function")return R;j=j.getChildContext();for(var Y in j)if(!(Y in P))throw Error(n(108,ae(D)||"Unknown",Y));return r({},R,{},j)}function Ac(P){var D=P.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=On.current,Mn(On,D,P),Mn(_i,_i.current,P),!0}function El(P,D,R){var j=P.stateNode;if(!j)throw Error(n(169));R?(D=uu(P,D,tr),j.__reactInternalMemoizedMergedChildContext=D,Kn(_i,P),Kn(On,P),Mn(On,D,P)):Kn(_i,P),Mn(_i,R,P)}var vA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Tt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,DA=a.unstable_NormalPriority,cp=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,SA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case DA:return 97;case cp:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(P){switch(P){case 99:return Yt;case 98:return Cl;case 97:return DA;case 96:return cp;case 95:return pc;default:throw Error(n(332))}}function lo(P,D){return P=Ze(P),vA(P,D)}function gc(P,D,R){return P=Ze(P),Au(P,D,R)}function pu(P){return hi===null?(hi=[P],hc=Au(Yt,hu)):hi.push(P),PA}function ji(){if(hc!==null){var P=hc;hc=null,Ce(P)}hu()}function hu(){if(!SA&&hi!==null){SA=!0;var P=0;try{var D=hi;lo(99,function(){for(;P=D&&(qo=!0),P.firstContext=null)}function ms(P,D){if(aa!==P&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=P,D=1073741823),D={context:P,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return x?P._currentValue:P._currentValue2}var _s=!1;function Un(P){return{baseState:P,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pn(P){return{baseState:P.baseState,firstUpdate:P.firstUpdate,lastUpdate:P.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(P,D){return{expirationTime:P,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(P,D){P.lastUpdate===null?P.firstUpdate=P.lastUpdate=D:(P.lastUpdate.next=D,P.lastUpdate=D)}function tt(P,D){var R=P.alternate;if(R===null){var j=P.updateQueue,Y=null;j===null&&(j=P.updateQueue=Un(P.memoizedState))}else j=P.updateQueue,Y=R.updateQueue,j===null?Y===null?(j=P.updateQueue=Un(P.memoizedState),Y=R.updateQueue=Un(R.memoizedState)):j=P.updateQueue=Pn(Y):Y===null&&(Y=R.updateQueue=Pn(j));Y===null||j===Y?We(j,D):j.lastUpdate===null||Y.lastUpdate===null?(We(j,D),We(Y,D)):(We(j,D),Y.lastUpdate=D)}function It(P,D){var R=P.updateQueue;R=R===null?P.updateQueue=Un(P.memoizedState):nr(P,R),R.lastCapturedUpdate===null?R.firstCapturedUpdate=R.lastCapturedUpdate=D:(R.lastCapturedUpdate.next=D,R.lastCapturedUpdate=D)}function nr(P,D){var R=P.alternate;return R!==null&&D===R.updateQueue&&(D=P.updateQueue=Pn(D)),D}function $(P,D,R,j,Y,fe){switch(R.tag){case 1:return P=R.payload,typeof P=="function"?P.call(fe,j,Y):P;case 3:P.effectTag=P.effectTag&-4097|64;case 0:if(P=R.payload,Y=typeof P=="function"?P.call(fe,j,Y):P,Y==null)break;return r({},j,Y);case 2:_s=!0}return j}function me(P,D,R,j,Y){_s=!1,D=nr(P,D);for(var fe=D.baseState,ve=null,vt=0,wt=D.firstUpdate,bt=fe;wt!==null;){var _r=wt.expirationTime;_rxn?(ai=Fr,Fr=null):ai=Fr.sibling;var en=di(rt,Fr,At[xn],Wt);if(en===null){Fr===null&&(Fr=ai);break}P&&Fr&&en.alternate===null&&D(rt,Fr),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en,Fr=ai}if(xn===At.length)return R(rt,Fr),vr;if(Fr===null){for(;xnxn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,en.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}P&&Fr&&ho.alternate===null&&D(rt,Fr),Ke=fe(ho,Ke,xn),Sn===null?vr=ho:Sn.sibling=ho,Sn=ho,Fr=ai}if(en.done)return R(rt,Fr),vr;if(Fr===null){for(;!en.done;xn++,en=At.next())en=is(rt,en.value,Wt),en!==null&&(Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return vr}for(Fr=j(rt,Fr);!en.done;xn++,en=At.next())en=po(Fr,rt,xn,en.value,Wt),en!==null&&(P&&en.alternate!==null&&Fr.delete(en.key===null?xn:en.key),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return P&&Fr.forEach(function(PF){return D(rt,PF)}),vr}return function(rt,Ke,At,Wt){var vr=typeof At=="object"&&At!==null&&At.type===E&&At.key===null;vr&&(At=At.props.children);var Sn=typeof At=="object"&&At!==null;if(Sn)switch(At.$$typeof){case p:e:{for(Sn=At.key,vr=Ke;vr!==null;){if(vr.key===Sn)if(vr.tag===7?At.type===E:vr.elementType===At.type){R(rt,vr.sibling),Ke=Y(vr,At.type===E?At.props.children:At.props,Wt),Ke.ref=kA(rt,vr,At),Ke.return=rt,rt=Ke;break e}else{R(rt,vr);break}else D(rt,vr);vr=vr.sibling}At.type===E?(Ke=xu(At.props.children,rt.mode,Wt,At.key),Ke.return=rt,rt=Ke):(Wt=Hm(At.type,At.key,At.props,null,rt.mode,Wt),Wt.ref=kA(rt,Ke,At),Wt.return=rt,rt=Wt)}return ve(rt);case h:e:{for(vr=At.key;Ke!==null;){if(Ke.key===vr)if(Ke.tag===4&&Ke.stateNode.containerInfo===At.containerInfo&&Ke.stateNode.implementation===At.implementation){R(rt,Ke.sibling),Ke=Y(Ke,At.children||[],Wt),Ke.return=rt,rt=Ke;break e}else{R(rt,Ke);break}else D(rt,Ke);Ke=Ke.sibling}Ke=Fw(At,rt.mode,Wt),Ke.return=rt,rt=Ke}return ve(rt)}if(typeof At=="string"||typeof At=="number")return At=""+At,Ke!==null&&Ke.tag===6?(R(rt,Ke.sibling),Ke=Y(Ke,At,Wt),Ke.return=rt,rt=Ke):(R(rt,Ke),Ke=Qw(At,rt.mode,Wt),Ke.return=rt,rt=Ke),ve(rt);if(bA(At))return VA(rt,Ke,At,Wt);if(Ae(At))return Yo(rt,Ke,At,Wt);if(Sn&&up(rt,At),typeof At>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return R(rt,Ke)}}var gu=ng(!0),ig=ng(!1),du={},uo={current:du},QA={current:du},mc={current:du};function ca(P){if(P===du)throw Error(n(174));return P}function sg(P,D){Mn(mc,D,P),Mn(QA,P,P),Mn(uo,du,P),D=ne(D),Kn(uo,P),Mn(uo,D,P)}function yc(P){Kn(uo,P),Kn(QA,P),Kn(mc,P)}function Pm(P){var D=ca(mc.current),R=ca(uo.current);D=ee(R,P.type,D),R!==D&&(Mn(QA,P,P),Mn(uo,D,P))}function og(P){QA.current===P&&(Kn(uo,P),Kn(QA,P))}var $n={current:0};function Ap(P){for(var D=P;D!==null;){if(D.tag===13){var R=D.memoizedState;if(R!==null&&(R=R.dehydrated,R===null||Ls(R)||so(R)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===P)break;for(;D.sibling===null;){if(D.return===null||D.return===P)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function ag(P,D){return{responder:P,props:D}}var FA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,G=null,Dt=0,wl=!1,bi=null,wc=0;function ct(){throw Error(n(321))}function Eu(P,D){if(D===null)return!1;for(var R=0;RCc&&(Cc=_r,_m(Cc))):(Pw(_r,wt.suspenseConfig),fe=wt.eagerReducer===P?wt.eagerState:P(fe,wt.action)),ve=wt,wt=wt.next}while(wt!==null&&wt!==j);bt||(vt=ve,Y=fe),hs(fe,D.memoizedState)||(qo=!0),D.memoizedState=fe,D.baseUpdate=vt,D.baseState=Y,R.lastRenderedState=fe}return[D.memoizedState,R.dispatch]}function cg(P){var D=TA();return typeof P=="function"&&(P=P()),D.memoizedState=D.baseState=P,P=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:P},P=P.dispatch=hg.bind(null,Ha,P),[D.memoizedState,P]}function ug(P){return Cs(Br,P)}function Ag(P,D,R,j){return P={tag:P,create:D,destroy:R,deps:j,next:null},G===null?(G={lastEffect:null},G.lastEffect=P.next=P):(D=G.lastEffect,D===null?G.lastEffect=P.next=P:(R=D.next,D.next=P,P.next=R,G.lastEffect=P)),P}function pp(P,D,R,j){var Y=TA();Dt|=P,Y.memoizedState=Ag(D,R,void 0,j===void 0?null:j)}function Ic(P,D,R,j){var Y=fp();j=j===void 0?null:j;var fe=void 0;if(Gi!==null){var ve=Gi.memoizedState;if(fe=ve.destroy,j!==null&&Eu(j,ve.deps)){Ag(0,R,fe,j);return}}Dt|=P,Y.memoizedState=Ag(D,R,fe,j)}function Ct(P,D){return pp(516,192,P,D)}function Sm(P,D){return Ic(516,192,P,D)}function fg(P,D){if(typeof D=="function")return P=P(),D(P),function(){D(null)};if(D!=null)return P=P(),D.current=P,function(){D.current=null}}function pg(){}function Cu(P,D){return TA().memoizedState=[P,D===void 0?null:D],P}function xm(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(R.memoizedState=[P,D],P)}function hg(P,D,R){if(!(25>wc))throw Error(n(301));var j=P.alternate;if(P===Ha||j!==null&&j===Ha)if(wl=!0,P={expirationTime:mu,suspenseConfig:null,action:R,eagerReducer:null,eagerState:null,next:null},bi===null&&(bi=new Map),R=bi.get(D),R===void 0)bi.set(D,P);else{for(D=R;D.next!==null;)D=D.next;D.next=P}else{var Y=ga(),fe=pt.suspense;Y=HA(Y,P,fe),fe={expirationTime:Y,suspenseConfig:fe,action:R,eagerReducer:null,eagerState:null,next:null};var ve=D.last;if(ve===null)fe.next=fe;else{var vt=ve.next;vt!==null&&(fe.next=vt),ve.next=fe}if(D.last=fe,P.expirationTime===0&&(j===null||j.expirationTime===0)&&(j=D.lastRenderedReducer,j!==null))try{var wt=D.lastRenderedState,bt=j(wt,R);if(fe.eagerReducer=j,fe.eagerState=bt,hs(bt,wt))return}catch{}finally{}Sc(P,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},yw={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,pp(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return pp(4,36,P,D)},useMemo:function(P,D){var R=TA();return D=D===void 0?null:D,P=P(),R.memoizedState=[P,D],P},useReducer:function(P,D,R){var j=TA();return D=R!==void 0?R(D):D,j.memoizedState=j.baseState=D,P=j.queue={last:null,dispatch:null,lastRenderedReducer:P,lastRenderedState:D},P=P.dispatch=hg.bind(null,Ha,P),[j.memoizedState,P]},useRef:function(P){var D=TA();return P={current:P},D.memoizedState=P},useState:cg,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=cg(P),j=R[0],Y=R[1];return Ct(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=cg(!1),R=D[0],j=D[1];return[Cu(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},bm={readContext:ms,useCallback:xm,useContext:ms,useEffect:Sm,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,Ic(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return Ic(4,36,P,D)},useMemo:function(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(P=P(),R.memoizedState=[P,D],P)},useReducer:Cs,useRef:function(){return fp().memoizedState},useState:ug,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=ug(P),j=R[0],Y=R[1];return Sm(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=ug(!1),R=D[0],j=D[1];return[xm(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},Aa=null,Bc=null,Il=!1;function Iu(P,D){var R=Dl(5,null,null,0);R.elementType="DELETED",R.type="DELETED",R.stateNode=D,R.return=P,R.effectTag=8,P.lastEffect!==null?(P.lastEffect.nextEffect=R,P.lastEffect=R):P.firstEffect=P.lastEffect=R}function gg(P,D){switch(P.tag){case 5:return D=io(D,P.type,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 6:return D=Si(D,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function RA(P){if(Il){var D=Bc;if(D){var R=D;if(!gg(P,D)){if(D=cc(R),!D||!gg(P,D)){P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P;return}Iu(Aa,R)}Aa=P,Bc=cu(D)}else P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P}}function hp(P){for(P=P.return;P!==null&&P.tag!==5&&P.tag!==3&&P.tag!==13;)P=P.return;Aa=P}function ja(P){if(!y||P!==Aa)return!1;if(!Il)return hp(P),Il=!0,!1;var D=P.type;if(P.tag!==5||D!=="head"&&D!=="body"&&!Qe(D,P.memoizedProps))for(D=Bc;D;)Iu(P,D),D=cc(D);if(hp(P),P.tag===13){if(!y)throw Error(n(316));if(P=P.memoizedState,P=P!==null?P.dehydrated:null,!P)throw Error(n(317));Bc=Ms(P)}else Bc=Aa?cc(P.stateNode):null;return!0}function dg(){y&&(Bc=Aa=null,Il=!1)}var gp=u.ReactCurrentOwner,qo=!1;function ws(P,D,R,j){D.child=P===null?ig(D,null,R,j):gu(D,P.child,R,j)}function Ii(P,D,R,j,Y){R=R.render;var fe=D.ref;return ds(D,Y),j=lg(P,D,R,j,fe,Y),P!==null&&!qo?(D.updateQueue=P.updateQueue,D.effectTag&=-517,P.expirationTime<=Y&&(P.expirationTime=0),si(P,D,Y)):(D.effectTag|=1,ws(P,D,j,Y),D.child)}function km(P,D,R,j,Y,fe){if(P===null){var ve=R.type;return typeof ve=="function"&&!kw(ve)&&ve.defaultProps===void 0&&R.compare===null&&R.defaultProps===void 0?(D.tag=15,D.type=ve,Qm(P,D,ve,j,Y,fe)):(P=Hm(R.type,null,j,null,D.mode,fe),P.ref=D.ref,P.return=D,D.child=P)}return ve=P.child,YD)&&_A.set(P,D)))}}function vg(P,D){P.expirationTimeP?D:P)}function fo(P){if(P.lastExpiredTime!==0)P.callbackExpirationTime=1073741823,P.callbackPriority=99,P.callbackNode=pu(Dw.bind(null,P));else{var D=Um(P),R=P.callbackNode;if(D===0)R!==null&&(P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90);else{var j=ga();if(D===1073741823?j=99:D===1||D===2?j=95:(j=10*(1073741821-D)-10*(1073741821-j),j=0>=j?99:250>=j?98:5250>=j?97:95),R!==null){var Y=P.callbackPriority;if(P.callbackExpirationTime===D&&Y>=j)return;R!==PA&&Ce(R)}P.callbackExpirationTime=D,P.callbackPriority=j,D=D===1073741823?pu(Dw.bind(null,P)):gc(j,Wv.bind(null,P),{timeout:10*(1073741821-D)-Li()}),P.callbackNode=D}}}function Wv(P,D){if(Om=0,D)return D=ga(),jm(P,D),fo(P),null;var R=Um(P);if(R!==0){if(D=P.callbackNode,(yr&(rs|js))!==En)throw Error(n(327));if(Ip(),P===gi&&R===ns||Pu(P,R),Mr!==null){var j=yr;yr|=rs;var Y=qA(P);do try{gF();break}catch(vt){jA(P,vt)}while(1);if(la(),yr=j,Ep.current=Y,Yi===Rm)throw D=Nm,Pu(P,R),WA(P,R),fo(P),D;if(Mr===null)switch(Y=P.finishedWork=P.current.alternate,P.finishedExpirationTime=R,j=Yi,gi=null,j){case Bu:case Rm:throw Error(n(345));case Bi:jm(P,2=R){P.lastPingedTime=R,Pu(P,R);break}}if(fe=Um(P),fe!==0&&fe!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}P.timeoutHandle=Te(Su.bind(null,P),Y);break}Su(P);break;case vl:if(WA(P,R),j=P.lastSuspendedTime,R===j&&(P.nextKnownPendingLevel=Sw(Y)),OA&&(Y=P.lastPingedTime,Y===0||Y>=R)){P.lastPingedTime=R,Pu(P,R);break}if(Y=Um(P),Y!==0&&Y!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}if(MA!==1073741823?j=10*(1073741821-MA)-Li():Ya===1073741823?j=0:(j=10*(1073741821-Ya)-5e3,Y=Li(),R=10*(1073741821-R)-Y,j=Y-j,0>j&&(j=0),j=(120>j?120:480>j?480:1080>j?1080:1920>j?1920:3e3>j?3e3:4320>j?4320:1960*Cw(j/1960))-j,R=j?j=0:(Y=ve.busyDelayMs|0,fe=Li()-(10*(1073741821-fe)-(ve.timeoutMs|0||5e3)),j=fe<=Y?0:Y+j-fe),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Pc&&(Yi=Bi),fe=yg(fe,Y),wt=j;do{switch(wt.tag){case 3:ve=fe,wt.effectTag|=4096,wt.expirationTime=D;var Ke=Gv(wt,ve,D);It(wt,Ke);break e;case 1:ve=fe;var At=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof At.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,ve,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Mr=zv(Mr)}catch(Sn){D=Sn;continue}break}while(1)}function qA(){var P=Ep.current;return Ep.current=wu,P===null?wu:P}function Pw(P,D){PCp&&(Cp=P)}function hF(){for(;Mr!==null;)Mr=Jv(Mr)}function gF(){for(;Mr!==null&&!Tt();)Mr=Jv(Mr)}function Jv(P){var D=Zv(P.alternate,P,ns);return P.memoizedProps=P.pendingProps,D===null&&(D=zv(P)),ww.current=null,D}function zv(P){Mr=P;do{var D=Mr.alternate;if(P=Mr.return,(Mr.effectTag&2048)===0){e:{var R=D;D=Mr;var j=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Oa(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(R===null||R.child===null)&&ja(D)&&pa(D),Bl(D);break;case 5:og(D);var fe=ca(mc.current);if(j=D.type,R!==null&&D.stateNode!=null)ts(R,D,j,Y,fe),R.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(R=ca(uo.current),ja(D)){if(Y=D,!y)throw Error(n(175));R=ap(Y.stateNode,Y.type,Y.memoizedProps,fe,R,Y),Y.updateQueue=R,R=R!==null,R&&pa(D)}else{var ve=ht(j,Y,fe,R,D);vc(ve,D,!1,!1),D.stateNode=ve,lt(ve,j,Y,fe,R)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(R&&D.stateNode!=null)Gr(R,D,R.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(R=ca(mc.current),fe=ca(uo.current),ja(D)){if(R=D,!y)throw Error(n(176));(R=lp(R.stateNode,R.memoizedProps,R))&&pa(D)}else D.stateNode=_e(Y,R,fe,D)}break;case 11:break;case 13:if(Kn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=j;break e}Y=Y!==null,fe=!1,R===null?D.memoizedProps.fallback!==void 0&&ja(D):(j=R.memoizedState,fe=j!==null,Y||j===null||(j=R.child.sibling,j!==null&&(ve=D.firstEffect,ve!==null?(D.firstEffect=j,j.nextEffect=ve):(D.firstEffect=D.lastEffect=j,j.nextEffect=null),j.effectTag=8))),Y&&!fe&&(D.mode&2)!==0&&(R===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),Cp!==0&&gi!==null&&(WA(gi,ns),eD(gi,Cp)))),S&&Y&&(D.effectTag|=4),w&&(Y||fe)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Oa(D);break;case 19:if(Kn($n,D),Y=D.memoizedState,Y===null)break;if(fe=(D.effectTag&64)!==0,ve=Y.rendering,ve===null){if(fe)Dc(Y,!1);else if(Yi!==Bu||R!==null&&(R.effectTag&64)!==0)for(R=D.child;R!==null;){if(ve=Ap(R),ve!==null){for(D.effectTag|=64,Dc(Y,!1),R=ve.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,R=j,Y=D.child;Y!==null;)fe=Y,j=R,fe.effectTag&=2,fe.nextEffect=null,fe.firstEffect=null,fe.lastEffect=null,ve=fe.alternate,ve===null?(fe.childExpirationTime=0,fe.expirationTime=j,fe.child=null,fe.memoizedProps=null,fe.memoizedState=null,fe.updateQueue=null,fe.dependencies=null):(fe.childExpirationTime=ve.childExpirationTime,fe.expirationTime=ve.expirationTime,fe.child=ve.child,fe.memoizedProps=ve.memoizedProps,fe.memoizedState=ve.memoizedState,fe.updateQueue=ve.updateQueue,j=ve.dependencies,fe.dependencies=j===null?null:{expirationTime:j.expirationTime,firstContext:j.firstContext,responders:j.responders}),Y=Y.sibling;Mn($n,$n.current&1|2,D),D=D.child;break e}R=R.sibling}}else{if(!fe)if(R=Ap(ve),R!==null){if(D.effectTag|=64,fe=!0,R=R.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!ve.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=j),ve>Y&&(Y=ve),fe=fe.sibling;R.childExpirationTime=Y}if(D!==null)return D;P!==null&&(P.effectTag&2048)===0&&(P.firstEffect===null&&(P.firstEffect=Mr.firstEffect),Mr.lastEffect!==null&&(P.lastEffect!==null&&(P.lastEffect.nextEffect=Mr.firstEffect),P.lastEffect=Mr.lastEffect),1P?D:P}function Su(P){var D=_o();return lo(99,dF.bind(null,P,D)),null}function dF(P,D){do Ip();while(Ig!==null);if((yr&(rs|js))!==En)throw Error(n(327));var R=P.finishedWork,j=P.finishedExpirationTime;if(R===null)return null;if(P.finishedWork=null,P.finishedExpirationTime=0,R===P.current)throw Error(n(177));P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90,P.nextKnownPendingLevel=0;var Y=Sw(R);if(P.firstPendingTime=Y,j<=P.lastSuspendedTime?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:j<=P.firstSuspendedTime&&(P.firstSuspendedTime=j-1),j<=P.lastPingedTime&&(P.lastPingedTime=0),j<=P.lastExpiredTime&&(P.lastExpiredTime=0),P===gi&&(Mr=gi=null,ns=0),1=R?ln(P,D,R):(Mn($n,$n.current&1,D),D=si(P,D,R),D!==null?D.sibling:null);Mn($n,$n.current&1,D);break;case 19:if(j=D.childExpirationTime>=R,(P.effectTag&64)!==0){if(j)return qa(P,D,R);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),Mn($n,$n.current,D),!j)return null}return si(P,D,R)}qo=!1}}else qo=!1;switch(D.expirationTime=0,D.tag){case 2:if(j=D.type,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,Y=Me(D,On.current),ds(D,R),Y=lg(null,D,j,P,Y,R),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,mw(),ii(j)){var fe=!0;Ac(D)}else fe=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var ve=j.getDerivedStateFromProps;typeof ve=="function"&&er(D,j,ve,P),Y.updater=Zr,D.stateNode=Y,Y._reactInternalFiber=D,jo(D,j,P,R),D=mp(null,D,j,!0,fe,R)}else D.tag=0,ws(null,D,Y,R),D=D.child;return D;case 16:if(Y=D.elementType,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,ye(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,fe=D.tag=BF(Y),P=Ci(Y,P),fe){case 0:D=NA(null,D,Y,P,R);break;case 1:D=dp(null,D,Y,P,R);break;case 11:D=Ii(null,D,Y,P,R);break;case 14:D=km(null,D,Y,Ci(Y.type,P),j,R);break;default:throw Error(n(306,Y,""))}return D;case 0:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),NA(P,D,j,Y,R);case 1:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),dp(P,D,j,Y,R);case 3:if(mg(D),j=D.updateQueue,j===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,me(D,j,D.pendingProps,null,R),j=D.memoizedState.element,j===Y)dg(),D=si(P,D,R);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(R=ig(D,null,j,R),D.child=R;R;)R.effectTag=R.effectTag&-3|1024,R=R.sibling;else ws(P,D,j,R),dg();D=D.child}return D;case 5:return Pm(D),P===null&&RA(D),j=D.type,Y=D.pendingProps,fe=P!==null?P.memoizedProps:null,ve=Y.children,Qe(j,Y)?ve=null:fe!==null&&Qe(j,fe)&&(D.effectTag|=16),Go(P,D),D.mode&4&&R!==1&&be(j,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(P,D,ve,R),D=D.child),D;case 6:return P===null&&RA(D),null;case 13:return ln(P,D,R);case 4:return sg(D,D.stateNode.containerInfo),j=D.pendingProps,P===null?D.child=gu(D,null,j,R):ws(P,D,j,R),D.child;case 11:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),Ii(P,D,j,Y,R);case 7:return ws(P,D,D.pendingProps,R),D.child;case 8:return ws(P,D,D.pendingProps.children,R),D.child;case 12:return ws(P,D,D.pendingProps.children,R),D.child;case 10:e:{if(j=D.type._context,Y=D.pendingProps,ve=D.memoizedProps,fe=Y.value,Ho(D,fe),ve!==null){var vt=ve.value;if(fe=hs(vt,fe)?0:(typeof j._calculateChangedBits=="function"?j._calculateChangedBits(vt,fe):1073741823)|0,fe===0){if(ve.children===Y.children&&!_i.current){D=si(P,D,R);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){ve=vt.child;for(var bt=wt.firstContext;bt!==null;){if(bt.context===j&&(bt.observedBits&fe)!==0){vt.tag===1&&(bt=ys(R,null),bt.tag=2,tt(vt,bt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var R=D.inject(P);xw=function(j){try{D.onCommitFiberRoot(R,j,void 0,(j.current.effectTag&64)===64)}catch{}},bw=function(j){try{D.onCommitFiberUnmount(R,j)}catch{}}}catch{}return!0}function IF(P,D,R,j){this.tag=P,this.key=R,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=j,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(P,D,R,j){return new IF(P,D,R,j)}function kw(P){return P=P.prototype,!(!P||!P.isReactComponent)}function BF(P){if(typeof P=="function")return kw(P)?1:0;if(P!=null){if(P=P.$$typeof,P===L)return 11;if(P===te)return 14}return 2}function YA(P,D){var R=P.alternate;return R===null?(R=Dl(P.tag,D,P.key,P.mode),R.elementType=P.elementType,R.type=P.type,R.stateNode=P.stateNode,R.alternate=P,P.alternate=R):(R.pendingProps=D,R.effectTag=0,R.nextEffect=null,R.firstEffect=null,R.lastEffect=null),R.childExpirationTime=P.childExpirationTime,R.expirationTime=P.expirationTime,R.child=P.child,R.memoizedProps=P.memoizedProps,R.memoizedState=P.memoizedState,R.updateQueue=P.updateQueue,D=P.dependencies,R.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},R.sibling=P.sibling,R.index=P.index,R.ref=P.ref,R}function Hm(P,D,R,j,Y,fe){var ve=2;if(j=P,typeof P=="function")kw(P)&&(ve=1);else if(typeof P=="string")ve=5;else e:switch(P){case E:return xu(R.children,Y,fe,D);case T:ve=8,Y|=7;break;case I:ve=8,Y|=1;break;case v:return P=Dl(12,R,D,Y|8),P.elementType=v,P.type=v,P.expirationTime=fe,P;case U:return P=Dl(13,R,D,Y),P.type=U,P.elementType=U,P.expirationTime=fe,P;case J:return P=Dl(19,R,D,Y),P.elementType=J,P.expirationTime=fe,P;default:if(typeof P=="object"&&P!==null)switch(P.$$typeof){case b:ve=10;break e;case C:ve=9;break e;case L:ve=11;break e;case te:ve=14;break e;case le:ve=16,j=null;break e}throw Error(n(130,P==null?P:typeof P,""))}return D=Dl(ve,R,D,Y),D.elementType=P,D.type=j,D.expirationTime=fe,D}function xu(P,D,R,j){return P=Dl(7,P,j,D),P.expirationTime=R,P}function Qw(P,D,R){return P=Dl(6,P,null,D),P.expirationTime=R,P}function Fw(P,D,R){return D=Dl(4,P.children!==null?P.children:[],P.key,D),D.expirationTime=R,D.stateNode={containerInfo:P.containerInfo,pendingChildren:null,implementation:P.implementation},D}function vF(P,D,R){this.tag=D,this.current=null,this.containerInfo=P,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=He,this.pendingContext=this.context=null,this.hydrate=R,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(P,D){var R=P.firstSuspendedTime;return P=P.lastSuspendedTime,R!==0&&R>=D&&P<=D}function WA(P,D){var R=P.firstSuspendedTime,j=P.lastSuspendedTime;RD||R===0)&&(P.lastSuspendedTime=D),D<=P.lastPingedTime&&(P.lastPingedTime=0),D<=P.lastExpiredTime&&(P.lastExpiredTime=0)}function eD(P,D){D>P.firstPendingTime&&(P.firstPendingTime=D);var R=P.firstSuspendedTime;R!==0&&(D>=R?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:D>=P.lastSuspendedTime&&(P.lastSuspendedTime=D+1),D>P.nextKnownPendingLevel&&(P.nextKnownPendingLevel=D))}function jm(P,D){var R=P.lastExpiredTime;(R===0||R>D)&&(P.lastExpiredTime=D)}function tD(P){var D=P._reactInternalFiber;if(D===void 0)throw typeof P.render=="function"?Error(n(188)):Error(n(268,Object.keys(P)));return P=Ee(D),P===null?null:P.stateNode}function rD(P,D){P=P.memoizedState,P!==null&&P.dehydrated!==null&&P.retryTime{"use strict";bEe.exports=xEe()});var FEe=_((yVt,QEe)=>{"use strict";var Wyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};QEe.exports=Wyt});var LEe=_((EVt,NEe)=>{"use strict";var Vyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),TEe=function(){Kk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){k6(this,t),this.width=e,this.height=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),REe=function(){function t(e,r){k6(this,t),this.unit=e,this.value=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();NEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),b=1;b1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),Vyt({Config:e.Config,Node:e.Node,Layout:t("Layout",Kyt),Size:t("Size",TEe),Value:t("Value",REe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var MEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof Be=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` -`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(b){Runtime.warnOnce("Blob constructor present but fails: "+b+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var T=C.getContext("2d");T.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(T){h||(h=!0,Module.preloadedAudios[u]=T,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var b=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",pe="",Ae=0,ye=0,ae=0;ae=6;){var we=Ae>>ye-6&63;ye-=6,pe+=te[we]}return ye==2?(pe+=te[(Ae&3)<<4],pe+=le+le):ye==4&&(pe+=te[(Ae&15)<<2],pe+=le),pe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=b,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,b){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var T;return b?T=E.replace("X",p).replace("Y",v):T=p.replace("X",E).replace("Y",v),T.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,b,C,T){b===void 0&&(b="X"),T===void 0&&(T=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(b=r(C[2],C[0],b,te[0],"?",!0));var le;J==0&&(le="Unbound"),J>=10&&(le="Corrupt"),T>20&&(le="Deeply nested"),le&&o(le,p,b,J,v||"?");var pe=U.paramList[0],Ae=a(pe,h,E,I,v,b,te,T+1),ye,ae={flags:te[0],id:p,name:"",paramList:[Ae]},we=[],Pe="?";switch(U.placeholderFlag){case 1:ye=Ae.spec;break;case 2:if((Ae.flags&15360)==1024&&Ae.spec.ptrSize==1){ae.flags=7168;break}case 3:case 6:case 5:ye=Ae.spec,Ae.flags&15360;break;case 8:Pe=""+U.paramList[1],ae.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[b/4],I=HEAPU32[b/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},T={__nbindFlags:E,__nbindPtr:I};v&&(T.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(T);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,b=e.ABORT|0,C=e.STACKTOP|0,T=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,le=0,pe=0,Ae=t.NaN,ye=t.Infinity,ae=0,we=0,Pe=0,g=0,Ee=0,De=0,ce=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,ke=t.Math.cos,ht=t.Math.sin,H=t.Math.tan,lt=t.Math.acos,Re=t.Math.asin,Qe=t.Math.atan,be=t.Math.atan2,_e=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,He=t.Math.imul,x=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Se=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,xt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,xr=e.invoke_diii,Wr=e.invoke_di,Vn=e.invoke_iid,Ns=e.invoke_iii,Ri=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Si=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,ap=e.invoke_v,lp=e.invoke_viid,Ms=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Os=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Kn=e._removeAccessorPrefix,Mn=e._typeModule,Ni=e.__nbind_register_pool,On=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Me=e.__extends,ii=e.__nbind_get_value_object,Oa=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,vA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Tt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,DA=e._emscripten_get_now,cp=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,SA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function ji(s,l){s=s|0,l=l|0,C=s,T=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,De=s}function Ua(){return De|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,ft(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,yg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Vt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Fm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,wp(l,d,d,s+8|0),Ig(s,l),UA(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;O=wi(s)|0;do if(O|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||LT[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(O|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(O|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Pn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],me(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||LT[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0;et=C,C=C+64|0,q=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Oe=et+20|0,Fe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}_A(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),M=n[s>>2]|0,O=(n[B>>2]|0)-M|0,m=O>>1,wp(Fe,O>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-M>>2,s+8|0),M=Fe+8|0,f=n[M>>2]|0,m=Fe+12|0,O=n[m>>2]|0,B=O,Q=f;do if((f|0)==(O|0)){if(O=Fe+4|0,f=n[O>>2]|0,Xe=n[Fe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,wp(se,f,f>>>2,n[Fe+16>>2]|0),n[Ge>>2]=n[O>>2],n[Oe>>2]=n[M>>2],n[k>>2]=n[Ge>>2],n[q>>2]=n[Oe>>2],vw(se,k,q),f=n[Fe>>2]|0,n[Fe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,UA(se),f=n[M>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[O>>2]|0),Xe=k+(m<<2)|0,n[M>>2]=Xe,n[O>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[M>>2]=(n[M>>2]|0)+4,l=Bg(s,Fe,l)|0,UA(Fe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(Ae),s=n[s+944>>2]|0}while((s|0)!=0)}function ft(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function pt(s){return s=s|0,n[s+944>>2]|0}function Rt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function Zr(s,l){s=s|0,l=l|0,LUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function qi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function xi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function jo(s){return s=s|0,n[s+980>>2]|0}function bA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function kA(s){return s=s|0,n[s+4>>2]|0}function up(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ng(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function QA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function og(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ag(s){return s=s|0,n[s+36>>2]|0}function FA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function G(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(Ae),n[c>>2]=3,Le(s))}function bi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function lg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function mw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function fp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(Ae),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function cg(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ug(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(Ae),n[l>>2]=3,Le(s))}function Ag(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function pp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function fg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function bm(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function gg(s){return s=s|0,y(h[s+408>>2])}function RA(s){return s=s|0,y(h[s+412>>2])}function hp(s){return s=s|0,y(h[s+416>>2])}function ja(s){return s=s|0,y(h[s+420>>2])}function dg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function gp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function qo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Oa(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),s3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(kT(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function NA(s,l,c,f,d,m,B,k,Q,O,M,q,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),O=y(O),M=y(M),q=y(q),se=se|0;var Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze;return Q>2]),Oe!=y(0))?(et=y(Go(l,Oe,0,0)),Xe=y(Go(f,Oe,0,0)),Fe=y(Go(m,Oe,0,0)),Oe=y(Go(k,Oe,0,0))):(Fe=m,et=l,Oe=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Fe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Oe,Xe)|0:se=0,!Ge&&(at=y(l-M),!(dp(s,at,Q)|0))&&!(mp(s,at,d,Q)|0)?Ge=mg(s,at,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-q),!(dp(c,Ue,O)|0))&&!(mp(c,Ue,B,O)|0)?se=mg(c,Ue,B,k,O)|0:se=1,se=Ge&se),se|0}function dp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function mp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function mg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,O,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0,M=M|0;var q=0,se=0,Ge=0,Oe=0,Fe=Ze,et=Ze,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Or=ir+104|0,Ue=ir+72|0,Oe=ir+56|0,Lt=ir+8|0,at=ir,qe=(n[2279]|0)+1|0,n[2279]=qe,Pr=s+984|0,(o[Pr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Fe=y(ln(s,2,B)),et=y(ln(s,0,B)),q=s+916|0,mo=y(h[q>>2]),go=y(h[s+920>>2]),bn=y(h[s+932>>2]),NA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,bn,y(h[s+936>>2]),Fe,et,M)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,bn=y(h[q>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),NA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,bn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Fe,et,M)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(q=s+916|0,!(Ii(y(h[q>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}q=(n[s+928>>2]|0)==(m|0)?q:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,Ii(y(h[q>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(q=0,Xe=28):(q=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((q|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Oe=q+16|0,n[s+908>>2]=n[Oe>>2],Ge=q+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[at>>2]=LA(qe)|0,n[at+4>>2]=qe,Ao(s,4,2972,at),se=n[s+972>>2]|0,se|0&&ef[se&127](s),d=qa(d,Q)|0,m=qa(m,Q)|0,ya=+y(h[Oe>>2]),yo=+y(h[Ge>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=O,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=LA(qe)|0,n[Oe>>2]=se,n[Oe+4>>2]=qe,n[Oe+8>>2]=Nr?3047:11699,Ao(s,4,3038,Oe),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Xe=qa(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=O,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,M),o[11697]|0&&(se=n[2279]|0,Lt=LA(se)|0,n[Or>>2]=Lt,n[Or+4>>2]=se,n[Or+8>>2]=Nr?3047:11699,Ao(s,4,3083,Or),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Or=qa(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Or,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=O,Ao(s,4,3092,or)),n[s+516>>2]=f,q||(se=s+520|0,q=n[se>>2]|0,(q|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,q=0),Q?q=s+916|0:(n[se>>2]=q+1,q=s+524+(q*24|0)|0),h[q>>2]=l,h[q+4>>2]=c,n[q+8>>2]=d,n[q+12>>2]=m,n[q+16>>2]=n[s+908>>2],n[q+20>>2]=n[s+912>>2],q=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Pr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(q|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(V(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Eg(f,s,l,c,d),C=m}function LA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function qa(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0;var M=0,q=0,se=0,Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze,qe=Ze,Lt=0,Or=0,or=0,Xt=Ze,Pr=Ze,Nr=0,ir=Ze,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=Ze,Up=Ze,Ru=Ze,Nu=Ze,kc=Ze,qs=0,za=0,Wo=0,kl=0,rf=0,nf=Ze,Lu=Ze,sf=Ze,of=Ze,Gs=Ze,vs=Ze,Ql=0,Tn=Ze,af=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,lf=0,cf=0,Tc=Ze,Ys=Ze,Fl=0,uf=0,Af=0,ff=0,br=Ze,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0,Jt=Ze,pf=0,li=0;Tl=C,C=C+16|0,qs=Tl+12|0,za=Tl+8|0,Wo=Tl+4|0,kl=Tl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Tr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(V(s,Tr,B)),h[s+444>>2]=y(re(s,Tr,B)),h[s+428>>2]=y(V(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Tr)),h[s+468>>2]=y(yn(s,Tr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Tr,B)),h[s+492>>2]=y(Mi(s,Tr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Mi(s,ur,B));do if(n[s+964>>2]|0)wg(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),bl=s+508|0,o[bl>>0]=0,Tr=fr(n[s+4>>2]|0,Ds)|0,ur=Cw(Tr,Ds)|0,Jn=he(Tr)|0,Mp=n[s+8>>2]|0,uf=s+28|0,bc=(n[uf>>2]|0)!=0,Co=Jn?B:k,Tc=Jn?k:B,Op=y(Ep(s,Tr,B)),Up=y(ww(s,Tr,B)),Oe=y(Ep(s,ur,B)),Fc=y(En(s,Tr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,br=Jn?Fc:Ys,at=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Fe=y(y(Gr(s+364|0,B))-br),et=y(y(Gr(s+380|0,B))-br),Ue=y(y(Gr(s+372|0,k))-at),qe=y(y(Gr(s+388|0,k))-at),Ru=Jn?Fe:Ue,Nu=Jn?et:qe,Qc=y(l-Qc),l=y(Qc-br),_t(l)|0?br=l:br=y(_n(y(Tg(l,et)),Fe)),af=y(c-Xe),l=y(af-at),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,qe)),Ue)),Fe=Jn?br:Eo,Tn=Jn?Eo:br;e:do if((or|0)==1)for(f=0,q=0;;){if(M=gs(s,q)|0,!f)y(rs(M))>y(0)&&y(js(M))>y(0)?f=M:f=0;else if(Tm(M)|0){Ge=0;break e}if(q=q+1|0,q>>>0>=Ws>>>0){Ge=f;break}}else Ge=0;while(0);Lt=Ge+500|0,Or=Ge+504|0,f=0,M=0,l=y(0),se=0;do{if(q=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[q+36>>2]|0)==1)Bu(q),o[q+985>>0]=1,o[q+984>>0]=0;else{Bl(q),Q&&yp(q,mt(q,Ds)|0,Fe,Tn,br);do if((n[q+24>>2]|0)!=1)if((q|0)==(Ge|0)){n[Lt>>2]=n[2278],h[Or>>2]=y(0);break}else{Rm(s,q,br,d,Eo,br,Eo,m,Ds,O);break}else M|0&&(n[M+960>>2]=q),n[q+960>>2]=0,M=q,f=(f|0)==0?q:f;while(0);vs=y(h[q+504>>2]),l=y(l+y(vs+y(ln(q,Tr,br))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Fe,Ql=bc&((or|0)==2&mo)?1:or,bn=(Fl|0)==1,ya=bn&(Q^1),Qp=(Ql|0)==1,Fp=(Ql|0)==2,xl=976+(Tr<<2)|0,Tp=(Fl|2|0)==2,Lp=bn&(bc^1),Fu=1040+(ur<<2)|0,Tu=1040+(Tr<<2)|0,Rp=976+(ur<<2)|0,Np=(Fl|0)!=1,mo=bc&((or|0)!=0&mo),go=s+976|0,bn=bn^1,l=Fe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Or=n[wo>>2]|0,se=0,qe=y(0),Ue=y(0),et=y(0),Fe=y(0),q=0,M=0,Ge=Nr;;){if(Lt=n[Or+(Ge<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Tr,br)),Xr=n[xl>>2]|0,c=y(Gr(Lt+380+(Xr<<3)|0,Co)),at=y(h[Lt+504>>2]),c=y(Tg(c,at)),c=y(_n(y(Gr(Lt+364+(Xr<<3)|0,Co)),c)),bc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=qe,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(qe+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Fe=y(Fe-y(at*y(js(Lt))))),M|0&&(n[M+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,M=Lt,q=(q|0)==0?Lt:q}else Xe=qe,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)qe=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Fe=y(0),q=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&FeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Pr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Pry(0),Ue=y(Pr/Xt),et=y(0),Xe=y(0),l=y(0),M=q;do c=y(Gr(M+380+(se<<3)|0,Co)),Fe=y(Gr(M+364+(se<<3)|0,Co)),Fe=y(Tg(c,y(_n(Fe,y(h[M+504>>2]))))),Ge?(c=y(Fe*y(js(M))),c!=y(-0)&&(Jt=y(Fe-y(at*c)),nf=y(Bi(M,Tr,Jt,ir,br)),Jt!=nf)&&(et=y(et-y(nf-Fe)),l=y(l+c))):Lt&&(Lu=y(rs(M)),Lu!=y(0))&&(Jt=y(Fe+y(Ue*Lu)),sf=y(Bi(M,Tr,Jt,ir,br)),Jt!=sf)&&(et=y(et-y(sf-Fe)),Xe=y(Xe-Lu)),M=n[M+960>>2]|0;while((M|0)!=0);if(l=y(qe+l),Fe=y(Pr+et),rf)l=y(0);else{at=y(Xt+Xe),Ge=n[xl>>2]|0,Lt=Fey(0),at=y(Fe/at),l=y(0);do{Jt=y(Gr(q+380+(Ge<<3)|0,Co)),et=y(Gr(q+364+(Ge<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[q+504>>2]))))),Lt?(Jt=y(et*y(js(q))),Fe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Fe),Fe=y(Bi(q,Tr,y(et+(Or?Fe:Jt)),ir,br))):Fe=et):se&&(of=y(rs(q)),of!=y(0))?Fe=y(Bi(q,Tr,y(et+y(at*of)),ir,br)):Fe=et,l=y(l-y(Fe-et)),Xe=y(ln(q,Tr,br)),c=y(ln(q,ur,br)),Fe=y(Fe+Xe),h[za>>2]=Fe,n[kl>>2]=1,et=y(h[q+396>>2]);e:do if(_t(et)|0){M=_t(Tn)|0;do if(!M){if(mo|(ts(q,ur,Tn)|0|bn)||(ha(s,q)|0)!=4||(n[(vl(q,ur)|0)+4>>2]|0)==3||(n[(Pc(q,ur)|0)+4>>2]|0)==3)break;h[qs>>2]=Tn,n[Wo>>2]=1;break e}while(0);if(ts(q,ur,Tn)|0){M=n[q+992+(n[Rp>>2]<<2)>>2]|0,Jt=y(c+y(Gr(M,Tn))),h[qs>>2]=Jt,M=Np&(n[M+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|M)^1)&1;break}else{h[qs>>2]=Tn,n[Wo>>2]=M?0:2;break}}else Jt=y(Fe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[qs>>2]=y(c+(Jn?Xt:Jt));while(0);yr(q,Tr,ir,br,kl,za),yr(q,ur,Tn,br,Wo,qs);do if(!(ts(q,ur,Tn)|0)&&(ha(s,q)|0)==4){if((n[(vl(q,ur)|0)+4>>2]|0)==3){M=0;break}M=(n[(Pc(q,ur)|0)+4>>2]|0)!=3}else M=0;while(0);Jt=y(h[za>>2]),Xt=y(h[qs>>2]),pf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(q,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?pf:li,Jn?li:pf,br,Eo,Q&(M^1),3488,O)|0,o[bl>>0]=o[bl>>0]|o[q+508>>0],q=n[q+960>>2]|0}while((q|0)!=0)}}else l=y(0);if(l=y(Pr+l),li=l>0]=li|u[bl>>0],Fp&l>y(0)?(M=n[xl>>2]|0,(n[s+364+(M<<3)+4>>2]|0)!=0&&(Gs=y(Gr(s+364+(M<<3)|0,Co)),Gs>=y(0))?Fe=y(_n(y(0),y(Gs-y(ir-l)))):Fe=y(0)):Fe=l,Lt=Nr>>>0>>0,Lt){Ge=n[wo>>2]|0,se=Nr,M=0;do q=n[Ge+(se<<2)>>2]|0,n[q+24>>2]|0||(M=((n[(vl(q,Tr)|0)+4>>2]|0)==3&1)+M|0,M=M+((n[(Pc(q,Tr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));M?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{M=0,Xe=y(Fe*y(.5)),c=y(0);break e}case 2:{M=0,Xe=Fe,c=y(0);break e}case 3:{if(m>>>0<=1){M=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),M=0,Xe=y(0),c=y(y(_n(Fe,y(0)))/c);break e}case 5:{c=y(Fe/y((m+1|0)>>>0)),M=0,Xe=c;break e}case 4:{c=y(Fe/y(m>>>0)),M=0,Xe=y(c*y(.5));break e}default:{M=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Op+Xe),Lt){et=y(Fe/y(M|0)),se=n[wo>>2]|0,q=Nr,Fe=y(0);do{M=n[se+(q<<2)>>2]|0;e:do if((n[M+36>>2]|0)!=1){switch(n[M+24>>2]|0){case 1:{if(gi(M,Tr)|0){if(!Q)break e;Jt=y(Mr(M,Tr,ir)),Jt=y(Jt+y(Cr(s,Tr))),Jt=y(Jt+y(V(M,Tr,br))),h[M+400+(n[Tu>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Pc(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(M,Tr,br))),Fe=Tn,l=y(l+y(Jt+y(h[M+504>>2])));break e}else{l=y(l+y(c+y(ns(M,Tr,br)))),Fe=y(_n(Fe,y(ns(M,ur,br))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Tr))),li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);q=q+1|0}while((q|0)!=(or|0))}else Fe=y(0);if(c=y(Up+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Fe),Tc,B))-Ys):Xe=Tn,et=y(y(Bi(s,ur,y(Ys+(Lp?Tn:Fe)),Tc,B))-Ys),Lt&Q){q=Nr;do{se=n[(n[wo>>2]|0)+(q<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Mr(se,ur,Tn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(V(se,ur,br))),M=n[Fu>>2]|0,h[se+400+(M<<2)>>2]=Jt,!(_t(Jt)|0))break}else M=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(M<<2)>>2]=y(Jt+y(V(se,ur,br)));break}M=ha(s,se)|0;do if((M|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Pc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Tn)|0){l=Oe;break}pf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[qs>>2]=pf,l=y(h[se+396>>2]),li=_t(l)|0,Fe=(n[v>>2]=pf,y(h[v>>2])),li?l=et:(Pr=y(ln(se,ur,br)),Jt=y(Fe/l),l=y(l*Fe),l=y(Pr+(Jn?Jt:l))),h[za>>2]=l,h[qs>>2]=y(y(ln(se,Tr,br))+Fe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Tr,ir,br,Wo,qs),yr(se,ur,Tn,br,kl,za),l=y(h[qs>>2]),Pr=y(h[za>>2]),Jt=Jn?l:Pr,l=Jn?Pr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,br,Eo,1,3493,O)|0,l=Oe}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,br)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Pc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Oe+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Pc(se,ur)|0)+4>>2]|0)==3){l=Oe;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Oe+y(_n(y(0),l)));break}switch(M|0){case 1:{l=Oe;break e}case 2:{l=y(Oe+y(l*y(.5)));break e}default:{l=y(Oe+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);q=q+1|0}while((q|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(M=m>>>0>1,!M&&!(Yi(s)|0))break;if(!(_t(Tn)|0)){l=y(Tn-vs);e:do switch(n[s+12>>2]|0){case 3:{Oe=y(Oe+l),Ue=y(0);break}case 2:{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break}case 4:{Tn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Tn>vs){Oe=y(Oe+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=M?Ue:y(0);break e}else{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Tn>vs&M?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Or=976+(ur<<2)|0,Ge=0,q=0;;){e:do if(q>>>0>>0)for(Fe=y(0),et=y(0),l=y(0),se=q;;){M=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[M+36>>2]|0)!=1&&(n[M+24>>2]|0)==0){if((n[M+940>>2]|0)!=(Ge|0))break e;if(Nm(M,ur)|0&&(Jt=y(h[M+908+(n[Or>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(M,ur,br)))))),(ha(s,M)|0)!=5)break;Gs=y(Ya(M)),Gs=y(Gs+y(V(M,0,br))),Jt=y(h[M+912>>2]),Jt=y(y(Jt+y(ln(M,0,br)))-Gs),Gs=y(_n(et,Gs)),Jt=y(_n(Fe,Jt)),Fe=Jt,et=Gs,l=y(_n(l,y(Gs+Jt)))}while(0);if(M=se+1|0,M>>>0>>0)se=M;else{se=M;break}}else et=y(0),l=y(0),se=q;while(0);if(at=y(Ue+l),c=Oe,Oe=y(Oe+at),q>>>0>>0){Xe=y(c+et),M=q;do{q=n[(n[wo>>2]|0)+(M<<2)>>2]|0;e:do if((n[q+36>>2]|0)!=1&&(n[q+24>>2]|0)==0)switch(ha(s,q)|0){case 1:{Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Oe-y(re(q,ur,br)))-y(h[q+908+(n[Or>>2]<<2)>>2])),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(at-y(h[q+908+(n[Or>>2]<<2)>>2]))*y(.5))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt,ts(q,ur,Tn)|0||(Jn?(Fe=y(h[q+908>>2]),l=y(Fe+y(ln(q,Tr,br))),et=at):(et=y(h[q+912>>2]),et=y(et+y(ln(q,ur,br))),l=at,Fe=y(h[q+908>>2])),Ii(l,Fe)|0&&Ii(et,y(h[q+912>>2]))|0))break e;fa(q,l,et,Ds,1,1,br,Eo,1,3501,O)|0;break e}case 5:{h[q+404>>2]=y(y(Xe-y(Ya(q)))+y(Mr(q,0,Tn)));break e}default:break e}while(0);M=M+1|0}while((M|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;q=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,af,k,B)),(Ql|0)!=0&&(lf=n[s+32>>2]|0,cf=(Ql|0)==2,!(cf&(lf|0)!=2))?cf&(lf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Tr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Tr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Tr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(Af=n[s+32>>2]|0,ff=(Fl|0)==2,!(ff&(Af|0)!=2))?ff&(Af|0)==2&&(l=y(Ys+Tn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Tc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Tc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[uf>>2]|0)==2){q=976+(ur<<2)|0,se=1040+(ur<<2)|0,M=0;do Ge=gs(s,M)|0,n[Ge+24>>2]|0||(pf=n[q>>2]|0,Jt=y(h[s+908+(pf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[Ge+908+(pf<<2)>>2]))),M=M+1|0;while((M|0)!=(Ws|0))}if(f|0){M=Jn?Ql:d;do Lm(s,f,br,M,Eo,Ds,O),f=n[f+960>>2]|0;while((f|0)!=0)}if(M=(Tr|2|0)==3,q=(ur|2|0)==3,M|q){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(M&&Cp(s,se,Tr),q&&Cp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Tl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(yp(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&km(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,O=n[Q+4>>2]|0,M=f,n[M>>2]=n[Q>>2],n[M+4>>2]=O,M=s+364+(c<<3)|0,O=n[M+4>>2]|0,Q=d,n[Q>>2]=n[M>>2],n[Q+4>>2]=O,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(Ae)}return y(l)}function yp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=Cw(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(V(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(V(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,O=0,M=Ze,q=0,se=Ze,Ge=Ze,Oe=Ze,Fe=Ze;if(l!=y(0)&&(d=s+400|0,Fe=y(h[d>>2]),m=s+404|0,Oe=y(h[m>>2]),q=s+416|0,Ge=y(h[q>>2]),O=s+420|0,B=y(h[O>>2]),se=y(Fe+c),M=y(Oe+f),f=y(se+Ge),k=y(M+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Fe,l,0,Q)),h[m>>2]=y(Go(Oe,l,0,Q)),c=y(kT(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(kT(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Fe=y(Go(f,l,Q&m,Q&(m^1))),h[q>>2]=y(Fe-y(Go(se,l,0,Q))),Fe=y(Go(k,l,Q&d,Q&(d^1))),h[O>>2]=y(Fe-y(Go(M,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,M),d=d+1|0;while((d|0)!=(m|0))}}function Ew(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=a7(n[489]|0,f,d)|0;break}default:s=t3e(f,d)|0}return s|0}function yg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Eg(s,0,l,c,m),C=d}function Eg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,x7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Tt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Fm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Cg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Cg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function V(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function he(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Mi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function wg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze,q=Ze,se=Ze,Ge=0,Oe=0,Fe=0;Fe=C,C=C+16|0,Ge=Fe,Oe=s+964|0,Un(s,(n[Oe>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),O=y(ln(s,2,l)),M=y(ln(s,0,l)),_t(l)|0?q=l:q=y(_n(y(0),y(y(l-O)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-M)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-O),m,m)),l=y(Bi(s,0,y(c-M),B,m))):(b7[n[Oe>>2]&1](Ge,s,q,f,se,d),q=y(k+y(h[Ge>>2])),se=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?q:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-M),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Fe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze;O=y(En(s,2,m)),k=y(En(s,0,m)),M=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?O:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,O=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),O=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function Cw(s,l){return s=s|0,l=l|0,OA(s)|0?s=fr(2,l)|0:s=0,s|0}function Ep(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function ww(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Mi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Ep(s,l,c)),y(f+y(ww(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(js(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function js(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(zm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Rm(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,O=O|0;var M=0,q=Ze,se=0,Ge=0,Oe=Ze,Fe=Ze,et=0,Xe=Ze,at=0,Ue=Ze,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0;bn=C,C=C+16|0,Or=bn+12|0,or=bn+8|0,Xt=bn+4|0,Pr=bn,ir=fr(n[s+4>>2]|0,Q)|0,qe=he(ir)|0,q=y(Gr(Iw(l)|0,qe?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(q)|0)&&!(_t(qe?c:d)|0)){if(M=l+504|0,!(_t(y(h[M>>2]))|0)&&(!(Bw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[M>>2]=y(_n(q,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(at=qe^1,!(at|Lt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(qe|Nr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Or>>2]=y(Ae),h[or>>2]=y(Ae),n[Xt>>2]=0,n[Pr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Oe=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Or>>2]=Oe,n[Xt>>2]=1,Ge=1):(Ge=0,Oe=y(Ae)),Nr?(q=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=q,n[Pr>>2]=1,M=1):(M=0,q=y(Ae)),se=n[s+32>>2]|0,qe&(se|0)==2?se=2:_t(Oe)|0&&!(_t(c)|0)&&(h[Or>>2]=c,n[Xt>>2]=2,Ge=2,Oe=c),!((se|0)==2&at)&&_t(q)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Pr>>2]=2,M=2,q=d),Fe=y(h[l+396>>2]),et=_t(Fe)|0;do if(et)se=Ge;else{if((Ge|0)==1&at){h[or>>2]=y(y(Oe-Xe)/Fe),n[Pr>>2]=1,M=1,se=1;break}qe&(M|0)==1?(h[Or>>2]=y(Fe*y(q-Ue)),n[Xt>>2]=1,M=1,se=1):se=Ge}while(0);go=_t(c)|0,Ge=(ha(s,l)|0)!=4,!(qe|Lt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Or>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Fe),n[Pr>>2]=1,M=1),!(Nr|at|((k|0)!=1|(_t(d)|0))|(Ge|(M|0)==1))&&(h[or>>2]=d,n[Pr>>2]=1,!et)&&(h[Or>>2]=y(Fe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Or),yr(l,0,B,m,Pr,or),c=y(h[Or>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Pr>>2]|0,m,B,0,3565,O)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=bn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&OA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Pc(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Mr(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(V(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(OA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Nm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(v7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return OA(l)|0?(l=1,m=3):he(l)|0?(l=0,m=3):(f=y(Ae),d=y(Ae)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Oe=Cw(et,m)|0,Fe=he(et)|0,q=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(q+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Mr(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(Ae),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),at=y(Cr(s,0)),at=y(Q-y(at+y(yn(s,0)))),Q=y(Mr(l,0,d)),Q=y(Bi(l,0,y(at-y(Q+y(vu(l,0,d)))),d,c))):Q=y(Ae),O=_t(k)|0,M=_t(Q)|0;do if(O^M&&(Ge=y(h[l+396>>2]),!(_t(Ge)|0)))if(O){k=y(q+y(y(Q-se)*Ge));break}else{at=y(se+y(y(k-q)/Ge)),Q=M?at:Q;break}while(0);M=_t(k)|0,O=_t(Q)|0,M|O&&(Ue=(M^1)&1,f=c>y(0)&((f|0)!=0&M),k=Fe?k:f?c:k,fa(l,k,Q,m,Fe?Ue:f?2:Ue,M&(O^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,et))),at=y(at-y(re(l,et,c))),at=y(at-y(vu(l,et,Fe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at)}while(0);sr(l,Oe)|0&&!(gi(l,Oe)|0)?(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,Oe))),at=y(at-y(re(l,Oe,c))),at=y(at-y(vu(l,Oe,Fe?d:c))),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at):Xe=30;do if((Xe|0)==30&&!(gi(l,Oe)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at)}while(0)}function Cp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function OA(s){return s=s|0,(s|1|0)==1|0}function Iw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function Bw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Mr(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function wp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Ig(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UA(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _A(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function Bg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function vw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Om(){dc()}function ga(){var s=0;return s=Vt(4)|0,HA(s),s|0}function HA(s){s=s|0,n[s>>2]=ys()|0}function Sc(s){s=s|0,s|0&&(vg(s),gt(s))}function vg(s){s=s|0,tt(n[s>>2]|0)}function Um(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,Bw(n[s>>2]|0,l)|0}function Dw(){var s=0;return s=Vt(8)|0,Vv(s,0),s|0}function Vv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,xi(l,s)}function pF(s){s=s|0;var l=0;return l=Vt(8)|0,Vv(l,s),l|0}function Kv(s){s=s|0,s|0&&(Pu(s),gt(s))}function Pu(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,qA(s)}function qA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,jo(s)|0}function _m(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),_s(n[s>>2]|0)}function hF(s,l){s=s|0,l=l|0,Zr(n[s>>2]|0,n[l>>2]|0)}function gF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function Sw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Su(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,QA(n[s>>2]|0,l)}function mF(s,l){s=s|0,l=l|0,bA(n[s>>2]|0,l)}function Ip(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,up(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function GA(s,l,c){s=s|0,l=l|0,c=+c,G(n[s>>2]|0,l,y(c))}function EF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function CF(s,l){s=s|0,l=l|0,og(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,FA(n[s>>2]|0,y(l))}function bw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,mw(n[s>>2]|0,y(l))}function BF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function YA(s){s=s|0,fp(n[s>>2]|0)}function Hm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,cg(n[s>>2]|0,y(l))}function Qw(s){s=s|0,ug(n[s>>2]|0)}function Fw(s,l){s=s|0,l=+l,pp(n[s>>2]|0,y(l))}function vF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,Sm(n[s>>2]|0,y(l))}function WA(s,l){s=s|0,l=+l,fg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function DF(s,l,c){s=s|0,l=l|0,c=+c,bi(n[s>>2]|0,l,y(c))}function P(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,sg(n[s>>2]|0)|0}function R(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),j(s,d),C=f}function j(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function fe(s){return s=s|0,ig(n[s>>2]|0)|0}function ve(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,kA(n[s>>2]|0)|0}function bt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ng(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),j(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,ag(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),j(s,f),C=c}function Yo(s){return s=s|0,+ +y(qi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ke(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),j(s,f),C=c}function At(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ag(f,n[l>>2]|0),j(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),j(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,pg(f,n[l>>2]|0),j(s,f),C=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),j(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,bm(f,n[l>>2]|0),j(s,f),C=c}function xn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(lg(n[s>>2]|0,l))}function en(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),j(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function PF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function sve(s){return s=s|0,wi(n[s>>2]|0)|0}function ove(s){return s=s|0,s=pt(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function ave(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function lve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Vt(4)|0,$G(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function $G(s,l){s=s|0,l=l|0,Cve(s,l)}function cve(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,uve(k,jo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function uve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,O=0,M=0;B=C,C=C+32|0,M=B+8|0,O=B+20|0,Q=B,k=B+16|0,E[M>>3]=c,n[O>>2]=f,E[Q>>3]=d,n[k>>2]=m,Ave(s,n[l+4>>2]|0,M,O,Q,k),C=B}function Ave(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Va(k),l=da(l)|0,fve(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Ka(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function fve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Pl(pve()|0)|0,c=+KA(c),f=SF(f)|0,d=+KA(d),hve(s,hi(0,B|0,l|0,+c,f|0,+d,SF(m)|0)|0)}function pve(){var s=0;return o[7608]|0||(yve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Pl(s){return s=s|0,n[s+8>>2]|0}function KA(s){return s=+s,+ +xF(s)}function SF(s){return s=s|0,t5(s)|0}function hve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(gve(c,0),ii(f|0,c|0)|0,dve(s,c),mve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function gve(s,l){s=s|0,l=l|0,e5(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function dve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function mve(s){s=s|0,o[s+24>>0]=0}function e5(s,l){s=s|0,l=l|0,n[s>>2]=l}function t5(s){return s=s|0,s|0}function xF(s){return s=+s,+s}function yve(s){s=s|0,Sl(s,Eve()|0,4)}function Eve(){return 1064}function Sl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=cp(l|0,c+1|0)|0}function Cve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function wve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function Ive(s){s=s|0,Rt(n[s>>2]|0)}function Bve(s){return s=s|0,er(n[s>>2]|0)|0}function vve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Dve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(gg(n[s>>2]|0))}function Sve(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function xve(s){return s=s|0,+ +y(RA(n[s>>2]|0))}function bve(s){return s=s|0,+ +y(hp(n[s>>2]|0))}function kve(s){return s=s|0,+ +y(ja(n[s>>2]|0))}function Qve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(gg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(RA(n[l>>2]|0)),E[s+32>>3]=+y(hp(n[l>>2]|0)),E[s+40>>3]=+y(ja(n[l>>2]|0))}function Fve(s,l){return s=s|0,l=l|0,+ +y(dg(n[s>>2]|0,l))}function Tve(s,l){return s=s|0,l=l|0,+ +y(gp(n[s>>2]|0,l))}function Rve(s,l){return s=s|0,l=l|0,+ +y(qo(n[s>>2]|0,l))}function Nve(){return Pn()|0}function Lve(){Mve(),Ove(),Uve(),_ve(),Hve(),jve()}function Mve(){HNe(11713,4938,1)}function Ove(){oNe(10448)}function Uve(){HRe(10408)}function _ve(){uRe(10324)}function Hve(){yFe(10096)}function jve(){qve(9132)}function qve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=0,Up=0,Ru=0,Nu=0,kc=0,qs=0,za=0,Wo=0,kl=0,rf=0,nf=0,Lu=0,sf=0,of=0,Gs=0,vs=0,Ql=0,Tn=0,af=0,Eo=0,Qc=0,Co=0,Fc=0,lf=0,cf=0,Tc=0,Ys=0,Fl=0,uf=0,Af=0,ff=0,br=0,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0;l=C,C=C+672|0,c=l+656|0,Tl=l+648|0,ur=l+640|0,Tr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,br=l+592|0,ff=l+584|0,Af=l+576|0,uf=l+568|0,Fl=l+560|0,Ys=l+552|0,Tc=l+544|0,cf=l+536|0,lf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,af=l+488|0,Tn=l+480|0,Ql=l+472|0,vs=l+464|0,Gs=l+456|0,of=l+448|0,sf=l+440|0,Lu=l+432|0,nf=l+424|0,rf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,qs=l+384|0,kc=l+376|0,Nu=l+368|0,Ru=l+360|0,Up=l+352|0,Op=l+344|0,bc=l+336|0,Mp=l+328|0,bl=l+320|0,Xr=l+312|0,Lp=l+304|0,Np=l+296|0,Rp=l+288|0,Tu=l+280|0,Fu=l+272|0,Tp=l+264|0,xl=l+256|0,Fp=l+248|0,Qp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,bn=l+200|0,ir=l+192|0,Nr=l+184|0,Pr=l+176|0,Xt=l+168|0,or=l+160|0,Or=l+152|0,Lt=l+144|0,qe=l+136|0,Ue=l+128|0,at=l+120|0,Xe=l+112|0,et=l+104|0,Fe=l+96|0,Oe=l+88|0,Ge=l+80|0,se=l+72|0,q=l+64|0,M=l+56|0,O=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Gve(s,3646),Yve(s,3651,2)|0,Wve(s,3665,2)|0,Vve(s,3682,18)|0,n[Tl>>2]=19,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],Kve(s,3696,c)|0,n[Tr>>2]=2,n[Tr+4>>2]=0,n[c>>2]=n[Tr>>2],n[c+4>>2]=n[Tr+4>>2],bu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Dg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Dg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],bu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],bu(s,3769,c)|0,n[br>>2]=5,n[br+4>>2]=0,n[c>>2]=n[br>>2],n[c+4>>2]=n[br+4>>2],bu(s,3783,c)|0,n[ff>>2]=6,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],bu(s,3796,c)|0,n[Af>>2]=7,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],bu(s,3813,c)|0,n[uf>>2]=8,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],bu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Dg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Dg(s,3853,c)|0,n[Tc>>2]=9,n[Tc+4>>2]=0,n[c>>2]=n[Tc>>2],n[c+4>>2]=n[Tc+4>>2],bu(s,3870,c)|0,n[cf>>2]=10,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],bu(s,3884,c)|0,n[lf>>2]=11,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],bu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[af>>2]=5,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,3960,c)|0,n[Tn>>2]=6,n[Tn+4>>2]=0,n[c>>2]=n[Tn>>2],n[c+4>>2]=n[Tn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[Gs>>2]=8,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4012,c)|0,n[of>>2]=9,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Is(s,4022,c)|0,n[sf>>2]=21,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[nf>>2]=11,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4065,c)|0,n[rf>>2]=12,n[rf+4>>2]=0,n[c>>2]=n[rf>>2],n[c+4>>2]=n[rf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[qs>>2]=16,n[qs+4>>2]=0,n[c>>2]=n[qs>>2],n[c+4>>2]=n[qs+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Ru>>2]=5,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],Dg(s,4196,c)|0,n[Up>>2]=6,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Dg(s,4206,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],Dg(s,4217,c)|0,n[bc>>2]=3,n[bc+4>>2]=0,n[c>>2]=n[bc>>2],n[c+4>>2]=n[bc+4>>2],JA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],bF(s,4251,c)|0,n[bl>>2]=4,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],JA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],JA(s,4279,c)|0,n[Lp>>2]=6,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],JA(s,4293,c)|0,n[Np>>2]=7,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],JA(s,4306,c)|0,n[Rp>>2]=8,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],JA(s,4323,c)|0,n[Tu>>2]=9,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],JA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],bF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4376,c)|0,n[Fp>>2]=2,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],zA(s,4388,c)|0,n[Qp>>2]=13,n[Qp+4>>2]=0,n[c>>2]=n[Qp>>2],n[c+4>>2]=n[Qp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[bn>>2]=18,n[bn+4>>2]=0,n[c>>2]=n[bn>>2],n[c+4>>2]=n[bn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],zA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Pr>>2]=10,n[Pr+4>>2]=0,n[c>>2]=n[Pr>>2],n[c+4>>2]=n[Pr+4>>2],JA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],JA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],bF(s,4519,c)|0,n[Or>>2]=4,n[Or+4>>2]=0,n[c>>2]=n[Or>>2],n[c+4>>2]=n[Or+4>>2],Jve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],zve(s,4542,c)|0,n[qe>>2]=12,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],Xve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Zve(s,4568,c)|0,n[at>>2]=2,n[at+4>>2]=0,n[c>>2]=n[at>>2],n[c+4>>2]=n[at+4>>2],$ve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],eDe(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Fe>>2]=23,n[Fe+4>>2]=0,n[c>>2]=n[Fe>>2],n[c+4>>2]=n[Fe+4>>2],Tw(s,4619,c)|0,n[Oe>>2]=14,n[Oe+4>>2]=0,n[c>>2]=n[Oe>>2],n[c+4>>2]=n[Oe+4>>2],tDe(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],rDe(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],zA(s,4653,c)|0,n[q>>2]=5,n[q+4>>2]=0,n[c>>2]=n[q>>2],n[c+4>>2]=n[q+4>>2],zA(s,4669,c)|0,n[M>>2]=6,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],zA(s,4686,c)|0,n[O>>2]=7,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],zA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],zA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],zA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],nDe(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Gve(s,l){s=s|0,l=l|0;var c=0;c=cFe()|0,n[s>>2]=c,uFe(c,l),xp(n[s>>2]|0)}function Yve(s,l,c){return s=s|0,l=l|0,c=c|0,JQe(s,pn(l)|0,c,0),s|0}function Wve(s,l,c){return s=s|0,l=l|0,c=c|0,TQe(s,pn(l)|0,c,0),s|0}function Vve(s,l,c){return s=s|0,l=l|0,c=c|0,EQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nQe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oke(s,l,d),C=f,s|0}function bu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ike(s,l,d),C=f,s|0}function Dg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Gbe(s,l,d),C=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xbe(s,l,d),C=f,s|0}function bF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fbe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ixe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oxe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],GSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xSe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZPe(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NPe(s,l,d),C=f,s|0}function eDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yPe(s,l,d),C=f,s|0}function tDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rPe(s,l,d),C=f,s|0}function rDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ODe(s,l,d),C=f,s|0}function nDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iDe(s,l,d),C=f,s|0}function iDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function sDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=kF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=oDe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,aDe(m,f)|0,f),C=d}function kF(){var s=0,l=0;if(o[7616]|0||(i5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i5(9136)}return 9136}function oDe(s){return s=s|0,0}function aDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=kF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],n5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,q=B+20|0,Q=B+16|0,M=B+12|0,O=B+8|0,k=B+4|0,Ge=B,n[q>>2]=l,n[Q>>2]=c,n[M>>2]=f,n[O>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],lDe(s+24|0,se,q,M,O,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function lDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=cDe(l)|0,l=Vt(24)|0,r5(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function cDe(s){return s=s|0,n[s>>2]|0}function r5(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function n5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ADe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],n5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pDe(s,k),hDe(k),C=O;return}}function ADe(s){return s=s|0,357913941}function fDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function i5(s){s=s|0,mDe(s)}function gDe(s){s=s|0,dDe(s+24|0)}function Rr(s){return s=s|0,n[s>>2]|0}function dDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Vr(){return 9228}function yDe(){return 1140}function EDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=CDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=wDe(l,f)|0,C=c,l|0}function Kr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function CDe(s){return s=s|0,(n[(kF()|0)+24>>2]|0)+(s*12|0)|0}function wDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=IDe(f)|0,C=d,f|0}function IDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(s5()|0)|0,f?(FF(l,f),TF(c,l),BDe(s,c),s=RF(l)|0):s=vDe(s)|0,C=d,s|0}function s5(){var s=0;return o[7632]|0||(RDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function QF(s){return s=s|0,n[s+36>>2]|0}function FF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function TF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function BDe(s,l){s=s|0,l=l|0,xDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function RF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function vDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Vt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Vt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],o5(k,B,c),n[d>>2]=k,C=Q,m|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function DDe(s){s=s|0,Jm(s),gt(s)}function PDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function SDe(s){s=s|0,gt(s)}function xDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=bDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function bDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Va(Q),s=da(s)|0,B=kDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Ka(Q),C=k,B|0}function kDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Pl(QDe()|0)|0,l=+KA(l),c=+KA(c),f=+KA(f),d=+KA(d),m=+KA(m),Os(0,k|0,s|0,+l,+c,+f,+d,+m,+ +KA(B))|0}function QDe(){var s=0;return o[7624]|0||(FDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function FDe(s){s=s|0,Sl(s,TDe()|0,6)}function TDe(){return 1112}function RDe(s){s=s|0,Bp(s)}function NDe(s){s=s|0,a5(s+24|0),l5(s+16|0)}function a5(s){s=s|0,MDe(s)}function l5(s){s=s|0,LDe(s)}function LDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function MDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Bp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UDe(s,c,d,0),C=f}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_De(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,HDe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7640]|0||(u5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u5(9232)}return 9232}function _De(s){return s=s|0,0}function HDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=NF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qDe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,GDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,YDe(s,k),WDe(k),C=O;return}}function qDe(s){return s=s|0,357913941}function GDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function YDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function WDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u5(s){s=s|0,JDe(s)}function VDe(s){s=s|0,KDe(s+24|0)}function KDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function JDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,zDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zDe(){return 1144}function XDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=ZDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],$De(l,B,c,f,d),C=m}function ZDe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function $De(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,O=0;O=C,C=C+16|0,B=O+2|0,k=O+1|0,Q=O,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),XA(Q,d),Q=ZA(Q,d)|0,D7[m&1](s,c,f,Q),C=O}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +tPe(l)}function XA(s,l){s=s|0,l=l|0}function ZA(s,l){return s=s|0,l=l|0,ePe(l)|0}function ePe(s){return s=s|0,s|0}function tPe(s){return s=+s,+s}function rPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nPe(s,c,d,1),C=f}function nPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=iPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sPe(m,f)|0,f),C=d}function LF(){var s=0,l=0;if(o[7648]|0||(f5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f5(9268)}return 9268}function iPe(s){return s=s|0,0}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=LF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function A5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,lPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cPe(s,k),uPe(k),C=O;return}}function aPe(s){return s=s|0,357913941}function lPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f5(s){s=s|0,pPe(s)}function APe(s){s=s|0,fPe(s+24|0)}function fPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,hPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hPe(){return 1160}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=dPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=mPe(l,f)|0,C=c,l|0}function dPe(s){return s=s|0,(n[(LF()|0)+24>>2]|0)+(s*12|0)|0}function mPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),p5(Ng[c&31](s)|0)|0}function p5(s){return s=s|0,s&1|0}function yPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],EPe(s,c,d,0),C=f}function EPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=CPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wPe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7656]|0||(g5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));g5(9304)}return 9304}function CPe(s){return s=s|0,0}function wPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=MF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],h5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(IPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function h5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function IPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=BPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,vPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],h5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,DPe(s,k),PPe(k),C=O;return}}function BPe(s){return s=s|0,357913941}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function DPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function g5(s){s=s|0,bPe(s)}function SPe(s){s=s|0,xPe(s+24|0)}function xPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,kPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kPe(){return 1164}function QPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=FPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TPe(l,d,c),C=f}function FPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function TPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),vp(d,c),c=Dp(d,c)|0,tf[f&31](s,c),Pp(d),C=m}function vp(s,l){s=s|0,l=l|0,RPe(s,l)}function Dp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,jA(s)}function RPe(s,l){s=s|0,l=l|0,OF(s,l)}function OF(s,l){s=s|0,l=l|0,n[s>>2]=l}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LPe(s,c,d,0),C=f}function LPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=MPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,OPe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7664]|0||(m5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));m5(9340)}return 9340}function MPe(s){return s=s|0,0}function OPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=UF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],d5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(UPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function d5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=_Pe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,HPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],d5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jPe(s,k),qPe(k),C=O;return}}function _Pe(s){return s=s|0,357913941}function HPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function m5(s){s=s|0,WPe(s)}function GPe(s){s=s|0,YPe(s+24|0)}function YPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function WPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,VPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VPe(){return 1180}function KPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=JPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=zPe(l,d,c)|0,C=f,c|0}function JPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function zPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Sg(d,c),d=xg(d,c)|0,d=sD(NT[f&15](s,d)|0)|0,C=m,d|0}function Sg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,XPe(l)|0}function sD(s){return s=s|0,s|0}function XPe(s){return s=s|0,s|0}function ZPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$Pe(s,c,d,0),C=f}function $Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=eSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tSe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7672]|0||(E5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E5(9376)}return 9376}function eSe(s){return s=s|0,0}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=_F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,iSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sSe(s,k),oSe(k),C=O;return}}function nSe(s){return s=s|0,357913941}function iSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E5(s){s=s|0,cSe(s)}function aSe(s){s=s|0,lSe(s+24|0)}function lSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C5(){return 1196}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Ng[c&31](s)|0)|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,1),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=HF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=gSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function HF(){var s=0,l=0;if(o[7680]|0||(I5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I5(9412)}return 9412}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=HF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function w5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ESe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=O;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I5(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B5(){return 1200}function DSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=PSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=SSe(l,f)|0,C=c,l|0}function PSe(s){return s=s|0,(n[(HF()|0)+24>>2]|0)+(s*12|0)|0}function SSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Ng[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function xSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(s,c,d,0),C=f}function bSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,QSe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7688]|0||(D5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D5(9448)}return 9448}function kSe(s){return s=s|0,0}function QSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=jF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(FSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function v5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function FSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=TSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,RSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,NSe(s,k),LSe(k),C=O;return}}function TSe(s){return s=s|0,357913941}function RSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function NSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function LSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D5(s){s=s|0,USe(s)}function MSe(s){s=s|0,OSe(s+24|0)}function OSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function USe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function P5(){return 1204}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=HSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jSe(l,d,c),C=f}function HSe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),qF(d,c),d=GF(d,c)|0,tf[f&31](s,d),C=m}function qF(s,l){s=s|0,l=l|0}function GF(s,l){return s=s|0,l=l|0,qSe(l)|0}function qSe(s){return s=s|0,s|0}function GSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],YSe(s,c,d,0),C=f}function YSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=WSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,VSe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7696]|0||(x5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x5(9484)}return 9484}function WSe(s){return s=s|0,0}function VSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=YF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(KSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function S5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=JSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,XSe(s,k),ZSe(k),C=O;return}}function JSe(s){return s=s|0,357913941}function zSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function XSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x5(s){s=s|0,txe(s)}function $Se(s){s=s|0,exe(s+24|0)}function exe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,rxe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rxe(){return 1212}function nxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=ixe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],sxe(l,m,c,f),C=d}function ixe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function sxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),qF(m,c),m=GF(m,c)|0,Sg(B,f),B=xg(B,f)|0,_w[d&15](s,m,B),C=k}function oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,c,d,1),C=f}function axe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cxe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7704]|0||(k5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));k5(9520)}return 9520}function lxe(s){return s=s|0,0}function cxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=WF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function b5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Axe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pxe(s,k),hxe(k),C=O;return}}function Axe(s){return s=s|0,357913941}function fxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function k5(s){s=s|0,mxe(s)}function gxe(s){s=s|0,dxe(s+24|0)}function dxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yxe(){return 1224}function Exe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=Cxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+wxe(l,m,c),C=d,+f}function Cxe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function wxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,B=+xF(+S7[f&7](s,d)),C=m,+B}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,c,d,1),C=f}function Bxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7712]|0||(F5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));F5(9556)}return 9556}function vxe(s){return s=s|0,0}function Dxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=VF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Sxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bxe(s,k),kxe(k),C=O;return}}function Sxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function F5(s){s=s|0,Txe(s)}function Qxe(s){s=s|0,Fxe(s+24|0)}function Fxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,Rxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rxe(){return 1232}function Nxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Lxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Mxe(l,d),C=f,+c}function Lxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +xF(+P7[c&15](s))}function Oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,c,d,1),C=f}function Uxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=KF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_xe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hxe(m,f)|0,f),C=d}function KF(){var s=0,l=0;if(o[7720]|0||(R5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));R5(9592)}return 9592}function _xe(s){return s=s|0,0}function Hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=KF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yxe(s,k),Wxe(k),C=O;return}}function qxe(s){return s=s|0,357913941}function Gxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function R5(s){s=s|0,Jxe(s)}function Vxe(s){s=s|0,Kxe(s+24|0)}function Kxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,zxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zxe(){return 1276}function Xxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Zxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=$xe(l,f)|0,C=c,l|0}function Zxe(s){return s=s|0,(n[(KF()|0)+24>>2]|0)+(s*12|0)|0}function $xe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=N5(f)|0,C=d,f|0}function N5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(L5()|0)|0,f?(FF(l,f),TF(c,l),ebe(s,c),s=RF(l)|0):s=tbe(s)|0,C=d,s|0}function L5(){var s=0;return o[7736]|0||(Abe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function ebe(s,l){s=s|0,l=l|0,sbe(l,s,s+8|0)|0}function tbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(s,m,d),n[f>>2]=s,C=c,l|0}function JF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function rbe(s){s=s|0,Jm(s),gt(s)}function nbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function ibe(s){s=s|0,gt(s)}function sbe(s,l,c){return s=s|0,l=l|0,c=c|0,l=obe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Va(d),s=da(s)|0,c=abe(s,n[l>>2]|0,+E[c>>3])|0,Ka(d),C=f,c|0}function abe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Pl(lbe()|0)|0,l=SF(l)|0,ml(0,f|0,s|0,l|0,+ +KA(c))|0}function lbe(){var s=0;return o[7728]|0||(cbe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function cbe(s){s=s|0,Sl(s,ube()|0,2)}function ube(){return 1264}function Abe(s){s=s|0,Bp(s)}function fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pbe(s,c,d,1),C=f}function pbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=hbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,gbe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7744]|0||(O5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9684)}return 9684}function hbe(s){return s=s|0,0}function gbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=zF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(dbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=mbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ybe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Ebe(s,k),Cbe(k),C=O;return}}function mbe(s){return s=s|0,357913941}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ebe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,Bbe(s)}function wbe(s){s=s|0,Ibe(s+24|0)}function Ibe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Bbe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,vbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vbe(){return 1280}function Dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Pbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Sbe(l,d,c)|0,C=f,c|0}function Pbe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function Sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(m,c),m=ZA(m,c)|0,_w[f&15](d,s,m),m=N5(d)|0,C=B,m|0}function xbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bbe(s,c,d,1),C=f}function bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Qbe(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7752]|0||(_5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));_5(9720)}return 9720}function kbe(s){return s=s|0,0}function Qbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=XF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],U5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Fbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Tbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Rbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],U5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Nbe(s,k),Lbe(k),C=O;return}}function Tbe(s){return s=s|0,357913941}function Rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Nbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Lbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function _5(s){s=s|0,Ube(s)}function Mbe(s){s=s|0,Obe(s+24|0)}function Obe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Ube(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,_be()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function _be(){return 1288}function Hbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=jbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=qbe(l,f)|0,C=c,l|0}function jbe(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function qbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),t5(Ng[c&31](s)|0)|0}function Gbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ybe(s,c,d,0),C=f}function Ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=Wbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Vbe(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7760]|0||(j5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9756)}return 9756}function Wbe(s){return s=s|0,0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=ZF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],H5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Kbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function H5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Kbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Jbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],H5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Xbe(s,k),Zbe(k),C=O;return}}function Jbe(s){return s=s|0,357913941}function zbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Xbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Zbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,tke(s)}function $be(s){s=s|0,eke(s+24|0)}function eke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rke(){return 1292}function nke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=ike(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ske(l,d,c),C=f}function ike(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function ske(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),B7[f&31](s,c),C=m}function oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ake(s,c,d,0),C=f}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7768]|0||(G5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G5(9792)}return 9792}function lke(s){return s=s|0,0}function cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=$F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ake(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pke(s,k),hke(k),C=O;return}}function Ake(s){return s=s|0,357913941}function fke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G5(s){s=s|0,mke(s)}function gke(s){s=s|0,dke(s+24|0)}function dke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yke(){return 1300}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=Cke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wke(l,m,c,f),C=d}function Cke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function wke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ku(B,f),f=+Qu(B,f),Q7[d&15](s,m,f),C=k}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bke(s,c,d,0),C=f}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dke(m,f)|0,f),C=d}function eT(){var s=0,l=0;if(o[7776]|0||(W5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(9828)}return 9828}function vke(s){return s=s|0,0}function Dke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=eT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ske(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bke(s,k),kke(k),C=O;return}}function Ske(s){return s=s|0,357913941}function xke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,Tke(s)}function Qke(s){s=s|0,Fke(s+24|0)}function Fke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,Rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rke(){return 1312}function Nke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Lke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Mke(l,d,c),C=f}function Lke(s){return s=s|0,(n[(eT()|0)+24>>2]|0)+(s*12|0)|0}function Mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,tf[f&31](s,d),C=m}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uke(s,c,d,0),C=f}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=tT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_ke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hke(m,f)|0,f),C=d}function tT(){var s=0,l=0;if(o[7784]|0||(K5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9864)}return 9864}function _ke(s){return s=s|0,0}function Hke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=tT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],V5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qke(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],V5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yke(s,k),Wke(k),C=O;return}}function qke(s){return s=s|0,357913941}function Gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,Jke(s)}function Vke(s){s=s|0,Kke(s+24|0)}function Kke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,zke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zke(){return 1320}function Xke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Zke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(l,d,c),C=f}function Zke(s){return s=s|0,(n[(tT()|0)+24>>2]|0)+(s*12|0)|0}function $ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),eQe(d,c),d=tQe(d,c)|0,tf[f&31](s,d),C=m}function eQe(s,l){s=s|0,l=l|0}function tQe(s,l){return s=s|0,l=l|0,rQe(l)|0}function rQe(s){return s=s|0,s|0}function nQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iQe(s,c,d,0),C=f}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=rT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=sQe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,oQe(m,f)|0,f),C=d}function rT(){var s=0,l=0;if(o[7792]|0||(z5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(9900)}return 9900}function sQe(s){return s=s|0,0}function oQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=rT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],J5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(aQe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function aQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=lQe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,cQe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],J5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,uQe(s,k),AQe(k),C=O;return}}function lQe(s){return s=s|0,357913941}function cQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function uQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function AQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,hQe(s)}function fQe(s){s=s|0,pQe(s+24|0)}function pQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function hQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,22,l,gQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function gQe(){return 1344}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=mQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],yQe(l,f),C=c}function mQe(s){return s=s|0,(n[(rT()|0)+24>>2]|0)+(s*12|0)|0}function yQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ef[c&127](s)}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nT()|0,s=CQe(c)|0,hn(m,l,d,s,wQe(c,f)|0,f)}function nT(){var s=0,l=0;if(o[7800]|0||(Z5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(9936)}return 9936}function CQe(s){return s=s|0,s|0}function wQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(IQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function IQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=BQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,vQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,DQe(s,d),PQe(d),C=k;return}}function BQe(s){return s=s|0,536870911}function vQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function DQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,bQe(s)}function SQe(s){s=s|0,xQe(s+24|0)}function xQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function bQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,23,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kQe(s,l){s=s|0,l=l|0,FQe(n[(QQe(s)|0)>>2]|0,l)}function QQe(s){return s=s|0,(n[(nT()|0)+24>>2]|0)+(s<<3)|0}function FQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,qF(f,l),l=GF(f,l)|0,ef[s&127](l),C=c}function TQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=iT()|0,s=RQe(c)|0,hn(m,l,d,s,NQe(c,f)|0,f)}function iT(){var s=0,l=0;if(o[7808]|0||(e9(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));e9(9972)}return 9972}function RQe(s){return s=s|0,s|0}function NQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=iT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?($5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(LQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function $5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function LQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=MQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,OQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,$5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,UQe(s,d),_Qe(d),C=k;return}}function MQe(s){return s=s|0,536870911}function OQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function UQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Qe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function e9(s){s=s|0,qQe(s)}function HQe(s){s=s|0,jQe(s+24|0)}function jQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,9,l,GQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GQe(){return 1348}function YQe(s,l){return s=s|0,l=l|0,VQe(n[(WQe(s)|0)>>2]|0,l)|0}function WQe(s){return s=s|0,(n[(iT()|0)+24>>2]|0)+(s<<3)|0}function VQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,l=sD(Ng[s&31](l)|0)|0,C=c,l|0}function t9(s,l){s=s|0,l=l|0}function r9(s,l){return s=s|0,l=l|0,KQe(l)|0}function KQe(s){return s=s|0,s|0}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=sT()|0,s=zQe(c)|0,hn(m,l,d,s,XQe(c,f)|0,f)}function sT(){var s=0,l=0;if(o[7816]|0||(i9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i9(10008)}return 10008}function zQe(s){return s=s|0,s|0}function XQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=sT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(n9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(ZQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function ZQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=$Qe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,eFe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,n9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,tFe(s,d),rFe(d),C=k;return}}function $Qe(s){return s=s|0,536870911}function eFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function tFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function rFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function i9(s){s=s|0,sFe(s)}function nFe(s){s=s|0,iFe(s+24|0)}function iFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function sFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,15,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function oFe(s){return s=s|0,lFe(n[(aFe(s)|0)>>2]|0)|0}function aFe(s){return s=s|0,(n[(sT()|0)+24>>2]|0)+(s<<3)|0}function lFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function cFe(){var s=0;return o[7832]|0||(mFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function uFe(s,l){s=s|0,l=l|0,n[s>>2]=AFe()|0,n[s+4>>2]=fFe()|0,n[s+12>>2]=l,n[s+8>>2]=pFe()|0,n[s+32>>2]=2}function AFe(){return 11709}function fFe(){return 1188}function pFe(){return aD()|0}function hFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(gFe(c),gt(c)):l|0&&(Pu(l),gt(l))}function Sp(s,l){return s=s|0,l=l|0,l&s|0}function gFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=dFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function dFe(){return 0}function mFe(s){s=s|0,Bp(s)}function yFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,EFe(s,4827),CFe(s,4834,3)|0,wFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],IFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],BFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],vFe(s,4891,c)|0,C=l}function EFe(s,l){s=s|0,l=l|0;var c=0;c=rRe()|0,n[s>>2]=c,nRe(c,l),xp(n[s>>2]|0)}function CFe(s,l,c){return s=s|0,l=l|0,c=c|0,_Te(s,pn(l)|0,c,0),s|0}function wFe(s,l,c){return s=s|0,l=l|0,c=c|0,DTe(s,pn(l)|0,c,0),s|0}function IFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oTe(s,l,d),C=f,s|0}function BFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],HFe(s,l,d),C=f,s|0}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],DFe(s,l,d),C=f,s|0}function DFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],PFe(s,c,d,1),C=f}function PFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=SFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,xFe(m,f)|0,f),C=d}function oT(){var s=0,l=0;if(o[7840]|0||(o9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o9(10100)}return 10100}function SFe(s){return s=s|0,0}function xFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=oT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],s9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function s9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=kFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,QFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],s9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,FFe(s,k),TFe(k),C=O;return}}function kFe(s){return s=s|0,357913941}function QFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function FFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function TFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function o9(s){s=s|0,LFe(s)}function RFe(s){s=s|0,NFe(s+24|0)}function NFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function LFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,MFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function MFe(){return 1364}function OFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=UFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=_Fe(l,d,c)|0,C=f,c|0}function UFe(s){return s=s|0,(n[(oT()|0)+24>>2]|0)+(s*12|0)|0}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,d=p5(NT[f&15](s,d)|0)|0,C=m,d|0}function HFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jFe(s,c,d,0),C=f}function jFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=aT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=qFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,GFe(m,f)|0,f),C=d}function aT(){var s=0,l=0;if(o[7848]|0||(l9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));l9(10136)}return 10136}function qFe(s){return s=s|0,0}function GFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=aT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],a9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(YFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function a9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function YFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=WFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,VFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],a9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,KFe(s,k),JFe(k),C=O;return}}function WFe(s){return s=s|0,357913941}function VFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function KFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function l9(s){s=s|0,ZFe(s)}function zFe(s){s=s|0,XFe(s+24|0)}function XFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function ZFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,9,l,$Fe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Fe(){return 1372}function eTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=tTe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rTe(l,d,c),C=f}function tTe(s){return s=s|0,(n[(aT()|0)+24>>2]|0)+(s*12|0)|0}function rTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),nTe(d,c),B=y(iTe(d,c)),I7[f&1](s,B),C=m}function nTe(s,l){s=s|0,l=+l}function iTe(s,l){return s=s|0,l=+l,y(sTe(l))}function sTe(s){return s=+s,y(s)}function oTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aTe(s,c,d,0),C=f}function aTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=lT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lTe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cTe(m,f)|0,f),C=d}function lT(){var s=0,l=0;if(o[7856]|0||(u9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u9(10172)}return 10172}function lTe(s){return s=s|0,0}function cTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=lT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uTe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ATe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fTe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pTe(s,k),hTe(k),C=O;return}}function ATe(s){return s=s|0,357913941}function fTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u9(s){s=s|0,mTe(s)}function gTe(s){s=s|0,dTe(s+24|0)}function dTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yTe(){return 1380}function ETe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=CTe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wTe(l,m,c,f),C=d}function CTe(s){return s=s|0,(n[(lT()|0)+24>>2]|0)+(s*12|0)|0}function wTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ITe(B,f),B=BTe(B,f)|0,_w[d&15](s,m,B),C=k}function ITe(s,l){s=s|0,l=l|0}function BTe(s,l){return s=s|0,l=l|0,vTe(l)|0}function vTe(s){return s=s|0,(s|0)!=0|0}function DTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=cT()|0,s=PTe(c)|0,hn(m,l,d,s,STe(c,f)|0,f)}function cT(){var s=0,l=0;if(o[7864]|0||(f9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(10208)}return 10208}function PTe(s){return s=s|0,s|0}function STe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(A9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(xTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function xTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=bTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,kTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,A9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,QTe(s,d),FTe(d),C=k;return}}function bTe(s){return s=s|0,536870911}function kTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function QTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,NTe(s)}function TTe(s){s=s|0,RTe(s+24|0)}function RTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function NTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,24,l,LTe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function LTe(){return 1392}function MTe(s,l){s=s|0,l=l|0,UTe(n[(OTe(s)|0)>>2]|0,l)}function OTe(s){return s=s|0,(n[(cT()|0)+24>>2]|0)+(s<<3)|0}function UTe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,ef[s&127](l),C=c}function _Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=uT()|0,s=HTe(c)|0,hn(m,l,d,s,jTe(c,f)|0,f)}function uT(){var s=0,l=0;if(o[7872]|0||(h9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(10244)}return 10244}function HTe(s){return s=s|0,s|0}function jTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=uT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(p9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(qTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function qTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=GTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,YTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,p9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,WTe(s,d),VTe(d),C=k;return}}function GTe(s){return s=s|0,536870911}function YTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function WTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function VTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,zTe(s)}function KTe(s){s=s|0,JTe(s+24|0)}function JTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function zTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,16,l,XTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XTe(){return 1400}function ZTe(s){return s=s|0,eRe(n[($Te(s)|0)>>2]|0)|0}function $Te(s){return s=s|0,(n[(uT()|0)+24>>2]|0)+(s<<3)|0}function eRe(s){return s=s|0,tRe(CD[s&7]()|0)|0}function tRe(s){return s=s|0,s|0}function rRe(){var s=0;return o[7880]|0||(cRe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function nRe(s,l){s=s|0,l=l|0,n[s>>2]=iRe()|0,n[s+4>>2]=sRe()|0,n[s+12>>2]=l,n[s+8>>2]=oRe()|0,n[s+32>>2]=4}function iRe(){return 11711}function sRe(){return 1356}function oRe(){return aD()|0}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(lRe(c),gt(c)):l|0&&(vg(l),gt(l))}function lRe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function cRe(s){s=s|0,Bp(s)}function uRe(s){s=s|0,ARe(s,4920),fRe(s)|0,pRe(s)|0}function ARe(s,l){s=s|0,l=l|0;var c=0;c=L5()|0,n[s>>2]=c,RRe(c,l),xp(n[s>>2]|0)}function fRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,vRe()|0),s|0}function pRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,hRe()|0),s|0}function hRe(){var s=0;return o[7888]|0||(g9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Rr(10328)|0||g9(10328),10328}function bg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function g9(s){s=s|0,mRe(s),kg(s,10)}function gRe(s){s=s|0,dRe(s+24|0)}function dRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,wRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yRe(s,l,c){s=s|0,l=l|0,c=+c,ERe(s,l,c)}function kg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function ERe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,XA(k,l),n[m>>2]=ZA(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),CRe(s,m,d),C=f}function CRe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function wRe(){return 1404}function IRe(s,l){return s=s|0,l=+l,BRe(s,l)|0}function BRe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Vt(16)|0,XA(m,s),s=ZA(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Vt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],JF(s,B,m),n[d>>2]=s,C=f,c|0}function vRe(){var s=0;return o[7896]|0||(d9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Rr(10364)|0||d9(10364),10364}function d9(s){s=s|0,SRe(s),kg(s,55)}function DRe(s){s=s|0,PRe(s+24|0)}function PRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function SRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,4,l,QRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xRe(s){s=s|0,bRe(s)}function bRe(s){s=s|0,kRe(s)}function kRe(s){s=s|0,m9(s+8|0),o[s+24>>0]=1}function m9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function QRe(){return 1424}function FRe(){return TRe()|0}function TRe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,m9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(f,m,d),n[c>>2]=f,C=l,s|0}function RRe(s,l){s=s|0,l=l|0,n[s>>2]=NRe()|0,n[s+4>>2]=LRe()|0,n[s+12>>2]=l,n[s+8>>2]=MRe()|0,n[s+32>>2]=5}function NRe(){return 11710}function LRe(){return 1416}function MRe(){return lD()|0}function ORe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(URe(c),gt(c)):l|0&>(l)}function URe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=_Re()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function _Re(){return n[357]|0}function HRe(s){s=s|0,jRe(s,4926),qRe(s)|0}function jRe(s,l){s=s|0,l=l|0;var c=0;c=s5()|0,n[s>>2]=c,eNe(c,l),xp(n[s>>2]|0)}function qRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,GRe()|0),s|0}function GRe(){var s=0;return o[7912]|0||(y9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Rr(10412)|0||y9(10412),10412}function y9(s){s=s|0,VRe(s),kg(s,57)}function YRe(s){s=s|0,WRe(s+24|0)}function WRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function VRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,5,l,XRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function KRe(s){s=s|0,JRe(s)}function JRe(s){s=s|0,zRe(s)}function zRe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function XRe(){return 1432}function ZRe(){return $Re()|0}function $Re(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Vt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Vt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],o5(k,m,s),n[c>>2]=k,C=B,f|0}function eNe(s,l){s=s|0,l=l|0,n[s>>2]=tNe()|0,n[s+4>>2]=rNe()|0,n[s+12>>2]=l,n[s+8>>2]=nNe()|0,n[s+32>>2]=6}function tNe(){return 11704}function rNe(){return 1436}function nNe(){return lD()|0}function iNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(sNe(c),gt(c)):l|0&>(l)}function sNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function oNe(s){s=s|0,aNe(s,4933),lNe(s)|0,cNe(s)|0}function aNe(s,l){s=s|0,l=l|0;var c=0;c=TNe()|0,n[s>>2]=c,RNe(c,l),xp(n[s>>2]|0)}function lNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,BNe()|0),s|0}function cNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,uNe()|0),s|0}function uNe(){var s=0;return o[7920]|0||(E9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Rr(10452)|0||E9(10452),10452}function E9(s){s=s|0,pNe(s),kg(s,1)}function ANe(s){s=s|0,fNe(s+24|0)}function fNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,mNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hNe(s,l,c){s=s|0,l=+l,c=+c,gNe(s,l,c)}function gNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),dNe(s,m,d),C=f}function dNe(s,l,c){s=s|0,l=l|0,c=c|0,C9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function C9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function mNe(){return 1472}function yNe(s,l){return s=+s,l=+l,ENe(s,l)|0}function ENe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Vt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),C9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Vt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],w9(m,k,B),n[d>>2]=m,C=f,c|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function CNe(s){s=s|0,Jm(s),gt(s)}function wNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function INe(s){s=s|0,gt(s)}function BNe(){var s=0;return o[7928]|0||(I9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Rr(10488)|0||I9(10488),10488}function I9(s){s=s|0,PNe(s),kg(s,60)}function vNe(s){s=s|0,DNe(s+24|0)}function DNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function PNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,6,l,kNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function SNe(s){s=s|0,xNe(s)}function xNe(s){s=s|0,bNe(s)}function bNe(s){s=s|0,B9(s+8|0),o[s+24>>0]=1}function B9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function kNe(){return 1492}function QNe(){return FNe()|0}function FNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,B9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],w9(f,m,d),n[c>>2]=f,C=l,s|0}function TNe(){var s=0;return o[7936]|0||(_Ne(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function RNe(s,l){s=s|0,l=l|0,n[s>>2]=NNe()|0,n[s+4>>2]=LNe()|0,n[s+12>>2]=l,n[s+8>>2]=MNe()|0,n[s+32>>2]=7}function NNe(){return 11700}function LNe(){return 1484}function MNe(){return lD()|0}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(UNe(c),gt(c)):l|0&>(l)}function UNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function _Ne(s){s=s|0,Bp(s)}function HNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=jNe(c)|0,c=qNe(c,0)|0,ELe(s,l,c,AT()|0,0)}function jNe(s){return s=s|0,s|0}function qNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=AT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(D9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(zNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function AT(){var s=0,l=0;if(o[7944]|0||(v9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));v9(10568)}return 10568}function v9(s){s=s|0,WNe(s)}function GNe(s){s=s|0,YNe(s+24|0)}function YNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function WNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,17,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VNe(s){return s=s|0,JNe(n[(KNe(s)|0)>>2]|0)|0}function KNe(s){return s=s|0,(n[(AT()|0)+24>>2]|0)+(s<<3)|0}function JNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function D9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=XNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,ZNe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,D9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,$Ne(s,d),eLe(d),C=k;return}}function XNe(s){return s=s|0,536870911}function ZNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function $Ne(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function tLe(){rLe()}function rLe(){nLe(10604)}function nLe(s){s=s|0,iLe(s,4955)}function iLe(s,l){s=s|0,l=l|0;var c=0;c=sLe()|0,n[s>>2]=c,oLe(c,l),xp(n[s>>2]|0)}function sLe(){var s=0;return o[7952]|0||(gLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function oLe(s,l){s=s|0,l=l|0,n[s>>2]=uLe()|0,n[s+4>>2]=ALe()|0,n[s+12>>2]=l,n[s+8>>2]=fLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Gm()|0,n[c>>2]=s,aLe(10608,c),C=l}function Gm(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function aLe(s,l){s=s|0,l=l|0;var c=0;c=Vt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function lLe(s){s=s|0,cLe(s)}function cLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function uLe(){return 11715}function ALe(){return 1496}function fLe(){return aD()|0}function pLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(hLe(c),gt(c)):l|0&>(l)}function hLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function gLe(s){s=s|0,Bp(s)}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0;Gm()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(o7(fT(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;mLe(f,l)}while(0)}function fT(s){return s=s|0,n[s+12>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Vt(4)|0,$G(c,l),n[s>>2]=c}function pT(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function P9(){var s=0;return o[11717]|0?s=n[2665]|0:(yLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function yLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function S9(){return 1572}function ELe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0;m=C,C=C+32|0,M=m+16|0,O=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[M>>2]=s,n[O>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,pT()|0,CLe(10656,M,O,Q,k,B),C=m}function CLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Vt(24)|0,r5(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function x9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0;if(at=C,C=C+32|0,Oe=at+20|0,Fe=at+8|0,et=at+4|0,Xe=at,l=n[l>>2]|0,l|0){Ge=Oe+4|0,Q=Oe+8|0,O=Fe+4|0,M=Fe+8|0,q=Fe+8|0,se=Oe+8|0;do{if(B=l+4|0,k=hT(B)|0,k|0){if(d=Rw(k)|0,n[Oe>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Nw(k)|0)+1|0,wLe(Oe,f),f|0)for(;f=f+-1|0,xc(Fe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Fe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):gT(Oe,Fe),f;)d=d+4|0;f=Lw(k)|0,n[Fe>>2]=0,n[O>>2]=0,n[M>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?ILe(Fe,f):(n[d>>2]=n[f>>2],n[O>>2]=(n[O>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[O>>2]|0,m=n[q>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Rr(k)|0,BLe(c,s,et,Xe,Oe,Fe),dT(Fe),$A(Oe)}l=n[l>>2]|0}while((l|0)!=0)}C=at}function hT(s){return s=s|0,n[s+12>>2]|0}function Rw(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+16>>2]|0}function wLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(L9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),M9(s,c),O9(c)),C=d}function gT(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=N9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,L9(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,M9(s,c),O9(c),C=B;return}}function Lw(s){return s=s|0,n[s+8>>2]|0}function ILe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=R9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,jLe(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,qLe(s,c),GLe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function BLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,vLe(s,l,c,f,d,m)}function dT(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function $A(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function vLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+48|0,M=B+40|0,k=B+32|0,q=B+24|0,Q=B+12|0,O=B,Va(k),s=da(s)|0,n[q>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,mT(Q,d),DLe(O,m),n[M>>2]=n[q>>2],PLe(s,M,c,f,Q,O),dT(O),$A(Q),Ka(k),C=B}function mT(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(_Le(s,f),HLe(s,n[l>>2]|0,n[c>>2]|0,f))}function DLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(OLe(s,f),ULe(s,n[l>>2]|0,n[c>>2]|0,f))}function PLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,M=B+28|0,q=B+24|0,k=B+12|0,Q=B,O=Pl(SLe()|0)|0,n[q>>2]=n[l>>2],n[M>>2]=n[q>>2],l=Qg(M)|0,c=b9(c)|0,f=yT(f)|0,n[k>>2]=n[d>>2],M=d+4|0,n[k+4>>2]=n[M>>2],q=d+8|0,n[k+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[d>>2]=0,d=ET(k)|0,n[Q>>2]=n[m>>2],M=m+4|0,n[Q+4>>2]=n[M>>2],q=m+8|0,n[Q+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[m>>2]=0,ao(0,O|0,s|0,l|0,c|0,f|0,d|0,xLe(Q)|0)|0,dT(Q),$A(k),C=B}function SLe(){var s=0;return o[7968]|0||(LLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Qg(s){return s=s|0,Q9(s)|0}function b9(s){return s=s|0,k9(s)|0}function yT(s){return s=s|0,oD(s)|0}function ET(s){return s=s|0,kLe(s)|0}function xLe(s){return s=s|0,bLe(s)|0}function bLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=k9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function k9(s){return s=s|0,s|0}function kLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=Q9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function Q9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(F9()|0)|0,f?(FF(l,f),TF(c,l),fUe(s,c),s=RF(l)|0):s=QLe(s)|0,C=d,s|0}function F9(){var s=0;return o[7960]|0||(NLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function QLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function FLe(s){s=s|0,Jm(s),gt(s)}function TLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function RLe(s){s=s|0,gt(s)}function NLe(s){s=s|0,Bp(s)}function LLe(s){s=s|0,Sl(s,MLe()|0,5)}function MLe(){return 1676}function OLe(s,l){s=s|0,l=l|0;var c=0;if((R9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ULe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function R9(s){return s=s|0,1073741823}function _Le(s,l){s=s|0,l=l|0;var c=0;if((N9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N9(s){return s=s|0,1073741823}function jLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function qLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function L9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function M9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function O9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function YLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Fe=C,C=C+32|0,M=Fe+20|0,q=Fe+12|0,O=Fe+16|0,se=Fe+4|0,Ge=Fe,Oe=Fe+8|0,k=P9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(M,B),WLe(s,M,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=S9()|0,B=n[m>>2]|0,B|0)do xc(M,B),n[q>>2]=n[m+4>>2],VLe(l,M,q),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Gm()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(M,n[(Ym(l)|0)>>2]|0),n[q>>2]=fT(l)|0,KLe(c,M,q),m=n[m>>2]|0;while((m|0)!=0);if(xc(O,0),m=pT()|0,n[M>>2]=n[O>>2],x9(M,m,d),m=n[(Gm()|0)>>2]|0,m|0){s=M+4|0,l=M+8|0,c=M+8|0;do{if(Q=n[m+4>>2]|0,xc(q,n[(Ym(Q)|0)>>2]|0),JLe(se,U9(Q)|0),B=n[se>>2]|0,B|0){n[M>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(Ge,n[(Ym(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):gT(M,Ge),B=n[B>>2]|0;while((B|0)!=0);zLe(f,q,M),$A(M)}n[Oe>>2]=n[q>>2],O=_9(Q)|0,n[M>>2]=n[Oe>>2],x9(M,O,d),l5(se),m=n[m>>2]|0}while((m|0)!=0)}C=Fe}function WLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,lMe(s,l,c,f)}function VLe(s,l,c){s=s|0,l=l|0,c=c|0,aMe(s,l,c)}function Ym(s){return s=s|0,s|0}function KLe(s,l,c){s=s|0,l=l|0,c=c|0,nMe(s,l,c)}function U9(s){return s=s|0,s+16|0}function JLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=rMe(c)|0,f|0){if(f=Vt(12)|0,B=(H9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Vt(12)|0,Q=(H9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function zLe(s,l,c){s=s|0,l=l|0,c=c|0,XLe(s,l,c)}function _9(s){return s=s|0,s+24|0}function XLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Va(d),s=da(s)|0,n[k>>2]=n[l>>2],mT(m,c),n[B>>2]=n[k>>2],ZLe(s,B,m),$A(m),Ka(d),C=f}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Pl($Le()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,ET(d)|0)|0,$A(d),C=f}function $Le(){var s=0;return o[7976]|0||(eMe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function eMe(s){s=s|0,Sl(s,tMe()|0,2)}function tMe(){return 1732}function rMe(s){return s=s|0,n[s>>2]|0}function H9(s){return s=s|0,n[s>>2]|0}function nMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Pl(iMe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Qg(m)|0,oo(0,d|0,s|0,l|0,b9(c)|0)|0,C=f}function iMe(){var s=0;return o[7984]|0||(sMe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function sMe(s){s=s|0,Sl(s,oMe()|0,2)}function oMe(){return 1744}function aMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function lMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],cMe(s,B,c,f),Ka(m),C=d}function cMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Pl(uMe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,c=Wm(c)|0,pc(0,m|0,s|0,l|0,c|0,Wm(f)|0)|0,C=d}function uMe(){var s=0;return o[7992]|0||(fMe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Wm(s){return s=s|0,AMe(s)|0}function AMe(s){return s=s|0,s&255|0}function fMe(s){s=s|0,Sl(s,pMe()|0,3)}function pMe(){return 1756}function hMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,O=se+20|0,M=se,OF(s,0),f=AUe(l)|0,n[k>>2]=0,q=k+4|0,n[q>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[O>>0]=0,gMe(Q,c,O),uD(s,Q)|0,qA(Q);break}case 8:{q=DT(l)|0,o[O>>0]=8,xc(M,n[q+4>>2]|0),dMe(Q,c,O,M,q+8|0),uD(s,Q)|0,qA(Q);break}case 9:{if(m=DT(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[q>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[q>>2]=(n[q>>2]|0)+4):gT(k,Q),l;)d=d+4|0;o[O>>0]=9,xc(M,n[m+8>>2]|0),mMe(Q,c,O,M,k),uD(s,Q)|0,qA(Q);break}default:q=DT(l)|0,o[O>>0]=f,xc(M,n[q+4>>2]|0),yMe(Q,c,O,M),uD(s,Q)|0,qA(Q)}$A(k),C=se}function gMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Va(d),l=da(l)|0,QMe(s,l,o[c>>0]|0),Ka(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function dMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],SMe(s,l,c,k,d),Ka(B),C=m}function mMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,O=m+12|0,k=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[O>>2]=n[f>>2],mT(k,d),n[Q>>2]=n[O>>2],BMe(s,l,c,Q,k),$A(k),Ka(B),C=m}function yMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],EMe(s,l,c,B),Ka(m),C=d}function EMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Pl(CMe()|0)|0,c=Wm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Qg(m)|0)|0),C=d}function CMe(){var s=0;return o[8e3]|0||(wMe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,OF(s,l)}function wMe(s){s=s|0,Sl(s,IMe()|0,2)}function IMe(){return 1772}function BMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+16|0,O=m+12|0,B=m,k=Pl(vMe()|0)|0,c=Wm(c)|0,n[O>>2]=n[f>>2],n[Q>>2]=n[O>>2],f=Qg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],O=d+8|0,n[B+8>>2]=n[O>>2],n[O>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,ET(B)|0)|0),$A(B),C=m}function vMe(){var s=0;return o[8008]|0||(DMe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function DMe(s){s=s|0,Sl(s,PMe()|0,3)}function PMe(){return 1784}function SMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Pl(xMe()|0)|0,c=Wm(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Qg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,yT(d)|0)|0),C=m}function xMe(){var s=0;return o[8016]|0||(bMe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function bMe(s){s=s|0,Sl(s,kMe()|0,3)}function kMe(){return 1800}function QMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Pl(FMe()|0)|0,AD(s,Qn(0,f|0,l|0,Wm(c)|0)|0)}function FMe(){var s=0;return o[8024]|0||(TMe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function TMe(s){s=s|0,Sl(s,RMe()|0,1)}function RMe(){return 1816}function NMe(){LMe(),MMe(),OMe()}function LMe(){n[2702]=d7(65536)|0}function MMe(){iOe(10856)}function OMe(){UMe(10816)}function UMe(s){s=s|0,_Me(s,5044),HMe(s)|0}function _Me(s,l){s=s|0,l=l|0;var c=0;c=F9()|0,n[s>>2]=c,ZMe(c,l),xp(n[s>>2]|0)}function HMe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,jMe()|0),s|0}function jMe(){var s=0;return o[8032]|0||(q9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Rr(10820)|0||q9(10820),10820}function q9(s){s=s|0,YMe(s),kg(s,25)}function qMe(s){s=s|0,GMe(s+24|0)}function GMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YMe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,18,l,JMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WMe(s,l){s=s|0,l=l|0,VMe(s,l)}function VMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,Sg(d,l),n[f>>2]=xg(d,l)|0,KMe(s,f),C=c}function KMe(s,l){s=s|0,l=l|0,G9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function G9(s,l){s=s|0,l=l|0,n[s>>2]=l}function JMe(){return 1824}function zMe(s){return s=s|0,XMe(s)|0}function XMe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,Sg(d,s),G9(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=d7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function ZMe(s,l){s=s|0,l=l|0,n[s>>2]=$Me()|0,n[s+4>>2]=eOe()|0,n[s+12>>2]=l,n[s+8>>2]=tOe()|0,n[s+32>>2]=9}function $Me(){return 11744}function eOe(){return 1832}function tOe(){return lD()|0}function rOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(nOe(c),gt(c)):l|0&>(l)}function nOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function iOe(s){s=s|0,sOe(s,5052),oOe(s)|0,aOe(s,5058,26)|0,lOe(s,5069,1)|0,cOe(s,5077,10)|0,uOe(s,5087,19)|0,AOe(s,5094,27)|0}function sOe(s,l){s=s|0,l=l|0;var c=0;c=nUe()|0,n[s>>2]=c,iUe(c,l),xp(n[s>>2]|0)}function oOe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,q4e()|0),s|0}function aOe(s,l,c){return s=s|0,l=l|0,c=c|0,D4e(s,pn(l)|0,c,0),s|0}function lOe(s,l,c){return s=s|0,l=l|0,c=c|0,u4e(s,pn(l)|0,c,0),s|0}function cOe(s,l,c){return s=s|0,l=l|0,c=c|0,jOe(s,pn(l)|0,c,0),s|0}function uOe(s,l,c){return s=s|0,l=l|0,c=c|0,SOe(s,pn(l)|0,c,0),s|0}function Y9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function AOe(s,l,c){return s=s|0,l=l|0,c=c|0,fOe(s,pn(l)|0,c,0),s|0}function fOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CT()|0,s=pOe(c)|0,hn(m,l,d,s,hOe(c,f)|0,f)}function CT(){var s=0,l=0;if(o[8040]|0||(V9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10860)}return 10860}function pOe(s){return s=s|0,s|0}function hOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(W9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(gOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function gOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=dOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,mOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,W9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,yOe(s,d),EOe(d),C=k;return}}function dOe(s){return s=s|0,536870911}function mOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function yOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function EOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,IOe(s)}function COe(s){s=s|0,wOe(s+24|0)}function wOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function IOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,BOe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BOe(){return 1840}function vOe(s,l,c){s=s|0,l=l|0,c=c|0,POe(n[(DOe(s)|0)>>2]|0,l,c)}function DOe(s){return s=s|0,(n[(CT()|0)+24>>2]|0)+(s<<3)|0}function POe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,Sg(m,l),l=xg(m,l)|0,Sg(d,c),c=xg(d,c)|0,tf[s&31](l,c),C=f}function SOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wT()|0,s=xOe(c)|0,hn(m,l,d,s,bOe(c,f)|0,f)}function wT(){var s=0,l=0;if(o[8048]|0||(J9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J9(10896)}return 10896}function xOe(s){return s=s|0,s|0}function bOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(kOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function kOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=QOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,FOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TOe(s,d),ROe(d),C=k;return}}function QOe(s){return s=s|0,536870911}function FOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ROe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J9(s){s=s|0,MOe(s)}function NOe(s){s=s|0,LOe(s+24|0)}function LOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,OOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function OOe(){return 1852}function UOe(s,l){return s=s|0,l=l|0,HOe(n[(_Oe(s)|0)>>2]|0,l)|0}function _Oe(s){return s=s|0,(n[(wT()|0)+24>>2]|0)+(s<<3)|0}function HOe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Sg(f,l),l=xg(f,l)|0,l=oD(Ng[s&31](l)|0)|0,C=c,l|0}function jOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IT()|0,s=qOe(c)|0,hn(m,l,d,s,GOe(c,f)|0,f)}function IT(){var s=0,l=0;if(o[8056]|0||(X9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(10932)}return 10932}function qOe(s){return s=s|0,s|0}function GOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,VOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,KOe(s,d),JOe(d),C=k;return}}function WOe(s){return s=s|0,536870911}function VOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function KOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,ZOe(s)}function zOe(s){s=s|0,XOe(s+24|0)}function XOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ZOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,7,l,$Oe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Oe(){return 1860}function e4e(s,l,c){return s=s|0,l=l|0,c=c|0,r4e(n[(t4e(s)|0)>>2]|0,l,c)|0}function t4e(s){return s=s|0,(n[(IT()|0)+24>>2]|0)+(s<<3)|0}function r4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,n4e(Q,l),i4e(k,Q,l),vp(d,c),c=Dp(d,c)|0,n[B>>2]=n[k>>2],_w[s&15](m,B,c),c=s4e(m)|0,qA(m),Pp(d),C=f,c|0}function n4e(s,l){s=s|0,l=l|0}function i4e(s,l,c){s=s|0,l=l|0,c=c|0,o4e(s,c)}function s4e(s){return s=s|0,da(s)|0}function o4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(a4e(c,0),ii(f|0,c|0)|0,l4e(s,c),c4e(c)):n[s>>2]=n[l>>2],C=d}function a4e(s,l){s=s|0,l=l|0,e5(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function l4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function c4e(s){s=s|0,o[s+8>>0]=0}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=BT()|0,s=A4e(c)|0,hn(m,l,d,s,f4e(c,f)|0,f)}function BT(){var s=0,l=0;if(o[8064]|0||($9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));$9(10968)}return 10968}function A4e(s){return s=s|0,s|0}function f4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=BT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(p4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function p4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=h4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,g4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,d4e(s,d),m4e(d),C=k;return}}function h4e(s){return s=s|0,536870911}function g4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function d4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function m4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function $9(s){s=s|0,C4e(s)}function y4e(s){s=s|0,E4e(s+24|0)}function E4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function C4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,1,l,w4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function w4e(){return 1872}function I4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,v4e(n[(B4e(s)|0)>>2]|0,l,c,f,d,m)}function B4e(s){return s=s|0,(n[(BT()|0)+24>>2]|0)+(s<<3)|0}function v4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,O=B+8|0,M=B+4|0,q=B,vp(k,l),l=Dp(k,l)|0,vp(Q,c),c=Dp(Q,c)|0,vp(O,f),f=Dp(O,f)|0,vp(M,d),d=Dp(M,d)|0,vp(q,m),m=Dp(q,m)|0,w7[s&1](l,c,f,d,m),Pp(q),Pp(M),Pp(O),Pp(Q),Pp(k),C=B}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=vT()|0,s=P4e(c)|0,hn(m,l,d,s,S4e(c,f)|0,f)}function vT(){var s=0,l=0;if(o[8072]|0||(t7(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Rr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t7(11004)}return 11004}function P4e(s){return s=s|0,s|0}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=vT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(x4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function x4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=b4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,k4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,Q4e(s,d),F4e(d),C=k;return}}function b4e(s){return s=s|0,536870911}function k4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function Q4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function F4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t7(s){s=s|0,N4e(s)}function T4e(s){s=s|0,R4e(s+24|0)}function R4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function N4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,12,l,L4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function L4e(){return 1896}function M4e(s,l,c){s=s|0,l=l|0,c=c|0,U4e(n[(O4e(s)|0)>>2]|0,l,c)}function O4e(s){return s=s|0,(n[(vT()|0)+24>>2]|0)+(s<<3)|0}function U4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,_4e(m,l),l=H4e(m,l)|0,vp(d,c),c=Dp(d,c)|0,tf[s&31](l,c),Pp(d),C=f}function _4e(s,l){s=s|0,l=l|0}function H4e(s,l){return s=s|0,l=l|0,j4e(l)|0}function j4e(s){return s=s|0,s|0}function q4e(){var s=0;return o[8080]|0||(r7(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Rr(11040)|0||r7(11040),11040}function r7(s){s=s|0,W4e(s),kg(s,71)}function G4e(s){s=s|0,Y4e(s+24|0)}function Y4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function W4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,7,l,z4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function V4e(s){s=s|0,K4e(s)}function K4e(s){s=s|0,J4e(s)}function J4e(s){s=s|0,o[s+8>>0]=1}function z4e(){return 1936}function X4e(){return Z4e()|0}function Z4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Vt(1)|0,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],$4e(f,m,d),n[c>>2]=f,C=l,s|0}function $4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function eUe(s){s=s|0,Jm(s),gt(s)}function tUe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function rUe(s){s=s|0,gt(s)}function nUe(){var s=0;return o[8088]|0||(uUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function iUe(s,l){s=s|0,l=l|0,n[s>>2]=sUe()|0,n[s+4>>2]=oUe()|0,n[s+12>>2]=l,n[s+8>>2]=aUe()|0,n[s+32>>2]=10}function sUe(){return 11745}function oUe(){return 1940}function aUe(){return aD()|0}function lUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(cUe(c),gt(c)):l|0&>(l)}function cUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function uUe(s){s=s|0,Bp(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function DT(s){return s=s|0,n[s>>2]|0}function AUe(s){return s=s|0,o[n[s>>2]>>0]|0}function fUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],pUe(l,f)|0,C=c}function pUe(s,l){s=s|0,l=l|0;var c=0;return c=hUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function hUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Va(f),s=da(s)|0,l=gUe(s,n[l>>2]|0)|0,Ka(f),C=c,l|0}function Va(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function gUe(s,l){s=s|0,l=l|0;var c=0;return c=Pl(dUe()|0)|0,Qn(0,c|0,s|0,yT(l)|0)|0}function Ka(s){s=s|0,Y9(n[s>>2]|0,n[s+4>>2]|0)}function dUe(){var s=0;return o[8096]|0||(mUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function mUe(s){s=s|0,Sl(s,yUe()|0,1)}function yUe(){return 1948}function EUe(){CUe()}function CUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Oe=C,C=C+16|0,M=Oe+4|0,q=Oe,Ni(65536,10804,n[2702]|0,10812),c=P9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=S9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(wUe()|0,5167),O=Gm()|0,s=n[O>>2]|0;e:do if(s|0){do IUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[O>>2]|0,s|0){Q=O;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(BUe(d)|0);)if(n[q>>2]=Q,n[M>>2]=n[q>>2],vUe(O,M)|0,!s)break e;if(DUe(d),Q=n[Q>>2]|0,l=n7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(U9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Ym(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Fe=Ym(d)|0,l=PUe(d)|0,c=n7(d)|0,f=SUe(d)|0,Au(Fe|0,l|0,B|0,k|0,c|0,f|0,fT(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(pT()|0)>>2]|0,s|0)do Fe=s+4|0,O=hT(Fe)|0,d=Lw(O)|0,m=Rw(O)|0,B=(Nw(O)|0)+1|0,k=fD(O)|0,Q=i7(Fe)|0,O=Rr(O)|0,M=cD(Fe)|0,q=PT(Fe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,O|0,M|0,q|0,ST(Fe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Gm()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Ym(l)|0)>>2]|0,Ge=n[(_9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=hT(l)|0;r:do if(f|0)switch(Rr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Lw(f)|0,Q=Rw(f)|0,O=(Nw(f)|0)+1|0,M=fD(f)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,k|0,Q|0,O|0,M|0,0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 1:{B=Lw(f)|0,k=Rw(f)|0,Q=(Nw(f)|0)+1|0,O=fD(f)|0,M=i7(l)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,B|0,k|0,Q|0,O|0,M|0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 5:{O=Lw(f)|0,M=Rw(f)|0,q=(Nw(f)|0)+1|0,Fe=fD(f)|0,El(se|0,O|0,M|0,q|0,Fe|0,xUe(f)|0,Rr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Tt()}while(0);Ce(),C=Oe}function wUe(){return 11703}function IUe(s){s=s|0,o[s+40>>0]=0}function BUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function vUe(s,l){return s=s|0,l=l|0,l=bUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function DUe(s){s=s|0,o[s+40>>0]=1}function n7(s){return s=s|0,n[s+20>>2]|0}function PUe(s){return s=s|0,n[s+8>>2]|0}function SUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function i7(s){return s=s|0,n[s+4>>2]|0}function PT(s){return s=s|0,n[s+8>>2]|0}function ST(s){return s=s|0,n[s+16>>2]|0}function xUe(s){return s=s|0,n[s+20>>2]|0}function bUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(O=s>>>0<11?16:s+11&-8,s=O>>>3,q=n[2783]|0,c=q>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=q&~(1<>2]=s,n[c>>2]=m),qe=l<<3,n[f+4>>2]=qe|3,qe=f+qe+4|0,n[qe>>2]=n[qe>>2]|1,qe=d,C=Lt,qe|0;if(M=n[2785]|0,O>>>0>M>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=q&~(1<>2]=l,n[s>>2]=c,s=q),m=(f<<3)-O|0,n[d+4>>2]=O|3,f=d+O|0,n[f+4>>2]=m|1,n[f+m>>2]=m,M|0&&(d=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,qe=B,C=Lt,qe|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-O|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-O|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+O|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(qe=m+O|0,n[Q+4>>2]=qe|3,qe=Q+qe+4|0,n[qe>>2]=n[qe>>2]|1):(n[Q+4>>2]=O|3,n[B+4>>2]=m|1,n[B+m>>2]=m,M|0&&(f=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=q|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),qe=Q+8|0,C=Lt,qe|0}else q=O}else q=O}else q=O}else if(s>>>0<=4294967231)if(s=s+11|0,O=s&-8,Q=n[2784]|0,Q){f=0-O|0,s=s>>>8,s?O>>>0>16777215?k=31:(q=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(M|q|k)+(Ue<>>15)|0,k=O>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=O<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-O|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,q=q>>>B,m=q>>>5&8,q=q>>>m,k=q>>>2&4,q=q>>>k,M=q>>>1&2,q=q>>>M,c=q>>>1&1,s=0,c=n[11436+((m|B|k|M|c)+(q>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-O|0,q=c>>>0>>0,c=q?c:f,s=q?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-O|0)>>>0){if(m=k+O|0,k>>>0>=m>>>0)return qe=0,C=Lt,qe|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else qe=n[k+8>>2]|0,n[qe+12>>2]=l,n[l+8>>2]=qe;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=O|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=qe,n[m+12>>2]=c,n[m+24>>2]=0;break}}else qe=B+O|0,n[k+4>>2]=qe|3,qe=k+qe+4|0,n[qe>>2]=n[qe>>2]|1;while(0);return qe=k+8|0,C=Lt,qe|0}else q=O}else q=O;else q=-1;while(0);if(c=n[2785]|0,c>>>0>=q>>>0)return l=c-q|0,s=n[2788]|0,l>>>0>15?(qe=s+q|0,n[2788]=qe,n[2785]=l,n[qe+4>>2]=l|1,n[qe+l>>2]=l,n[s+4>>2]=q|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,qe=s+c+4|0,n[qe>>2]=n[qe>>2]|1),qe=s+8|0,C=Lt,qe|0;if(B=n[2786]|0,B>>>0>q>>>0)return at=B-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=q+48|0,Q=q+47|0,m=s+Q|0,d=0-s|0,O=m&d,O>>>0<=q>>>0||(s=n[2893]|0,s|0&&(M=n[2891]|0,se=M+O|0,se>>>0<=M>>>0|se>>>0>s>>>0)))return qe=0,C=Lt,qe|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Fe=f+4|0,(s+(n[Fe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=kp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Fe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=kp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Oe=Ge+-1|0,l=((Oe&l|0)==0?0:(Oe+l&0-Ge)-l|0)+O|0,Ge=n[2891]|0,Oe=l+Ge|0,l>>>0>q>>>0&l>>>0<2147483647)){if(Fe=n[2893]|0,Fe|0&&Oe>>>0<=Ge>>>0|Oe>>>0>Fe>>>0){l=0;break}if(s=kp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((kp(s|0)|0)==-1){kp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&O>>>0<2147483647&&(at=kp(O|0)|0,Fe=kp(0)|0,et=Fe-at|0,Xe=et>>>0>(q+40|0)>>>0,!((at|0)==-1|Xe^1|at>>>0>>0&((at|0)!=-1&(Fe|0)!=-1)^1))&&(B=Xe?et:l,m=at,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,qe=Q+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=Q+qe|0,qe=(n[2786]|0)+(B-qe)|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,M=l+4|0,n[M>>2]=(n[M>>2]|0)+B,M=m+8|0,M=m+((M&7|0)==0?0:0-M&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,O=M+q|0,k=l-M-q|0,n[M+4>>2]=q|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){qe=(n[2785]|0)+k|0,n[2785]=qe,n[2788]=O,n[O+4>>2]=qe|1,n[O+qe>>2]=qe;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else qe=n[l+8>>2]|0,n[qe+12>>2]=s,n[s+8>>2]=qe;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[O+4>>2]=d|1,n[O+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=O,n[l+12>>2]=O,n[O+8>>2]=l,n[O+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[O+28>>2]=l,s=O+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=O,n[O+24>>2]=f,n[O+12>>2]=O,n[O+8>>2]=O;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=O,n[O+24>>2]=c,n[O+12>>2]=O,n[O+8>>2]=O;break}else if((Ue|0)==194){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=O,n[Ue>>2]=O,n[O+8>>2]=qe,n[O+12>>2]=c,n[O+24>>2]=0;break}}else qe=(n[2786]|0)+k|0,n[2786]=qe,n[2789]=O,n[O+4>>2]=qe|1;while(0);return qe=M+8|0,C=Lt,qe|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(qe=s+(n[l+4>>2]|0)|0,qe>>>0>Q>>>0));)l=n[l+8>>2]|0;d=qe+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,c=14-(at|Ue|c)+(qe<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=qe,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{qe=n[2787]|0,(qe|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do qe=11172+(l<<1<<2)|0,n[qe+12>>2]=qe,n[qe+8>>2]=qe,l=l+1|0;while((l|0)!=32);qe=m+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=m+qe|0,qe=B+-40-qe|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>q>>>0)return at=l-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0}return n[(Vm()|0)>>2]=12,qe=0,C=Lt,qe|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function kUe(){return 11628}function QUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=RUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function s7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;q=C,C=C+48|0,O=q+16|0,m=q,d=q+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[O>>2]=n[B>>2],n[O+4>>2]=d,n[O+8>>2]=l,m=gD(Li(146,O|0)|0)|0,(f|0)==(m|0)){M=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else M=3;while(0);return(M|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=q,c|0}function FUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(TUe()|0)+64|0}function TUe(){return xT()|0}function xT(){return 2084}function RUe(s){return s=s|0,s|0}function NUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=s7(s,l,c)|0,C=d,f|0}function o7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function LUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function a7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;Fe=C,C=C+224|0,M=Fe+120|0,q=Fe+80|0,Ge=Fe,Oe=Fe+136|0,f=q,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[M>>2]=n[c>>2],(bT(0,l,M,Ge,q)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=MUe(s)|0:se=0,c=n[s>>2]|0,O=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=bT(s,l,M,Ge,q)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Oe,B=s+28|0,n[B>>2]=Oe,k=s+20|0,n[k>>2]=Oe,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Oe+80,c=bT(s,l,M,Ge,q)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|O,se|0&&OUe(s),c=(f&32|0)==0?c:-1),C=Fe,c|0}function bT(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Pr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,at=(s|0)!=0,Ue=Lt+40|0,qe=Ue,Lt=Lt+39|0,Or=Pr+4|0,B=0,m=0,M=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,at&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Fe=et?B:-1,M=et?1:M,Q=et?k+3|0:Q):Fe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(O=0,q=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;q=B}else O=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,M=1,Q=Q+3|0;else{if(M|0){m=-1;break}at?(M=(n[c>>2]|0)+(4-1)&~(4-1),B=n[M>>2]|0,n[c>>2]=M+4,M=0,Q=k):(B=0,M=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,O=et?O|8192:O}else{if(B=l7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=l7(or)|0,Q=n[or>>2]|0;break}if(q=Q+2|0,k=(o[q>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[q>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(M|0){m=-1;break e}at?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=q,Q=q}else k=-1;while(0);for(Oe=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,q=o[(o[Q>>0]|0)+-65+(5178+(Oe*58|0))>>0]|0,se=q&255,(se+-1|0)>>>0<8)Oe=se,Q=et;else break}if(!(q<<24>>24)){m=-1;break}Ge=(Fe|0)>-1;do if(q<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Fe<<2)>>2]=se,Ge=f+(Fe<<3)|0,Fe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Fe,Xe=49;break}if(!at){m=0;break e}c7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!at)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Oe|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=O&-65537,Fe=(O&8192|0)==0?O:Ge;t:do switch(Q|0){case 110:switch((Oe&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Fe|8,Xe=61;break}case 88:case 120:{l=Fe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=_Ue(l,Q,Ue)|0,Ge=qe-se|0,O=0,q=5642,k=(Fe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Fe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=De,O=Xt,n[O>>2]=l,n[O+4>>2]=Q,O=1,q=5642,Xe=66;break t}else{O=(Fe&2049|0)!=0&1,q=(Fe&2048|0)==0?(Fe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,O=0,q=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,O=0,q=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=HUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Pr>>2]=n[Xt>>2],n[Or>>2]=0,n[Xt>>2]=Pr,se=-1,Q=Pr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Fe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=qUe(s,+E[Xt>>3],B,k,Fe,Q)|0,l=et;continue e}default:O=0,q=5642,se=Ue,Q=k,k=Fe}while(0);t:do if((Xe|0)==61)Fe=Xt,Oe=n[Fe>>2]|0,Fe=n[Fe+4>>2]|0,se=UUe(Oe,Fe,Ue,Q&32)|0,q=(l&8|0)==0|(Oe|0)==0&(Fe|0)==0,O=q?0:2,q=q?5642:5642+(Q>>4)|0,Ge=l,l=Oe,Q=Fe,Xe=67;else if((Xe|0)==66)se=Km(l,Q,Ue)|0,Ge=Fe,Xe=67;else if((Xe|0)==71)Xe=0,Fe=jUe(Q,0,k)|0,Oe=(Fe|0)==0,l=Q,O=0,q=5642,se=Oe?Q+k|0:Fe,Q=Oe?k:Fe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,q=Q,l=0,k=0;O=n[q>>2]|0,!(!O||(k=u7(Nr,O)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)q=q+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Fe),!l)l=0,Xe=84;else for(O=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=u7(Nr,k)|0,O=k+O|0,(O|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),O>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Fe=(k|0)!=0|Q,Q=((Q^1)&1)+(qe-se)|0,l=Fe?se:Ue,se=Ue,Q=Fe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Fe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Oe=se-l|0,Ge=(Q|0)<(Oe|0)?Oe:Q,Fe=Ge+O|0,B=(B|0)<(Fe|0)?Fe:B,Bs(s,32,B,Fe,k),ss(s,q,O),Bs(s,48,B,Fe,k^65536),Bs(s,48,Ge,Oe,0),ss(s,l,Oe),Bs(s,32,B,Fe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!M)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(c7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function MUe(s){return s=s|0,0}function OUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||ZUe(l,c,s)|0}function l7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function c7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function UUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function _Ue(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function Km(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=TT(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=FT(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=De;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function HUe(s){return s=s|0,KUe(s,n[(VUe()|0)+188>>2]|0)|0}function jUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=He(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,zm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function u7(s,l){return s=s|0,l=l|0,s?s=YUe(s,l,0)|0:s=0,s|0}function qUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0;bn=C,C=C+560|0,Q=bn+8|0,et=bn,ir=bn+524|0,Nr=ir,O=bn+512|0,n[et>>2]=0,Pr=O+12|0,A7(l)|0,(De|0)<0?(l=-l,or=1,Or=5659):(or=(d&2049|0)!=0&1,Or=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),A7(l)|0,Xt=De&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+GUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),at=m|32,(at|0)==97){Oe=m&32,se=(Oe|0)==0?Or:Or+9|0,q=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,(B|0)==(Pr|0)&&(B=O+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,M=B+-2|0,o[M>>0]=m+15,O=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Oe,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(O&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Pr-M|0,Pr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+q+Pr|0,Bs(s,32,c,B,d),ss(s,se,q),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Pr-Xt|0,0,0),ss(s,M,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do qe=~~l>>>0,n[Q>>2]=qe,Q=Q+4|0,l=(l-+(qe>>>0))*1e9;while(l!=0);if((B|0)>0)for(O=Xt,q=Q;;){if(M=(B|0)<29?B:29,B=q+-4|0,B>>>0>=O>>>0){Q=0;do Ue=m7(n[B>>2]|0,0,M|0)|0,Ue=QT(Ue|0,De|0,Q|0,0)|0,qe=De,Xe=TT(Ue|0,qe|0,1e9,0)|0,n[B>>2]=Xe,Q=FT(Ue|0,qe|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=O>>>0);Q&&(O=O+-4|0,n[O>>2]=Q)}for(Q=q;!(Q>>>0<=O>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-M|0,n[et>>2]=B,(B|0)>0)q=Q;else break}else O=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Fe=(at|0)==102;do{if(Oe=0-B|0,Oe=(Oe|0)<9?Oe:9,O>>>0>>0){M=(1<>>Oe,se=0,B=O;do qe=n[B>>2]|0,n[B>>2]=(qe>>>Oe)+se,se=He(qe&M,q)|0,B=B+4|0;while(B>>>0>>0);B=(n[O>>2]|0)==0?O+4|0:O,se?(n[Q>>2]=se,O=B,B=Q+4|0):(O=B,B=Q)}else O=(n[O>>2]|0)==0?O+4|0:O,B=Q;Q=Fe?Xt:O,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Oe|0,n[et>>2]=B}while((B|0)<0);B=O,f=Q}else B=O,f=Q;if(qe=Xt,B>>>0>>0){if(Q=(qe-B>>2)*9|0,M=n[B>>2]|0,M>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(M>>>0>=O>>>0)}}else Q=0;if(Fe=(at|0)==103,Xe=(k|0)!=0,O=k-((at|0)!=102?Q:0)+((Xe&Fe)<<31>>31)|0,(O|0)<(((f-qe>>2)*9|0)+-9|0)){if(O=O+9216|0,Oe=Xt+4+(((O|0)/9|0)+-1024<<2)|0,O=((O|0)%9|0)+1|0,(O|0)<9){M=10;do M=M*10|0,O=O+1|0;while((O|0)!=9)}else M=10;if(q=n[Oe>>2]|0,se=(q>>>0)%(M>>>0)|0,O=(Oe+4|0)==(f|0),O&(se|0)==0)O=Oe;else if(Ge=(((q>>>0)/(M>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(M|0)/2|0,l=se>>>0>>0?.5:O&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Or>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),O=q-se|0,n[Oe>>2]=O,Ge+l!=Ge){if(Ue=O+M|0,n[Oe>>2]=Ue,Ue>>>0>999999999)for(Q=Oe;O=Q+-4|0,n[Q>>2]=0,O>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[O>>2]|0)+1|0,n[O>>2]=Ue,Ue>>>0>999999999;)Q=O;else O=Oe;if(Q=(qe-B>>2)*9|0,q=n[B>>2]|0,q>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(q>>>0>=M>>>0)}}else O=Oe;O=O+4|0,O=f>>>0>O>>>0?O:f,Ue=B}else O=f,Ue=B;for(at=O;;){if(at>>>0<=Ue>>>0){et=0;break}if(B=at+-4|0,!(n[B>>2]|0))at=B;else{et=1;break}}f=0-Q|0;do if(Fe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(M=m+-1|0,k=B+-1-Q|0):(M=m+-2|0,k=B+-1|0),B=d&8,B)Oe=B;else{if(et&&(Lt=n[at+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)O=0;else{O=0,B=10;do B=B*10|0,O=O+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else O=9;if(B=((at-qe>>2)*9|0)+-9|0,(M|32|0)==102){Oe=B-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}else{Oe=B+Q-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}}else M=m,Oe=d&8;while(0);if(Fe=k|Oe,q=(Fe|0)!=0&1,se=(M|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,O=Pr,(O-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((O-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=M,Xe=B,B=O-B|0}if(B=or+1+k+q+B|0,Bs(s,32,c,B,d),ss(s,Or,or),Bs(s,48,c,B,d^65536),se){M=Ue>>>0>Xt>>>0?Xt:Ue,Oe=ir+9|0,q=Oe,se=ir+8|0,O=M;do{if(Q=Km(n[O>>2]|0,0,Oe)|0,(O|0)==(M|0))(Q|0)==(Oe|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,q-Q|0),O=O+4|0}while(O>>>0<=Xt>>>0);if(Fe|0&&ss(s,5710,1),O>>>0>>0&(k|0)>0)for(;;){if(Q=Km(n[O>>2]|0,0,Oe)|0,Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),O=O+4|0,Q=k+-9|0,O>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Fe=et?at:Ue+4|0,(k|0)>-1){et=ir+9|0,Oe=(Oe|0)==0,f=et,q=0-Nr|0,se=ir+8|0,M=Ue;do{Q=Km(n[M>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((M|0)==(Ue|0)){if(O=Q+1|0,ss(s,Q,1),Oe&(k|0)<1){Q=O;break}ss(s,5710,1),Q=O}else{if(Q>>>0<=ir>>>0)break;zm(ir|0,48,Q+q|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,M=M+4|0}while(M>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Pr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Or,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=bn,((B|0)<(c|0)?c:B)|0}function A7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,De=n[v+4>>2]|0,l|0}function GUe(s,l){return s=+s,l=l|0,+ +f7(s,l)}function f7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+f7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function YUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(WUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function WUe(){return xT()|0}function VUe(){return xT()|0}function KUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return JUe(c,n[l+20>>2]|0)|0}function JUe(s,l){return s=s|0,l=l|0,zUe(s,l)|0}function zUe(s,l){return s=s|0,l=l|0,l?l=XUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function XUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Fg(n[s+8>>2]|0,se)|0,f=Fg(n[s+12>>2]|0,se)|0,d=Fg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(q=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(q=f>>>2,M=d>>>2,O=0;;){if(k=m>>>1,Q=O+k|0,B=Q<<1,d=B+q|0,f=Fg(n[s+(d<<2)>>2]|0,se)|0,d=Fg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=o7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else O=f?O:Q,m=f?k:m-k|0}f=B+M|0,d=Fg(n[s+(f<<2)>>2]|0,se)|0,f=Fg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Fg(s,l){s=s|0,l=l|0;var c=0;return c=C7(s|0)|0,((l|0)==0?s:c)|0}function ZUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:$Ue(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function $Ue(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=p7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=p7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=h7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=h7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function kT(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((e3e(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else O=3;while(0);return(O|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function e3e(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function t3e(s,l){return s=s|0,l=l|0,a7(n[582]|0,s,l)|0}function zr(s){s=s|0,Tt()}function Jm(s){s=s|0}function r3e(s,l){return s=s|0,l=l|0,0}function n3e(s){return s=s|0,(g7(s+4|0)|0)==-1?(ef[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function g7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function bp(s){s=s|0,n3e(s)|0&&i3e(s)}function i3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(g7(l)|0)!=-1||ef[n[(n[s>>2]|0)+16>>2]&127](s)}function Vt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=o3e()|0,!s){s=0;break}k7[s&0]()}return s|0}function d7(s){return s=s|0,Vt(s)|0}function gt(s){s=s|0,hD(s)}function s3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function o3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function a3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,De=f,s-c>>>0|0|0}function QT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,De=l+f+(c>>>0>>0|0)>>>0,c|0|0}function zm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function m7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(De=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function y7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function E7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0;if(M=s,Q=l,O=Q,B=c,se=f,k=se,!O)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0):(m&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(M>>>0)/(B>>>0)>>>0,De=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=31){q=m+1|0,k=31-m|0,l=m-31>>31,B=q,s=M>>>(q>>>0)&l|O<>>(q>>>0)&l,m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(O|0)|0)|0,Oe=64-k|0,q=32-k|0,Q=q>>31,Ge=k-32|0,l=Ge>>31,B=k,s=q-1>>31&O>>>(Ge>>>0)|(O<>>(k>>>0))&l,l=l&O>>>(k>>>0),m=M<>>(Ge>>>0))&Q|M<>31;break}return d|0&&(n[d>>2]=m&M,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Oe=s|0|0,De=Ge,Oe|0):(Oe=y7(B|0)|0,Ge=O>>>(Oe>>>0)|0,Oe=O<<32-Oe|M>>>(Oe>>>0)|0,De=Ge,Oe|0)}else{if(m)return d|0&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Oe=(O>>>0)/(B>>>0)>>>0,De=Ge,Oe|0;if(!M)return d|0&&(n[d>>2]=0,n[d+4>>2]=(O>>>0)%(k>>>0)),Ge=0,Oe=(O>>>0)/(k>>>0)>>>0,De=Ge,Oe|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&O|l&0),Ge=0,Oe=O>>>((y7(k|0)|0)>>>0),De=Ge,Oe|0;if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=O<>>(l>>>0),l=O>>>(l>>>0),m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Oe=0,De=Ge,Oe|0):(Ge=0,Oe=0,De=Ge,Oe|0)}while(0);if(!B)O=k,Q=0,k=0;else{q=c|0|0,M=se|f&0,O=QT(q|0,M|0,-1,-1)|0,c=De,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(O|0,c|0,f|0,se|0)|0,Oe=De,Ge=Oe>>31|((Oe|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&q|0,(((Oe|0)<0?-1:0)>>31|((Oe|0)<0?-1:0)<<1)&M|0)|0,l=De,B=B-1|0;while((B|0)!=0);O=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(O|B)<<1|(B<<1|m>>>31)&0|Q,Oe=(m<<1|0>>>31)&-2|k,De=Ge,Oe|0}function FT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,E7(s,l,c,f,0)|0}function kp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,vA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,vA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function TT(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,E7(s,l,c,f,d)|0,C=m,De=n[d+4>>2]|0,n[d>>2]|0|0}function C7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function l3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,w7[s&1](l|0,c|0,f|0,d|0,m|0)}function c3e(s,l,c){s=s|0,l=l|0,c=y(c),I7[s&1](l|0,y(c))}function u3e(s,l,c){s=s|0,l=l|0,c=+c,B7[s&31](l|0,+c)}function A3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(v7[s&0](l|0,y(c),y(f)))}function f3e(s,l){s=s|0,l=l|0,ef[s&127](l|0)}function p3e(s,l,c){s=s|0,l=l|0,c=c|0,tf[s&31](l|0,c|0)}function h3e(s,l){return s=s|0,l=l|0,Ng[s&31](l|0)|0}function g3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,D7[s&1](l|0,+c,+f,d|0)}function d3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,z3e[s&1](l|0,+c,+f)}function m3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function y3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+X3e[s&1](l|0,c|0,f|0)}function E3e(s,l){return s=s|0,l=l|0,+P7[s&15](l|0)}function C3e(s,l,c){return s=s|0,l=l|0,c=+c,Z3e[s&1](l|0,+c)|0}function w3e(s,l,c){return s=s|0,l=l|0,c=c|0,NT[s&15](l|0,c|0)|0}function I3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,$3e[s&1](l|0,c|0,+f,+d,m|0)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,e_e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function v3e(s,l,c){return s=s|0,l=l|0,c=c|0,+S7[s&7](l|0,c|0)}function D3e(s){return s=s|0,CD[s&7]()|0}function P3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,x7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function S3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,t_e[s&1](l|0,c|0,f|0,+d)}function x3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,b7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function b3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,_w[s&15](l|0,c|0,f|0)}function k3e(s){s=s|0,k7[s&0]()}function Q3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,Q7[s&15](l|0,c|0,+f)}function F3e(s,l,c){return s=s|0,l=+l,c=+c,r_e[s&1](+l,+c)|0}function T3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,LT[s&15](l|0,c|0,f|0,d|0)}function R3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function N3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function L3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Ow(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function M3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function O3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function U3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function _3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Rg(s){return s=s|0,F(11),0}function H3e(s,l){return s=s|0,l=+l,F(12),0}function Uw(s,l){return s=s|0,l=l|0,F(13),0}function j3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function q3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function RT(s,l){return s=s|0,l=l|0,F(16),0}function G3e(){return F(17),0}function Y3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function W3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function V3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function K3e(){F(22)}function Xm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function J3e(s,l){return s=+s,l=+l,F(24),0}function Zm(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var w7=[R3e,YLe],I7=[N3e,fo],B7=[ma,xw,bw,wF,IF,Dl,kw,BF,Hm,xu,Fw,vF,$v,WA,eD,jm,tD,rD,qm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],v7=[L3e],ef=[Er,Jm,DDe,PDe,SDe,rbe,nbe,ibe,CNe,wNe,INe,FLe,TLe,RLe,eUe,tUe,rUe,hs,Kv,_m,YA,Qw,wve,Ive,gDe,NDe,VDe,APe,SPe,GPe,aSe,ISe,MSe,$Se,gxe,Qxe,Vxe,wbe,Mbe,$be,gke,Qke,Vke,fQe,SQe,HQe,nFe,Sc,RFe,zFe,gTe,TTe,KTe,gRe,DRe,xRe,YRe,KRe,ANe,vNe,SNe,GNe,lLe,a5,qMe,COe,NOe,zOe,y4e,T4e,G4e,V4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],tf=[Ow,hF,gF,Sw,Su,dF,mF,Ip,yF,EF,CF,Zv,VA,Ke,At,Wt,vr,Sn,Fr,PF,lve,Qve,dQe,kQe,MTe,WMe,dLe,Y9,Ow,Ow,Ow,Ow],Ng=[Ja,QUe,pF,D,fe,ve,vt,wt,bt,_r,di,po,sve,ove,Bve,oFe,ZTe,VNe,zMe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],D7=[M3e,vve],z3e=[O3e,hNe],ED=[U3e,s7,FUe,NUe,KPe,Dbe,OFe,e4e],X3e=[_3e,Exe],P7=[Rg,Yo,rt,xn,Dve,Pve,Sve,xve,bve,kve,Rg,Rg,Rg,Rg,Rg,Rg],Z3e=[H3e,IRe],NT=[Uw,r3e,ave,EDe,gPe,uSe,DSe,Xxe,Hbe,YQe,Wv,UOe,Uw,Uw,Uw,Uw],$3e=[j3e,XDe],e_e=[q3e,I4e],S7=[RT,ai,Fve,Tve,Rve,Nxe,RT,RT],CD=[G3e,Nve,Dw,ga,FRe,ZRe,QNe,X4e],x7=[Y3e,Ew],t_e=[W3e,Eke],b7=[V3e,cve],_w=[yD,R,is,en,ho,QPe,_Se,Nke,Xke,Um,hMe,vOe,M4e,yD,yD,yD],k7=[K3e],Q7=[Xm,Jv,zv,Xv,GA,nD,DF,P,nke,eTe,yRe,Xm,Xm,Xm,Xm,Xm],r_e=[J3e,yNe],LT=[Zm,nxe,hFe,ETe,aRe,ORe,iNe,ONe,pLe,rOe,lUe,Zm,Zm,Zm,Zm,Zm];return{_llvm_bswap_i32:C7,dynCall_idd:F3e,dynCall_i:D3e,_i64Subtract:dD,___udivdi3:FT,dynCall_vif:c3e,setThrew:hu,dynCall_viii:b3e,_bitshift64Lshr:mD,_bitshift64Shl:m7,dynCall_vi:f3e,dynCall_viiddi:I3e,dynCall_diii:y3e,dynCall_iii:w3e,_memset:zm,_sbrk:kp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Om,dynCall_vii:p3e,___uremdi3:TT,dynCall_vid:u3e,stackAlloc:lo,_nbind_init:EUe,getTempRet0:Ua,dynCall_di:E3e,dynCall_iid:C3e,setTempRet0:xA,_i64Add:QT,dynCall_fiff:A3e,dynCall_iiii:m3e,_emscripten_get_global_libc:kUe,dynCall_viid:Q3e,dynCall_viiid:S3e,dynCall_viififi:x3e,dynCall_ii:h3e,__GLOBAL__sub_I_Binding_cc:NMe,dynCall_viiii:T3e,dynCall_iiiiii:P3e,stackSave:gc,dynCall_viiiii:l3e,__GLOBAL__sub_I_nbind_cc:Lve,dynCall_vidd:d3e,_free:hD,runPostSets:a3e,dynCall_viiiiii:B3e,establishStackSpace:ji,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:tLe,dynCall_viddi:g3e,dynCall_dii:v3e,dynCall_v:k3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var om=_((wVt,OEe)=>{"use strict";var Jyt=LEe(),zyt=MEe(),Q6=!1,F6=null;zyt({},function(t,e){if(!Q6){if(Q6=!0,t)throw t;F6=e}});if(!Q6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");OEe.exports=Jyt(F6.bind,F6.lib)});var R6=_((IVt,T6)=>{"use strict";var UEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);T6.exports=UEe;T6.exports.default=UEe});var HEe=_((BVt,_Ee)=>{"use strict";_Ee.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Jk=_((vVt,N6)=>{"use strict";var Xyt=MP(),Zyt=R6(),$yt=HEe(),jEe=t=>{if(typeof t!="string"||t.length===0||(t=Xyt(t),t.length===0))return 0;t=t.replace($yt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Zyt(o)?2:1)}return e};N6.exports=jEe;N6.exports.default=jEe});var M6=_((DVt,L6)=>{"use strict";var eEt=Jk(),qEe=t=>{let e=0;for(let r of t.split(` -`))e=Math.max(e,eEt(r));return e};L6.exports=qEe;L6.exports.default=qEe});var GEe=_(lB=>{"use strict";var tEt=lB&&lB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lB,"__esModule",{value:!0});var rEt=tEt(M6()),O6={};lB.default=t=>{if(t.length===0)return{width:0,height:0};if(O6[t])return O6[t];let e=rEt.default(t),r=t.split(` -`).length;return O6[t]={width:e,height:r},{width:e,height:r}}});var YEe=_(cB=>{"use strict";var nEt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var dn=nEt(om()),iEt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},sEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},oEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},aEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},lEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},cEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},uEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};cB.default=(t,e={})=>{iEt(t,e),sEt(t,e),oEt(t,e),aEt(t,e),lEt(t,e),cEt(t,e),uEt(t,e)}});var KEe=_((xVt,VEe)=>{"use strict";var uB=Jk(),AEt=MP(),fEt=vI(),_6=new Set(["\x1B","\x9B"]),pEt=39,WEe=t=>`${_6.values().next().value}[${t}m`,hEt=t=>t.split(" ").map(e=>uB(e)),U6=(t,e,r)=>{let o=[...e],a=!1,n=uB(AEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=uB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),_6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},gEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(uB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},dEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=hEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=uB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){U6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(gEt)),o=A.join(` -`);for(let[p,h]of[...o].entries()){if(a+=h,_6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===pEt?null:I}let E=fEt.codes.get(Number(n));n&&E&&(o[p+1]===` -`?a+=WEe(E):h===` -`&&(a+=WEe(n)))}return a};VEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` -`).split(` -`).map(o=>dEt(o,e,r)).join(` -`)});var XEe=_((bVt,zEe)=>{"use strict";var JEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",mEt=t=>t&&t.exact?new RegExp(`^${JEe}$`):new RegExp(JEe,"g");zEe.exports=mEt});var H6=_((kVt,tCe)=>{"use strict";var yEt=R6(),EEt=XEe(),ZEe=vI(),eCe=["\x1B","\x9B"],zk=t=>`${eCe[0]}[${t}m`,$Ee=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=ZEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(zk(e?u:n))}else if(e){o.push(zk(0));break}else o.push(zk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=zk(ZEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};tCe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(eCe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=$Ee(a);else if(A>=r){p+=$Ee(a,!0,u);break}}return p}});var nCe=_((QVt,rCe)=>{"use strict";var y0=H6(),CEt=Jk();function Xk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}rCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=CEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Xk(t,p-e+1,!0);return u+y0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+y0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Xk(t,h),I=Xk(t,p-(e-h)+1,!0);return y0(t,0,E)+u+y0(t,I,p).trim()}return y0(t,0,h)+u+y0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Xk(t,e-1);return y0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),y0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var q6=_(AB=>{"use strict";var iCe=AB&&AB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AB,"__esModule",{value:!0});var wEt=iCe(KEe()),IEt=iCe(nCe()),j6={};AB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(j6[o])return j6[o];let a=t;if(r==="wrap"&&(a=wEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=IEt.default(t,e,{position:n})}return j6[o]=a,a}});var Y6=_(G6=>{"use strict";Object.defineProperty(G6,"__esModule",{value:!0});var sCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=sCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};G6.default=sCe});var W6=_(pi=>{"use strict";var fB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var BEt=fB(om()),oCe=fB(GEe()),vEt=fB(YEe()),DEt=fB(q6()),PEt=fB(Y6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:BEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(SEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&vEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var SEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:PEt.default(t),n=oCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=DEt.default(a,e,u);return oCe.default(A)},aCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:aCe(t.parentNode)},Zk=t=>{let e=aCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Zk(t)}});var fCe=_(pB=>{"use strict";var ACe=pB&&pB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pB,"__esModule",{value:!0});var lCe=x6(),xEt=ACe(kEe()),cCe=ACe(om()),Mo=W6(),uCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};pB.default=xEt.default({schedulePassiveEffects:lCe.unstable_scheduleCallback,cancelPassiveEffects:lCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Mo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Mo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Mo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Mo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Mo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Mo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_FLEX)},appendInitialChild:Mo.appendChildNode,appendChild:Mo.appendChildNode,insertBefore:Mo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Mo.appendChildNode,insertInContainerBefore:Mo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let b={};n.style=b}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Mo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Mo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Mo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)}})});var hCe=_((LVt,pCe)=>{"use strict";pCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var gCe=_(hB=>{"use strict";var bEt=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var $k=bEt(om());hB.default=t=>t.getComputedWidth()-t.getComputedPadding($k.default.EDGE_LEFT)-t.getComputedPadding($k.default.EDGE_RIGHT)-t.getComputedBorder($k.default.EDGE_LEFT)-t.getComputedBorder($k.default.EDGE_RIGHT)});var dCe=_((OVt,kEt)=>{kEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var yCe=_((UVt,V6)=>{"use strict";var mCe=dCe();V6.exports=mCe;V6.exports.default=mCe});var CCe=_((_Vt,ECe)=>{"use strict";var QEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},FEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r -`:` -`)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};ECe.exports={stringReplaceAll:QEt,stringEncaseCRLFWithFirstIndex:FEt}});var DCe=_((HVt,vCe)=>{"use strict";var TEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,wCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,REt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,NEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,LEt=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function BCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):LEt.get(t)||t}function MEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(REt))r.push(a[2].replace(NEt,(A,p,h)=>p?BCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function OEt(t){wCe.lastIndex=0;let e=[],r;for(;(r=wCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=MEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ICe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}vCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(TEt,(n,u,A,p,h,E)=>{if(u)a.push(BCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ICe(t,r)(I)),r.push({inverse:A,styles:OEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ICe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var iQ=_((jVt,QCe)=>{"use strict";var gB=vI(),{stdout:J6,stderr:z6}=yN(),{stringReplaceAll:UEt,stringEncaseCRLFWithFirstIndex:_Et}=CCe(),{isArray:eQ}=Array,SCe=["ansi","ansi","ansi256","ansi16m"],_C=Object.create(null),HEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=J6?J6.level:0;t.level=e.level===void 0?r:e.level},X6=class{constructor(e){return xCe(e)}},xCe=t=>{let e={};return HEt(e,t),e.template=(...r)=>kCe(e.template,...r),Object.setPrototypeOf(e,tQ.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=X6,e.template};function tQ(t){return xCe(t)}for(let[t,e]of Object.entries(gB))_C[t]={get(){let r=rQ(this,Z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};_C.visible={get(){let t=rQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bCe)_C[t]={get(){let{level:e}=this;return function(...r){let o=Z6(gB.color[SCe[e]][t](...r),gB.color.close,this._styler);return rQ(this,o,this._isEmpty)}}};for(let t of bCe){let e="bg"+t[0].toUpperCase()+t.slice(1);_C[e]={get(){let{level:r}=this;return function(...o){let a=Z6(gB.bgColor[SCe[r]][t](...o),gB.bgColor.close,this._styler);return rQ(this,a,this._isEmpty)}}}}var jEt=Object.defineProperties(()=>{},{..._C,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),Z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},rQ=(t,e,r)=>{let o=(...a)=>eQ(a[0])&&eQ(a[0].raw)?PCe(o,kCe(o,...a)):PCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,jEt),o._generator=t,o._styler=e,o._isEmpty=r,o},PCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=UEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=_Et(e,a,o,n)),o+e+a},K6,kCe=(t,...e)=>{let[r]=e;if(!eQ(r)||!eQ(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var qEt=mB&&mB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mB,"__esModule",{value:!0});var dB=qEt(iQ()),GEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,YEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,sQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);mB.default=(t,e,r)=>{if(!e)return t;if(e in dB.default){let a=sQ(e,r);return dB.default[a](t)}if(e.startsWith("#")){let a=sQ("hex",r);return dB.default[a](e)(t)}if(e.startsWith("ansi")){let a=YEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]);return dB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=GEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return dB.default[n](u,A,p)(t)}return t}});var TCe=_(yB=>{"use strict";var FCe=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var WEt=FCe(yCe()),ej=FCe($6());yB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=WEt.default[r.style.borderStyle],p=ej.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(ej.default(A.vertical,u,"foreground")+` -`).repeat(n-2),E=ej.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var NCe=_(EB=>{"use strict";var am=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var VEt=am(om()),KEt=am(M6()),JEt=am(hCe()),zEt=am(q6()),XEt=am(gCe()),ZEt=am(Y6()),$Et=am(TCe()),eCt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` -`.repeat(n)+JEt.default(e,a)}return e},RCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===VEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=ZEt.default(t);if(v.length>0){let b=KEt.default(v),C=XEt.default(p);if(b>C){let T=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=zEt.default(v,C,T)}v=eCt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&$Et.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)RCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};EB.default=RCe});var MCe=_((WVt,LCe)=>{"use strict";LCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var UCe=_((VVt,tj)=>{"use strict";var tCt=MCe(),OCe=t=>typeof t=="string"?t.replace(tCt(),""):t;tj.exports=OCe;tj.exports.default=OCe});var jCe=_((KVt,HCe)=>{"use strict";var _Ce="[\uD800-\uDBFF][\uDC00-\uDFFF]";HCe.exports=t=>t&&t.exact?new RegExp(`^${_Ce}$`):new RegExp(_Ce,"g")});var GCe=_((JVt,rj)=>{"use strict";var rCt=UCe(),nCt=jCe(),qCe=t=>rCt(t).replace(nCt()," ").length;rj.exports=qCe;rj.exports.default=qCe});var VCe=_(CB=>{"use strict";var WCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var YCe=WCe(H6()),iCt=WCe(GCe()),nj=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` -`),height:e.length}}};CB.default=nj});var zCe=_(wB=>{"use strict";var ij=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var sCt=ij(om()),KCe=ij(NCe()),JCe=ij(VCe());wB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,sCt.default.DIRECTION_LTR);let o=new JCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});KCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new JCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),KCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ewe=_((ZVt,$Ce)=>{"use strict";var XCe=Be("stream"),ZCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],sj={},oCt=t=>{let e=new XCe.PassThrough,r=new XCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of ZCe)sj[a]=console[a],console[a]=o[a];return()=>{for(let a of ZCe)console[a]=sj[a];sj={}}};$Ce.exports=oCt});var aj=_(oj=>{"use strict";Object.defineProperty(oj,"__esModule",{value:!0});oj.default=new WeakMap});var cj=_(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var aCt=sn(),twe=aCt.createContext({exit:()=>{}});twe.displayName="InternalAppContext";lj.default=twe});var Aj=_(uj=>{"use strict";Object.defineProperty(uj,"__esModule",{value:!0});var lCt=sn(),rwe=lCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});rwe.displayName="InternalStdinContext";uj.default=rwe});var pj=_(fj=>{"use strict";Object.defineProperty(fj,"__esModule",{value:!0});var cCt=sn(),nwe=cCt.createContext({stdout:void 0,write:()=>{}});nwe.displayName="InternalStdoutContext";fj.default=nwe});var gj=_(hj=>{"use strict";Object.defineProperty(hj,"__esModule",{value:!0});var uCt=sn(),iwe=uCt.createContext({stderr:void 0,write:()=>{}});iwe.displayName="InternalStderrContext";hj.default=iwe});var oQ=_(dj=>{"use strict";Object.defineProperty(dj,"__esModule",{value:!0});var ACt=sn(),swe=ACt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});swe.displayName="InternalFocusContext";dj.default=swe});var awe=_((sKt,owe)=>{"use strict";var fCt=/[|\\{}()[\]^$+*?.-]/g;owe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(fCt,"\\$&")}});var Awe=_((oKt,uwe)=>{"use strict";var pCt=awe(),hCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",cwe=[].concat(Be("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));cwe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var IB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=IB.nodeInternals()),"cwd"in e||(e.cwd=hCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,gCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...cwe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` -`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} -`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};lwe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(dCt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",b=r[11]===")",C,T={};if(E&&(T.line=Number(E)),I&&(T.column=Number(I)),b&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(mCt);L&&(a=L[1],C=L[2])}return lwe(T,h,this._cwd),o&&(T.constructor=!0),n&&(T.evalOrigin=n,T.evalLine=A,T.evalColumn=p,T.evalFile=u&&u.replace(/\\/g,"/")),v&&(T.native=!0),a&&(T.function=a),C&&a!==C&&(T.method=C),T}};function lwe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function gCt(t){if(t.length===0)return[];let e=t.map(r=>pCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var dCt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),mCt=/^(.*?) \[as (.*?)\]$/;uwe.exports=IB});var pwe=_((aKt,fwe)=>{"use strict";fwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var gwe=_((lKt,hwe)=>{"use strict";var yCt=pwe(),ECt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};hwe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=yCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},ECt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var aQ=_(ru=>{"use strict";var CCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},BCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=BCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return dwe.default.createElement("ink-box",{ref:e,style:a},r)});mj.displayName="Box";mj.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=mj});var Cj=_(BB=>{"use strict";var yj=BB&&BB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BB,"__esModule",{value:!0});var vCt=yj(sn()),HC=yj(iQ()),mwe=yj($6()),Ej=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=HC.default.dim(I)),t&&(I=mwe.default(I,t,"foreground")),e&&(I=mwe.default(I,e,"background")),o&&(I=HC.default.bold(I)),a&&(I=HC.default.italic(I)),n&&(I=HC.default.underline(I)),u&&(I=HC.default.strikethrough(I)),A&&(I=HC.default.inverse(I)),I);return vCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};Ej.displayName="Text";Ej.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};BB.default=Ej});var wwe=_(nu=>{"use strict";var DCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),PCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),SCt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return PCt(e,t),e},vB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var ywe=SCt(Be("fs")),fs=vB(sn()),Ewe=vB(Awe()),xCt=vB(gwe()),Xf=vB(aQ()),hA=vB(Cj()),Cwe=new Ewe.default({cwd:process.cwd(),internals:Ewe.default.nodeInternals()}),bCt=({error:t})=>{let e=t.stack?t.stack.split(` -`).slice(1):void 0,r=e?Cwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&ywe.existsSync(r.file)){let n=ywe.readFileSync(r.file,"utf8");if(o=xCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Xf.default,{flexDirection:"column",padding:1},fs.default.createElement(Xf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Xf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Xf.default,{key:n},fs.default.createElement(Xf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` -`).slice(1).map(n=>{let u=Cwe.parseLine(n);return u?fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=bCt});var Bwe=_(iu=>{"use strict";var kCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),QCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),FCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&kCt(e,t,r);return QCt(e,t),e},cm=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var lm=FCt(sn()),Iwe=cm(m6()),TCt=cm(cj()),RCt=cm(Aj()),NCt=cm(pj()),LCt=cm(gj()),MCt=cm(oQ()),OCt=cm(wwe()),UCt=" ",_Ct="\x1B[Z",HCt="\x1B",lQ=class extends lm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===HCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===UCt&&this.focusNext(),e===_Ct&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return lm.default.createElement(TCt.default.Provider,{value:{exit:this.handleExit}},lm.default.createElement(RCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},lm.default.createElement(NCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},lm.default.createElement(LCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},lm.default.createElement(MCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?lm.default.createElement(OCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Iwe.default.hide(this.props.stdout)}componentWillUnmount(){Iwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=lQ;lQ.displayName="InternalApp"});var Pwe=_(su=>{"use strict";var jCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),qCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),GCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&jCt(e,t,r);return qCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var YCt=ou(sn()),vwe=uO(),WCt=ou(AEe()),VCt=ou(f6()),KCt=ou(mEe()),JCt=ou(EEe()),wj=ou(fCe()),zCt=ou(zCe()),XCt=ou(d6()),ZCt=ou(ewe()),$Ct=GCt(W6()),ewt=ou(aj()),twt=ou(Bwe()),jC=process.env.CI==="false"?!1:KCt.default,Dwe=()=>{},Ij=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=zCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` -`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(VCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},JCt.default(this),this.options=e,this.rootNode=$Ct.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:vwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=WCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:vwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=wj.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=XCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=YCt.default.createElement(twt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);wj.default.updateContainer(r,this.container,null,Dwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,wj.default.updateContainer(null,this.container,null,Dwe),ewt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=ZCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Ij});var xwe=_(DB=>{"use strict";var Swe=DB&&DB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DB,"__esModule",{value:!0});var rwt=Swe(Pwe()),cQ=Swe(aj()),nwt=Be("stream"),iwt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},swt(e)),o=owt(r.stdout,()=>new rwt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>cQ.default.delete(r.stdout),clear:o.clear}};DB.default=iwt;var swt=(t={})=>t instanceof nwt.Stream?{stdout:t,stdin:process.stdin}:t,owt=(t,e)=>{let r;return cQ.default.has(t)?r=cQ.default.get(t):(r=e(),cQ.default.set(t,r)),r}});var kwe=_(Zf=>{"use strict";var awt=Zf&&Zf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),lwt=Zf&&Zf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),cwt=Zf&&Zf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&awt(e,t,r);return lwt(e,t),e};Object.defineProperty(Zf,"__esModule",{value:!0});var PB=cwt(sn()),bwe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};bwe.displayName="Static";Zf.default=bwe});var Fwe=_(SB=>{"use strict";var uwt=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var Awt=uwt(sn()),Qwe=({children:t,transform:e})=>t==null?null:Awt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);Qwe.displayName="Transform";SB.default=Qwe});var Rwe=_(xB=>{"use strict";var fwt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var pwt=fwt(sn()),Twe=({count:t=1})=>pwt.default.createElement("ink-text",null,` -`.repeat(t));Twe.displayName="Newline";xB.default=Twe});var Mwe=_(bB=>{"use strict";var Nwe=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var hwt=Nwe(sn()),gwt=Nwe(aQ()),Lwe=()=>hwt.default.createElement(gwt.default,{flexGrow:1});Lwe.displayName="Spacer";bB.default=Lwe});var uQ=_(kB=>{"use strict";var dwt=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var mwt=sn(),ywt=dwt(Aj()),Ewt=()=>mwt.useContext(ywt.default);kB.default=Ewt});var Uwe=_(QB=>{"use strict";var Cwt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var Owe=sn(),wwt=Cwt(uQ()),Iwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=wwt.default();Owe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Owe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};QB.default=Iwt});var _we=_(FB=>{"use strict";var Bwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var vwt=sn(),Dwt=Bwt(cj()),Pwt=()=>vwt.useContext(Dwt.default);FB.default=Pwt});var Hwe=_(TB=>{"use strict";var Swt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var xwt=sn(),bwt=Swt(pj()),kwt=()=>xwt.useContext(bwt.default);TB.default=kwt});var jwe=_(RB=>{"use strict";var Qwt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Fwt=sn(),Twt=Qwt(gj()),Rwt=()=>Fwt.useContext(Twt.default);RB.default=Rwt});var Gwe=_(LB=>{"use strict";var qwe=LB&&LB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LB,"__esModule",{value:!0});var NB=sn(),Nwt=qwe(oQ()),Lwt=qwe(uQ()),Mwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Lwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=NB.useContext(Nwt.default),h=NB.useMemo(()=>Math.random().toString().slice(2,7),[]);return NB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),NB.useEffect(()=>{t?A(h):p(h)},[t,h]),NB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};LB.default=Mwt});var Ywe=_(MB=>{"use strict";var Owt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Uwt=sn(),_wt=Owt(oQ()),Hwt=()=>{let t=Uwt.useContext(_wt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Hwt});var Wwe=_(Bj=>{"use strict";Object.defineProperty(Bj,"__esModule",{value:!0});Bj.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var jwt=xwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return jwt.default}});var qwt=aQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return qwt.default}});var Gwt=Cj();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=kwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=Fwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Wwt.default}});var Vwt=Rwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return Vwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return Kwt.default}});var Jwt=Uwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Jwt.default}});var zwt=_we();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return zwt.default}});var Xwt=uQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Xwt.default}});var Zwt=Hwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Zwt.default}});var $wt=jwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return $wt.default}});var eIt=Gwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return eIt.default}});var tIt=Ywe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return tIt.default}});var rIt=Wwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return rIt.default}})});var Dj={};Kt(Dj,{Gem:()=>vj});var Vwe,um,vj,AQ=Et(()=>{Vwe=$e(ic()),um=$e(sn()),vj=(0,um.memo)(({active:t})=>{let e=(0,um.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,um.useMemo)(()=>t?"green":"yellow",[t]);return um.default.createElement(Vwe.Text,{color:r},e)})});var Jwe={};Kt(Jwe,{useKeypress:()=>Am});function Am({active:t},e,r){let{stdin:o}=(0,Kwe.useStdin)(),a=(0,fQ.useCallback)((n,u)=>e(n,u),r);(0,fQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Kwe,fQ,OB=Et(()=>{Kwe=$e(ic()),fQ=$e(sn())});var Xwe={};Kt(Xwe,{FocusRequest:()=>zwe,useFocusRequest:()=>Pj});var zwe,Pj,Sj=Et(()=>{OB();zwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(zwe||{}),Pj=function({active:t},e,r){Am({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Zwe={};Kt(Zwe,{useListInput:()=>UB});var UB,pQ=Et(()=>{OB();UB=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){Am({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var hQ={};Kt(hQ,{ScrollableItems:()=>nIt});var E0,La,nIt,gQ=Et(()=>{E0=$e(ic()),La=$e(sn());Sj();pQ();nIt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),Pj({active:t&&!!n},L=>{n?.(L)},[n]),UB(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let b=v-r,C=v+r;C>p.length&&(b-=C-p.length,C=p.length),b<0&&(C+=-b,b=0),C>=p.length&&(C=p.length-1);let T=[];for(let L=b;L<=C;++L){let U=p[L],J=t&&U===E;T.push(La.default.createElement(E0.Box,{key:U,height:o},La.default.createElement(E0.Box,{marginLeft:1,marginRight:1},La.default.createElement(E0.Text,null,J?La.default.createElement(E0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(E0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(E0.Box,{flexDirection:"column",width:"100%"},T)}});var $we,$f,eIe,xj,tIe,bj=Et(()=>{$we=$e(ic()),$f=$e(sn()),eIe=Be("readline"),xj=$f.default.createContext(null),tIe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,$we.useStdin)();(0,$f.useEffect)(()=>{r&&r(!0),e&&(0,eIe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,$f.useState)(new Map),n=(0,$f.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return $f.default.createElement(xj.Provider,{value:n,children:t})}});var kj={};Kt(kj,{useMinistore:()=>iIt});function iIt(t,e){let r=(0,dQ.useContext)(xj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,dQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var dQ,Qj=Et(()=>{dQ=$e(sn());bj()});var yQ={};Kt(yQ,{renderForm:()=>sIt});async function sIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,mQ.useApp)();Am({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,mQ.render)(Fj.default.createElement(tIe,null,Fj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var mQ,Fj,EQ=Et(()=>{mQ=$e(ic()),Fj=$e(sn());bj();OB()});var sIe=_(_B=>{"use strict";Object.defineProperty(_B,"__esModule",{value:!0});_B.UncontrolledTextInput=void 0;var nIe=sn(),Tj=sn(),rIe=ic(),fm=iQ(),iIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Tj.useState({cursorOffset:(t||"").length,cursorWidth:0});Tj.useEffect(()=>{E(T=>{if(!r||!n)return T;let L=t||"";return T.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:T})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,b=v,C=e?fm.grey(e):void 0;if(n&&r){C=e.length>0?fm.inverse(e[0])+fm.grey(e.slice(1)):fm.inverse(" "),b=v.length>0?"":fm.inverse(" ");let T=0;for(let L of v)T>=p-I&&T<=p?b+=fm.inverse(L):b+=L,T++;v.length>0&&p===v.length&&(b+=fm.inverse(" "))}return rIe.useInput((T,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&T==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+T+t.slice(p,t.length),U+=T.length,T.length>1&&(te=T.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),nIe.createElement(rIe.Text,null,e?v.length>0?b:C:b)};_B.default=iIe;_B.UncontrolledTextInput=t=>{let[e,r]=Tj.useState("");return nIe.createElement(iIe,Object.assign({},t,{value:e,onChange:r}))}});var lIe={};Kt(lIe,{Pad:()=>Rj});var oIe,aIe,Rj,Nj=Et(()=>{oIe=$e(ic()),aIe=$e(sn()),Rj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return aIe.default.createElement(oIe.Text,{dimColor:!e},r)}});var cIe={};Kt(cIe,{ItemOptions:()=>oIt});var jB,w0,oIt,uIe=Et(()=>{jB=$e(ic()),w0=$e(sn());pQ();AQ();Nj();oIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return UB(o,u,{active:t,minus:"left",plus:"right",set:a}),w0.default.createElement(w0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,I-v.length-2);return p?w0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},w0.default.createElement(jB.Text,{wrap:"truncate"},w0.default.createElement(vj,{active:E})," ",p),e?w0.default.createElement(Rj,{active:t,length:b}):null):w0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var PIe=_((zJt,DIe)=>{var Gj;DIe.exports=()=>(typeof Gj>"u"&&(Gj=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Gj)});var VIe=_((wzt,WIe)=>{var $j=Symbol("arg flag"),Ma=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Ma.prototype)}};function iv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Ma("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Ma("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Ma(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Ma(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,b=[])=>(b.push(E(I,v,b[b.length-1])),b),h=E===Boolean||E[$j]===!0}else if(typeof p=="function")h=p===Boolean||p[$j]===!0;else throw new Ma(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Ma(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=b===T?"":` (alias for ${T})`;throw new Ma(`option requires argument: ${b}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[T]=L(e[A+1],T,a[T]),++A}else a[T]=L(C,T,a[T])}}else a._.push(h)}return a}iv.flag=t=>(t[$j]=!0,t);iv.COUNT=iv.flag((t,e,r)=>(r||0)+1);iv.ArgError=Ma;WIe.exports=iv});var t1e=_((Kzt,e1e)=>{var nq;e1e.exports=()=>(typeof nq>"u"&&(nq=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nq)});var o1e=_((cq,uq)=>{(function(t){cq&&typeof cq=="object"&&typeof uq<"u"?uq.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var u1e=_((WXt,c1e)=>{"use strict";Aq.ifExists=n1t;var GC=Be("util"),sc=Be("path"),a1e=o1e(),e1t=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,t1t={createPwshFile:!0,createCmdFile:a1e(),fs:Be("fs")},r1t=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function l1e(t){let e={...t1t,...t},r=e.fs;return e.fs_={chmod:r.chmod?GC.promisify(r.chmod):async()=>{},mkdir:GC.promisify(r.mkdir),readFile:GC.promisify(r.readFile),stat:GC.promisify(r.stat),unlink:GC.promisify(r.unlink),writeFile:GC.promisify(r.writeFile)},e}async function Aq(t,e,r){let o=l1e(r);await o.fs_.stat(t),await s1t(t,e,o)}function n1t(t,e,r){return Aq(t,e,r).catch(()=>{})}function i1t(t,e){return e.fs_.unlink(t).catch(()=>{})}async function s1t(t,e,r){let o=await u1t(t,r);return await o1t(e,r),a1t(t,e,o,r)}function o1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function a1t(t,e,r,o){let a=l1e(o),n=[{generator:p1t,extension:""}];return a.createCmdFile&&n.push({generator:f1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:h1t,extension:".ps1"}),Promise.all(n.map(u=>A1t(t,e+u.extension,r,u.generator,a)))}function l1t(t,e){return i1t(t,e)}function c1t(t,e){return g1t(t,e)}async function u1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(e1t);if(!a){let n=sc.extname(t).toLowerCase();return{program:r1t.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function A1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await l1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),c1t(e,a)}function f1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=fq(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r -`:"";return u?I+=`@IF EXIST ${u} (\r - ${u} ${p} ${a} ${E}%*\r -) ELSE (\r - @SETLOCAL\r - @SET PATHEXT=%PATHEXT:;.JS;=;%\r - ${A} ${p} ${a} ${E}%*\r -)\r -`:I+=`@${A} ${p} ${a} ${E}%*\r -`,I}function p1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=fq(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") - -case \`uname\` in - *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; -esac - -`,I=r.nodePath?`export NODE_PATH="${p}" -`:"";return n?E+=`${I}if [ -x ${n} ]; then - exec ${n} ${A} ${o} ${h}"$@" -else - exec ${a} ${A} ${o} ${h}"$@" -fi -`:E+=`${I}${a} ${A} ${o} ${h}"$@" -exit $? -`,E}function h1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=fq(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",b=`#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -${r.nodePath?`$env_node_path=$env:NODE_PATH -$env:NODE_PATH="${E}" -`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -}`;return r.nodePath&&(b+=` else { - $env:NODE_PATH="${I}" -}`),u?b+=` -$ret=0 -if (Test-Path ${u}) { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${u} ${p} ${o} ${v}$args - } else { - & ${u} ${p} ${o} ${v}$args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${o} ${v}$args - } else { - & ${n} ${p} ${o} ${v}$args - } - $ret=$LASTEXITCODE -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $ret -`:b+=` -# Support pipeline input -if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${o} ${v}$args -} else { - & ${n} ${p} ${o} ${v}$args -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $LASTEXITCODE -`,b}function g1t(t,e){return e.fs_.chmod(t,493)}function fq(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}c1e.exports=Aq});var Sq=_((h$t,F1e)=>{F1e.exports=Be("stream")});var L1e=_((g$t,N1e)=>{"use strict";function T1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function U1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return QQ.alloc(0);for(var o=QQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)W1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=QQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:Y1t,value:function(r,o){return xq(this,U1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var kq=_((d$t,O1e)=>{"use strict";function V1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(bq,this,t)):process.nextTick(bq,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(FQ,r):(r._writableState.errorEmitted=!0,process.nextTick(M1e,r,n)):process.nextTick(M1e,r,n):e?(process.nextTick(FQ,r),e(n)):process.nextTick(FQ,r)}),this)}function M1e(t,e){bq(t,e),FQ(t)}function FQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function K1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function bq(t,e){t.emit("error",e)}function J1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}O1e.exports={destroy:V1t,undestroy:K1t,errorOrDestroy:J1t}});var k0=_((m$t,H1e)=>{"use strict";var _1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,_1e[t]=a}function U1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function z1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function X1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function Z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&z1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(X1t(t," argument"))a=`The ${t} ${o} ${U1e(e,"type")}`;else{let n=Z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${U1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");H1e.exports.codes=_1e});var Qq=_((y$t,j1e)=>{"use strict";var $1t=k0().codes.ERR_INVALID_OPT_VALUE;function e2t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function t2t(t,e,r,o){var a=e2t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new $1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}j1e.exports={getHighWaterMark:t2t}});var q1e=_((E$t,Fq)=>{typeof Object.create=="function"?Fq.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:Fq.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var Q0=_((C$t,Rq)=>{try{if(Tq=Be("util"),typeof Tq.inherits!="function")throw"";Rq.exports=Tq.inherits}catch{Rq.exports=q1e()}var Tq});var Y1e=_((w$t,G1e)=>{G1e.exports=Be("util").deprecate});var Mq=_((I$t,X1e)=>{"use strict";X1e.exports=Ti;function V1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){x2t(e,t)}}var JC;Ti.WritableState=mv;var r2t={deprecate:Y1e()},K1e=Sq(),RQ=Be("buffer").Buffer,n2t=global.Uint8Array||function(){};function i2t(t){return RQ.from(t)}function s2t(t){return RQ.isBuffer(t)||t instanceof n2t}var Lq=kq(),o2t=Qq(),a2t=o2t.getHighWaterMark,F0=k0().codes,l2t=F0.ERR_INVALID_ARG_TYPE,c2t=F0.ERR_METHOD_NOT_IMPLEMENTED,u2t=F0.ERR_MULTIPLE_CALLBACK,A2t=F0.ERR_STREAM_CANNOT_PIPE,f2t=F0.ERR_STREAM_DESTROYED,p2t=F0.ERR_STREAM_NULL_VALUES,h2t=F0.ERR_STREAM_WRITE_AFTER_END,g2t=F0.ERR_UNKNOWN_ENCODING,zC=Lq.errorOrDestroy;Q0()(Ti,K1e);function d2t(){}function mv(t,e,r){JC=JC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof JC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=a2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){B2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new V1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:r2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var TQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(TQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ti,Symbol.hasInstance,{value:function(e){return TQ.call(this,e)?!0:this!==Ti?!1:e&&e._writableState instanceof mv}})):TQ=function(e){return e instanceof this};function Ti(t){JC=JC||Em();var e=this instanceof JC;if(!e&&!TQ.call(Ti,this))return new Ti(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),K1e.call(this)}Ti.prototype.pipe=function(){zC(this,new A2t)};function m2t(t,e){var r=new h2t;zC(t,r),process.nextTick(e,r)}function y2t(t,e,r,o){var a;return r===null?a=new p2t:typeof r!="string"&&!e.objectMode&&(a=new l2t("chunk",["string","Buffer"],r)),a?(zC(t,a),process.nextTick(o,a),!1):!0}Ti.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&s2t(t);return n&&!RQ.isBuffer(t)&&(t=i2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=d2t),o.ending?m2t(this,r):(n||y2t(this,o,t,r))&&(o.pendingcb++,a=C2t(this,o,n,t,e,r)),a};Ti.prototype.cork=function(){this._writableState.corked++};Ti.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&J1e(this,t))};Ti.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new g2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ti.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function E2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=RQ.from(e,r)),e}Object.defineProperty(Ti.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function C2t(t,e,r,o,a,n){if(!r){var u=E2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var b2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};$1e.exports=yA;var Z1e=_q(),Uq=Mq();Q0()(yA,Z1e);for(Oq=b2t(Uq.prototype),NQ=0;NQ{var MQ=Be("buffer"),np=MQ.Buffer;function e2e(t,e){for(var r in t)e[r]=t[r]}np.from&&np.alloc&&np.allocUnsafe&&np.allocUnsafeSlow?t2e.exports=MQ:(e2e(MQ,Hq),Hq.Buffer=XC);function XC(t,e,r){return np(t,e,r)}e2e(np,XC);XC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return np(t,e,r)};XC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=np(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};XC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return np(t)};XC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return MQ.SlowBuffer(t)}});var Gq=_(i2e=>{"use strict";var qq=r2e().Buffer,n2e=qq.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function F2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function T2t(t){var e=F2t(t);if(typeof e!="string"&&(qq.isEncoding===n2e||!n2e(t)))throw new Error("Unknown encoding: "+t);return e||t}i2e.StringDecoder=yv;function yv(t){this.encoding=T2t(t);var e;switch(this.encoding){case"utf16le":this.text=U2t,this.end=_2t,e=4;break;case"utf8":this.fillLast=L2t,e=4;break;case"base64":this.text=H2t,this.end=j2t,e=3;break;default:this.write=q2t,this.end=G2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=qq.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function R2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function N2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function L2t(t){var e=this.lastTotal-this.lastNeed,r=N2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function M2t(t,e){var r=R2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function O2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function U2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function _2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function H2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function j2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function q2t(t){return t.toString(this.encoding)}function G2t(t){return t&&t.length?this.write(t):""}});var OQ=_((D$t,a2e)=>{"use strict";var s2e=k0().codes.ERR_STREAM_PREMATURE_CLOSE;function Y2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var UQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var K2t=OQ(),R0=Symbol("lastResolve"),Cm=Symbol("lastReject"),Ev=Symbol("error"),_Q=Symbol("ended"),wm=Symbol("lastPromise"),Yq=Symbol("handlePromise"),Im=Symbol("stream");function N0(t,e){return{value:t,done:e}}function J2t(t){var e=t[R0];if(e!==null){var r=t[Im].read();r!==null&&(t[wm]=null,t[R0]=null,t[Cm]=null,e(N0(r,!1)))}}function z2t(t){process.nextTick(J2t,t)}function X2t(t,e){return function(r,o){t.then(function(){if(e[_Q]){r(N0(void 0,!0));return}e[Yq](r,o)},o)}}var Z2t=Object.getPrototypeOf(function(){}),$2t=Object.setPrototypeOf((UQ={get stream(){return this[Im]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[_Q])return Promise.resolve(N0(void 0,!0));if(this[Im].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(N0(void 0,!0))})});var o=this[wm],a;if(o)a=new Promise(X2t(o,this));else{var n=this[Im].read();if(n!==null)return Promise.resolve(N0(n,!1));a=new Promise(this[Yq])}return this[wm]=a,a}},T0(UQ,Symbol.asyncIterator,function(){return this}),T0(UQ,"return",function(){var e=this;return new Promise(function(r,o){e[Im].destroy(null,function(a){if(a){o(a);return}r(N0(void 0,!0))})})}),UQ),Z2t),eBt=function(e){var r,o=Object.create($2t,(r={},T0(r,Im,{value:e,writable:!0}),T0(r,R0,{value:null,writable:!0}),T0(r,Cm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,_Q,{value:e._readableState.endEmitted,writable:!0}),T0(r,Yq,{value:function(n,u){var A=o[Im].read();A?(o[wm]=null,o[R0]=null,o[Cm]=null,n(N0(A,!1))):(o[R0]=n,o[Cm]=u)},writable:!0}),r));return o[wm]=null,K2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[Cm];n!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,n(a)),o[Ev]=a;return}var u=o[R0];u!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,u(N0(void 0,!0))),o[_Q]=!0}),e.on("readable",z2t.bind(null,o)),o};l2e.exports=eBt});var p2e=_((S$t,f2e)=>{"use strict";function u2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function tBt(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){u2e(n,o,a,u,A,"next",p)}function A(p){u2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function A2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function rBt(t){for(var e=1;e{"use strict";B2e.exports=mn;var ZC;mn.ReadableState=m2e;var x$t=Be("events").EventEmitter,d2e=function(e,r){return e.listeners(r).length},wv=Sq(),HQ=Be("buffer").Buffer,oBt=global.Uint8Array||function(){};function aBt(t){return HQ.from(t)}function lBt(t){return HQ.isBuffer(t)||t instanceof oBt}var Wq=Be("util"),$r;Wq&&Wq.debuglog?$r=Wq.debuglog("stream"):$r=function(){};var cBt=L1e(),$q=kq(),uBt=Qq(),ABt=uBt.getHighWaterMark,jQ=k0().codes,fBt=jQ.ERR_INVALID_ARG_TYPE,pBt=jQ.ERR_STREAM_PUSH_AFTER_EOF,hBt=jQ.ERR_METHOD_NOT_IMPLEMENTED,gBt=jQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,$C,Vq,Kq;Q0()(mn,wv);var Cv=$q.errorOrDestroy,Jq=["error","close","destroy","pause","resume"];function dBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function m2e(t,e,r){ZC=ZC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof ZC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=ABt(this,t,"readableHighWaterMark",r),this.buffer=new cBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&($C||($C=Gq().StringDecoder),this.decoder=new $C(t.encoding),this.encoding=t.encoding)}function mn(t){if(ZC=ZC||Em(),!(this instanceof mn))return new mn(t);var e=this instanceof ZC;this._readableState=new m2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=$q.destroy;mn.prototype._undestroy=$q.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=HQ.from(t,e),e=""),o=!0),y2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return y2e(this,t,null,!0,!1)};function y2e(t,e,r,o,a){$r("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,EBt(t,n);else{var u;if(a||(u=mBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==HQ.prototype&&(e=aBt(e)),o)n.endEmitted?Cv(t,new gBt):zq(t,n,e,!0);else if(n.ended)Cv(t,new pBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?zq(t,n,e,!1):Zq(t,n)):zq(t,n,e,!1)}else o||(n.reading=!1,Zq(t,n))}return!n.ended&&(n.length=h2e?t=h2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function g2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=yBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){$r("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return $r("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Xq(this):qQ(this),null;if(t=g2e(t,e),t===0&&e.ended)return e.length===0&&Xq(this),null;var o=e.needReadable;$r("need readable",o),(e.length===0||e.length-t0?a=w2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Xq(this)),a!==null&&this.emit("data",a),a};function EBt(t,e){if($r("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?qQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,E2e(t)))}}function qQ(t){var e=t._readableState;$r("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||($r("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(E2e,t))}function E2e(t){var e=t._readableState;$r("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,eG(t)}function Zq(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(CBt,t,e))}function CBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&I2e(o.pipes,t)!==-1)&&!h&&($r("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){$r("onerror",L),T(),t.removeListener("error",v),d2e(t,"error")===0&&Cv(t,L)}dBt(t,"error",v);function b(){t.removeListener("finish",C),T()}t.once("close",b);function C(){$r("onfinish"),t.removeListener("close",b),T()}t.once("finish",C);function T(){$r("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||($r("pipe resume"),r.resume()),t};function wBt(t){return function(){var r=t._readableState;$r("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&d2e(t,"data")&&(r.flowing=!0,eG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,$r("on readable",o.length,o.reading),o.length?qQ(this):o.reading||process.nextTick(IBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(C2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(C2e,this),e};function C2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function IBt(t){$r("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||($r("resume"),t.flowing=!t.readableListening,BBt(this,t)),t.paused=!1,this};function BBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(vBt,t,e))}function vBt(t,e){$r("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),eG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return $r("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&($r("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function eG(t){var e=t._readableState;for($r("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if($r("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if($r("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Xq(t){var e=t._readableState;$r("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(DBt,e,t))}function DBt(t,e){if($r("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Kq===void 0&&(Kq=p2e()),Kq(mn,t,e)});function I2e(t,e){for(var r=0,o=t.length;r{"use strict";D2e.exports=ip;var GQ=k0().codes,PBt=GQ.ERR_METHOD_NOT_IMPLEMENTED,SBt=GQ.ERR_MULTIPLE_CALLBACK,xBt=GQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,bBt=GQ.ERR_TRANSFORM_WITH_LENGTH_0,YQ=Em();Q0()(ip,YQ);function kBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new SBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";S2e.exports=Iv;var P2e=tG();Q0()(Iv,P2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);P2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var T2e=_((F$t,F2e)=>{"use strict";var rG;function FBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Q2e=k0().codes,TBt=Q2e.ERR_MISSING_ARGS,RBt=Q2e.ERR_STREAM_DESTROYED;function b2e(t){if(t)throw t}function NBt(t){return t.setHeader&&typeof t.abort=="function"}function LBt(t,e,r,o){o=FBt(o);var a=!1;t.on("close",function(){a=!0}),rG===void 0&&(rG=OQ()),rG(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,NBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new RBt("pipe"))}}}function k2e(t){t()}function MBt(t,e){return t.pipe(e)}function OBt(t){return!t.length||typeof t[t.length-1]!="function"?b2e:t.pop()}function UBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return LBt(u,p,h,function(E){a||(a=E),E&&n.forEach(k2e),!p&&(n.forEach(k2e),o(a))})});return e.reduce(MBt)}F2e.exports=UBt});var ew=_((lc,vv)=>{var Bv=Be("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=_q(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Mq(),lc.Duplex=Em(),lc.Transform=tG(),lc.PassThrough=x2e(),lc.finished=OQ(),lc.pipeline=T2e())});var L2e=_((T$t,N2e)=>{"use strict";var{Buffer:lu}=Be("buffer"),R2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,R2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var nG=ew().Duplex,_Bt=Q0(),Dv=L2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),nG.call(this)}_Bt(Uo,nG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){nG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;WQ.exports=Uo;WQ.exports.BufferListStream=Uo;WQ.exports.BufferList=Dv});var oG=_(rw=>{var HBt=Buffer.alloc,jBt="0000000000000000000",qBt="7777777777777777777",O2e="0".charCodeAt(0),U2e=Buffer.from("ustar\0","binary"),GBt=Buffer.from("00","binary"),YBt=Buffer.from("ustar ","binary"),WBt=Buffer.from(" \0","binary"),VBt=parseInt("7777",8),Pv=257,sG=263,KBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},JBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},zBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},_2e=function(t,e,r,o){for(;re?qBt.slice(0,e)+" ":jBt.slice(0,e-t.length)+t+" "};function XBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};rw.decodeLongPath=function(t,e){return tw(t,0,t.length,e)};rw.encodePax=function(t){var e="";t.name&&(e+=iG(" path="+t.name+` -`)),t.linkname&&(e+=iG(" linkpath="+t.linkname+` -`));var r=t.pax;if(r)for(var o in r)e+=iG(" "+o+"="+r[o]+` -`);return Buffer.from(e)};rw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(L0(t.mode&VBt,6),100),e.write(L0(t.uid,6),108),e.write(L0(t.gid,6),116),e.write(L0(t.size,11),124),e.write(L0(t.mtime.getTime()/1e3|0,11),136),e[156]=O2e+zBt(t.type),t.linkname&&e.write(t.linkname,157),U2e.copy(e,Pv),GBt.copy(e,sG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(L0(t.devmajor||0,6),329),e.write(L0(t.devminor||0,6),337),o&&e.write(o,345),e.write(L0(H2e(e),6),148),e)};rw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-O2e,a=tw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=JBt(o),I=t[157]===0?null:tw(t,157,100,e),v=tw(t,265,32),b=tw(t,297,32),C=M0(t,329,8),T=M0(t,337,8),L=H2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(U2e.compare(t,Pv,Pv+6)===0)t[345]&&(a=tw(t,345,155,e)+"/"+a);else if(!(YBt.compare(t,Pv,Pv+6)===0&&WBt.compare(t,sG,sG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:b,devmajor:C,devminor:T}}});var K2e=_((L$t,V2e)=>{var q2e=Be("util"),ZBt=M2e(),Sv=oG(),G2e=ew().Writable,Y2e=ew().PassThrough,W2e=function(){},j2e=function(t){return t&=511,t&&512-t},$Bt=function(t,e){var r=new VQ(t,e);return r.end(),r},evt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},VQ=function(t,e){this._parent=t,this.offset=e,Y2e.call(this,{autoDestroy:!1})};q2e.inherits(VQ,Y2e);VQ.prototype.destroy=function(t){this._parent.destroy(t)};var sp=function(t){if(!(this instanceof sp))return new sp(t);G2e.call(this,t),t=t||{},this._offset=0,this._buffer=ZBt(),this._missing=0,this._partial=!1,this._onparse=W2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=j2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(j2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Sv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Sv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,b;try{b=e._header=Sv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!b){e._parse(512,I),o();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),o();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,E),o();return}if(b.type==="pax-global-header"){e._parse(b.size,A),o();return}if(b.type==="pax-header"){e._parse(b.size,p),o();return}if(e._gnuLongPath&&(b.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(b.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=b=evt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,I),e.emit("entry",b,$Bt(e,v),a);return}e._stream=new VQ(e,v),e.emit("entry",b,e._stream,a),e._parse(b.size,n),o()};this._onheader=I,this._parse(512,I)};q2e.inherits(sp,G2e);sp.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};sp.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};sp.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=W2e,this._overflow?this._write(this._overflow,void 0,t):t()}};sp.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};sp.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};V2e.exports=sp});var z2e=_((M$t,J2e)=>{J2e.exports=Be("fs").constants||Be("constants")});var tBe=_((O$t,eBe)=>{var nw=z2e(),X2e=OO(),JQ=Q0(),tvt=Buffer.alloc,Z2e=ew().Readable,iw=ew().Writable,rvt=Be("string_decoder").StringDecoder,KQ=oG(),nvt=parseInt("755",8),ivt=parseInt("644",8),$2e=tvt(1024),lG=function(){},aG=function(t,e){e&=511,e&&t.push($2e.slice(0,512-e))};function svt(t){switch(t&nw.S_IFMT){case nw.S_IFBLK:return"block-device";case nw.S_IFCHR:return"character-device";case nw.S_IFDIR:return"directory";case nw.S_IFIFO:return"fifo";case nw.S_IFLNK:return"symlink"}return"file"}var zQ=function(t){iw.call(this),this.written=0,this._to=t,this._destroyed=!1};JQ(zQ,iw);zQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};zQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var XQ=function(){iw.call(this),this.linkname="",this._decoder=new rvt("utf-8"),this._destroyed=!1};JQ(XQ,iw);XQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};XQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var xv=function(){iw.call(this),this._destroyed=!1};JQ(xv,iw);xv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};xv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var EA=function(t){if(!(this instanceof EA))return new EA(t);Z2e.call(this,t),this._drain=lG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};JQ(EA,Z2e);EA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=lG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=svt(t.mode)),t.mode||(t.mode=t.type==="directory"?nvt:ivt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return aG(o,t.size),a?process.nextTick(r):this._drain=r,new xv}if(t.type==="symlink"&&!t.linkname){var n=new XQ;return X2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new xv;var u=new zQ(this);return this._stream=u,X2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));aG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};EA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push($2e),this.push(null))};EA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};EA.prototype._encode=function(t){if(!t.pax){var e=KQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};EA.prototype._encodePax=function(t){var e=KQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(KQ.encode(r)),this.push(e),aG(this,e.length),r.size=t.size,r.type=t.type,this.push(KQ.encode(r))};EA.prototype._read=function(t){var e=this._drain;this._drain=lG,e()};eBe.exports=EA});var rBe=_(cG=>{cG.extract=K2e();cG.pack=tBe()});var hBe=_((ier,pBe)=>{"use strict";var Bm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=ABe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return gG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):Cvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Bm(this.__specs,this.__opts,ABe(this.__providers).concat(e)),fBe)}};try{let t=Be("util");Bm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function yvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function gG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))yvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=uBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=uBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function uBe(t,e){let r;return e.__isFiggyPudding?r=gG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var fBe={has(t,e){return e in t.__specs&&gG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Bm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};pBe.exports=Evt;function Evt(t,e){function r(...o){return new Proxy(new Bm(t,e,o),fBe)}return r}function ABe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function Cvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var mBe=_((ser,IA)=>{"use strict";var kv=Be("crypto"),wvt=hBe(),Ivt=Be("stream").Transform,gBe=["sha256","sha384","sha512"],Bvt=/^[a-z0-9+/]+(?:=?=?)$/i,vvt=/^([^-]+)-([^?]+)([?\S*]*)$/,Dvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,Pvt=/^[\x21-\x7E]+$/,ia=wvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Rvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),U0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Dvt:vvt);if(!a||o&&!gBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(gBe.some(o=>o===this.algorithm)&&this.digest.match(Bvt)&&(this.options||[]).every(o=>o.match(Pvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},vm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>U0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:bv(e,r);return wA(`${this.toString(r)} ${o}`,r)}hexDigest(){return wA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=wA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};IA.exports.parse=wA;function wA(t,e){if(e=ia(e),typeof t=="string")return dG(t,e);if(t.algorithm&&t.digest){let r=new vm;return r[t.algorithm]=[t],dG(bv(r,e),e)}else return dG(bv(t,e),e)}function dG(t,e){return e.single?new U0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new U0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new vm)}IA.exports.stringify=bv;function bv(t,e){return e=ia(e),t.algorithm&&t.digest?U0.prototype.toString.call(t,e):typeof t=="string"?bv(wA(t,e),e):vm.prototype.toString.call(t,e)}IA.exports.fromHex=Svt;function Svt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return wA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}IA.exports.fromData=xvt;function xvt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new U0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new vm)}IA.exports.fromStream=bvt;function bvt(t,e){e=ia(e);let r=e.Promise||Promise,o=mG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}IA.exports.checkData=kvt;function kvt(t,e,r){if(r=ia(r),e=wA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=wA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. - Wanted: ${r.size} - Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}IA.exports.checkStream=Qvt;function Qvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=mG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}IA.exports.integrityStream=mG;function mG(t){t=ia(t);let e=t.integrity&&wA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Ivt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=wA(u.map((v,b)=>`${n[b]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. - Wanted: ${t.size} - Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}IA.exports.create=Fvt;function Fvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new U0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new vm)}}}var Tvt=new Set(kv.getHashes()),dBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Tvt.has(t));function Rvt(t,e){return dBe.indexOf(t.toLowerCase())>=dBe.indexOf(e.toLowerCase())?t:e}});var VBe=_((lir,WBe)=>{var TDt=uL();function RDt(t){return TDt(t)?void 0:t}WBe.exports=RDt});var JBe=_((cir,KBe)=>{var NDt=jx(),LDt=Q8(),MDt=N8(),ODt=jd(),UDt=gd(),_Dt=VBe(),HDt=P_(),jDt=k8(),qDt=1,GDt=2,YDt=4,WDt=HDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=NDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),UDt(t,jDt(t),r),o&&(r=LDt(r,qDt|GDt|YDt,_Dt));for(var a=e.length;a--;)MDt(r,e[a]);return r});KBe.exports=WDt});Pt();Ye();Pt();var eve=Be("child_process"),tve=$e(ed());qt();var uC=new Map([]);var o2={};Kt(o2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>the,getDynamicLibs:()=>ehe,getPluginConfiguration:()=>fC,openWorkspace:()=>AC,pluginCommands:()=>uC,runExit:()=>sk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Pt();qt();var rr=class extends it{constructor(e,r){let o=K.relative(e,r),a=K.join(e,Mt.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Pt();nA();Nl();b1();qt();var OAt=$e(zn());Za();var ehe=()=>new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",OAt],["typanion",Ko]]);Ye();async function AC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();Pt();nA();Nl();b1();qt();var tPt=$e(zn());Za();var tH={};Kt(tH,{AddCommand:()=>bh,BinCommand:()=>kh,CacheCleanCommand:()=>Qh,ClipanionCommand:()=>Wd,ConfigCommand:()=>Nh,ConfigGetCommand:()=>Fh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Rh,DedupeCommand:()=>Lh,EntryCommand:()=>dC,ExecCommand:()=>Mh,ExplainCommand:()=>_h,ExplainPeerRequirementsCommand:()=>Oh,HelpCommand:()=>Vd,InfoCommand:()=>Hh,LinkCommand:()=>qh,NodeCommand:()=>Gh,PluginCheckCommand:()=>Yh,PluginImportCommand:()=>Kh,PluginImportSourcesCommand:()=>Jh,PluginListCommand:()=>Wh,PluginRemoveCommand:()=>zh,PluginRuntimeCommand:()=>Xh,RebuildCommand:()=>Zh,RemoveCommand:()=>$h,RunCommand:()=>e0,RunIndexCommand:()=>zd,SetResolutionCommand:()=>t0,SetVersionCommand:()=>Uh,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>r0,UpCommand:()=>Kf,VersionCommand:()=>Kd,WhyCommand:()=>n0,WorkspaceCommand:()=>o0,WorkspacesListCommand:()=>s0,YarnCommand:()=>jh,dedupeUtils:()=>gk,default:()=>Qgt,suggestUtils:()=>zc});var Tde=$e(ed());Ye();Ye();Ye();qt();var j0e=$e(A2());Za();var zc={};Kt(zc,{Modifier:()=>D8,Strategy:()=>fk,Target:()=>f2,WorkspaceModifier:()=>M0e,applyModifier:()=>ipt,extractDescriptorFromPath:()=>P8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>S8,findProjectDescriptors:()=>H0e,getModifier:()=>p2,getSuggestedDescriptors:()=>h2,makeWorkspaceDescriptor:()=>_0e,toWorkspaceModifier:()=>U0e});Ye();Ye();Pt();var v8=$e(zn()),rpt="workspace:",f2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(f2||{}),D8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(D8||{}),M0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(M0e||{}),fk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(fk||{});function p2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var npt=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match(npt);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function ipt(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return v8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function U0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function _0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${rpt}${U0e(e)}`)}async function H0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function P8(t,{cwd:e,workspace:r}){return await spt(async o=>{K.isAbsolute(t)||(t=K.relative(r.cwd,K.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await S8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),b=await Mt.find(v.prefixPath,{baseFs:v.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(b.name,t)})}async function h2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],b=[],C=async T=>{try{await T()}catch(L){b.push(L)}};for(let T of A){if(v.length>=p)break;switch(T){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await H0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=_0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await S8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:b.slice(0,p)}}async function S8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},b=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(b,{},v);if(C.length===0)return null;let T=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(T.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),v8.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let ye=typeof n=="string"?n:A.range;te=O0e(ye,{project:r})+te}let pe=W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(pe),{},v)).length!==1&&(te=le)}return W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function spt(t){return await oe.mktempPromise(async e=>{let r=Ve.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var bh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=p2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await P8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. -Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=opt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async Ae=>{let ye=await h2(J,{project:o,workspace:a,cache:n,fixed:u,target:Ae,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:ye,target:Ae}}))})).then(U=>U.flat()),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:le}}of v)if(te.filter(Ae=>Ae.descriptor!==null).length===0){let[Ae]=le;if(typeof Ae>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(Ae)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,le=U.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,j0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=a.manifest[J].get(te.identHash);(typeof ye>"u"||ye.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof ye>"u"?T.push([a,J,te,E]):L.push([a,J,ye,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,T),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` -`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};bh.paths=[["add"]],bh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function opt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var kh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} -`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};kh.paths=[["bin"]],kh.usage=nt.Usage({description:"get the path to a binary script",details:` - When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. - - When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. - `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();Pt();qt();var Qh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Qh.paths=[["cache","clean"],["cache","clear"]],Qh.usage=nt.Usage({description:"remove the shared cache files",details:` - This command will remove all the files from the cache. - `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var G0e=$e(g2()),x8=Be("util"),Fh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=je.convertMapsToIndexableObjects(u),p=a?(0,G0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} -`),h.exitCode();x8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,x8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} -`)}return h.exitCode()}};Fh.paths=[["config","get"]],Fh.usage=nt.Usage({description:"read a configuration settings",details:` - This command will print a configuration setting. - - Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. - `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Rge=$e(F8()),Nge=$e(g2()),Lge=$e(T8()),R8=Be("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ve.updateHomeConfiguration(C):C=>Ve.updateConfiguration(o(),C))(C=>{if(n){let T=(0,Rge.default)(C);return(0,Lge.default)(T,this.name,A),T}else return{...C,[a]:A}});let E=(await Ve.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=je.convertMapsToIndexableObjects(E),v=n?(0,Nge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{R8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,R8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` - This command will set a configuration setting. - - When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). - - When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. - `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Vge=$e(F8()),Kge=$e(_ge()),Jge=$e(L8()),Rh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ve.updateHomeConfiguration(h):h=>Ve.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Vge.default)(I):{...I};return(0,Jge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Rh.paths=[["config","unset"]],Rh.usage=nt.Usage({description:"unset a configuration setting",details:` - This command will unset a configuration setting. - `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();Pt();qt();var hk=Be("util"),Nh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await NE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),b=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),T={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(b[0]==="<"?de.Type.CODE:de.Type.PATH,b)}};h[I]={value:de.tuple(de.Type.CODE,I),children:T};let L=(U,J)=>{for(let[te,le]of J)if(le instanceof Map){let pe={};U[te]={children:pe},L(pe,le)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(le,p))}};C instanceof Map?L(T,C):T.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,hk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` -`),this.context.stdout.write(`${p} -`)}return u.exitCode()}};Nh.paths=[["config"]],Nh.usage=nt.Usage({description:"display the current configuration",details:` - This command prints the current active configuration settings. - `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var gk={};Kt(gk,{Strategy:()=>d2,acceptedStrategies:()=>j0t,dedupe:()=>M8});Ye();Ye();var zge=$e(Zo()),d2=(e=>(e.HIGHEST="highest",e))(d2||{}),j0t=new Set(Object.values(d2)),q0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);je.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(je.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?je.mapAndFilter.skip:[p.descriptorHash,je.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),b=Object.fromEntries(await je.allSettledSafe(Object.entries(v).map(async([te,le])=>{let pe=A.get(le.descriptorHash);if(typeof pe>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let Ae=await pe.promise;if(!Ae)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,Ae.updatedPackage]})));if(e.length&&!zge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let T=[...C].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),L=await r.getSatisfying(p,b,T,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let b=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:b})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function M8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=q0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),b=Xs.progressViaCounter(v.length);await a.reportProgress(b);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:le,updatedPackage:pe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,le)} to ${W.prettyLocator(n,pe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(le),updatedResolution:W.stringifyLocator(pe)}),t.storedResolutions.set(te.descriptorHash,pe.locatorHash)}).finally(()=>b.tick())));let T;switch(C){case 0:T="No packages";break;case 1:T="One package";break;default:T=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${T} can be deduped using the ${L} strategy`),C})}var Lh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Vs(d2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await M8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Lh.paths=[["dedupe"]],Lh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Wd=class extends ut{async execute(){let{plugins:e}=await Ve.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Xge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} -`)}};Wd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();Pt();qt();var dC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=K.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Kd=class extends ut{async execute(){this.context.stdout.write(`${tn||""} -`)}};Kd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` - This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. - - It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Oh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:aP(Ey(),[sI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await Y0t(this.hash,o,{stdout:this.context.stdout})}};Oh.paths=[["explain","peer-requirements"]],Oh.usage=nt.Usage({description:"explain a set of peer requirements",details:` - A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. - - When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. - - When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. - - **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). - `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function Y0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();Za();Ye();Ye();Pt();qt();var Zge=$e(zn()),Uh=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(K.contains(p,A))return 0}let o=()=>{if(typeof tn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:tn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${K.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await W0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await rn.get(a.url,{configuration:r}))};await O8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Uh.paths=[["set","version"]],Uh.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function W0t(t,e){let o=(await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function m2(t,e){let r=await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function O8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async le=>{let pe=K.join(le,"yarn.cjs");await oe.writeFilePromise(pe,te);let{stdout:Ae}=await Ur.execvp(process.execPath,[ue.fromPortablePath(pe),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=Ae.trim(),!Zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: -${e}`)})}let A=t.projectCwd??t.startingCwd,p=K.resolve(A,".yarn/releases"),h=K.resolve(p,`yarn-${e}.cjs`),E=K.relative(t.startingCwd,h),I=je.isTaggedYarnVersion(e),v=t.get("yarnPath"),b=!I,C=b||!!v||!!a;if(a===!1){if(b)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(K.dirname(h)),await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ve.updateConfiguration(A,{yarnPath:K.relative(A,h)})}else await oe.removePromise(K.dirname(h)),await Ve.updateConfiguration(A,{yarnPath:Ve.deleteProperty});let T=await Mt.tryFind(A)||new Mt;T.packageManager=`yarn@${I?e:await m2(t,"stable")}`;let L={};T.exportTo(L);let U=K.join(A,Mt.fileName),J=`${JSON.stringify(L,null,T.indent)} -`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function $ge(t){return wr[fP(t)]}var V0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function K0t(t){let r=`https://repo.yarnpkg.com/${je.isTaggedYarnVersion(tn)?tn:await m2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await rn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(V0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=$ge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var _h=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:oI(Ey(),[sI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=$ge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await K0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. - -You can help us by editing this page on GitHub \u{1F642}: -${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} -`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} -`):this.context.stdout.write(`${n} - -${p} -`)}else{let o={children:je.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?je.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};_h.paths=[["explain"]],_h.usage=nt.Usage({description:"explain an error code",details:` - When the code argument is specified, this command prints its name and its details. - - When used without arguments, this command lists all error codes and their names. - `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();Pt();qt();var ede=$e(Zo()),Hh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:pe})=>{let Ae=le.anchoredLocator.locatorHash,ye=new Map,ae=[Ae];for(;ae.length>0;){let we=ae.shift();if(ye.has(we))continue;let Pe=o.storedPackages.get(we);if(typeof Pe>"u")throw new Error("Assertion failed: Expected the package to be registered");if(ye.set(we,Pe),W.isVirtualLocator(Pe)&&ae.push(W.devirtualizeLocator(Pe).locatorHash),!(!pe&&we!==Ae))for(let g of Pe.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");ae.push(Ee)}}return ye.values()},p=({recursive:le})=>{let pe=new Map;for(let Ae of o.workspaces)for(let ye of A(Ae,{recursive:le}))pe.set(ye.locatorHash,ye);return pe.values()},h=({all:le,recursive:pe})=>le&&pe?o.storedPackages.values():le?p({recursive:pe}):A(a,{recursive:pe}),E=({all:le,recursive:pe})=>{let Ae=h({all:le,recursive:pe}),ye=this.patterns.map(Pe=>{let g=W.parseLocator(Pe),Ee=ede.default.makeRe(W.stringifyIdent(g)),De=W.isVirtualLocator(g),ce=De?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),ke=Ie?W.devirtualizeLocator(ne):ne;return!(De&&Ie&&g.reference!==ne.reference||ce.reference!==ke.reference)}}),ae=je.sortMap([...Ae],Pe=>W.stringifyLocator(Pe));return{selection:ae.filter(Pe=>ye.length===0||ye.some(g=>g(Pe))),sortedLookup:ae}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let b=new Map;if(this.dependents)for(let le of v)for(let pe of le.dependencies.values()){let Ae=o.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: Expected the resolution to be registered");je.getArrayWithDefault(b,Ae).push(le)}let C=new Map;for(let le of v){if(!W.isVirtualLocator(le))continue;let pe=W.devirtualizeLocator(le);je.getArrayWithDefault(C,pe.locatorHash).push(le)}let T={},L={children:T},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,pe,Ae)=>{if(!pe.has("manifest"))return;let ye=await U.fetch(le,J),ae;try{ae=await Mt.find(ye.prefixPath,{baseFs:ye.packageFs})}finally{ye.releaseFs?.()}Ae("Manifest",{License:de.tuple(de.Type.NO_HINT,ae.license),Homepage:de.tuple(de.Type.URL,ae.raw.homepage??null)})},async(le,pe,Ae)=>{if(!pe.has("cache"))return;let ye=o.storedChecksums.get(le.locatorHash)??null,ae=n.getLocatorPath(le,ye),we;if(ae!==null)try{we=await oe.statPromise(ae)}catch{}let Pe=typeof we<"u"?[we.size,de.Type.SIZE]:void 0;Ae("Cache",{Checksum:de.tuple(de.Type.NO_HINT,ye),Path:de.tuple(de.Type.PATH,ae),Size:Pe})}];for(let le of I){let pe=W.isVirtualLocator(le);if(!this.virtuals&&pe)continue;let Ae={},ye={value:[le,de.Type.LOCATOR],children:Ae};if(T[W.stringifyLocator(le)]=ye,this.nameOnly){delete ye.children;continue}let ae=C.get(le.locatorHash);typeof ae<"u"&&(Ae.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,ae.length)}),Ae.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,le.version)};let we=(g,Ee)=>{let De={};if(Ae[g]=De,Array.isArray(Ee))De.children=Ee.map(ce=>({value:ce}));else{let ce={};De.children=ce;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(ce[ne]={label:ne,value:ee})}};if(!pe){for(let g of te)await g(le,u,we);await r.triggerHook(g=>g.fetchPackageInfo,le,u,we)}le.bin.size>0&&!pe&&we("Exported Binaries",[...le.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let Pe=b.get(le.locatorHash);typeof Pe<"u"&&Pe.length>0&&we("Dependents",Pe.map(g=>de.tuple(de.Type.LOCATOR,g))),le.dependencies.size>0&&!pe&&we("Dependencies",[...le.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),De=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:De})})),le.peerDependencies.size>0&&pe&&we("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let Ee=le.dependencies.get(g.identHash),De=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,ce=De!==null?o.storedPackages.get(De)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:ce})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Hh.paths=[["info"]],Hh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();Pt();Nl();var dk=$e(ed());qt();var U8=$e(zn());Za();var J0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await NE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!dk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!dk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!dk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await Z0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await X0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(T.hasErrors())return T.exitCode()}if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ve.telemetry?.isNew)Ve.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ve.telemetry?.shouldShowTips){let U=await rn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(tn!==null){let le=U8.default.prerelease(tn)?"canary":"stable",pe=U.latest[le];U8.default.gt(pe,tn)&&(J=[le,pe])}if(J)Ve.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ve.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(T.hasErrors())return T.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of J0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ve.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(T.hasErrors())return T.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async T=>{T.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),T.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),T.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async T=>{await p.install({cache:I,report:T,immutable:u,checkResolutions:b,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var z0t="<<<<<<<";async function X0t(t,e){if(!t.projectCwd)return!1;let r=K.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(z0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Vi(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function Z0t(t,e){if(!t.projectCwd)return!1;let r=[],o=K.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ve.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=K.resolve(t.projectCwd,A.path),h=B1.has(A.spec)&&K.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ve.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Pt();qt();var qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=K.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let b=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),b=!0);if(!b)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?K.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};qh.paths=[["link"]],qh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Gh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Gh.paths=[["node"]],Gh.usage=nt.Usage({description:"run node with the hook already setup",details:` - This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - - The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. - `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Yh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Ve.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await rn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Yh.paths=[["plugin","check"]],Yh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` - Check only the plugins from https. - - If this command detects any plugin differences in the CI environment, it will throw an error. - `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();Pt();qt();var ode=Be("os");Ye();Pt();qt();var tde=Be("os");Ye();Nl();qt();var $0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Jd(t,e){let r=await rn.get($0t,{configuration:t}),o=Vi(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Jd(r,tn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Wh.paths=[["plugin","list"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var egt=/^[0-9]+$/,tgt=process.platform==="win32";function rde(t){return egt.test(t)?`pull/${t}/head`:t}var rgt=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",rde(e)],["git","reset","--hard","FETCH_HEAD"]],ngt=({branch:t})=>[["git","fetch","origin","--depth=1",rde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],igt=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",K.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[tgt?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,tde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await _8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=K.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await y2(igt(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await O8(r,null,async()=>h,{report:u});this.skipPlugins||await sgt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` - This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. - - By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. - `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function y2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} -`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function _8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(K.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await y2(ngt(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await y2(rgt(t,o),{configuration:e,context:t.context,target:o}))}async function sgt(t,e,{project:r,report:o,target:a}){let n=await Jd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await H8(A,t,{project:r,report:o,target:a})}Ye();Ye();Pt();qt();var nde=$e(zn()),ide=Be("url"),sde=Be("vm");var Kh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=K.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=K.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new ide.URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!nde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await Jd(r,tn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. -`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):tn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${tn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await rn.get(p,{configuration:r})}await j8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Kh.paths=[["plugin","import"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` - This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. - - Three types of plugin references are accepted: - - - If the plugin is stored within the Yarn repository, it can be referenced by name. - - Third-party plugins can be referenced directly through their public urls. - - Local plugins can be referenced by their path on the disk. - - If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. - - Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). - `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function j8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,sde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=K.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(K.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ve.addPlugin(o.cwd,[I])}var ogt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Jh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,ode.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await Jd(r,tn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await _8(this,{configuration:r,report:n,target:o}),await H8(E,this,{project:u,report:n,target:o})})).exitCode()}};Jh.paths=[["plugin","import","from","sources"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` - This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. - - The plugins can be referenced by their short name if sourced from the official Yarn repository. - `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function H8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await y2(ogt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=K.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await j8(t,h,{project:o,report:a})}Ye();Pt();qt();var zh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=K.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ve.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ve.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};zh.paths=[["plugin","remove"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` - This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. - - **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. - `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Xh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Xh.paths=[["plugin","runtime"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` - This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. - `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Zh.paths=[["rebuild"]],Zh.usage=nt.Usage({description:"rebuild the project's native packages",details:` - This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. - - Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). - - By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. - `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var q8=$e(Zo());Za();var $h=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let T=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,q8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,T=!0;for(let te of A){let le=U.manifest.getForScope(te),pe=[...le.values()].map(Ae=>W.stringifyIdent(Ae));for(let Ae of(0,q8.default)(pe,W.stringifyIdent(L))){let{identHash:ye}=W.parseIdent(Ae),ae=le.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(ye),E.push([U,te,ae]),h=!0,T=!0}}}T||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};$h.paths=[["remove"]],$h.usage=nt.Usage({description:"remove dependencies from the project",details:` - This command will remove the packages matching the specified patterns from the current workspace. - - If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: - - - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. - - - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. - - This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. - `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();var ade=Be("util"),zd=class extends ut{async execute(){let e=await Ve.find(this.context.cwd,this.context.plugins),{project:r,workspace:o}=await St.find(e,this.context.cwd);if(!o)throw new rr(r.cwd,this.context.cwd);return(await Nt.start({configuration:e,stdout:this.context.stdout},async n=>{let u=o.manifest.scripts,A=je.sortMap(u.keys(),E=>E),p={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2},h=A.reduce((E,I)=>Math.max(E,I.length),0);for(let[E,I]of u.entries())n.reportInfo(null,`${E.padEnd(h," ")} ${(0,ade.inspect)(I,p)}`)})).exitCode()}};zd.paths=[["run"]];Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of uC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};e0.paths=[["run"]],e0.usage=nt.Usage({description:"run a script defined in the package.json",details:` - This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: - - - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. - - - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. - - - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. - - Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). - `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};t0.paths=[["set","resolution"]],t0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Pt();qt();var lde=$e(Zo()),r0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=K.resolve(this.context.cwd,ue.toPortablePath(p));if(je.isPathLike(p)){let E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let b of I.workspaces)b.manifest.name&&A.add(W.stringifyIdent(b.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,lde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};r0.paths=[["unlink"]],r0.usage=nt.Usage({description:"disconnect the local project from another one",details:` - This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. - `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var cde=$e(A2()),G8=$e(Zo());Za();var Kf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,G8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=p2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let le of o.workspaces)for(let pe of["dependencies","devDependencies"]){let ye=[...le.manifest.getForScope(pe).values()].map(we=>W.stringifyIdent(we)),ae=te==="*"?ye:(0,G8.default)(ye,te);for(let we of ae){let Pe=W.parseIdent(we),g=le.manifest[pe].get(Pe.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(Pe,J.range);E.push(Promise.resolve().then(async()=>[le,pe,g,await h2(Ee,{project:o,workspace:le,cache:n,target:pe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let le=J.filter(pe=>pe.descriptor!==null);if(le.length===0){let[pe]=te;if(typeof pe>"u")throw new Error("Assertion failed: Expected an error to have been set");let Ae=this.cli.error(pe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range - -${Ae}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) - -${Ae}`)}else le.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[];for(let[L,U,,{suggestions:J}]of v){let te,le=J.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,cde.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=L.manifest[U].get(te.identHash);if(typeof ye>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(ye.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),T.push([L,U,ye,te]);else{let ae=r.makeResolver(),we={project:o,resolver:ae},Pe=r.normalizeDependency(ye),g=ae.bindDescriptor(Pe,L.anchoredLocator,we);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,T),C&&this.context.stdout.write(` -`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Kf.paths=[["up"]],Kf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Kf.schema=[lI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?lgt(o,n,{configuration:r,peers:this.peers}):agt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};n0.paths=[["why"]],n0.usage=nt.Usage({description:"display the reason why a package is needed",details:` - This command prints the exact reasons why a package appears in the dependency tree. - - If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. - `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function agt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let b=W.stringifyLocator(v);p[b]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function lgt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let b=!1;v.identHash===e&&(b=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let T=t.storedResolutions.get(C.descriptorHash);if(!T)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(T);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(b=!0)}return b&&u.add(v.locatorHash),b};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,b,C)=>{if(!u.has(v.locatorHash))return;let T=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:T,children:L},J=W.stringifyLocator(v);if(b[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let pe=t.storedPackages.get(le);if(!pe)throw new Error("Assertion failed: The package should have been registered");I(pe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var eH={};Kt(eH,{GitFetcher:()=>C2,GitResolver:()=>w2,default:()=>bgt,gitUtils:()=>ra});Ye();Pt();var ra={};Kt(ra,{TreeishProtocols:()=>E2,clone:()=>$8,fetchBase:()=>Qde,fetchChangedFiles:()=>Fde,fetchChangedWorkspaces:()=>Sgt,fetchRoot:()=>kde,isGitUrl:()=>EC,lsRemote:()=>bde,normalizeLocator:()=>Pgt,normalizeRepoUrl:()=>mC,resolveUrl:()=>Z8,splitRepoUrl:()=>i0,validateRepoUrl:()=>X8});Ye();Pt();qt();var Pde=$e(Bde()),Sde=$e(EU()),yC=$e(Be("querystring")),J8=$e(zn());function K8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function vde(t){try{return new URL(t)}catch{return}}function vgt(t){let e=K8(t,"@","#"),r=K8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),K8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Dde(t){return vde(t)||vde(vgt(t))}function mC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Dde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function xde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Dgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],E2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(E2||{});function EC(t){return t?Dgt.some(e=>!!t.match(e)):!1}function i0(t){t=mC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=yC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(E2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(E2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function Pgt(t){return W.makeLocator(t,mC(t.reference))}function X8(t,{configuration:e}){let r=mC(t,{git:!0});if(!rn.getNetworkSettings(`https://${(0,Pde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function bde(t,e){let r=X8(t,{configuration:e}),o=await z8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:xde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function Z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=i0(t),u=await bde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return yC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return yC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return yC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,T])=>[J8.default.parse(C.slice(10)),T]).filter(C=>C[0]!==null)),b=J8.default.maxSatisfying([...v.keys()],I);if(b===null)throw new Error(`No matching range ("${E}")`);return yC.default.stringify({...n,commit:v.get(b)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return mC(`${r}#${A(o,a)}`)}async function $8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=i0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=X8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:xde()};return await z8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await z8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function kde(t){let e,r=t;do{if(e=r,await oe.existsPromise(K.join(e,".git")))return e;r=K.dirname(e)}while(r!==e);return null}async function Qde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function Fde(t,{base:e,project:r}){let o=je.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!K.relative(r.cwd,h).match(o)):p}async function Sgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[K.resolve(e.cwd,dr.lockfile),K.resolve(e.cwd,e.configuration.get("cacheFolder")),K.resolve(e.cwd,e.configuration.get("installStatePath")),K.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await kde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await Qde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await Fde(o,{base:a.hash,project:e});return new Set(je.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?je.mapAndFilter.skip:r.some(p=>u.startsWith(p))?je.mapAndFilter.skip:A}))}async function z8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,Sde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var C2=class{supports(e,r){return EC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await $8(e.reference,r.project.configuration),a=i0(e.reference),n=K.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await je.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var w2=class{supportsDescriptor(e,r){return EC(e.range)}supportsLocator(e,r){return EC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await Z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=i0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=i0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var xgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[C2],resolvers:[w2]};var bgt=xgt;qt();var s0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let b of Mt.hardDependencies)for(let[C,T]of h.getForScope(b)){let L=o.tryWorkspaceByDescriptor(T);L===null?o.workspacesByIdent.has(C)&&v.add(T):I.add(L)}E={workspaceDependencies:Array.from(I).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(b=>W.stringifyDescriptor(b))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};s0.paths=[["workspaces","list"]],s0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var o0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: - - ${p.join(` - - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};o0.paths=[["workspace"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` - This command will run a given sub-command on a single workspace. - `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var kgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Tde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Qh,Fh,Th,Rh,t0,Vh,Uh,s0,Wd,Vd,dC,Kd,bh,kh,Nh,Lh,Mh,Oh,_h,Hh,jh,qh,r0,Gh,Yh,Jh,Kh,zh,Wh,Xh,Zh,$h,zd,e0,Kf,n0,o0]},Qgt=kgt;var oH={};Kt(oH,{default:()=>Tgt});Ye();var kt={optional:!0},rH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.0"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@*",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}]];var nH;function Rde(){return typeof nH>"u"&&(nH=Be("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),nH}var iH;function Nde(){return typeof iH>"u"&&(iH=Be("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),iH}var sH;function Lde(){return typeof sH>"u"&&(sH=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),sH}var Mde=new Map([[W.makeIdent(null,"fsevents").identHash,Rde],[W.makeIdent(null,"resolve").identHash,Nde],[W.makeIdent(null,"typescript").identHash,Lde]]),Fgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of rH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Mde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Mde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},Tgt=Fgt;var BH={};Kt(BH,{ConstraintsCheckCommand:()=>p0,ConstraintsQueryCommand:()=>A0,ConstraintsSourceCommand:()=>f0,default:()=>odt});Ye();Ye();B2();var wC=class{constructor(e){this.project=e}createEnvironment(){let e=new CC(["cwd","ident"]),r=new CC(["workspace","type","ident"]),o=new CC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(T,L,{caller:U=Ji.getCaller()}={})=>{let J=I2(T),te=je.getMapWithDefault(a.manifestUpdates,A.cwd),le=je.getMapWithDefault(te,J),pe=je.getSetWithDefault(le,L);U!==null&&pe.add(U)},v=T=>I(T,void 0,{caller:Ji.getCaller()}),b=T=>{je.getArrayWithDefault(a.reportedErrors,A.cwd).push(T)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:b});u.set(A,C);for(let T of Mt.allDependencies)for(let L of A.manifest[T].values()){let U=W.stringifyIdent(L),J=()=>{I([T,U],void 0,{caller:Ji.getCaller()})},te=pe=>{I([T,U],pe,{caller:Ji.getCaller()})},le=null;if(T!=="peerDependencies"&&(T!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let pe=A.anchoredPackage.dependencies.get(L.identHash);if(pe){if(typeof pe>"u")throw new Error("Assertion failed: The dependency should have been registered");let Ae=this.project.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: The resolution should have been registered");let ye=n.get(Ae);if(typeof ye>"u")throw new Error("Assertion failed: The package should have been registered");le=ye}}r.insert({workspace:C,ident:U,range:L.range,type:T,resolution:le,update:te,delete:J,error:b})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var A0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((b,[C])=>Math.max(b,C.length),0);for(let b=0;b(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};f0.paths=[["constraints","source"]],f0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();B2();var p0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new wC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),S2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=mk(o,E,{fix:this.fix}),b=[];for(let[C,T]of I){let L=C.manifest.indent;C.manifest=new Mt,C.manifest.indent=L,C.manifest.load(T),b.push(C.persistManifest())}if(await Promise.all(b),!(I.size>0&&h>1)){u=Gde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let T of C)T.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=je.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};p0.paths=[["constraints"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` - This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. - - If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. - - For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. - `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});B2();var sdt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[A0,f0,p0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new wC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),S2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=mk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},odt=sdt;var vH={};Kt(vH,{CreateCommand:()=>em,DlxCommand:()=>h0,default:()=>ldt});Ye();qt();var em=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};em.paths=[["create"]];Ye();Ye();Pt();qt();var h0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ve.telemetry=null,await oe.mktempPromise(async r=>{let o=K.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(K.join(o,"package.json"),`{} -`),await oe.writeFilePromise(K.join(o,"yarn.lock"),"");let a=K.join(o,".yarnrc.yml"),n=await Ve.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ve.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?K.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ve.updateConfiguration(o,L=>{let U=je.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,le=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?le:{path:le,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` -`);let v=await Ve.find(o,this.context.plugins),{project:b,workspace:C}=await St.find(v,o);if(C===null)throw new rr(b.cwd,o);await b.restoreInstallState();let T=await un.getWorkspaceAccessibleBinaries(C);return T.has(E)===!1&&T.size===1&&typeof this.packages>"u"&&(E=Array.from(T)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:T,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};h0.paths=[["dlx"]],h0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var adt={commands:[em,h0]},ldt=adt;var SH={};Kt(SH,{ExecFetcher:()=>k2,ExecResolver:()=>Q2,default:()=>Adt,execUtils:()=>wk});Ye();Ye();Pt();var fA="exec:";var wk={};Kt(wk,{loadGeneratorFile:()=>b2,makeLocator:()=>PH,makeSpec:()=>dme,parseSpec:()=>DH});Ye();Pt();function DH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function dme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,dme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function b2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var k2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await b2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=K.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(K.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(K.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=K.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=K.join(p,"buildfile.log"),E=K.join(e,"generator"),I=K.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` - // Expose 'Module' as a global variable - Object.defineProperty(global, 'Module', { - get: () => require('module'), - configurable: true, - enumerable: false, - }); - - // Expose non-hidden built-in modules as global variables - for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { - Object.defineProperty(global, name, { - get: () => require(name), - configurable: true, - enumerable: false, - }); - } - - // Expose the 'execEnv' global variable - Object.defineProperty(global, 'execEnv', { - value: { - ...${JSON.stringify(v)}, - }, - enumerable: true, - }); - `);let b=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(C," ").trim(),u.NODE_OPTIONS=b;let{stdout:T,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) -`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:T,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var cdt=2,Q2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=DH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await b2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${cdt}`,u).slice(0,6);return[PH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var udt={fetchers:[k2],resolvers:[Q2]},Adt=udt;var bH={};Kt(bH,{FileFetcher:()=>N2,FileResolver:()=>L2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>O2,default:()=>hdt,fileUtils:()=>tm});Ye();Pt();var DC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,F2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var tm={};Kt(tm,{fetchArchiveFromLocator:()=>R2,makeArchiveFromLocator:()=>Ik,makeBufferFromLocator:()=>xH,makeLocator:()=>PC,makeSpec:()=>mme,parseSpec:()=>T2});Ye();Pt();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function mme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,mme({parentLocator:e,path:r,hash:o,protocol:a}))}async function R2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=K.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=K.join(n.prefixPath,o);return await je.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ik(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=K.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=K.join(A.prefixPath,n);return await je.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function xH(t,{protocol:e,fetchOptions:r}){return(await Ik(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var N2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ik(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var fdt=2,L2=class{supportsDescriptor(e,r){return e.range.match(DC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await xH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${fdt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await R2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var O2=class{supportsDescriptor(e,r){return F2.test(e.range)?!!(e.range.startsWith(Ui)||DC.test(e.range)):!1}supportsLocator(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await R2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var pdt={fetchers:[M2,N2],resolvers:[O2,L2]},hdt=pdt;var FH={};Kt(FH,{GithubFetcher:()=>U2,default:()=>ddt,githubUtils:()=>Bk});Ye();Pt();var Bk={};Kt(Bk,{invalidGithubUrlMessage:()=>Cme,isGithubUrl:()=>kH,parseGithubUrl:()=>QH});var yme=$e(Be("querystring")),Eme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function kH(t){return t?Eme.some(e=>!!t.match(e)):!1}function QH(t){let e;for(let A of Eme)if(e=t.match(A),e)break;if(!e)throw new Error(Cme(t));let[,r,o,a,n="master"]=e,{commit:u}=yme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function Cme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var U2=class{supports(e,r){return!!kH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=K.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=QH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var gdt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new U2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},ddt=gdt;var TH={};Kt(TH,{TarballHttpFetcher:()=>H2,TarballHttpResolver:()=>j2,default:()=>ydt});Ye();function _2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var H2=class{supports(e,r){return _2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return _2(e.range)}supportsLocator(e,r){return _2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var mdt={fetchers:[H2],resolvers:[j2]},ydt=mdt;var RH={};Kt(RH,{InitCommand:()=>g0,default:()=>Cdt});Ye();Ye();Pt();qt();var g0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=K.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Mt.tryFind(this.context.cwd),n=a??new Mt,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??K.basename(this.context.cwd)),n.packageManager=tn&&je.isTaggedYarnVersion(tn)?`yarn@${tn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(K.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=K.join(this.context.cwd,Mt.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} -`,{automaticNewlines:!0});let h=[p],E=K.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} -`),h.push(E)),!o||o.cwd===this.context.cwd){let I=K.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let b=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(pe=>`${pe} -`).join(""),C=K.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,b),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(pe=>`${pe} -`).join(""),U=K.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};je.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true -`;for(let[pe,Ae]of Object.entries(J)){te+=` -[${pe}] -`;for(let[ye,ae]of Object.entries(Ae)){let we=ye.replace(/[A-Z]/g,Pe=>`_${Pe.toLowerCase()}`);te+=`${we} = ${ae} -`}}let le=K.join(this.context.cwd,".editorconfig");oe.existsSync(le)||(await oe.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(K.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};g0.paths=[["init"]],g0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var Edt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[g0]},Cdt=Edt;var Lj={};Kt(Lj,{SearchCommand:()=>C0,UpgradeInteractiveCommand:()=>I0,default:()=>lIt});Ye();var Ime=$e(Be("os"));function SC({stdout:t}){if(Ime.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Rye=$e(ZH()),$H={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},myt=(0,Rye.default)($H.appId,$H.apiKey).initIndex($H.indexName),e6=async(t,e=0)=>await myt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var HB=["regular","dev","peer"],C0=class extends ut{async execute(){SC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(gQ(),hQ)),{useKeypress:o}=await Promise.resolve().then(()=>(OB(),Jwe)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{default:u}=await Promise.resolve().then(()=>$e(sIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),T=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:ae,active:we})=>{let[Pe,g]=a(ae.name,null);o({active:we},(ce,ne)=>{if(ne.name!=="space")return;if(!Pe){g(HB[0]);return}let ee=HB.indexOf(Pe)+1;ee===HB.length?g(null):g(HB[ee])},[Pe,g]);let Ee=W.parseIdent(ae.name),De=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},De)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},ae.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},ae.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,ae.humanDownloadsLast30Days)))},U=({name:ae,active:we})=>{let[Pe]=a(ae,null),g=W.parseIdent(ae);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),HB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Pe===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:ae})=>{let we=a();ae(we);let Pe=Array.from(we.keys()).filter(H=>we.get(H)!==null),[g,Ee]=I(""),[De,ce]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},ke=async()=>{ce(0);let H=await e6(g);H.query===g&&ee(H.hits)},ht=async()=>{let H=await e6(g,De+1);H.query===g&&H.page-1===De&&(ce(H.page),ee([...ne,...H.hits]))};return E(()=>{g?ke():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(b,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(T,null)),Pe.length?Pe.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let pe=Array.from(le.keys()).filter(ae=>le.get(ae)==="regular"),Ae=Array.from(le.keys()).filter(ae=>le.get(ae)==="dev"),ye=Array.from(le.keys()).filter(ae=>le.get(ae)==="peer");return pe.length&&await this.cli.run(["add",...pe]),Ae.length&&await this.cli.run(["add","--dev",...Ae]),ye&&await this.cli.run(["add","--peer",...ye]),0}};C0.paths=[["search"]],C0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});Ye();qt();w_();var fIe=$e(zn()),AIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,pIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(pIe(t.slice(e),e)):[],I0=class extends ut{async execute(){SC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(uIe(),cIe)),{Pad:r}=await Promise.resolve().then(()=>(Nj(),lIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd),T=await Lr.find(v);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,De)=>{let ce=fpe(Ee,De),ne="";for(let ee of ce)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,De)=>{if(Ee===De)return De;let ce=W.parseRange(Ee),ne=W.parseRange(De),ee=ce.selector.match(AIe),Ie=ne.selector.match(AIe);if(!ee||!Ie)return U(Ee,De);let ke=["gray","red","yellow","green","magenta"],ht=null,H="";for(let lt=1;lt{let ne=await zc.fetchDescriptorFrom(Ee,ce,{project:b,cache:T,preserveModifier:De,workspace:C});return ne!==null?ne.range:Ee.range},le=async Ee=>{let De=fIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[ce,ne]=await Promise.all([te(Ee,Ee.range,De).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return ce&&ce!==Ee.range?ee.push({value:ce,label:J(Ee.range,ce)}):ee.push({value:null,label:""}),ne&&ne!==ce&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},pe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),Ae=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),ye=({active:Ee,descriptor:De,suggestions:ce})=>{let[ne,ee]=a(De.descriptorHash,null),Ie=W.stringifyIdent(De),ke=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,De)),p.createElement(r,{active:Ee,length:ke})),p.createElement(e,{active:Ee,options:ce,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},ae=({dependencies:Ee})=>{let[De,ce]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let ke=await le(Ie);return ke.filter(ht=>ht.label!=="").length<=1?null:{descriptor:Ie,suggestions:ke}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),ke=Ee.slice(0,Ie),ht=Ee.slice(Ie),H=pIe(ht,L),lt=ke.map(ee).reduce(async(Re,Qe)=>{await Re;let be=await Qe;be!==null&&(!ne.current||ce(_e=>{let Te=_e.findIndex(He=>He===null),Je=[..._e];return Je[Te]=be,Je}))},Promise.resolve());H.reduce((Re,Qe)=>Promise.all(Qe.map(be=>Promise.resolve().then(()=>ee(be)))).then(async be=>{be=be.filter(_e=>_e!==null),await Re,ne.current&&ce(_e=>{let Te=_e.findIndex(Je=>Je===null);return _e.slice(0,Te).concat(be).concat(_e.slice(Te+be.length))})}),lt).then(()=>{ne.current&&ce(Re=>Re.filter(Qe=>Qe!==null))})},[]),De.length?p.createElement(o,{radius:L>>1,children:De.map((Ie,ke)=>Ie!==null?p.createElement(ye,{key:ke,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:ke},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Pe=await n(({useSubmit:Ee})=>{Ee(a());let De=new Map;for(let ne of b.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())b.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||De.set(Ie.descriptorHash,Ie));let ce=je.sortMap(De.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(pe,null),p.createElement(Ae,null),p.createElement(ae,{dependencies:ce}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Pe>"u")return 1;let g=!1;for(let Ee of b.workspaces)for(let De of["dependencies","devDependencies"]){let ce=Ee.manifest[De];for(let ne of ce.values()){let ee=Pe.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(ce.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:T}):0}};I0.paths=[["upgrade-interactive"]],I0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var aIt={commands:[C0,I0]},lIt=aIt;var Mj={};Kt(Mj,{LinkFetcher:()=>qB,LinkResolver:()=>GB,PortalFetcher:()=>YB,PortalResolver:()=>WB,default:()=>uIt});Ye();Pt();var ep="portal:",tp="link:";var qB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Pt();var GB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Pt();var YB=class{supports(e,r){return!!e.reference.startsWith(ep)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Pt();var WB=class{supportsDescriptor(e,r){return!!e.range.startsWith(ep)}supportsLocator(e,r){return!!e.reference.startsWith(ep)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(ep.length);return[W.makeLocator(e,`${ep}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var cIt={fetchers:[qB,YB],resolvers:[GB,WB]},uIt=cIt;var Cq={};Kt(Cq,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>dq,PnpLooseLinker:()=>cv,default:()=>P1t});Pt();Ye();Pt();Pt();var Uj=(t,e)=>`${t}@${e}`,hIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Uj(t,o)};var mIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=mIt(t,n),p=!1,h=0;do p=_j(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(_j(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: -${E}, next tree: -${VB(A)}`);let v=yIe(A);if(v)throw new Error(`${v}, after hoisting finished: -${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),yIt(A)},AIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},fIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},gIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:C,hoistedTo:T}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:new Map(C),hoistedTo:new Map(T)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},pIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Oj=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},_j=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=EIt(u),p=pIt(u,A),h=t==u?new Map:a.fastLookupPossible?AIt(e):fIt(e),E,I=!1,v=!1,b=new Map(Array.from(p.entries()).map(([T,L])=>[T,L[0]])),C=new Map;do{let T=dIt(t,e,r,h,b,p,o,C,a);T.isGraphChanged&&(v=!0),T.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(b.delete(L),U.shift(),b.set(L,U[0]),E=!0)}while(E);for(let T of u.dependencies.values())if(!u.peerNames.has(T.name)&&!r.has(T.locator)){r.add(T.locator);let L=_j(t,[...e,T],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(T.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},hIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},gIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let b=r[r.length-1],T=!(o.ident===b.ident);if(p&&!T&&(I="- self-reference"),T&&(T=o.dependencyKind!==1,p&&!T&&(I="- workspace")),T&&o.dependencyKind===2&&(T=!hIt(o),p&&!T&&(I="- external soft link with unhoisted dependencies")),T&&(T=b.dependencyKind!==1||b.hoistedFrom.has(o.name)||e.size===1,p&&!T&&(I=b.reasons.get(o.name))),T&&(T=!t.peerNames.has(o.name),p&&!T&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),T){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let le=r[J].dependencies.get(o.name);if(le&&le.ident!==o.ident){L=!1;let pe=A.get(b);pe||(pe=new Set,A.set(b,pe)),pe.add(o.name),p&&(I=`- filled by ${no(le.locator)} at ${r.slice(0,J).map(Ae=>no(Ae.locator)).join("\u2192")}`);break}}T=L}if(T&&(T=n.get(o.name)===o.ident,p&&!T&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),T){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let pe=te.dependencies.get(le);pe&&t.dependencies.get(le)!==pe&&(J===r.length-1?v.add(pe):(v=null,L=!1,p&&(I=`- peer dependency ${no(pe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(le)}if(!L)break}T=L}if(T&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){T=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:T?0:1,reason:I}},CQ=t=>`${t.name}@${t.locator}`,dIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,b=(U,J,te,le,pe)=>{if(E.has(le))return;let Ae=[...J,CQ(le)],ye=[...te,CQ(le)],ae=new Map,we=new Map;for(let ce of Oj(le)){let ne=gIt(h,r,[h,...U,le],ce,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(we.set(ce,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=ae.get(ee.name)||new Set;Ie.add(ce.name),ae.set(ee.name,Ie)}}let Pe=new Set,g=(ce,ne,ee)=>{if(!Pe.has(ce)){Pe.add(ce),we.set(ce,{isHoistable:1,reason:ee});for(let Ie of ae.get(ce.name)||[])g(le.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(ce.locator)} from parent ${no(le.locator)} was not hoisted`:"")}};for(let[ce,ne]of we)ne.isHoistable===1&&g(ce,ne,ne.reason);let Ee=!1;for(let ce of we.keys())if(!Pe.has(ce)){v=!0;let ne=u.get(le);ne&&ne.has(ce.name)&&(I=!0),Ee=!0,le.dependencies.delete(ce.name),le.hoistedDependencies.set(ce.name,ce),le.reasons.delete(ce.name);let ee=h.dependencies.get(ce.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([le.locator]).map(ht=>no(ht)).join("\u2192"),ke=h.hoistedFrom.get(ce.name);ke||(ke=[],h.hoistedFrom.set(ce.name,ke)),ke.push(Ie),le.hoistedTo.set(ce.name,Array.from(e).map(ht=>no(ht.locator)).join("\u2192"))}if(!ee)h.ident!==ce.ident&&(h.dependencies.set(ce.name,ce),pe.add(ce));else for(let Ie of ce.references)ee.references.add(Ie)}if(le.dependencyKind===2&&Ee&&(I=!0),p.check){let ce=yIe(t);if(ce)throw new Error(`${ce}, after hoisting dependencies of ${[h,...U,le].map(ne=>no(ne.locator)).join("\u2192")}: -${VB(t)}`)}let De=Oj(le);for(let ce of De)if(Pe.has(ce)){let ne=we.get(ce);if((a.get(ce.name)===ce.ident||!le.reasons.has(ce.name))&&ne.isHoistable!==0&&le.reasons.set(ce.name,ne.reason),!ce.isHoistBorder&&ye.indexOf(CQ(ce))<0){E.add(le);let Ie=gIe(le,ce);b([...U,le],Ae,ye,Ie,T),E.delete(le)}}},C,T=new Set(Oj(h)),L=Array.from(e).map(U=>CQ(U));do{C=T,T=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=gIe(h,U);b([],Array.from(r),L,J,T)}}while(T.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},yIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,T=`${b?` hoisted to ${b}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${T}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${T} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` -`)},mIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Uj(r,a),ident:hIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:b,identName:C,reference:T,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:b,references:new Set([T]),locator:Uj(C,T),ident:hIe(C,T),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(b):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let b=new Set,C=T=>{if(!b.has(T)){b.add(T),T.decoupled=!1;for(let L of T.dependencies.values())T.peerNames.has(L.name)||C(L)}};C(I)}else for(let b of h.dependencies)p(b,I)};for(let h of t.dependencies)p(h,u);return u},Hj=t=>t.substring(0,t.indexOf("@",1)),yIt=t=>{let e={name:t.name,identName:Hj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Hj(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},EIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},dIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>dIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} -`,p+=r(E,n,`${u}${hdIe?` -Tree is too large, part of the tree has been dunped -`:"")};var KB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(KB||{}),EIe="node_modules",B0="$wsroot$";var JB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=wIt(t,e),u=null;if(a.length===0){let A=mIe(r,{hoistingLimits:o});u=BIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,qj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(K.delimiter).length,u=a.split(K.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},CIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},jj=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return K.contains(o,a)===null},CIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,b)=>{let C=gA(v);if(p.has(C))return;p.add(C);let T=t.getPackageInformation(v);if(T){let L=b?gA(b):"";if(gA(v)!==L&&T.linkType==="SOFT"&&!jj(T,v,t,o)){let U=wIe(T,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of T.packageDependencies)J!==null&&(T.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(K.sep);for(let v of A.values()){let b=t.getPackageInformation(v),T=ue.toPortablePath(b.packageLocation.slice(0,-1)).split(K.sep).slice(E.length),L=n;for(let U of T){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,b)=>{if(v.workspaceLocator){let C=gA(b),T=a.get(C);T||(T=new Set,a.set(C,T)),T.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||b)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},wIt=(t,e)=>{let r=[],o=!1,a=new Map,n=CIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(b,C)=>`${gA(C)}:${b}`,v=(b,C,T,L,U,J,te,le)=>{let pe=I(b,T),Ae=E.get(pe),ye=!!Ae;!ye&&T.name===A.name&&T.reference===A.reference&&(Ae=h,E.set(pe,h));let ae=jj(C,T,t,p);if(!Ae){let ce=0;ae?ce=2:C.linkType==="SOFT"&&T.name.endsWith(B0)&&(ce=1),Ae={name:b,identName:T.name,reference:T.reference,dependencies:new Set,peerNames:ce===1?new Set:C.packagePeers,dependencyKind:ce},E.set(pe,Ae)}let we;if(ae?we=2:U.linkType==="SOFT"?we=1:we=0,Ae.hoistPriority=Math.max(Ae.hoistPriority||0,we),le&&!ae){let ce=gA({name:L.identName,reference:L.reference}),ne=a.get(ce)||new Set;a.set(ce,ne),ne.add(Ae.name)}let Pe=new Map(C.packageDependencies);if(e.project){let ce=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(ce){let ne=new Set([...Array.from(ce.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(ce.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)Pe.has(ee)||(Pe.set(ee,J.get(ee)||null),Ae.peerNames.add(ee))}}let g=gA({name:T.name.replace(B0,""),reference:T.reference}),Ee=n.get(g);if(Ee)for(let ce of Ee)Pe.set(`${ce.name}${B0}`,ce.reference);(C!==U||C.linkType!=="SOFT"||!ae&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(Ae);let De=T!==A&&C.linkType==="SOFT"&&!T.name.endsWith(B0)&&!ae;if(!ye&&!De){let ce=new Map;for(let[ne,ee]of Pe)if(ee!==null){let Ie=t.getLocator(ne,ee),ke=t.getLocator(ne.replace(B0,""),ee),ht=t.getPackageInformation(ke);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=jj(ht,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){ht.packageDependencies.size>0&&(o=!0);for(let[_e,Te]of ht.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${_e}@${Te}`);if(gA(Je)!==gA(Ie)){let He=Pe.get(_e);if(He){let x=W.parseLocator(Array.isArray(He)?`${He[0]}@${He[1]}`:`${_e}@${He}`);CIe(x,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,x)}`})}else{let x=ce.get(_e);if(x){let w=x.target,S=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${_e}@${w}`);CIe(S,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,S)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(x.portal.name))}`})}else ce.set(_e,{target:Je.reference,portal:Ie})}}}}let lt=e.hoistingLimitsByCwd?.get(te),Re=H?te:K.relative(p,ue.toPortablePath(ht.packageLocation))||Bt.dot,Qe=e.hoistingLimitsByCwd?.get(Re);v(ne,ht,Ie,Ae,C,Pe,Re,lt==="dependencies"||Qe==="dependencies"||Qe==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function wIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function IIt(t,e,r){let o=e.getLocator(t.name.replace(B0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:wIe(a,t,e)}}var BIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:b,target:C}=IIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:b,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let b=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let T=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(B0,"")&&T===b)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),le=te?[te,J]:[J],pe=K.join(I,EIe),Ae=K.join(pe,...le),ye=`${v}/${U.name}`,ae=a(U,v,L.slice(1)),we=!1;if(ae.linkType==="SOFT"&&r.project){let Pe=r.project.workspacesByCwd.get(ae.target.slice(0,-1));we=!!(Pe&&!Pe.manifest.name)}if(!C.name.endsWith(B0)&&!we){let Pe=o.get(Ae);if(Pe){if(Pe.dirList)throw new Error(`Assertion failed: ${Ae} cannot merge dir node with leaf node`);{let De=W.parseLocator(Pe.locator),ce=W.parseLocator(ae.locator);if(Pe.linkType!==ae.linkType)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different link types ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/${W.stringifyLocator(ce)}`);if(De.identHash!==ce.identHash)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different idents ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/s${W.stringifyLocator(ce)}`);ae.aliases=[...ae.aliases,...Pe.aliases,W.parseLocator(Pe.locator).reference]}}o.set(Ae,ae);let g=Ae.split("/"),Ee=g.indexOf(EIe);for(let De=g.length-1;Ee>=0&&De>Ee;De--){let ce=ue.toPortablePath(g.slice(0,De).join(K.sep)),ne=g[De],ee=o.get(ce);if(!ee)o.set(ce,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,ae.linkType==="SOFT"?ae.target:Ae,ye)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Pt();Pt();nA();Nl();var lq={};Kt(lq,{PnpInstaller:()=>dm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>$It,getPnpPath:()=>S0,jsInstallUtils:()=>mA,pnpUtils:()=>av,quotePathIfNeeded:()=>s1e});Pt();var i1e=Be("url");Ye();Ye();Pt();Pt();var IIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function vIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=wQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function SIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ -`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` -`),n+=a,n+=JSON.stringify(h),n+=": ",n+=wQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` -`),n+=r,n+="}",n}function wQ(t,e,r,o){let{next:a}=IIe[r],n=a[t]||a["*"];return BIe(e,n,o)}function BIe(t,e,r){let{collapsed:o}=IIe[e];return Array.isArray(t)?o?vIt(t,e,r):DIt(t,e,r):typeof t=="object"&&t!==null?o?PIt(t,e,r):SIt(t,e,r):JSON.stringify(t)}function vIe(t){return BIe(t,"TOP_LEVEL","")}function zB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function xIt(t){let e=new Map,r=zB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function bIt(t){return zB(t.fallbackPool||[],([e])=>e)}function kIt(t){let e=[];for(let[r,o]of zB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of zB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,T]of zB(A.entries(),([L])=>L))I.push([C,T]);let v=p&&p.size>0?Array.from(p):void 0,b=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:b}])}}return e}function XB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:xIt(t),fallbackPool:bIt(t),packageRegistryData:kIt(t)}}var SIe=$e(PIe());function xIe(t,e){return[t?`${t} -`:"",`/* eslint-disable */ -`,`"use strict"; -`,` -`,e,` -`,(0,SIe.default)()].join("")}function QIt(t){return JSON.stringify(t,null,2)}function FIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ -`)}'`}function TIt(t){return[`const RAW_RUNTIME_STATE = -`,`${FIt(vIe(t))}; - -`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); -`,`} -`].join("")}function RIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` const fs = require('fs'); -`,` const path = require('path'); -`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); -`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); -`,`} -`].join("")}function bIe(t){let e=XB(t),r=TIt(e);return xIe(t.shebang,r)}function kIe(t){let e=XB(t),r=RIt(),o=xIe(t.shebang,r);return{dataFile:QIt(e),loaderFile:o}}Pt();function Yj(t,{basePath:e}){let r=ue.toPortablePath(e),o=K.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([b,C])=>{if(I===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let T=C.discardFromLookup??!1,L={name:I,reference:b},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&T,T||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:T});let J=null;return[b,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:T,get packageLocation(){return J||(J=K.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Pt();Pt();var rp=Be("module"),gm=Be("url"),tq=Be("util");var Oo=Be("url");var RIe=$e(Be("assert"));var Wj=Array.isArray,ZB=JSON.stringify,$B=Object.getOwnPropertyNames,pm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Vj=(t,e)=>RegExp.prototype.exec.call(t,e),Kj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),v0=(t,...e)=>String.prototype.endsWith.apply(t,e),Jj=(t,...e)=>String.prototype.includes.apply(t,e),zj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),ev=(t,...e)=>String.prototype.indexOf.apply(t,e),QIe=(t,...e)=>String.prototype.replace.apply(t,e),D0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),FIe=Map,TIe=JSON.parse;function tv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var NIe=tv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Xj=tv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),LIe=tv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,RIe.default)(o===!1),`Invalid "exports" main target ${ZB(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${ZB(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),rv=tv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),MIe=tv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var BQ=Be("url");function OIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}nv(r,t,o,u,a)}Vj(_Ie,D0(t,2))!==null&&nv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||nv(r,t,o,u,a),e==="")return p;if(Vj(_Ie,e)!==null){let I=n?QIe(r,"*",()=>e):r+e;MIt(I,o,u,a)}return n?new URL(Kj(HIe,p.href,()=>e)):new URL(e,p)}function UIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return OIt(e,r,o,t,a,n,u,A);if(Wj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function _It(t,e,r){if(typeof t=="string"||Wj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=$B(t),a=!1,n=0;for(let u=0;u=h.length&&v0(e,I)&&qIe(n,h)===1&&zj(h,"*")===E&&(n=h,u=D0(e,E,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&Zj(e,t,o),h}Zj(e,t,o)}function YIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||v0(t,"/")){let u="is not a valid internal imports specifier name";throw new Xj(t,u,(0,Oo.fileURLToPath)(e))}let a,n=UIe(e,o);if(n.exists){a=(0,Oo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(pm(u,t)&&!Jj(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=$B(u);for(let E=0;E=I.length&&v0(t,b)&&qIe(A,I)===1&&zj(I,"*")===v&&(A=I,p=D0(t,v,t.length-b.length))}}if(A){let E=u[A],I=qC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}LIt(t,a,e)}Pt();var jIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=jIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var JIe=$e(VIe());function zIe(t){return qIt(),eq[t]}var eq;function qIt(){eq||(eq={"--conditions":[],...KIe(GIt()),...KIe(process.execArgv)})}function KIe(t){return(0,JIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function GIt(){let t=[],e=YIt(process.env.NODE_OPTIONS||"",t);return t.length,e}function YIt(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),XIe=hm>19||hm===19&&sv>=2||hm===18&&sv>=13,Bzt=hm===20&&sv<6||hm===19&&sv>=3,vzt=hm>19||hm===19&&sv>=6;function ZIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),XIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function rq(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let Qe=t.packageRegistry.get(Re);if(Qe)for(let be of Qe.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:be})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:b}=t;function C(Re,Qe){return{fn:Re,args:Qe,error:null,result:null}}function T(Re){let Qe=process.stderr?.hasColors?.()??process.stdout.isTTY,be=(Je,He)=>`\x1B[${Je}m${He}\x1B[0m`,_e=Re.error;console.error(_e?be("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${be("37;1","In \u2190")} ${(0,tq.inspect)(Je,{colors:Qe,compact:!0})}`);Re.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,tq.inspect)(Re.result,{colors:Qe,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${be("38;5;244",Je)}`)}console.error()}function L(Re,Qe){if(e.allowDebug===!1)return Qe;if(Number.isFinite(o)){if(o>=2)return(...be)=>{let _e=C(Re,be);try{return _e.result=Qe(...be)}catch(Te){throw _e.error=Te}finally{T(_e)}};if(o>=1)return(...be)=>{try{return Qe(...be)}catch(_e){let Te=C(Re,be);throw Te.error=_e,T(Te),_e}}}return Qe}function U(Re){let Qe=g(Re);if(!Qe)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Qe}function J(Re){if(Re.name===null)return!0;for(let Qe of t.dependencyTreeRoots)if(Qe.name===Re.name&&Qe.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...zIe("--conditions")]);function le(Re,Qe=te,be){let _e=ce(K.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(_e===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(_e),Je=K.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let He=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(He.exports==null)return null;let x=K.contains(Te,Re);if(x===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!A.test(x)&&(x=`./${x}`);try{let w=GIe({packageJSONUrl:(0,gm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:x,exports:He.exports,base:be?(0,gm.pathToFileURL)(ue.fromPortablePath(be)):null,conditions:Qe});return ue.toPortablePath((0,gm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:_e,pkgJson:He,subpath:au(x),conditions:Qe},w.code)}}function pe(Re,Qe,{extensions:be}){let _e;try{Qe.push(Re),_e=e.fakeFs.statSync(Re)}catch{}if(_e&&!_e.isDirectory())return e.fakeFs.realpathSync(Re);if(_e&&_e.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(K.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=K.resolve(Re,Te.main)),Je&&Je!==Re){let He=pe(Je,Qe,{extensions:be});if(He!==null)return He}}for(let Te=0,Je=be.length;Te{let x=JSON.stringify(He.name);if(_e.has(x))return;_e.add(x);let w=Ee(He);for(let S of w)if(U(S).packagePeers.has(Re))Te(S);else{let F=be.get(S.name);typeof F>"u"&&be.set(S.name,F=new Set),F.add(S.reference)}};Te(Qe);let Je=[];for(let He of[...be.keys()].sort())for(let x of[...be.get(He)].sort())Je.push({name:He,reference:x});return Je}function ce(Re,{resolveIgnored:Qe=!1,includeDiscardFromLookup:be=!1}={}){if(ae(Re)&&!Qe)return null;let _e=K.relative(t.basePath,Re);_e.match(n)||(_e=`./${_e}`),_e.endsWith("/")||(_e=`${_e}/`);do{let Te=b.get(_e);if(typeof Te>"u"||Te.discardFromLookup&&!be){_e=_e.substring(0,_e.lastIndexOf("/",_e.length-2)+1);continue}return Te.locator}while(_e!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(Qe){if(Qe.code==="ENOENT")return;throw Qe}}function ee(Re,Qe,{considerBuiltins:be=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(be&&(0,rp.isBuiltin)(Re))return null;let _e=au(Re),Te=Qe&&au(Qe);if(Qe&&ae(Qe)&&(!K.isAbsolute(Re)||ce(Re)===null)){let x=ye(Re,Qe);if(x===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) - -Require request: "${_e}" -Required by: ${Te} -`,{request:_e,issuer:Te});return ue.toPortablePath(x)}let Je,He=Re.match(a);if(He){if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let[,x,w]=He,S=ce(Qe);if(!S){let Ne=ye(Re,Qe);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). - -Require path: "${_e}" -Required by: ${Te} -`,{request:_e,issuer:Te});return ue.toPortablePath(Ne)}let F=U(S).packageDependencies.get(x),z=null;if(F==null&&S.name!==null){let Ne=t.fallbackExclusionList.get(S.name);if(!Ne||!Ne.has(S.reference)){for(let dt=0,jt=h.length;dtJ(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) -${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} -`).join("")} -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) - -${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} -`).join("")} -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne})}else F===void 0&&(!be&&(0,rp.isBuiltin)(Re)?J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${Te} -`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${Te} -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}):J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${Te} -`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:x,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. - -Required package: ${Z.name}@${Z.reference}${Z.name!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) -`,{request:_e,issuer:Te,dependencyLocator:Object.assign({},Z)});let Se=ie.packageLocation;w?Je=K.join(Se,w):Je=Se}else if(K.isAbsolute(Re))Je=K.normalize(Re);else{if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let x=K.resolve(Qe);Qe.match(u)?Je=K.normalize(K.join(x,Re)):Je=K.normalize(K.join(K.dirname(x),Re))}return K.normalize(Je)}function Ie(Re,Qe,be=te,_e){if(n.test(Re))return Qe;let Te=le(Qe,be,_e);return Te?K.normalize(Te):Qe}function ke(Re,{extensions:Qe=Object.keys(rp.Module._extensions)}={}){let be=[],_e=pe(Re,be,{extensions:Qe});if(_e)return K.normalize(_e);{ZIe(be.map(He=>ue.fromPortablePath(He)));let Te=au(Re),Je=ce(Re);if(Je){let{packageLocation:He}=U(Je),x=!0;try{e.fakeFs.accessSync(He)}catch(w){if(w?.code==="ENOENT")x=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). - -Missing package: ${Je.name}@${Je.reference} -Expected package location: ${au(He)} -`,{unqualifiedPath:Te,extensions:Qe})}}if(!x){let w=He.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} - -Missing package: ${Je.name}@${Je.reference} -Expected package location: ${au(He)} -`,{unqualifiedPath:Te,extensions:Qe})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. - -Source path: ${Te} -${be.map(He=>`Not found: ${au(He)} -`).join("")}`,{unqualifiedPath:Te,extensions:Qe})}}function ht(Re,Qe,be){if(!Qe)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let _e=YIe({name:Re,base:(0,gm.pathToFileURL)(ue.fromPortablePath(Qe)),conditions:be.conditions??te,readFileSyncFn:ne});if(_e instanceof URL)return ke(ue.toPortablePath((0,gm.fileURLToPath)(_e)),{extensions:be.extensions});if(_e.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(_e,Qe,be)}function H(Re,Qe,be={}){try{if(Re.startsWith("#"))return ht(Re,Qe,be);let{considerBuiltins:_e,extensions:Te,conditions:Je}=be,He=ee(Re,Qe,{considerBuiltins:_e});if(Re==="pnpapi")return He;if(He===null)return null;let x=()=>Qe!==null?ae(Qe):!1,w=(!_e||!(0,rp.isBuiltin)(Re))&&!x()?Ie(Re,He,Je,Qe):He;return ke(w,{extensions:Te})}catch(_e){throw Object.hasOwn(_e,"pnpCode")&&Object.assign(_e.data,{request:au(Re),issuer:Qe&&au(Qe)}),_e}}function lt(Re){let Qe=K.normalize(Re),be=mi.resolveVirtual(Qe);return be!==Qe?be:null}return{VERSIONS:we,topLevel:Pe,getLocator:(Re,Qe)=>Array.isArray(Qe)?{name:Qe[0],reference:Qe[1]}:{name:Re,reference:Qe},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[Qe,be]of v)for(let _e of be.keys())Qe!==null&&_e!==null&&Re.push({name:Qe,reference:_e});return Re},getPackageInformation:Re=>{let Qe=g(Re);if(Qe===null)return null;let be=ue.fromPortablePath(Qe.packageLocation);return{...Qe,packageLocation:be}},findPackageLocator:Re=>ce(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=ee(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,Qe)=>ue.fromPortablePath(ke(ue.toPortablePath(Re),Qe))),resolveRequest:L("resolveRequest",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=H(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let Qe=lt(ue.toPortablePath(Re));return Qe!==null?ue.fromPortablePath(Qe):null})}}Pt();var $Ie=(t,e,r)=>{let o=XB(t),a=Yj(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return rq(a,{fakeFs:r,pnpapiResolution:n})};var iq=$e(t1e());qt();var mA={};Kt(mA,{checkManifestCompatibility:()=>r1e,extractBuildRequest:()=>vQ,getExtractHint:()=>sq,hasBindingGyp:()=>oq});Ye();Pt();function r1e(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function vQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:r1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var VIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function sq(t){return t.packageFs.getExtractHint({relevantExtensions:VIt})}function oq(t){let e=K.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Kt(av,{getUnpluggedPath:()=>ov});Ye();Pt();function ov(t,{configuration:e}){return K.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var KIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=S0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=S0(r.project).cjs;if(!oe.existsSync(o))return null;let n=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new dm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},dm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new je.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await JIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let b=h?vQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(K.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let T=K.resolve(C.getRealPath(),r.prefixPath),L=aq(this.opts.project.cwd,T),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:aq(this.opts.project.cwd,mi.resolveVirtual(T)),locator:te})}}return je.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:T,buildRequest:b}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=S0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())je.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=je.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=S0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=bIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=kIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,iq.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=K.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=K.join(a.cwd,"node_modules");if(o&&o.test(K.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(K.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:KIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(vQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:K}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=K.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=je.getMapWithDefault(this.packageRegistry,"@@disk"),o=aq(this.opts.project.cwd,e);return je.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function aq(t,e){let r=K.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function JIt(t){let e=await Mt.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Mt,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:sq(t),hasBindingGyp:oq(t)}}}Ye();Ye();qt();var n1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(b=>{let C=W.parseDescriptor(b),T=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(T.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,T)})`);return L=>{let U=W.stringifyIdent(L);return!n1e.default.isMatch(U,W.stringifyIdent(T))||L.version&&!kr.satisfiesWithPrereleases(L.version,T.range)?!1:(u.delete(b),!0)}}),p=()=>{let b=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(T=>T(C))&&b.push(C);return b},h=b=>{let C=new Set,T=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&T.push(U),!(J>0&&!this.recursive)))for(let le of U.dependencies.values()){let pe=o.storedResolutions.get(le.descriptorHash);if(!pe)throw new Error("Assertion failed: The resolution should have been registered");let Ae=o.storedPackages.get(pe);if(!Ae)throw new Error("Assertion failed: The package should have been registered");L(Ae,J+1)}};for(let U of b)L(U.anchoredPackage,0);return T},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=je.sortMap(E,b=>W.stringifyLocator(b));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let C of E){let T=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,T));L.unplugged=!0,b.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),b.reportJson({locator:W.stringifyLocator(C),version:T})}await o.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var S0=t=>({cjs:K.join(t.cwd,dr.pnpCjs),data:K.join(t.cwd,dr.pnpData),esmLoader:K.join(t.cwd,dr.pnpEsmLoader)}),s1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function zIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=S0(t),A=`--require ${s1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,i1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function XIt(t,e){let r=S0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var ZIt={hooks:{populateYarnPaths:XIt,setupScriptEnvironment:zIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},$It=ZIt;var p1e=$e(u1e());qt();var gq=$e(Be("crypto")),h1e=$e(Be("fs")),g1e=1,Pi="node_modules",DQ=".bin",d1e=".yarn-state.yml",d1t=1e3,dq=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(dq||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(K.sep).length-h.split(K.sep).length),A=K.join(r.project.configuration.startingCwd,Pi);return u.find(p=>K.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=PQ(K.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new pq(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},pq=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=K.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await m1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await hq(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=je.validateEnum(KB,v.manifest.installConfig?.hoistingLimits??b)}catch{let T=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${T}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(KB).join(", ")}, using default: "${b}"`)}return[v.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=v.manifest.installConfig?.selfReferences??b,[v.relativeCwd,b]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:v,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let b=v.anchoredLocator;return{name:W.stringifyIdent(b),reference:b.reference}}),getPackageInformation:v=>{let b=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let b=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(b!==null){let C=b.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=JB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:b}of p)this.opts.report.reportError(v,b);return}let E=qj(A);await B1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let b=W.parseLocator(v),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,b]of E.entries()){if(C1e(v))continue;let C=W.parseLocator(v),T=this.localStore.get(C.locatorHash);if(typeof T>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(T.pkg))continue;let L=mA.extractBuildRequest(T.pkg,T.customPackageData,T.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:b.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function m1t(t,e){let r=await Mt.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Mt,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:mA.hasBindingGyp(e)}}}async function y1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will -`,n+=`# cause your node_modules installation to become invalidated. -`,n+=` -`,n+=`__metadata: -`,n+=` version: ${g1e} -`,n+=` nmMode: ${o.value} -`;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` -`,n+=`${JSON.stringify(E)}: -`,n+=` locations: -`;for(let v of I.locations){let b=K.contains(t.cwd,v);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(b)} -`}if(I.aliases.length>0){n+=` aliases: -`;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} -`}if(E===A&&r.size>0){n+=` bin: -`;for(let[v,b]of r){let C=K.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: -`;for(let[T,L]of b){let U=K.relative(K.join(v,Pi),L);n+=` ${JSON.stringify(T)}: ${JSON.stringify(U)} -`}}}}let p=t.cwd,h=K.join(p,Pi,d1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function hq(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=K.join(r,Pi,d1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Vi(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>g1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(b=>K.join(r,b)),v=E.bin;if(v)for(let[b,C]of Object.entries(v)){let T=K.join(r,ue.toPortablePath(b)),L=je.getMapWithDefault(p,T);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([T,Pi,J].join(K.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let b of E.aliases){let{scope:C,name:T}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,T),b),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:m1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var YC=async(t,e)=>{if(t.split(K.sep).indexOf(Pi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=K.join(t,o.name);o.isDirectory()?(o.name!==Pi||e&&e.innerLoop)&&await YC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},A1e=4,PQ=(t,{skipPrefix:e})=>{let r=K.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(K.sep).filter(p=>p!==""),a=o.indexOf(Pi),n=o.slice(0,a).join(K.sep),u=K.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},m1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&K.contains(e,n.target)!==null){let A=je.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=PQ(u,{skipPrefix:e}),h=je.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(K.relative(K.dirname(e),t),e)};async function y1e(t,e,r){let o=K.join(t,`${gq.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function E1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===E1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=K.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(E1e||{}),C1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=K.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),b=new Map;for(let C of v){let T=K.join(E,C.name),L,U=K.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(b.set(T,L),C.isDirectory()&&T!==Pi){let J=await A(T);for(let[te,le]of J)b.set(te,le)}}return b},p;if(a.value==="hardlinks-global"&&o&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=K.join(e,E),b=K.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(b,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await E1t({srcPath:v,dstPath:b,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await mq(K.resolve(K.dirname(b),I.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await y1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function w1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,b)=>{let C=!0,T=K.join(h,E),L=new Set;if(E===Pi||E.startsWith("@")){let J;try{J=oe.statSync(T)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(T))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let le=K.join(h,Pi,DQ),pe;try{pe=oe.statSync(le)}catch{}if(!pe)A=!0;else if(pe.mtimeMs>r){A=!0;let Ae=new Set(oe.readdirSync(le)),ye=new Map;n.set(h,ye);for(let[ae,we]of te)Ae.has(ae)&&ye.set(ae,we)}else n.set(h,te)}}else C=b.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,le={children:new Map,linkType:J,locator:te};if(v.children.set(E,le),te){let pe=je.getSetWithDefault(u,te);pe.add(T),u.set(te,pe)}for(let pe of U.children.keys())p(T,pe,U,le,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,b={children:new Map,linkType:I,locator:v};if(a.set(h,b),v){let C=je.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Pi)&&p(h,Pi,E,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function C1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function I1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=C1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let b=K.join(p[0],v);v!==""&&oe.existsSync(b)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=K.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[b,C]of v){let T=K.join(A,ue.toPortablePath(C));E.set(b,T)}for(let[b,C]of h.children){let T=K.join(A,b),L=u(T,T,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,b]of h.children){let C=u(K.join(A,v),p,b);for(let[T,L]of C)E.set(T,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var f1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function yq(t){return K.join(t.get("globalFolder"),"store")}async function B1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=K.join(o.cwd,Pi),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=w1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=m1e(e,{skipPrefix:o.cwd}),b=[],C=async({srcDir:we,dstDir:Pe,linkType:g,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(K.dirname(Pe),{recursive:!0}),await mq(K.resolve(we),Pe,ce)):await C1t(Pe,we,{baseFs:r,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${we} -> ${Pe} ${Ie.message}`,Ie}finally{le.tick()}})().then(()=>b.splice(b.indexOf(ee),1));b.push(ee),b.length>A1e&&await Promise.race(b)},T=async(we,Pe,g)=>{let Ee=(async()=>{let De=async(ce,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(ce,{withFileTypes:!0});for(let ke of Ie){if(!ee.innerLoop&&ke.name===DQ)continue;let ht=K.join(ce,ke.name),H=K.join(ne,ke.name);ke.isDirectory()?(ke.name!==Pi||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await De(ht,H,{...ee,innerLoop:!0})):ye.value==="hardlinks-local"||ye.value==="hardlinks-global"?await oe.linkPromise(ht,H):await oe.copyFilePromise(ht,H,h1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${ce} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||le.tick()}};await De(we,Pe,g)})().then(()=>b.splice(b.indexOf(Ee),1));b.push(Ee),b.length>A1e&&await Promise.race(b)},L=async(we,Pe,g)=>{if(g)for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await L(K.join(we,Ee),De,ce)}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!1});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:we===A,allowSymlink:Ee})}};for(let[we,Pe]of p){let g=v.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee),ne=K.join(we,Ee);await L(ne,De,ce)}}let U=async(we,Pe,g)=>{if(g){f1e(Pe.locator,g.locator)||await YC(we,{contentsOnly:Pe.linkType==="HARD"});for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!0});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:Pe.linkType==="HARD",allowSymlink:Ee})}};for(let[we,Pe]of v){let g=p.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}let J=new Map,te=[];for(let[we,Pe]of E)for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=v.get(Ee),ne=Ee;if(ce){for(let ee of De)if(ne=K.join(ne,ee),ce=ce.children.get(ee),!ce)break;if(ce){let ee=f1e(ce.locator,we),Ie=e.get(ce.locator),ke=Ie.target,ht=ne,H=Ie.linkType;if(ee)J.has(ke)||J.set(ke,ht);else if(ke!==ht){let lt=W.parseLocator(ce.locator);W.isVirtualLocator(lt)&&(lt=W.devirtualizeLocator(lt)),te.push({srcDir:ke,dstDir:ht,linkType:H,realLocatorHash:lt.locatorHash})}}}}for(let[we,{locations:Pe}]of e.entries())for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(we),ke=W.parseLocator(we);W.isVirtualLocator(ke)&&(ke=W.devirtualizeLocator(ke));let ht=ke.locatorHash,H=Ie.target,lt=g;if(H===lt)continue;let Re=Ie.linkType;for(let Qe of De)ne=ne.children.get(Qe);if(!ce)te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});else for(let Qe of De)if(ee=K.join(ee,Qe),ce=ce.children.get(Qe),!ce){te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});break}}let le=Xs.progressViaCounter(te.length),pe=a.reportProgress(le),Ae=o.configuration.get("nmMode"),ye={value:Ae},ae=o.configuration.get("winLinkType");try{let we=ye.value==="hardlinks-global"?`${yq(o.configuration)}/v1`:null;if(we&&!await oe.existsPromise(we)){await oe.mkdirpPromise(we);for(let g=0;g<256;g++)await oe.mkdirPromise(K.join(we,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:ae,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await T(Ee,g.dstDir,{nmMode:ye})}await Promise.all(b),await oe.mkdirPromise(A,{recursive:!0});let Pe=await I1t(e,v,o.cwd,{loadManifest:n});await v1t(h,Pe,o.cwd,ae),await y1t(o,e,Pe,ye,{installChangedByUser:I}),Ae=="hardlinks-global"&&ye.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{pe.stop()}}async function v1t(t,e,r,o){for(let a of t.keys()){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=K.join(a,Pi,DQ);await oe.removePromise(n)}}for(let[a,n]of e){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=K.join(a,Pi,DQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(K.join(u,p)),process.platform==="win32"&&await oe.removePromise(K.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=K.join(u,p);E!==h&&(process.platform==="win32"?await(0,p1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await mq(h,I,o),K.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Pt();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new Eq(r)}},Eq=class extends dm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=$Ie(r,this.opts.project.cwd,o),{tree:n,errors:u}=JB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let b=W.parseLocator(v.locator),C=W.stringifyIdent(b);C===I?A.set(I,b.reference):A.set(I,[C,b.reference])},h=K.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=K.join(h,I),b=n.get(v);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(I,b);else for(let C of b.dirList){let T=K.join(v,C),L=n.get(T);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var D1t={hooks:{cleanGlobalArtifacts:async t=>{let e=yq(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},P1t=D1t;var EG={};Kt(EG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Ovt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>on,npmPublishUtils:()=>sw});Ye();var x1e=$e(zn());var Wn="npm:";var on={};Kt(on,{AuthType:()=>P1e,customPackageError:()=>mm,del:()=>N1t,get:()=>ym,getIdentUrl:()=>SQ,getPackageMetadata:()=>KC,handleInvalidAuthenticationError:()=>b0,post:()=>T1t,put:()=>R1t});Ye();Ye();Pt();var Bq=$e(A2()),v1e=$e(S_()),D1e=$e(zn()),vq=Be("url");var Zn={};Kt(Zn,{RegistryType:()=>w1e,getAuditRegistry:()=>S1t,getAuthConfiguration:()=>Iq,getDefaultRegistry:()=>uv,getPublishRegistry:()=>x1t,getRegistryConfiguration:()=>I1e,getScopeConfiguration:()=>wq,getScopeRegistry:()=>WC,normalizeRegistry:()=>oc});var w1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(w1e||{});function oc(t){return t.replace(/\/$/,"")}function S1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function x1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?WC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function WC(t,{configuration:e,type:r="npmRegistryServer"}){let o=wq(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function I1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function wq(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function Iq(t,{configuration:e,ident:r}){let o=r&&wq(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:I1e(t,{configuration:e})||e}var P1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(P1e||{});async function b0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(bQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await M1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function mm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function SQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map;async function KC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){return await je.getFactoryWithDefault(B1e,t.identHash,async()=>{let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=Q1t(A,o),h=K.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh){try{E=await oe.readJsonPromise(h)}catch{}if(E){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let T=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(T);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let b=I["dist-tags"].latest;if(v.has(b)){let C=Object.keys(E.metadata.versions).sort(D1e.default.compare),T=C.indexOf(b);for(;v.has(C[T])&&T>=0;)T-=1;T>=0?I["dist-tags"].latest=C[T]:delete I["dist-tags"].latest}}return I}}}return await ym(SQ(t),{...u,customErrorMessage:mm,configuration:A,registry:o,ident:t,headers:{...a,["If-None-Match"]:E?.etag,["If-Modified-Since"]:E?.lastModified},wrapNetworkRequest:async I=>async()=>{let v=await I();if(v.statusCode===304){if(E===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...v,body:E.metadata}}let b=b1t(JSON.parse(v.body.toString()));B1e.set(t.identHash,b);let C={metadata:b,etag:v.headers.etag,lastModified:v.headers["last-modified"]},T=`${h}-${process.pid}.tmp`;return await oe.mkdirPromise(p,{recursive:!0}),await oe.writeJsonPromise(T,C,{compact:!0}),await oe.renamePromise(T,h),{...v,body:b}}})})}var S1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function b1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,v1e.default)(r,S1e)]))}}var k1t=wn.makeHash(...S1e).slice(0,6);function Q1t(t,e){let r=F1t(t),o=new vq.URL(e);return K.join(r,k1t,o.hostname)}function F1t(t){return K.join(t.get("globalFolder"),"metadata/npm")}async function ym(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await xQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await rn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await b0(p,{registry:n,configuration:e,headers:r}),p}}async function T1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I)||p)throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function R1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I))throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function N1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await xQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await rn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!bQ(E)||A)throw await b0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await Dq(E,{configuration:r});let I={...o,...VC(A)};try{return await rn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await b0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return WC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function xQ(t,{authType:e=2,configuration:r,ident:o}){let a=Iq(t,{configuration:r,ident:o}),n=L1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function L1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function M1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await rn.get(new vq.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function Dq(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,Bq.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` -`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,Bq.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` -`),o}function bQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!x1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await ym(o.__archiveUrl,{customErrorMessage:mm,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var b1e=$e(zn()),k1e=Be("url");var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new k1e.URL(e.reference);return!(!b1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await ym(dl.getLocatorUrl(e),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}catch{o=await ym(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=WC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${SQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Pq=$e(zn());var kQ=W.makeIdent(null,"node-gyp"),O1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!Pq.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Pq.default.valid(a.raw)?a.raw:void 0}),u=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return je.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:je.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return je.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await KC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Mt;if(u.load(n.versions[a]),!u.dependencies.has(kQ.identHash)&&!u.peerDependencies.has(kQ.identHash)){for(let A of u.scripts.values())if(A.match(O1t)){u.dependencies.set(kQ.identHash,W.makeDescriptor(kQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var Q1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!QE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!Q1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var sw={};Kt(sw,{getGitHead:()=>Lvt,getPublishAccess:()=>wBe,getReadmeContent:()=>IBe,makePublishBody:()=>Nvt});Ye();Ye();Pt();var hG={};Kt(hG,{PackCommand:()=>O0,default:()=>mvt,packUtils:()=>CA});Ye();Ye();Ye();Pt();qt();var CA={};Kt(CA,{genPackList:()=>$Q,genPackStream:()=>pG,genPackageManifest:()=>lBe,hasPackScripts:()=>AG,prepareForPack:()=>fG});Ye();Pt();var uG=$e(Zo()),oBe=$e(rBe()),aBe=Be("zlib"),ovt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],avt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function AG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function fG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=K.join(t.cwd,Mt.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function pG(t,e){typeof e>"u"&&(e=await $Q(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(K.normalize(n));for(let n of t.manifest.bin.values())r.add(K.normalize(n));let o=oBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=K.normalize(n),A=K.resolve(t.cwd,u),p=K.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,b,C=new Promise((L,U)=>{v=L,b=U}),T=L=>{L?b(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await lBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,T)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},T):T(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,aBe.createGzip)();return o.pipe(a),a}async function lBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function $Q(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of avt)o.reject.push(I);for(let I of ovt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=K.relative(t.cwd,I),b=K.resolve(Bt.root,v);o.reject.push(b)};a(K.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=K.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(K.resolve(Bt.root,u)),A!=null&&n.accept.push(K.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(K.resolve(Bt.root,p));for(let I of h.values())n.accept.push(K.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(K.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(K.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)cBe(n.accept,I,{cwd:Bt.root})}return await lvt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function lvt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!iBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let T of E)I=I||T===".gitignore",v=v||T===".npmignore";let b=v?await nBe(n,A,".npmignore"):I?await nBe(n,A,".gitignore"):null,C=b!==null?[b].concat(p):p;iBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let T of E)u.push([K.resolve(A,T),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(K.relative(Bt.root,A))}return a.sort()}async function nBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(K.join(e,r),"utf8");for(let n of a.split(/\n/g))cBe(o.reject,n,{cwd:e});return o}function cvt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=K.resolve(e,t)),r&&(t=`!${t}`),t}function cBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(cvt(o,{cwd:r}))}function iBe(t,{globalList:e,ignoreLists:r}){let o=ZQ(t,e.accept);if(o!==0)return o===2;let a=ZQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=ZQ(t,n.accept);if(u!==0)return u===2;let A=ZQ(t,n.reject);if(A!==0)return A===1}return!1}function ZQ(t,e){let r=e,o=[];for(let a=0;a{await fG(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await $Q(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await pG(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};O0.paths=[["pack"]],O0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function uvt(t,{workspace:e}){let r=t.replace("%s",Avt(e)).replace("%v",fvt(e));return ue.toPortablePath(r)}function Avt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function fvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var pvt=["dependencies","devDependencies","peerDependencies"],hvt="workspace:",gvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of pvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===hvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},dvt={hooks:{beforeWorkspacePacking:gvt},commands:[O0]},mvt=dvt;var yBe=Be("crypto"),EBe=$e(mBe()),CBe=Be("url");async function Nvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,yBe.createHash)("sha1").update(e).digest("hex"),E=EBe.default.fromData(e).toString(),I=r??wBe(t,u),v=await IBe(t),b=await CA.genPackageManifest(t),C=`${p}-${A}.tgz`,T=new CBe.URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...b,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:T.toString()}}},readme:v}}async function Lvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function wBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function IBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} -`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var yG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},BBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Mvt={configuration:{...yG,...BBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...yG,...BBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...yG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Ovt=Mvt;var xG={};Kt(xG,{NpmAuditCommand:()=>_0,NpmInfoCommand:()=>H0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>q0,NpmPublishCommand:()=>G0,NpmTagAddCommand:()=>W0,NpmTagListCommand:()=>Y0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>K0,default:()=>Gvt,npmAuditTypes:()=>Tv,npmAuditUtils:()=>eF});Ye();Ye();qt();var vG=$e(Zo());Za();var Tv={};Kt(Tv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var eF={};Kt(eF,{allSeverities:()=>ow,getPackages:()=>BG,getReportTree:()=>wG,getSeverityInclusions:()=>CG,getTopLevelDependencies:()=>IG});Ye();var vBe=$e(zn());var ow=["info","low","moderate","high","critical"];function CG(t){if(typeof t>"u")return new Set(ow);let e=ow.indexOf(t),r=ow.slice(e);return new Set(r)}function wG(t){let e={},r={children:e};for(let[o,a]of je.sortMap(Object.entries(t),n=>n[0]))for(let n of je.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(vBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:je.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function IG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function BG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),b=je.getMapWithDefault(o,v);je.getArrayWithDefault(b,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var _0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Vs(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Vs(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=IG(o,a,{all:this.all,environment:this.environment}),u=BG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>vG.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=on.post("/-/npm/v1/security/advisories/bulk",p,{authType:on.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,le])=>{let pe=await on.getPackageMetadata(W.parseIdent(te),{project:o});return je.mapAndFilter(le,Ae=>{let{deprecated:ye}=pe.versions[Ae];return ye?[te,Ae,ye]:je.mapAndFilter.skip})})),J=await L;for(let[te,le,pe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(Ae=>kr.satisfiesWithPrereleases(le,Ae.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:pe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));E=J});if(I.hasErrors())return I.exitCode();let v=CG(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!vG.default.isMatch(`${te.id}`,b)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let le=u.get(L);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let pe=[...le.keys()].filter(ye=>kr.satisfiesWithPrereleases(ye,te.vulnerable_versions)),Ae=new Map;for(let ye of pe)for(let ae of le.get(ye))Ae.set(ae.locatorHash,ae);return{...te,versions:pe,dependents:[...Ae.values()]}}))}let T=Object.keys(C).length>0;return T?($s.emitTree(wG(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),T?1:0)}};_0.paths=[["npm","audit"]],_0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` - This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). - - For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. - - Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${ow.map(r=>`\`${r}\``).join(", ")}. - - If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. - - If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. - - If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. - - To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. - `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();Pt();qt();var DG=$e(zn()),PG=Be("util"),H0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(K.join(le.cwd,dr.manifest))}`);E=W.makeDescriptor(le.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=on.getIdentUrl(E),v=SG(await on.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:on.customPackageError})),b=Object.keys(v.versions).sort(DG.default.compareLoose),T=v["dist-tags"].latest||b[b.length-1],L=kr.validRange(E.range);if(L){let le=DG.default.maxSatisfying(b,L);le!==null?T=le:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?T=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[T],J={...v,...U,version:T,versions:b},te;if(a!==null){te={};for(let le of a){let pe=J[le];if(typeof pe<"u")te[le]=pe;else{p.reportWarning(1,`The ${de.pretty(r,le,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});PG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` -`),this.context.stdout.write(`${(0,PG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} -`);return A.exitCode()}};H0.paths=[["npm","info"]],H0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function SG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=SG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=SG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var DBe=$e(A2()),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await _vt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=`/-/user/org.couchdb.user:${encodeURIComponent(u.name)}`,p=await on.put(A,u,{attemptedAs:u.name,configuration:r,registry:o,jsonResponse:!0,authType:on.AuthType.NO_AUTH});return await Uvt(o,p.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function tF({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await AC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Uvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=je.isIndexableObject(A)?A:{},h=p[u],E=je.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ve.updateHomeConfiguration(n)}async function _vt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let{username:u,password:A}=await(0,DBe.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),{name:u,password:A}}Ye();Ye();qt();var aw=new Set(["npmAuthIdent","npmAuthToken"]),q0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ve.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await jvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await PBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish});await PBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};q0.paths=[["npm","logout"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function Hvt(t,e){let r=t[e];if(!je.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...aw].every(n=>!o.has(n)))return!1;for(let n of aw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of aw)delete a[n];return t[e]=a,!0}async function jvt(){let t=e=>{let r=!1,o=je.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Hvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ve.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function PBe(t,e){return await Ve.updateHomeConfiguration({[t]:r=>{let o=je.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=je.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...aw].every(p=>!u.has(p)))return r;for(let p of aw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of aw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var G0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await on.get(on.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await CA.prepareForPack(a,{report:h},async()=>{let E=await CA.genPackList(a);for(let T of E)h.reportInfo(null,T);let I=await CA.genPackStream(a,E),v=await je.bufferStream(I),b=await sw.getGitHead(a.cwd),C=await sw.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:b});await on.put(on.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};G0.paths=[["npm","publish"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var SBe=$e(zn());Ye();Pt();qt();var Y0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(K.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Rv(n,r),p={children:je.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};Y0.paths=[["npm","tag","list"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` - This command will list all tags of a package from the npm registry. - - If the package is not specified, Yarn will default to the current workspace. - `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Rv(t,e){let r=`/-/package${on.getIdentUrl(t)}/dist-tags`;return on.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:on.customPackageError})}var W0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!SBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let b=await Rv(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};W0.paths=[["npm","tag","add"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` - This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. - `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Rv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` - This command will remove a tag from a package from the npm registry. - `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var K0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await AC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await on.get("/-/whoami",{configuration:r,registry:o,authType:on.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};K0.paths=[["npm","whoami"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var qvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[_0,H0,j0,q0,G0,W0,Y0,V0,K0]},Gvt=qvt;var NG={};Kt(NG,{PatchCommand:()=>X0,PatchCommitCommand:()=>z0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>lDt,patchUtils:()=>Dm});Ye();Ye();Pt();nA();var Dm={};Kt(Dm,{applyPatchFile:()=>nF,diffFolders:()=>TG,ensureUnpatchedDescriptor:()=>bG,ensureUnpatchedLocator:()=>sF,extractPackageToDisk:()=>FG,extractPatchFlags:()=>RBe,isParentRequired:()=>QG,isPatchDescriptor:()=>iF,isPatchLocator:()=>J0,loadPatchFiles:()=>Ov,makeDescriptor:()=>oF,makeLocator:()=>kG,makePatchHash:()=>RG,parseDescriptor:()=>Lv,parseLocator:()=>Mv,parsePatchFile:()=>Nv,unpatchDescriptor:()=>sDt,unpatchLocator:()=>oDt});Ye();Pt();Ye();Pt();var Yvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function lw(t){return K.relative(Bt.root,K.resolve(Bt.root,ue.toPortablePath(t)))}function Wvt(t){let e=t.trim().match(Yvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Vvt=420,Kvt=493;var xBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Jvt=t=>({header:Wvt(t),parts:[]}),zvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function Xvt(t){let e=[],r=xBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=xBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:lw(E),toPath:lw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(p),hash:v})}break;case"file creation":{let te=n||T;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(h),hash:b})}break;case"patch":case"mode change":J=T||n;break;default:je.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:lw(J),oldMode:rF(u),newMode:rF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:lw(J),hunks:L,beforeHash:v,afterHash:b})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function rF(t){let e=parseInt(t,8)&511;if(e!==Vvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Zvt(Xvt(e))}function $vt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:je.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Pt();var cw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function uw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function nF(t,{baseFs:e=new Rn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await uw(e,K.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await uw(e,K.dirname(a.fromPath),async()=>{await uw(e,K.dirname(a.toPath),async()=>{await uw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` -`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` -`):"";await e.mkdirpPromise(K.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await uw(e,a.path,async()=>{await rDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(bBe(a.newMode)!==bBe(u))continue;await uw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:je.assertNever(a);break}}function bBe(t){return(t&64)>0}function kBe(t){return t.replace(/\s+$/,"")}function tDt(t,e){return kBe(t)===kBe(e)}async function rDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),b=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),T=Math.max(b,C),L=0,U=0,J=null;for(;L<=T;){if(L<=b&&(U=v-L,J=QBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=QBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new cw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let b=v.index+E;u.splice(b,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:je.assertNever(v);break}await r.writeFilePromise(e,u.join(` -`),{mode:a})}function QBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!tDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:je.assertNever(a.type);break}return o}var iDt=/^builtin<([^>]+)>$/;function Aw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function iF(t){return t.range.startsWith("patch:")}function J0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=Aw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Mv(t){let{sourceItem:e,...r}=Aw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function sDt(t){let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function oDt(t){let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function bG(t){if(!iF(t))return t;let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function sF(t){if(!J0(t))return t;let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function FBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function oF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,FBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function kG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,FBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function TBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(iDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):K.isAbsolute(a)?t(a):e(a)}function RBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function QG(t){return TBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Ov(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await je.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=RBe(u),p=await TBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(K.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(K.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` -`));return n}async function FG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=sF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=K.join(A,"source"),h=K.join(A,"user"),E=K.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let b,C;if(t.locatorHash===a.locatorHash){let T=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>T.releaseFs?.()),b=T,C=T}else b=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>b.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let b of v)b()}return oe.detachTemp(A),h}async function TG(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. -The following error was reported by 'git': -${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${je.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${je.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(je.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(je.escapeRegExp(`${o}/`),"g"),"")}function RG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function NBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:je.assertNever(o.type)}}var Uv=class{supports(e,r){return!!J0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Mv(e),A=await Ov(o,u,r),p=await oe.mktempPromise(),h=K.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await je.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:b,optional:C}of A){if(b===null)continue;let T=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(K.resolve(Bt.root,I),{baseFs:T});try{await nF(Nv(b),{baseFs:L,version:n})}catch(U){if(!(U instanceof cw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",le=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,pe=Ae=>{!J||NBe(U.hunk,{configuration:r.project.configuration,report:Ae})};if(T.discardAndClose(),C){r.report.reportWarningOnce(66,le,{reportExtra:pe});continue}else throw new zt(66,le,pe)}T.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!iF(e)}supportsLocator(e,r){return!!J0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!QG(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Ov(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=RG(u,A.version);return[kG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Mv(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Pt();qt();var z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=K.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=K.join(n,"../source"),A=K.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await TG(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=K.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let b=[],C=new Map;for(let T of o.storedPackages.values()){if(W.isVirtualLocator(T))continue;let L=T.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=bG(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let pe=o.tryWorkspaceByLocator(T);if(pe)b.push(pe);else{let Ae=o.originalPackages.get(T.locatorHash);if(!Ae)throw new Error("Assertion failed: Expected the original package to have been registered");let ye=Ae.dependencies.get(L.identHash);if(!ye)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(ye.descriptorHash,ye)}}for(let T of b)for(let L of Mt.hardDependencies){let U=T.manifest[L].get(E.identHash);if(!U)continue;let J=oF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});T.manifest[L].set(U.identHash,J)}for(let T of C.values()){let L=oF(T,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:T.range}},reference:L.range})}await o.persist()}};z0.paths=[["patch-commit"]],z0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();Pt();qt();var X0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=je.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?je.mapAndFilter.skip:W.isVirtualLocator(p)?je.mapAndFilter.skip:J0(p)!==this.update?je.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): -${A.map(p=>` -- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=sF(u),h=await FG(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};X0.paths=[["patch"]],X0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var aDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[z0,X0],fetchers:[Uv],resolvers:[_v]},lDt=aDt;var OG={};Kt(OG,{PnpmLinker:()=>Hv,default:()=>pDt});Ye();Pt();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=K.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new LG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},LG=class{constructor(e){this.opts=e;this.asyncActions=new je.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=PD(oe,{indexPath:K.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=K.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?K.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=cDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Mt.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Mt,misc:{hasBindingGyp:mA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=mA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!LBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await uDt(a),A=new Map(u),p=[n],h=(I,v)=>{let b=v;LBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),b=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(b.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let T=W.stringifyIdent(I),L=K.join(a,T),U=K.relative(K.dirname(L),C.packageLocation),J=A.get(T);A.delete(T),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(K.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(ADt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=OBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=K.contains(e,o);if(a===null)continue;let[n]=a.split(K.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(K.join(e,o))}))}return await this.asyncActions.wait(),await MG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await MG(MBe(this.opts.project)),{customData:this.customData}}};function MBe(t){return K.join(t.cwd,dr.nodeModules)}function OBe(t){return K.join(MBe(t),".store")}function cDt(t,{project:e}){let r=W.slugifyLocator(t),o=OBe(e),a=K.join(o,r,"package"),n=K.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function LBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function uDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(K.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function ADt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(K.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>MG(K.join(t,a)))))}async function MG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var fDt={linkers:[Hv]},pDt=fDt;var YG={};Kt(YG,{StageCommand:()=>Z0,default:()=>vDt,stageUtils:()=>lF});Ye();Pt();qt();Ye();Pt();var lF={};Kt(lF,{ActionType:()=>UG,checkConsensus:()=>aF,expandDirectory:()=>jG,findConsensus:()=>qG,findVcsRoot:()=>_G,genCommitMessage:()=>GG,getCommitPrefix:()=>UBe,isYarnFile:()=>HG});Pt();var UG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(UG||{});async function _G(t,{marker:e}){do if(!oe.existsSync(K.join(t,e)))t=K.dirname(t);else return t;while(t!=="/");return null}function HG(t,{roots:e,names:r}){if(r.has(K.basename(t)))return!0;do if(!e.has(t))t=K.dirname(t);else return!0;while(t!=="/");return!1}function jG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=K.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function aF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function qG(t){let e=aF(t,/^(\w\(\w+\):\s*)?\w+s/),r=aF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=aF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function UBe(t){return t.useComponent?"chore(yarn): ":""}var hDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function GG(t,e){let r=UBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=hDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var gDt="Commit generated via `yarn stage`",dDt=11;async function _Be(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function mDt(t,e){let r=[],o=e.filter(h=>K.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=K.relative(t,E);if(h===4){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b),T=await Mt.fromFile(E),L=new Map([...T.dependencies,...T.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let le=W.stringifyIdent(te),pe=L.get(J);pe?pe.range!==te.range&&r.push([4,`${le} to ${pe.range}`]):r.push([3,le])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Mt.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${dDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=qG(u);return GG(A,r)}var yDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},EDt={[0]:["A "],[4]:["M "],[1]:["D "]},HBe={async findRoot(t){return await _G(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?EDt:yDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=K.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return jG(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(b=>u[b].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>HG(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await mDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} - -${gDt} -`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var CDt=[HBe],Z0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await wDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of IDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} -`);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} -`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};Z0.paths=[["stage"]],Z0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function wDt(t){let e=null,r=null;for(let o of CDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function IDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=K.resolve(K.dirname(e),oe.readlinkSync(e));else break}return r}var BDt={commands:[Z0]},vDt=BDt;var WG={};Kt(WG,{default:()=>FDt});Ye();Ye();Pt();var GBe=$e(zn());Ye();var jBe=$e(ZH()),DDt="e8e1bd300d860104bb8c58453ffa1eb4",PDt="OFCNCOG2CU",qBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,jBe.default)(PDt,DDt,{requester:{async send(r){try{let o=await rn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var YBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,xDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(K.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await qBe(r,n))return;let E=YBe(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=GBe.default.coerce(I);if(v===null)return;let b=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),b),T=je.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return je.mapAndFind.skip;let te=[];for(let le of Mt.allDependencies){let pe=L.manifest[le].get(C.identHash);typeof pe>"u"||te.push([le,pe])}return te.length===0?je.mapAndFind.skip:te});if(typeof T<"u")for(let[L,U]of T)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(K.join(o.cwd,"tsconfig.json"))))return;let u=YBe(r),A=W.makeIdent("types",u);for(let p of Mt.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},kDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},QDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:xDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:kDt}},FDt=QDt;var XG={};Kt(XG,{VersionApplyCommand:()=>$0,VersionCheckCommand:()=>eg,VersionCommand:()=>tg,default:()=>XDt,versionUtils:()=>gw});Ye();Ye();qt();var gw={};Kt(gw,{Decision:()=>pw,applyPrerelease:()=>XBe,applyReleases:()=>zG,applyStrategy:()=>uF,clearVersionFiles:()=>VG,getUndecidedDependentWorkspaces:()=>qv,getUndecidedWorkspaces:()=>cF,openVersionFile:()=>hw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>jv,suggestStrategy:()=>JG,updateVersionFiles:()=>KG,validateReleaseDecision:()=>fw});Ye();Pt();Nl();qt();var zBe=$e(JBe()),BA=$e(zn()),VDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,pw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(pw||{});function fw(t){let e=BA.default.valid(t);return e||je.validateEnum((0,zBe.default)(pw,"UNDECIDED"),t)}async function jv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${K.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let b=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),T=uF(b,fw(E));if(T===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${E}`);let L=typeof C<"u"?BA.default.gt(T,C)?T:C:T;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,XBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function VG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function KG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function hw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(b=>K.contains(u,b)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: -- ${A.map(b=>ue.fromPortablePath(b)).join(` -- `)}`);let p=new Set(je.mapAndFilter(n,b=>{let C=t.tryWorkspaceByFilePath(b);return C===null?je.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:K.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Vi(E),v=new Map;for(let b of I.declined||[]){let C=W.parseIdent(b),T=t.getWorkspaceByIdent(C);v.set(T,"decline")}for(let[b,C]of Object.entries(I.releases||{})){let T=W.parseIdent(b),L=t.getWorkspaceByIdent(T);v.set(L,fw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(b=>b.manifest.version!==null)),releases:v,async saveAll(){let b={},C=[],T=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?b[U]=fw(J):p.has(L)&&T.push(U)}await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:C.length>0?C:void 0,undecided:T.length>0?T:void 0})))}}}function KDt(t){return cF(t).size>0||qv(t).length>0}function cF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function qv(t,{include:e=new Set}={}){let r=[],o=new Map(je.mapAndFilter([...t.releases],([n,u])=>u==="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(je.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Mt.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function JG(t,e){let r=BA.default.clean(e);for(let o of Object.values(pw))if(o!=="undecided"&&o!=="decline"&&BA.default.inc(t,o)===r)return o;return null}function uF(t,e){if(BA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!BA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=BA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function zG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Mt.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;je.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,BA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let b=v.range,C=!1;if(b.startsWith(Xn.protocol)&&(b=b.slice(Xn.protocol.length),C=!0,b===a.relativeCwd))continue;let T=b.match(VDt);if(!T){r.reportWarning(0,`Couldn't auto-upgrade range ${b} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${T[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var JDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function XBe(t,{current:e,prerelease:r}){let o=new BA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=JDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var $0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await jv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let b=h.get(v);typeof b<"u"&&E.set(v,b)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}zG(o,E,{report:A}),this.dryRun||(p||(this.all?await VG(o):await KG(o,[...E.keys()])),A.reportSeparator())});return u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};$0.paths=[["version","apply"]],$0.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` - This command will apply the deferred version changes and remove their definitions from the repository. - - Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. - - By default only the current workspace will be bumped, but you can configure this behavior by using one of: - - - \`--recursive\` to also apply the version bump on its dependencies - - \`--all\` to apply the version bump on all packages in the repository - - Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. - `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();Pt();qt();var AF=$e(zn());var eg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){SC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Sj(),Xwe)),{useListInput:n}=await Promise.resolve().then(()=>(pQ(),Zwe)),{renderForm:u}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState();let T=await hw(b);if(T===null||T.releaseRoots.size===0)return 0;if(T.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:ye,active:ae,decision:we,setDecision:Pe})=>{let g=ye.manifest.raw.stableVersion??ye.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,ye.anchoredLocator)})`);if(AF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(we,Ee,{active:ae,minus:"left",plus:"right",set:Pe});let De=we==="undecided"?h.createElement(p,{color:"yellow"},g):we==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},AF.default.valid(we)?we:AF.default.inc(g,we)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,ye.anchoredLocator)," - ",De)),h.createElement(A,null,Ee.map(ce=>h.createElement(A,{key:ce,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:ce===we})," ",ce)))))},J=ye=>{let ae=new Set(T.releaseRoots),we=new Map([...ye].filter(([Pe])=>ae.has(Pe)));for(;;){let Pe=qv({project:T.project,releases:we}),g=!1;if(Pe.length>0){for(let[Ee]of Pe)if(!ae.has(Ee)){ae.add(Ee),g=!0;let De=ye.get(Ee);typeof De<"u"&&we.set(Ee,De)}}if(!g)break}return{relevantWorkspaces:ae,relevantReleases:we}},te=()=>{let[ye,ae]=I(()=>new Map(T.releases)),we=E((Pe,g)=>{let Ee=new Map(ye);g!=="undecided"?Ee.set(Pe,g):Ee.delete(Pe);let{relevantReleases:De}=J(Ee);ae(De)},[ye,ae]);return[ye,we]},le=({workspaces:ye,releases:ae})=>{let we=[];we.push(`${ye.size} total`);let Pe=0,g=0;for(let Ee of ye){let De=ae.get(Ee);typeof De>"u"?g+=1:De!=="decline"&&(Pe+=1)}return we.push(`${Pe} release${Pe===1?"":"s"}`),we.push(`${g} remaining`),h.createElement(p,{color:"yellow"},we.join(", "))},Ae=await u(({useSubmit:ye})=>{let[ae,we]=te();ye(ae);let{relevantWorkspaces:Pe}=J(ae),g=new Set([...Pe].filter(ne=>!T.releaseRoots.has(ne))),[Ee,De]=I(0),ce=E(ne=>{switch(ne){case a.BEFORE:De(Ee-1);break;case a.AFTER:De(Ee+1);break}},[Ee,De]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...T.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(T.root)),ue.sep,ue.relative(ue.fromPortablePath(T.root),ue.fromPortablePath(ne)))))),T.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:T.releaseRoots,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:ce},[...T.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:ce},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))):null)},{versionFile:T},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ae>"u")return 1;T.releases.clear();for(let[ye,ae]of Ae)T.releases.set(ye,ae);await T.saveAll()}async executeStandard(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await hw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=cF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=qv(A);for(let[v,b]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};eg.paths=[["version","check"]],eg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var fF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=fF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=JG(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!fF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=fw(this.strategy)}if(!n){let I=(await jv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=uF(a.manifest.version,p);if(fF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await hw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};tg.paths=[["version"]],tg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var zDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[$0,eg,tg]},XDt=zDt;var ZG={};Kt(ZG,{WorkspacesFocusCommand:()=>rg,WorkspacesForeachCommand:()=>op,default:()=>ePt});Ye();Ye();qt();var rg=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Mt.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};rg.paths=[["workspaces","focus"]],rg.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var dw=$e(Zo()),$Be=$e(nd());Za();var op=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Boolean("-v,--verbose",{description:"Prefix each output line with the name of the originating workspace"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:LR([Vs(["unlimited"]),oI(NR(),[OR(),MR(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=ae=>{!this.dryRun||this.context.stdout.write(`${ae} -`)},p=()=>{let ae=this.from.map(we=>dw.default.matcher(we));return o.workspaces.filter(we=>{let Pe=W.stringifyIdent(we.anchoredLocator),g=we.relativeCwd;return ae.some(Ee=>Ee(Pe)||Ee(g))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let ae of h)A(` -- ${ae.relativeCwd} - ${W.prettyLocator(r,ae.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let ae of E)A(` -- ${ae.relativeCwd} - ${W.prettyLocator(r,ae.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let ae of o.workspaces)if(ae.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let ae of h){if(u&&!ae.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(ae)).has(u)){A(`Excluding ${ae.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&ae.cwd===a.cwd)){if(this.include.length>0&&!dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.include)&&!dw.default.isMatch(ae.relativeCwd,this.include)){A(`Excluding ${ae.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.exclude)||dw.default.isMatch(ae.relativeCwd,this.exclude))){A(`Excluding ${ae.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&ae.manifest.private===!0){A(`Excluding ${ae.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(ae)}}if(this.dryRun)return 0;let b=this.verbose??this.context.stdout.isTTY,C=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,T=C===1?!1:this.parallel,L=T?this.interlaced:!0,U=(0,$Be.default)(C),J=new Map,te=new Set,le=0,pe=null,Ae=!1,ye=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async ae=>{let we=async(Pe,{commandIndex:g})=>{if(Ae)return-1;!T&&b&&g>1&&ae.reportSeparator();let Ee=ZDt(Pe,{configuration:r,verbose:b,commandIndex:g}),[De,ce]=ZBe(ae,{prefix:Ee,interlaced:L}),[ne,ee]=ZBe(ae,{prefix:Ee,interlaced:L});try{b&&ae.reportInfo(null,`${Ee} Process started`);let Ie=Date.now(),ke=await this.cli.run([this.commandName,...this.args],{cwd:Pe.cwd,stdout:De,stderr:ne})||0;De.end(),ne.end(),await ce,await ee;let ht=Date.now();if(b){let H=r.get("enableTimers")?`, completed in ${de.pretty(r,ht-Ie,de.Type.DURATION)}`:"";ae.reportInfo(null,`${Ee} Process exited (exit code ${ke})${H}`)}return ke===130&&(Ae=!0,pe=ke),ke}catch(Ie){throw De.end(),ne.end(),await ce,await ee,Ie}};for(let Pe of I)J.set(Pe.anchoredLocator.locatorHash,Pe);for(;J.size>0&&!ae.hasErrors();){let Pe=[];for(let[De,ce]of J){if(te.has(ce.anchoredDescriptor.descriptorHash))continue;let ne=!0;if(this.topological||this.topologicalDev){let ee=this.topologicalDev?new Map([...ce.manifest.dependencies,...ce.manifest.devDependencies]):ce.manifest.dependencies;for(let Ie of ee.values()){let ke=o.tryWorkspaceByDescriptor(Ie);if(ne=ke===null||!J.has(ke.anchoredLocator.locatorHash),!ne)break}}if(!!ne&&(te.add(ce.anchoredDescriptor.descriptorHash),Pe.push(U(async()=>{let ee=await we(ce,{commandIndex:++le});return J.delete(De),te.delete(ce.anchoredDescriptor.descriptorHash),ee})),!T))break}if(Pe.length===0){let De=Array.from(J.values()).map(ce=>W.prettyLocator(r,ce.anchoredLocator)).join(", ");ae.reportError(3,`Dependency cycle detected (${De})`);return}let Ee=(await Promise.all(Pe)).find(De=>De!==0);pe===null&&(pe=typeof Ee<"u"?1:pe),(this.topological||this.topologicalDev)&&typeof Ee<"u"&&ae.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return pe!==null?pe:ye.exitCode()}};op.paths=[["workspaces","foreach"]],op.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag (automatically enabled in interactive terminal environments) will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),op.schema=[lI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),UR(["all","recursive","since","worktree"],{missingIf:"undefined"})];function ZBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new je.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new je.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function ZDt(t,{configuration:e,commandIndex:r,verbose:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var $Dt={commands:[rg,op]},ePt=$Dt;var fC=()=>({modules:new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",tPt],["typanion",Ko],["@yarnpkg/plugin-essentials",tH],["@yarnpkg/plugin-compat",oH],["@yarnpkg/plugin-constraints",BH],["@yarnpkg/plugin-dlx",vH],["@yarnpkg/plugin-exec",SH],["@yarnpkg/plugin-file",bH],["@yarnpkg/plugin-git",eH],["@yarnpkg/plugin-github",FH],["@yarnpkg/plugin-http",TH],["@yarnpkg/plugin-init",RH],["@yarnpkg/plugin-interactive-tools",Lj],["@yarnpkg/plugin-link",Mj],["@yarnpkg/plugin-nm",Cq],["@yarnpkg/plugin-npm",EG],["@yarnpkg/plugin-npm-cli",xG],["@yarnpkg/plugin-pack",hG],["@yarnpkg/plugin-patch",NG],["@yarnpkg/plugin-pnp",lq],["@yarnpkg/plugin-pnpm",OG],["@yarnpkg/plugin-stage",YG],["@yarnpkg/plugin-typescript",WG],["@yarnpkg/plugin-version",XG],["@yarnpkg/plugin-workspace-tools",ZG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function rve({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:tn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function rPt(t){if(je.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function nve({selfPath:t,pluginConfiguration:e}){return await Ve.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function nPt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,eve.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function iPt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?K.resolve(r):K.cwd(),o}function sPt(t,{configuration:e}){if(!e.get("enableTelemetry")||tve.isCI||!process.stdout.isTTY)return;Ve.telemetry=new cC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())uC.has(a.match(o)?.[1]??"")&&Ve.telemetry?.reportPluginName(a);t.binaryVersion&&Ve.telemetry.reportVersion(t.binaryVersion)}function ive(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function oPt(t,e,{selfPath:r,pluginConfiguration:o}){if(!rPt(t))return 1;let a=await nve({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return nPt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=iPt(t,e);sPt(t,{configuration:a}),ive(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ve.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function the({cwd:t=K.cwd(),pluginConfiguration:e=fC()}={}){let r=rve({cwd:t,pluginConfiguration:e}),o=await nve({pluginConfiguration:e,selfPath:null});return ive(r,{configuration:o}),r}async function sk(t,{cwd:e=K.cwd(),selfPath:r,pluginConfiguration:o}){let a=rve({cwd:e,pluginConfiguration:o});try{process.exitCode=await oPt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}sk(process.argv.slice(2),{cwd:K.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:fC()});})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/*! - * buildToken - * Builds OAuth token prefix (helper function) - * - * @name buildToken - * @function - * @param {GitUrl} obj The parsed Git url object. - * @return {String} token prefix - */ -/*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-extglob - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-glob - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * is-windows - * - * Copyright © 2015-2018, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - */ -/** - @license - Copyright (c) 2015, Rebecca Turner - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - */ -/** - @license - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to permit - persons to whom the Software is furnished to do so, subject to the - following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN - NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/** - @license - Copyright Node.js contributors. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -*/ -/** - @license - The MIT License (MIT) - - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/.yarnrc.yml b/.yarnrc.yml deleted file mode 100644 index 4b8bff894..000000000 --- a/.yarnrc.yml +++ /dev/null @@ -1,7 +0,0 @@ -compressionLevel: mixed - -enableGlobalCache: false - -nodeLinker: node-modules - -yarnPath: .yarn/releases/yarn-4.0.2.cjs diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index d268c48ee..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,260 +0,0 @@ -# Changelog - -## v0.31.0 - -- [#137](https://github.com/justjake/quickjs-emscripten/pull/137) - - Add `quickjs-for-quickjs`, a package that can run inside quickjs, so you can put quickjs inside your quickjs. - - **Possibly breaking**: Fix a build system bug that made commonjs or esm variants include both types, thus being larger than they needed to be. After upgrading a variant to this release, you should verify that it can be imported/required as expected. You may need to add additional variants if you were using an "esm" variant from both cjs and esm. - -## v0.30.0 - -- [#200](https://github.com/justjake/quickjs-emscripten/pull/200) Inspect and iterate handles, equality, changes to result types, changes to debug logging. -- [#195](https://github.com/justjake/quickjs-emscripten/pull/195) Export `setDebugMode` - -### Collection & Iteration - -- For objects and arrays: add `context.getOwnPropertyNames(handle, options)` to iterate the key or array index handles. -- For arrays: add `context.getLength(handle)` which reads `handle.length` and returns it as a number or undefined to make writing `for (i=0;i` return type is largely replaced with a new return type `DisposableSuccess | DisposableFail`. The new type implements `result.unwrap()` as a replacement for `context.unwrapResult(result)`. It also implements `dispose()` directly, so you no longer need to distinguish between success and failure to clean up. -- add `context.callMethod(handle, 'methodName')`, this makes it easier to call methods like `context.callMethod(handle, 'keys')` or `context.callMethod('values')` which can be used with the new iterator. - -### Equality - -- Added `context.eq(a, b)`, `context.sameValue(a, b)`, `context.sameValueZero(a, b)` - -### Debug logging changes - -Debug logging is now disabled by default, even when using a DEBUG variant. It can be enabled on a runtime-by-runtime basis with `runtime.setDebugMode(boolean)` or `context.runtime.setDebugMode(boolean)`, or globally using `setDebugMode(boolean)`. As with before, you should use a DEBUG variant to see logs from the WebAssembly C code. - -## v0.29.2 - -- [#179](https://github.com/justjake/quickjs-emscripten/pull/161) Add a work-around for a bug in Webkit ARM to quickjs build variants. quickjs-ng is still affected by this bug. - -## v0.29.1 - -- [#161](https://github.com/justjake/quickjs-emscripten/pull/161) Fix a bug where `context.evalCode(..., { type: 'module' })` would return success when some kinds of error occurred when using `quickjs` variants. - - Also adds `context.getPromiseState(handle)` to resolve promises synchronously. - -## v0.29.0 - -- [#154](https://github.com/justjake/quickjs-emscripten/pull/154) ESModule exports - - `context.evalCode(code, filename, { type: "module" })` or when `code` is detected to be a module: now returns a handle to the module's exports, or a promise handle that resolves to the module's exports. - - Added `context.getPromiseState(handle)` which returns the state of a promise handle, and can be unwrapped with `context.unwrapResult(promiseState)`. -- [#159](https://github.com/justjake/quickjs-emscripten/pull/159) add LICENSE file and SPDX license identifiers to all packages. - -## v0.28.0 - -- [#155](https://github.com/justjake/quickjs-emscripten/pull/155) Update library versions and add versions to documentation. - - quickjs version [2024-01-13+229b07b9](https://github.com/bellard/quickjs/commit/229b07b9b2c811eaf84db209a1d6f9e2a8a7b0d9) vendored to quickjs-emscripten on 2024-02-11. - - Evaluating a ES Module with `context.evalCode(...)` now returns a Promise object instead of `undefined`. - - quickjs-ng version [git+229b07b9](https://github.com/quickjs-ng/quickjs/commit/229b07b9b2c811eaf84db209a1d6f9e2a8a7b0d9) vendored to quickjs-emscripten on 2024-02-11. - -## v0.27.0 - -- [#147](https://github.com/justjake/quickjs-emscripten/pull/147) Support providing and retrieving WebAssembly.Memory - - Fixes #146 by adding `wasmMemory: WebAssembly.Memory` option for `newVariant`, and `mod.getWasmMemory()` method for `QuickJS[Async]WASMModule`. - - Fixes #138 by - - removing internal use of `using` statement. - - Use ESBuild `Symbol.for('Symbol.dispose')` if `Symbol.dispose` isn't defined globally. - -## v0.26.0 - -- [#136](https://github.com/justjake/quickjs-emscripten/pull/136), [#116](https://github.com/justjake/quickjs-emscripten/pull/116) (thanks to @GrantMatejka) Expose ability to configure Context's intrinsic objects. -- [#135](https://github.com/justjake/quickjs-emscripten/pull/135) (thanks to @saghul) Add `quickjs-ng` variants. quickjs-ng is a fork of quickjs under active development. It implements more EcmaScript standards and removes some of quickjs's custom language features like BigFloat. -- [#134](https://github.com/justjake/quickjs-emscripten/pull/134) Support using statement for Disposable. If you `using value = vm.unwrapResult(vm.evalCode("1+1"))`, the value will be automatically disposed when the scope exits. -- [#133](https://github.com/justjake/quickjs-emscripten/pull/133) WebAssembly loading options & Cloudflare Worker support. Added an example of using quickjs-emscripten in a Cloudflare Worker. - -## v0.25.1 - -- [#130](https://github.com/justjake/quickjs-emscripten/pull/129) Fix some README and docs quibbles. - -## v0.25.0 - -- [#129](https://github.com/justjake/quickjs-emscripten/pull/129) Improve packaging strategy, native ES Modules, and browser-first builds. - -### New package layout - -`quickjs-emscripten` is re-organized into several NPM packages in a monorepo structure: - -- `quickjs-emscripten` (install size 7.5mb) - mostly backwards compatible all-in-one package. This package installs the WASM files for DEBUG_SYNC, DEBUG_ASYNC, RELEASE_SYNC and RELEASE_ASYNC variants as NPM dependencies. Its total install size is reduced from ~ -- `quickjs-emscripten-core` (install size 573kb) - just the Typescript code, should be compatible with almost any runtime. You can use this with a single a-la-carte build variant, such as `@jitl/quickjs-wasmfile-release-sync` to reduce the total install size needed to run QuickJS to ~1.1mb. -- Several a-la-carte build variants, named `@jitl/quickjs-{wasmfile,singlefile-{esm,cjs,browser}}-{debug,release}-{sync,asyncify}`. See the [quickjs-emscripten-core docs][core-docs] for more details. - -[core-docs]: doc/quickjs-emscripten-core/README.md - -### ESModules & Browser support - -`quickjs-emscripten` uses [package.json export conditions][conditions] to provide native ES Modules for NodeJS and the browser when appropriate. Most bundlers, like Webpack@5 and Vite, will understand conditions and work out of the box. This should enable advanced tree-shaking, although I'm not sure how much benefit is possible with the library. - -You can also use quickjs-emscripten directly from an HTML file in two ways: - -```html - - - -``` - -In edge cases, you might want to use the IIFE build which provides QuickJS as the global `QJS`. - -```html - - - - - -``` - -### Breaking Changes - -- We now differentiate between runtime environments at build time using Node.JS package.json [export conditions in subpath exports][conditions], instead of including support for all environments in a single build. While this resolves open issues with relatively modern bundlers like webpack@5 and vite, it may cause regressions if you use an older bundler that doesn't understand the "browser" condition. -- The release variants - RELEASE_SYNC (the default), and RELEASE_ASYNC - no longer embed the WebAssembly code inside a JS file. Instead, they attempt to load the WebAssembly code from a separate file. Very old bundlers may not understand this syntax, or your web server may not serve the .wasm files correctly. Please test in a staging environment to verify your production build works as expected. -- quickjs-emscripten now uses [subpath exports in package.json][conditions]. Imports of specific files must be removed. The only valid import paths for quickjs-emscripten are: - - - `import * from 'quickjs-emscripten'` (the library) - - `import packageJson from 'quickjs-emscripten/package.json'` - - `import { DEBUG_SYNC, DEBUG_ASYNC, RELEASE_SYNC, RELEASE_ASYNC } from 'quickjs-emscripten/variants'` (these are exported from the main import, but are also available as their own files) - - You should update your imports to use one of these paths. Notably, the WASM files can no longer be directly imported from the `quickjs-emscripten` package. - -- If you have errors about missing type files, you may need to upgrade to `typescript@5` and set moduleResolution to `node16` in your tsconfig.json. This shouldn't be necessary for most users. - -[conditions]: https://nodejs.org/api/packages.html#conditional-exports - -## v0.24.0 - -- [#127](https://github.com/justjake/quickjs-emscripten/pull/127) Upgrade to quickjs 2023-12-09: - - - added Object.hasOwn, {String|Array|TypedArray}.prototype.at, {Array|TypedArray}.prototype.findLast{Index} - - BigInt support is enabled even if CONFIG_BIGNUM disabled - - updated to Unicode 15.0.0 - - misc bug fixes - -- [#125](https://github.com/justjake/quickjs-emscripten/pull/125) (thanks to @tbrockman): - - - Synchronizes quickjs to include the recent commit to address CVE-2023-31922. - -- [#111](https://github.com/justjake/quickjs-emscripten/pull/111) (thanks to @yourWaifu) ArrayBuffer and binary json encoding: - - `context.newArrayBuffer(bufferLike)` creates an ArrayBuffer in the VM from a buffer-like object. - - `context.getArrayBuffer(handle)` creates a view on an ArrayBuffer in the VM as a UInt8Array on the host. - - `context.encodeBinaryJSON(handle)` encodes a QuickJS handle in QuickJS's binary format (like JSON.stringify) - - `context.decodeBinaryJSON(handle)` decodes a QuickJS handle containing the binary format (like JSON.parse) - -## v0.23.0 - -- [#114](https://github.com/justjake/quickjs-emscripten/pull/114) (thanks to @yar2001) improve stack size for ASYNCIFY build variants: - - Change the default ASYNCIFY_STACK_SIZE from 4096 bytes to 81920 bytes. This equates to an increase from approximately 12 to 297 function frames. See the PR for more details. - - `QuickJSAsyncRuntime.setMaxStackSize(stackSizeBytes)` now also adjusts the ASYNCIFY_STACK_SIZE for the entire module. - -## v0.22.0 - -- [#78](https://github.com/justjake/quickjs-emscripten/pull/78), [#105](https://github.com/justjake/quickjs-emscripten/pull/105) (thanks to @ayaboy) add Symbol helpers `context.newUniqueSymbol`, `context.newSymbolFor`, as well as support for symbols in `context.dump`. -- [#104](https://github.com/justjake/quickjs-emscripten/pull/104) BigInt support. -- [#100](https://github.com/justjake/quickjs-emscripten/pull/100) **Breaking change** upgrade Emscripten version and switch to `async import(...)` for loading variants. - We also drop support for older browsers and Node versions: - - - Node >= 16 is required - - Safari >= 14.1 is required - - Typescript >= 4.7 is recommended, but not required. - -## v0.21.2 - -- [#94](https://github.com/justjake/quickjs-emscripten/pull/94) (thanks to @swimmadude66) allows QuickJS to create many more functions before overflowing. - -## v0.21.1 - -- [#66](https://github.com/justjake/quickjs-emscripten/pull/66) (thanks to @BickelLukas) fixes `ReferenceError` when running in browser due to `global.process` - -## v0.21.0 - -- [#61](https://github.com/justjake/quickjs-emscripten/pull/61) (thanks to @torywheelwright): - - Add `QuickJSRuntime.setMaxStackSize(stackSizeBytes)` to protect against stack overflows. - - Add option `maxStackSizeBytes` when creating runtimes. -- Change default branch `master` to `main`. -- Add option `memoryLimitBytes` when creating runtimes. - -## v0.20.0 - -This is a large release! The summary is: - -- There are several breaking API changes to align our abstractions with the - underlying QuickJS library. -- There's a new build variant build with [Emscripten's - ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) that allows - _synchronous_ code _inside_ QuickJS to use _asynchronous_ code running on the - host. -- Both build variants have basic support for loading and evaluating EcmaScript - modules, but only the ASYNCIFY variant can asynchronously load EcmaScript code. - -### New features - -This release introduces `class QuickJSRuntime`. This class wraps QuickJS's `JSRuntime*` type: - -> `JSRuntime` represents a Javascript runtime corresponding to an object heap. -> Several runtimes can exist at the same time but they cannot exchange objects. -> Inside a given runtime, no multi-threading is supported. - -- `QuickJSRuntime.newContext` creates a new context inside an existing runtime. -- `QuickJSRuntime.setModuleLoader` enables EcmaScript module loading. - -This release renames `QuickJSVm` to `class QuickJSContext`, and removes some methods. -The new class wraps QuickJS's `JSContext*` type: - -> `JSContext` represents a Javascript context (or Realm). Each JSContext has its -> own global objects and system objects. There can be several JSContexts per -> JSRuntime \[...], similar to frames of the same origin -> sharing Javascript objects in a web browser. - -`QuickJSContext` replaces `QuickJSVm` as the main way to interact with the -environment inside the QuickJS virtual machine. - -- `QuickJSContext.runtime` provides access to a context's parent runtime. -- `QuickJSContext.evalCode` now takes an options argument to set eval mode - to `'module'`. - -There are also **Asyncified** versions of both `QuickJSRuntime` (`QuickJSRuntimeAsync`) and `QuickJSContext` (`QuickJSContextAsync`). These variants trade some runtime performance for additional features. - -- `QuickJSRuntimeAsync.setModuleLoader` accepts module loaders that return - `Promise`. -- `QuickJSContextAsync.newAsyncifiedFunction` allows creating async functions that - act like sync functions inside the VM. - -### Breaking changes - -**`class QuickJSVm` is removed**. Most functionality is available on -`QuickJSContext`, with identical function signatures. Functionality related to -runtime limits, memory limits, and pending jobs moved to `QuickJSRuntime`. - -**Migration guide**: - -1. Replace usages with QuickJSContext. -2. Replace the following methods: - - `vm.hasPendingJob` -> `context.runtime.hasPendingJob` - - `vm.setInterruptHandler` -> `context.runtime.setInterruptHandler` - - `vm.removeInterruptHandler` -> `context.runtime.removeInterruptHandler` - - `vm.executePendingJobs` -> `context.runtime.executePendingJobs` - - `vm.setMemoryLimit` -> `context.runtime.setMemoryLimit` - - `vm.computeMemoryUsage` -> `context.runtime.computeMemoryUsage` - -**`QuickJS.createVm()` is removed.** - -**Migration guide**: use `QuickJS.newContext()` instead. - -## v0.15.0 - -This is the last version containing `class QuickJSVm` and constructor -`QuickJS.createVm()`. diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 02048bd03..000000000 --- a/CLAUDE.md +++ /dev/null @@ -1,34 +0,0 @@ -# quickjs-emscripten - -## Package Manager - -Use `corepack yarn` to run yarn commands, e.g.: - -- `corepack yarn install` -- `corepack yarn build` -- `corepack yarn build:ts` - -## Building Variants - -Variants are WASM/JS builds of QuickJS with different configurations. They are generated by `scripts/prepareVariants.ts`. - -To build a variant: - -```bash -cd packages/variant-quickjs- -make # builds the C code with emscripten -corepack yarn build:ts # builds the TypeScript wrapper -``` - -## Emscripten - -- Most variants use the default emscripten version (defined in `scripts/prepareVariants.ts` as `DEFAULT_EMSCRIPTEN_VERSION`) -- The asmjs variant uses an older emscripten version (`ASMJS_EMSCRIPTEN_VERSION`) to avoid newer browser APIs -- Emscripten runs via Docker when the local version doesn't match; see `scripts/emcc.sh` - -## Key Files - -- `scripts/prepareVariants.ts` - Generates all variant packages from templates -- `scripts/generate.ts` - Generates FFI bindings and symbols -- `templates/Variant.mk` - Makefile template for variants -- `c/interface.c` - C interface to QuickJS exposed to JavaScript diff --git a/vendor/quickjs/Changelog b/Changelog similarity index 97% rename from vendor/quickjs/Changelog rename to Changelog index 3c08f0c58..f5c536b19 100644 --- a/vendor/quickjs/Changelog +++ b/Changelog @@ -1,3 +1,6 @@ +2026-06-04: + +- added custom malloc for small blocks (11% faster on bench-v8) - micro optimizations (30% faster on bench-v8) - added resizable array buffers - added ArrayBuffer.prototype.transfer @@ -7,6 +10,7 @@ - added added Map and WeakMap upsert methods - added Math.sumPrecise() - added regexp duplicate named groups +- added base64 and hexadecimal encodings for Uint8Array - misc bug fixes 2025-09-13: diff --git a/LICENSE b/LICENSE index 22f51c713..2cf449dd3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ -The MIT License +QuickJS Javascript Engine -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis +Copyright (c) 2017-2021 Fabrice Bellard +Copyright (c) 2017-2021 Charlie Gordon Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,13 +10,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/quickjs/Makefile b/Makefile similarity index 97% rename from vendor/quickjs/Makefile rename to Makefile index dcbbf7e5e..1239e0efb 100644 --- a/vendor/quickjs/Makefile +++ b/Makefile @@ -53,9 +53,11 @@ PREFIX?=/usr/local #CONFIG_MSAN=y # use UB sanitizer #CONFIG_UBSAN=y +# use thread sanitizer +#CONFIG_TSAN=y # TEST262 bootstrap config: commit id and shallow "since" parameter -TEST262_COMMIT?=d0994d64b07cb6c164dd9f345c94ed797a53d69f +TEST262_COMMIT?=5c8206929d81b2d3d727ca6aac56c18358c8d790 TEST262_SINCE?=2025-09-01 OBJDIR=.obj @@ -192,6 +194,10 @@ ifdef CONFIG_UBSAN CFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer LDFLAGS+=-fsanitize=undefined -fno-omit-frame-pointer endif +ifdef CONFIG_TSAN +CFLAGS+=-fsanitize=thread -fno-omit-frame-pointer +LDFLAGS+=-fsanitize=thread -fno-omit-frame-pointer +endif ifdef CONFIG_WIN32 LDEXPORT= else @@ -456,6 +462,7 @@ test: qjs$(EXE) $(WINE) ./qjs$(EXE) tests/test_worker.js ifndef CONFIG_WIN32 $(WINE) ./qjs$(EXE) tests/test_std.js + $(WINE) ./qjs$(EXE) tests/test_rw_handler.js endif ifdef CONFIG_SHARED_LIBS $(WINE) ./qjs$(EXE) tests/test_bjson.js @@ -486,7 +493,7 @@ test2o: run-test262 time ./run-test262 -t -m -c test262o.conf test2o-update: run-test262 - ./run-test262 -t -u -c test262o.conf + ./run-test262 -t -u -c test262o.conf -T 1 endif ifeq ($(wildcard test262/features.txt),) diff --git a/README.md b/README.md deleted file mode 100644 index 67dc356bc..000000000 --- a/README.md +++ /dev/null @@ -1,928 +0,0 @@ -# quickjs-emscripten - -Javascript/Typescript bindings for QuickJS, a modern Javascript interpreter, -compiled to WebAssembly. - -- Safely evaluate untrusted Javascript (supports [most of ES2023](https://test262.fyi/#|qjs,qjs_ng)). -- Create and manipulate values inside the QuickJS runtime ([more][values]). -- Expose host functions to the QuickJS runtime ([more][functions]). -- Execute synchronous code that uses asynchronous functions, with [asyncify][asyncify]. -- Supports browsers, NodeJS, Deno, Bun, Cloudflare Workers, QuickJS (via [quickjs-for-quickjs][]). - -[Github] | [NPM] | [API Documentation][api] | [Variants][core] | [Examples][tests] - -```typescript -import { getQuickJS } from "quickjs-emscripten" - -async function main() { - const QuickJS = await getQuickJS() - const vm = QuickJS.newContext() - - const world = vm.newString("world") - vm.setProp(vm.global, "NAME", world) - world.dispose() - - const result = vm.evalCode(`"Hello " + NAME + "!"`) - if (result.error) { - console.log("Execution failed:", vm.dump(result.error)) - result.error.dispose() - } else { - console.log("Success:", vm.dump(result.value)) - result.value.dispose() - } - - vm.dispose() -} - -main() -``` - -[github]: https://github.com/justjake/quickjs-emscripten -[npm]: https://www.npmjs.com/package/quickjs-emscripten -[api]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/packages.md -[tests]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/quickjs.test.ts -[values]: #interfacing-with-the-interpreter -[asyncify]: #asyncify -[functions]: #exposing-apis -[quickjs-for-quickjs]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-for-quickjs - -- [quickjs-emscripten](#quickjs-emscripten) - - [Usage](#usage) - - [Safely evaluate Javascript code](#safely-evaluate-javascript-code) - - [Interfacing with the interpreter](#interfacing-with-the-interpreter) - - [Runtime](#runtime) - - [EcmaScript Module Exports](#ecmascript-module-exports) - - [Memory Management](#memory-management) - - [`using` statement](#using-statement) - - [Scope](#scope) - - [`Lifetime.consume(fn)`](#lifetimeconsumefn) - - [Exposing APIs](#exposing-apis) - - [Promises](#promises) - - [context.getPromiseState(handle)](#contextgetpromisestatehandle) - - [context.resolvePromise(handle)](#contextresolvepromisehandle) - - [Asyncify](#asyncify) - - [Async module loader](#async-module-loader) - - [Async on host, sync in QuickJS](#async-on-host-sync-in-quickjs) - - [Testing your code](#testing-your-code) - - [Packaging](#packaging) - - [Reducing package size](#reducing-package-size) - - [WebAssembly loading](#webassembly-loading) - - [quickjs-ng](#quickjs-ng) - - [Using in the browser without a build step](#using-in-the-browser-without-a-build-step) - - [Debugging](#debugging) - - [Supported Platforms](#supported-platforms) - - [More Documentation](#more-documentation) - - [Background](#background) - - [Status \& Roadmap](#status--roadmap) - - [Related](#related) - - [Developing](#developing) - - [The C parts](#the-c-parts) - - [The Typescript parts](#the-typescript-parts) - - [Yarn updates](#yarn-updates) - -## Usage - -Install from `npm`: `npm install --save quickjs-emscripten` or `yarn add quickjs-emscripten`. - -The root entrypoint of this library is the `getQuickJS` function, which returns -a promise that resolves to a [QuickJSWASMModule](./doc/quickjs-emscripten/classes/QuickJSWASMModule.md) when -the QuickJS WASM module is ready. - -Once `getQuickJS` has been awaited at least once, you also can use the `getQuickJSSync` -function to directly access the singleton in your synchronous code. - -### Safely evaluate Javascript code - -See [QuickJSWASMModule.evalCode](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSWASMModule.md#evalcode) - -```typescript -import { getQuickJS, shouldInterruptAfterDeadline } from "quickjs-emscripten" - -getQuickJS().then((QuickJS) => { - const result = QuickJS.evalCode("1 + 1", { - shouldInterrupt: shouldInterruptAfterDeadline(Date.now() + 1000), - memoryLimitBytes: 1024 * 1024, - }) - console.log(result) -}) -``` - -### Interfacing with the interpreter - -You can use [QuickJSContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md) -to build a scripting environment by modifying globals and exposing functions -into the QuickJS interpreter. - -Each `QuickJSContext` instance has its own environment -- globals, built-in -classes -- and actions from one context won't leak into other contexts or -runtimes (with one exception, see [Asyncify][asyncify]). - -Every context is created inside a -[QuickJSRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSRuntime.md). -A runtime represents a Javascript heap, and you can even share values between -contexts in the same runtime. - -```typescript -const vm = QuickJS.newContext() -let state = 0 - -const fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) -}) - -vm.setProp(vm.global, "nextId", fnHandle) -fnHandle.dispose() - -const nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) -console.log("vm result:", vm.getNumber(nextId), "native state:", state) - -nextId.dispose() -vm.dispose() -``` - -When you create a context from a top-level API like in the example above, -instead of by calling `runtime.newContext()`, a runtime is automatically created -for the lifetime of the context, and disposed of when you dispose the context. - -#### Runtime - -The runtime has APIs for CPU and memory limits that apply to all contexts within -the runtime in aggregate. You can also use the runtime to configure EcmaScript -module loading. - -```typescript -const runtime = QuickJS.newRuntime() -// "Should be enough for everyone" -- attributed to B. Gates -runtime.setMemoryLimit(1024 * 640) -// Limit stack size -runtime.setMaxStackSize(1024 * 320) -// Interrupt computation after 1024 calls to the interrupt handler -let interruptCycles = 0 -runtime.setInterruptHandler(() => ++interruptCycles > 1024) -// Toy module system that always returns the module name -// as the default export -runtime.setModuleLoader((moduleName) => `export default '${moduleName}'`) -const context = runtime.newContext() -const ok = context.evalCode(` -import fooName from './foo.js' -globalThis.result = fooName -`) -context.unwrapResult(ok).dispose() -// logs "foo.js" -console.log(context.getProp(context.global, "result").consume(context.dump)) -context.dispose() -runtime.dispose() -``` - -#### EcmaScript Module Exports - -When you evaluate code as an ES Module, the result will be a handle to the -module's exports, or a handle to a promise that resolves to the module's -exports if the module depends on a top-level await. - -```typescript -const context = QuickJS.newContext() -const result = context.evalCode( - ` - export const name = 'Jake' - export const favoriteBean = 'wax bean' - export default 'potato' -`, - "jake.js", - { type: "module" }, -) -const moduleExports = context.unwrapResult(result) -console.log(context.dump(moduleExports)) -// -> { name: 'Jake', favoriteBean: 'wax bean', default: 'potato' } -moduleExports.dispose() -``` - -### Memory Management - -Many methods in this library return handles to memory allocated inside the -WebAssembly heap. These types cannot be garbage-collected as usual in -Javascript. Instead, you must manually manage their memory by calling a -`.dispose()` method to free the underlying resources. Once a handle has been -disposed, it cannot be used anymore. Note that in the example above, we call -`.dispose()` on each handle once it is no longer needed. - -Calling `QuickJSContext.dispose()` will throw a RuntimeError if you've forgotten to -dispose any handles associated with that VM, so it's good practice to create a -new VM instance for each of your tests, and to call `vm.dispose()` at the end -of every test. - -```typescript -const vm = QuickJS.newContext() -const numberHandle = vm.newNumber(42) -// Note: numberHandle not disposed, so it leaks memory. -vm.dispose() -// throws RuntimeError: abort(Assertion failed: list_empty(&rt->gc_obj_list), at: quickjs/quickjs.c,1963,JS_FreeRuntime) -``` - -Here are some strategies to reduce the toil of calling `.dispose()` on each -handle you create: - -#### `using` statement - -The `using` statement is a Stage 3 (as of 2023-12-29) proposal for Javascript that declares a constant variable and automatically calls the `[Symbol.dispose]()` method of an object when it goes out of scope. Read more [in this Typescript release announcement][using]. Here's the "Interfacing with the interpreter" example re-written using `using`: - -```typescript -using vm = QuickJS.newContext() -let state = 0 - -// The block here isn't needed for correctness, but it shows -// how to get a tighter bound on the lifetime of `fnHandle`. -{ - using fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }) - - vm.setProp(vm.global, "nextId", fnHandle) - // fnHandle.dispose() is called automatically when the block exits -} - -using nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) -console.log("vm result:", vm.getNumber(nextId), "native state:", state) -// nextId.dispose() is called automatically when the block exits -// vm.dispose() is called automatically when the block exits -``` - -[using]: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management - -#### Scope - -A -[`Scope`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/Scope.md#class-scope) -instance manages a set of disposables and calls their `.dispose()` -method in the reverse order in which they're added to the scope. Here's the -"Interfacing with the interpreter" example re-written using `Scope`: - -```typescript -Scope.withScope((scope) => { - const vm = scope.manage(QuickJS.newContext()) - let state = 0 - - const fnHandle = scope.manage( - vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }), - ) - - vm.setProp(vm.global, "nextId", fnHandle) - - const nextId = scope.manage(vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`))) - console.log("vm result:", vm.getNumber(nextId), "native state:", state) - - // When the withScope block exits, it calls scope.dispose(), which in turn calls - // the .dispose() methods of all the disposables managed by the scope. -}) -``` - -You can also create `Scope` instances with `new Scope()` if you want to manage -calling `scope.dispose()` yourself. - -#### `Lifetime.consume(fn)` - -[`Lifetime.consume`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/lifetime.md#consume) -is sugar for the common pattern of using a handle and then -immediately disposing of it. `Lifetime.consume` takes a `map` function that -produces a result of any type. The `map` fuction is called with the handle, -then the handle is disposed, then the result is returned. - -Here's the "Interfacing with interpreter" example re-written using `.consume()`: - -```typescript -const vm = QuickJS.newContext() -let state = 0 - -vm.newFunction("nextId", () => { - return vm.newNumber(++state) -}).consume((fnHandle) => vm.setProp(vm.global, "nextId", fnHandle)) - -vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)).consume((nextId) => - console.log("vm result:", vm.getNumber(nextId), "native state:", state), -) - -vm.dispose() -``` - -Generally working with `Scope` leads to more straight-forward code, but -`Lifetime.consume` can be handy sugar as part of a method call chain. - -### Exposing APIs - -To add APIs inside the QuickJS environment, you'll need to [create objects][newObject] to -define the shape of your API, and [add properties][setProp] and [functions][newFunction] to those objects -to allow code inside QuickJS to call code on the host. -The [newFunction][] documentation covers writing functions in detail. - -By default, no host functionality is exposed to code running inside QuickJS. - -```typescript -const vm = QuickJS.newContext() -// `console.log` -const logHandle = vm.newFunction("log", (...args) => { - const nativeArgs = args.map(vm.dump) - console.log("QuickJS:", ...nativeArgs) -}) -// Partially implement `console` object -const consoleHandle = vm.newObject() -vm.setProp(consoleHandle, "log", logHandle) -vm.setProp(vm.global, "console", consoleHandle) -consoleHandle.dispose() -logHandle.dispose() - -vm.unwrapResult(vm.evalCode(`console.log("Hello from QuickJS!")`)).dispose() -``` - -[newObject]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#newobject -[newFunction]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#newfunction -[setProp]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#setprop - -#### Promises - -To expose an asynchronous function that _returns a promise_ to callers within -QuickJS, your function can return the handle of a `QuickJSDeferredPromise` -created via `context.newPromise()`. - -When you resolve a `QuickJSDeferredPromise` -- and generally whenever async -behavior completes for the VM -- pending listeners inside QuickJS may not -execute immediately. Your code needs to explicitly call -`runtime.executePendingJobs()` to resume execution inside QuickJS. This API -gives your code maximum control to _schedule_ when QuickJS will block the host's -event loop by resuming execution. - -To work with QuickJS handles that contain a promise inside the environment, -there are two options: - -##### context.getPromiseState(handle) - -You can synchronously peek into a QuickJS promise handle and get its state -without introducing asynchronous host code, described by the type [JSPromiseState][]: - -```typescript -type JSPromiseState = - | { type: "pending"; error: Error } - | { type: "fulfilled"; value: QuickJSHandle; notAPromise?: boolean } - | { type: "rejected"; error: QuickJSHandle } -``` - -The result conforms to the `SuccessOrFail` type returned by `context.evalCode`, so you can use `context.unwrapResult(context.getPromiseState(promiseHandle))` to assert a promise is settled successfully and retrieve its value. Calling `context.unwrapResult` on a pending or rejected promise will throw an error. - -```typescript -const promiseHandle = context.evalCode(`Promise.resolve(42)`) -const resultHandle = context.unwrapResult(context.getPromiseState(promiseHandle)) -context.getNumber(resultHandle) === 42 // true -resultHandle.dispose() -promiseHandle.dispose() -``` - -[JSPromiseState]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#jspromisestate - -##### context.resolvePromise(handle) - -You can convert the QuickJSHandle into a native promise using -`context.resolvePromise()`. Take care with this API to avoid 'deadlocks' where -the host awaits a guest promise, but the guest cannot make progress until the -host calls `runtime.executePendingJobs()`. The simplest way to avoid this kind -of deadlock is to always schedule `executePendingJobs` after any promise is -settled. - -```typescript -const vm = QuickJS.newContext() -const fakeFileSystem = new Map([["example.txt", "Example file content"]]) - -// Function that simulates reading data asynchronously -const readFileHandle = vm.newFunction("readFile", (pathHandle) => { - const path = vm.getString(pathHandle) - const promise = vm.newPromise() - setTimeout(() => { - const content = fakeFileSystem.get(path) - promise.resolve(vm.newString(content || "")) - }, 100) - // IMPORTANT: Once you resolve an async action inside QuickJS, - // call runtime.executePendingJobs() to run any code that was - // waiting on the promise or callback. - promise.settled.then(vm.runtime.executePendingJobs) - return promise.handle -}) -readFileHandle.consume((handle) => vm.setProp(vm.global, "readFile", handle)) - -// Evaluate code that uses `readFile`, which returns a promise -const result = vm.evalCode(`(async () => { - const content = await readFile('example.txt') - return content.toUpperCase() -})()`) -const promiseHandle = vm.unwrapResult(result) - -// Convert the promise handle into a native promise and await it. -// If code like this deadlocks, make sure you are calling -// runtime.executePendingJobs appropriately. -const resolvedResult = await vm.resolvePromise(promiseHandle) -promiseHandle.dispose() -const resolvedHandle = vm.unwrapResult(resolvedResult) -console.log("Result:", vm.getString(resolvedHandle)) -resolvedHandle.dispose() -``` - -#### Asyncify - -Sometimes, we want to create a function that's synchronous from the perspective -of QuickJS, but prefer to implement that function _asynchronously_ in your host -code. The most obvious use-case is for EcmaScript module loading. The underlying -QuickJS C library expects the module loader function to return synchronously, -but loading data synchronously in the browser or server is somewhere between "a -bad idea" and "impossible". QuickJS also doesn't expose an API to "pause" the -execution of a runtime, and adding such an API is tricky due to the VM's -implementation. - -As a work-around, we provide an alternate build of QuickJS processed by -Emscripten/Binaryen's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) -compiler transform. Here's how Emscripten's documentation describes Asyncify: - -> Asyncify lets synchronous C or C++ code interact with asynchronous \[host] JavaScript. This allows things like: -> -> - A synchronous call in C that yields to the event loop, which allows browser events to be handled. -> - A synchronous call in C that waits for an asynchronous operation in \[host] JS to complete. -> -> Asyncify automatically transforms ... code into a form that can be paused and -> resumed ..., so that it is asynchronous (hence the name “Asyncify”) even though -> \[it is written] in a normal synchronous way. - -This means we can suspend an _entire WebAssembly module_ (which could contain -multiple runtimes and contexts) while our host Javascript loads data -asynchronously, and then resume execution once the data load completes. This is -a very handy superpower, but it comes with a couple of major limitations: - -1. _An asyncified WebAssembly module can only suspend to wait for a single - asynchronous call at a time_. You may call back into a suspended WebAssembly - module eg. to create a QuickJS value to return a result, but the system will - crash if this call tries to suspend again. Take a look at Emscripten's documentation - on [reentrancy](https://emscripten.org/docs/porting/asyncify.html#reentrancy). - -2. _Asyncified code is bigger and runs slower_. The asyncified build of - Quickjs-emscripten library is 1M, 2x larger than the 500K of the default - version. There may be room for further - [optimization](https://emscripten.org/docs/porting/asyncify.html#optimizing) - Of our build in the future. - -To use asyncify features, use the following functions: - -- [newAsyncRuntime][]: create a runtime inside a new WebAssembly module. -- [newAsyncContext][]: create runtime and context together inside a new - WebAssembly module. -- [newQuickJSAsyncWASMModule][]: create an empty WebAssembly module. - -[newasyncruntime]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newasyncruntime -[newasynccontext]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newasynccontext -[newquickjsasyncwasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newquickjsasyncwasmmodule - -These functions are asynchronous because they always create a new underlying -WebAssembly module so that each instance can suspend and resume independently, -and instantiating a WebAssembly module is an async operation. This also adds -substantial overhead compared to creating a runtime or context inside an -existing module; if you only need to wait for a single async action at a time, -you can create a single top-level module and create runtimes or contexts inside -of it. - -##### Async module loader - -Here's an example of valuating a script that loads React asynchronously as an ES -module. In our example, we're loading from the filesystem for reproducibility, -but you can use this technique to load using `fetch`. - -```typescript -const module = await newQuickJSAsyncWASMModule() -const runtime = module.newRuntime() -const path = await import("path") -const { promises: fs } = await import("fs") - -const importsPath = path.join(__dirname, "../examples/imports") + "/" -// Module loaders can return promises. -// Execution will suspend until the promise resolves. -runtime.setModuleLoader((moduleName) => { - const modulePath = path.join(importsPath, moduleName) - if (!modulePath.startsWith(importsPath)) { - throw new Error("out of bounds") - } - console.log("loading", moduleName, "from", modulePath) - return fs.readFile(modulePath, "utf-8") -}) - -// evalCodeAsync is required when execution may suspend. -const context = runtime.newContext() -const result = await context.evalCodeAsync(` -import * as React from 'esm.sh/react@17' -import * as ReactDOMServer from 'esm.sh/react-dom@17/server' -const e = React.createElement -globalThis.html = ReactDOMServer.renderToStaticMarkup( - e('div', null, e('strong', null, 'Hello world!')) -) -`) -context.unwrapResult(result).dispose() -const html = context.getProp(context.global, "html").consume(context.getString) -console.log(html) //
Hello world!
-``` - -##### Async on host, sync in QuickJS - -Here's an example of turning an async function into a sync function inside the -VM. - -```typescript -const context = await newAsyncContext() -const path = await import("path") -const { promises: fs } = await import("fs") - -const importsPath = path.join(__dirname, "../examples/imports") + "/" -const readFileHandle = context.newAsyncifiedFunction("readFile", async (pathHandle) => { - const pathString = path.join(importsPath, context.getString(pathHandle)) - if (!pathString.startsWith(importsPath)) { - throw new Error("out of bounds") - } - const data = await fs.readFile(pathString, "utf-8") - return context.newString(data) -}) -readFileHandle.consume((fn) => context.setProp(context.global, "readFile", fn)) - -// evalCodeAsync is required when execution may suspend. -const result = await context.evalCodeAsync(` -// Not a promise! Sync! vvvvvvvvvvvvvvvvvvvv -const data = JSON.parse(readFile('data.json')) -data.map(x => x.toUpperCase()).join(' ') -`) -const upperCaseData = context.unwrapResult(result).consume(context.getString) -console.log(upperCaseData) // 'VERY USEFUL DATA' -``` - -### Testing your code - -This library is complicated to use, so please consider automated testing your -implementation. We highly writing your test suite to run with both the "release" -build variant of quickjs-emscripten, and also the [DEBUG_SYNC] build variant. -The debug sync build variant has extra instrumentation code for detecting memory -leaks. - -The class [TestQuickJSWASMModule] exposes the memory leak detection API, -although this API is only accurate when using `DEBUG_SYNC` variant. You can also -enable [debug logging](#debugging) to help diagnose failures. - -```typescript -// Define your test suite in a function, so that you can test against -// different module loaders. -function myTests(moduleLoader: () => Promise) { - let QuickJS: TestQuickJSWASMModule - beforeEach(async () => { - // Get a unique TestQuickJSWASMModule instance for each test. - const wasmModule = await moduleLoader() - QuickJS = new TestQuickJSWASMModule(wasmModule) - }) - afterEach(() => { - // Assert that the test disposed all handles. The DEBUG_SYNC build - // variant will show detailed traces for each leak. - QuickJS.assertNoMemoryAllocated() - }) - - it("works well", () => { - // TODO: write a test using QuickJS - const context = QuickJS.newContext() - context.unwrapResult(context.evalCode("1 + 1")).dispose() - context.dispose() - }) -} - -// Run the test suite against a matrix of module loaders. -describe("Check for memory leaks with QuickJS DEBUG build", () => { - const moduleLoader = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) - myTests(moduleLoader) -}) - -describe("Realistic test with QuickJS RELEASE build", () => { - myTests(getQuickJS) -}) -``` - -For more testing examples, please explore the typescript source of [quickjs-emscripten][ts] repository. - -[ts]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/ -[debug_sync]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#debug_sync -[testquickjswasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/TestQuickJSWASMModule.md - -### Packaging - -The main `quickjs-emscripten` package includes several build variants of the WebAssembly module: - -- `RELEASE...` build variants should be used in production. They offer better performance and smaller file size compared to `DEBUG...` build variants. - - `RELEASE_SYNC`: This is the default variant used when you don't explicitly provide one. It offers the fastest performance and smallest file size. - - `RELEASE_ASYNC`: The default variant if you need [asyncify][] magic, which comes at a performance cost. See the asyncify docs for details. -- `DEBUG...` build variants can be helpful during development and testing. They include source maps and assertions for catching bugs in your code. We recommend running your tests with _both_ a debug build variant and the release build variant you'll use in production. - - `DEBUG_SYNC`: Instrumented to detect memory leaks, in addition to assertions and source maps. - - `DEBUG_ASYNC`: An [asyncify][] variant with source maps. - -To use a variant, call `newQuickJSWASMModule` or `newQuickJSAsyncWASMModule` with the variant object. These functions return a promise that resolves to a [QuickJSWASMModule](./doc/quickjs-emscripten/classes/QuickJSWASMModule.md), the same as `getQuickJS`. - -```typescript -import { - newQuickJSWASMModule, - newQuickJSAsyncWASMModule, - RELEASE_SYNC, - DEBUG_SYNC, - RELEASE_ASYNC, - DEBUG_ASYNC, -} from "quickjs-emscripten" - -const QuickJSReleaseSync = await newQuickJSWASMModule(RELEASE_SYNC) -const QuickJSDebugSync = await newQuickJSWASMModule(DEBUG_SYNC) -const QuickJSReleaseAsync = await newQuickJSAsyncWASMModule(RELEASE_ASYNC) -const QuickJSDebugAsync = await newQuickJSAsyncWASMModule(DEBUG_ASYNC) - -for (const quickjs of [ - QuickJSReleaseSync, - QuickJSDebugSync, - QuickJSReleaseAsync, - QuickJSDebugAsync, -]) { - const vm = quickjs.newContext() - const result = vm.unwrapResult(vm.evalCode("1 + 1")).consume(vm.getNumber) - console.log(result) - vm.dispose() - quickjs.dispose() -} -``` - -#### Reducing package size - -Including 4 different copies of the WebAssembly module in the main package gives it an install size of [about 9.04mb](https://packagephobia.com/result?p=quickjs-emscripten). If you're building a CLI package or library of your own, or otherwise don't need to include 4 different variants in your `node_modules`, you can switch to the `quickjs-emscripten-core` package, which contains only the Javascript code for this library, and install one (or more) variants a-la-carte as separate packages. - -The most minimal setup would be to install `quickjs-emscripten-core` and `@jitl/quickjs-wasmfile-release-sync` (1.3mb total): - -```bash -yarn add quickjs-emscripten-core @jitl/quickjs-wasmfile-release-sync -du -h node_modules -# 640K node_modules/@jitl/quickjs-wasmfile-release-sync -# 80K node_modules/@jitl/quickjs-ffi-types -# 588K node_modules/quickjs-emscripten-core -# 1.3M node_modules -``` - -Then, you can use quickjs-emscripten-core's `newQuickJSWASMModuleFromVariant` to create a QuickJS module (see [the minimal example][minimal]): - -```typescript -// src/quickjs.mjs -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import RELEASE_SYNC from "@jitl/quickjs-wasmfile-release-sync" -export const QuickJS = await newQuickJSWASMModuleFromVariant(RELEASE_SYNC) - -// src/app.mjs -import { QuickJS } from "./quickjs.mjs" -console.log(QuickJS.evalCode("1 + 1")) -``` - -See the [documentation of quickjs-emscripten-core][core] for more details and the list of variant packages. - -[core]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten-core/README.md - -#### WebAssembly loading - -To run QuickJS, we need to load a WebAssembly module into the host Javascript runtime's memory (usually as an ArrayBuffer or TypedArray) and [compile it](https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/instantiate_static) to a [WebAssembly.Module](https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Module). This means we need to find the file path or URI of the WebAssembly module, and then read it using an API like `fetch` (browser) or `fs.readFile` (NodeJS). `quickjs-emscripten` tries to handle this automatically using patterns like `new URL('./local-path', import.meta.url)` that work in the browser or are handled automatically by bundlers, or `__dirname` in NodeJS, but you may need to configure this manually if these don't work in your environment, or you want more control about how the WebAssembly module is loaded. - -To customize the loading of an existing variant, create a new variant with your loading settings using `newVariant`, passing [CustomizeVariantOptions][newVariant]. For example, you need to customize loading in Cloudflare Workers (see [the full example][cloudflare]). - -```typescript -import { newQuickJSWASMModule, DEBUG_SYNC as baseVariant, newVariant } from "quickjs-emscripten" -import cloudflareWasmModule from "./DEBUG_SYNC.wasm" -import cloudflareWasmModuleSourceMap from "./DEBUG_SYNC.wasm.map.txt" - -/** - * We need to make a new variant that directly passes the imported WebAssembly.Module - * to Emscripten. Normally we'd load the wasm file as bytes from a URL, but - * that's forbidden in Cloudflare workers. - */ -const cloudflareVariant = newVariant(baseVariant, { - wasmModule: cloudflareWasmModule, - wasmSourceMapData: cloudflareWasmModuleSourceMap, -}) -``` - -[newVariant]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/interfaces/CustomizeVariantOptions.md - -#### quickjs-ng - -[quickjs-ng/quickjs](https://github.com/quickjs-ng/quickjs) (aka quickjs-ng) is a fork of the original [bellard/quickjs](https://github.com/quickjs-ng/quickjs) under active development. It implements more EcmaScript standards and removes some of quickjs's custom language features like BigFloat. - -There are several variants of quickjs-ng available, and quickjs-emscripten may switch to using quickjs-ng by default in the future. See [the list of variants][core]. - -#### Using in the browser without a build step - -You can use quickjs-emscripten directly from an HTML file in two ways: - -1. Import it in an ES Module script tag - - ```html - - - - ``` - -1. In edge cases, you might want to use the IIFE build which provides QuickJS as the global `QJS`. You should probably use the ES module though, any recent browser supports it. - - ```html - - - - - - ``` - -### Debugging - -Debug logging can be enabled globally, or for specific runtimes. You need to use a DEBUG build variant of the WebAssembly module to see debug log messages from the C part of this library. - -```typescript -import { newQuickJSWASMModule, DEBUG_SYNC } from "quickjs-emscripten" - -const QuickJS = await newQuickJSWASMModule(DEBUG_SYNC) -``` - -With quickjs-emscripten-core: - -```typescript -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import DEBUG_SYNC from "@jitl/quickjs-wasmfile-debug-sync" - -const QuickJS = await newQuickJSWASMModuleFromVariant(DEBUG_SYNC) -``` - -To enable debug logging globally, call [setDebugMode][setDebugMode]. This affects global Javascript parts of the library, like the module loader and asyncify internals, and is inherited by runtimes created after the call. - -```typescript -import { setDebugMode } from "quickjs-emscripten" - -setDebugMode(true) -``` - -With quickjs-emscripten-core: - -```typescript -import { setDebugMode } from "quickjs-emscripten-core" - -setDebugMode(true) -``` - -To enable debug logging for a specific runtime, call [setDebugModeRt][setDebugModeRt]. This affects only the runtime and its associated contexts. - -```typescript -const runtime = QuickJS.newRuntime() -runtime.setDebugMode(true) - -const context = QuickJS.newContext() -context.runtime.setDebugMode(true) -``` - -[setDebugMode]: doc/quickjs-emscripten/exports.md#setdebugmode -[setDebugModeRt]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten-core/classes/QuickJSRuntime.md#setdebugmode - -### Supported Platforms - -`quickjs-emscripten` and related packages should work in any environment that supports ES2020. - -- Browsers: we estimate support for the following browser versions. See the [global-iife][iife] and [esmodule][esm-html] HTML examples. - - Chrome 63+ - - Edge 79+ - - Safari 11.1+ - - Firefox 58+ -- NodeJS: requires v16.0.0 or later for WebAssembly compatibility. Tested with node@18. See the [node-typescript][tsx-example] and [node-minimal][minimal] examples. -- Typescript: tested with typescript@4.5.5 and typescript@5.3.3. See the [node-typescript example][tsx-example]. -- Vite: tested with vite@5.0.10. See the [Vite/Vue example][vite]. -- Create react app: tested with react-scripts@5.0.1. See the [create-react-app example][cra]. -- Webpack: tested with webpack@5.89.0 via create-react-app. -- Cloudflare Workers: tested with wrangler@3.22.1. See the [Cloudflare Workers example][cloudflare]. -- Deno: tested with deno 1.39.1. See the [Deno example][deno]. - -[iife]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/global-iife.html -[esm-html]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/esmodule.html -[deno]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/deno -[vite]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/vite-vue -[cra]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/create-react-app -[cloudflare]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/cloudflare-workers -[tsx-example]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/node-typescript -[minimal]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/node-minimal - -### More Documentation - -[Github] | [NPM] | [API Documentation][api] | [Variants][core] | [Examples][tests] - -## Background - -This was inspired by seeing https://github.com/maple3142/duktape-eval -[on Hacker News](https://news.ycombinator.com/item?id=21946565) and Figma's -blogposts about using building a Javascript plugin runtime: - -- [How Figma built the Figma plugin system](https://www.figma.com/blog/how-we-built-the-figma-plugin-system/): Describes the LowLevelJavascriptVm interface. -- [An update on plugin security](https://www.figma.com/blog/an-update-on-plugin-security/): Figma switches to QuickJS. - -## Status & Roadmap - -**Stability**: Because the version number of this project is below `1.0.0`, -\*expect occasional breaking API changes. - -**Security**: This project makes every effort to be secure, but has not been -audited. Please use with care in production settings. - -**Roadmap**: I work on this project in my free time, for fun. Here's I'm -thinking comes next. Last updated 2022-03-18. - -1. Further work on module loading APIs: - - - Create modules via Javascript, instead of source text. - - Scan source text for imports, for ahead of time or concurrent loading. - (This is possible with third-party tools, so lower priority.) - -2. Higher-level tools for reading QuickJS values: - - - Type guard functions: `context.isArray(handle)`, `context.isPromise(handle)`, etc. - - Iteration utilities: `context.getIterable(handle)`, `context.iterateObjectEntries(handle)`. - This better supports user-level code to deserialize complex handle objects. - -3. Higher-level tools for creating QuickJS values: - - - Devise a way to avoid needing to mess around with handles when setting up - the environment. - - Consider integrating - [quickjs-emscripten-sync](https://github.com/reearth/quickjs-emscripten-sync) - for automatic translation. - - Consider class-based or interface-type-based marshalling. - -4. SQLite integration. - -## Related - -- Duktape wrapped in Wasm: https://github.com/maple3142/duktape-eval/blob/main/src/Makefile -- QuickJS wrapped in C++: https://github.com/ftk/quickjspp - -## Developing - -This library is implemented in two languages: C (compiled to WASM with -Emscripten), and Typescript. - -You will need `node`, `yarn`, `make`, and `emscripten` to build this project. - -### The C parts - -The ./c directory contains C code that wraps the QuickJS C library (in ./quickjs). -Public functions (those starting with `QTS_`) in ./c/interface.c are -automatically exported to native code (via a generated header) and to -Typescript (via a generated FFI class). See ./generate.ts for how this works. - -The C code builds with `emscripten` (using `emcc`), to produce WebAssembly. -The version of Emscripten used by the project is defined in templates/Variant.mk. - -- On ARM64, you should install `emscripten` on your machine. For example on macOS, `brew install emscripten`. -- If _the correct version of emcc_ is not in your PATH, compilation falls back to using Docker. - On ARM64, this is 10-50x slower than native compilation, but it's just fine on x64. - -We produce multiple build variants of the C code compiled to WebAssembly using a -template script the ./packages directory. Each build variant uses its own copy of a Makefile -to build the C code. The Makefile is generated from a template in ./templates/Variant.mk. - -Related NPM scripts: - -- `yarn vendor:update` updates vendor/quickjs and vendor/quickjs-ng to the latest versions on Github. -- `yarn build:codegen` updates the ./packages from the template script `./prepareVariants.ts` and Variant.mk. -- `yarn build:packages` builds the variant packages in parallel. - -### The Typescript parts - -The Javascript/Typescript code is also organized into several NPM packages in ./packages: - -- ./packages/quickjs-ffi-types: Low-level types that define the FFI interface to the C code. - Each variant exposes an API conforming to these types that's consumed by the higher-level library. -- ./packages/quickjs-emscripten-core: The higher-level Typescript that implements the user-facing abstractions of the library. - This package doesn't link directly to the WebAssembly/C code; callers must provide a build variant. -- ./packages/quicks-emscripten: The main entrypoint of the library, which provides the `getQuickJS` function. - This package combines quickjs-emscripten-core with platform-appropriate WebAssembly/C code. - -Related NPM scripts: - -- `yarn check` runs all available checks (build, format, tests, etc). -- `yarn build` builds all the packages and generates the docs. -- `yarn test` runs the tests for all packages. - - `yarn test:fast` runs the tests using only fast build variants. -- `yarn doc` generates the docs into `./doc`. - - `yarn doc:serve` previews the current `./doc` in a browser. -- `yarn prettier` formats the repo. - -### Yarn updates - -Just run `yarn set version from sources` to upgrade the Yarn release. diff --git a/vendor/quickjs/TODO b/TODO similarity index 98% rename from vendor/quickjs/TODO rename to TODO index a0cb6043e..c518c2641 100644 --- a/vendor/quickjs/TODO +++ b/TODO @@ -63,4 +63,4 @@ Test262o: 0/11262 errors, 463 excluded Test262o commit: 7da91bceb9ce7613f87db47ddd1292a2dda58b42 (es5-tests branch) Test262: -Result: 66/83341 errors, 2567 excluded, 5767 skipped +Result: 58/83558 errors, 3356 excluded, 6000 skipped diff --git a/VERSION b/VERSION new file mode 100644 index 000000000..ba2d8bcde --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +2026-06-04 diff --git a/c/interface.c b/c/interface.c deleted file mode 100644 index 7fb6fe07f..000000000 --- a/c/interface.c +++ /dev/null @@ -1,1234 +0,0 @@ -/** - * interface.c - * - * We primarily use JSValue* (pointer to JSValue) when communicating with the - * host javascript environment, because pointers are trivial to use for calls - * into emscripten because they're just a number! - * - * As with the quickjs.h API, a JSValueConst* value is "borrowed" and should - * not be freed. A JSValue* is "owned" and should be freed by the owner. - * - * Functions starting with "QTS_" are exported by generate.ts to: - * - interface.h for native C code. - * - ffi.ts for emscripten. - * - * We support building the following build outputs: - * - * ## 1. Native machine code - * For internal development testing purposes. - * - * ## 2. WASM via Emscripten - * For general production use. - * - * ## 3. Experimental: Asyncified WASM via Emscripten with -s ASYNCIFY=1. - * This variant supports treating async host Javascript calls as synchronous - * from the perspective of the WASM c code. - * - * The way this works is described here: - * https://emscripten.org/docs/porting/asyncify.html - * - * In this variant, any call into our C code could return a promise if it ended - * up suspended. We mark the methods we suspect might suspend due to users' code - * as returning MaybeAsync(T). This information is ignored for the regular - * build. - */ - -#ifdef __EMSCRIPTEN__ -#include -#endif - -#include // For NAN -#include -#include -#include -#ifdef QTS_SANITIZE_LEAK -#include -#endif - -#ifdef QTS_USE_QUICKJS_NG -#include "../vendor/quickjs-ng/cutils.h" -#include "../vendor/quickjs-ng/quickjs-libc.h" -#include "../vendor/quickjs-ng/quickjs.h" -#else -#include "../vendor/quickjs/cutils.h" -#include "../vendor/quickjs/quickjs-libc.h" -#include "../vendor/quickjs/quickjs.h" -#endif - -#define PKG "quickjs-emscripten: " -#define LOG_LEN 500 - -#ifdef QTS_DEBUG_MODE -#define IF_DEBUG if (qts_get_context_rt_data(ctx)->debug_log) -#define IF_DEBUG_RT if (qts_get_runtime_data(rt)->debug_log) - -#define QTS_DEBUG(msg) IF_DEBUG qts_log(msg); -#define QTS_DEBUG_RT(msg) IF_DEBUG_RT qts_log(msg); -#define QTS_DUMP(value) IF_DEBUG qts_dump(ctx, value); - -#else -#define IF_DEBUG if (0) -#define IF_DEBUG_RT if (0) -#define QTS_DEBUG(msg) ; -#define QTS_DEBUG_RT(msg) ; -#define QTS_DUMP(value) ; -#endif - -/** - * Signal to our FFI code generator that this string argument should be passed as a pointer - * allocated by the caller on the heap, not a JS string on the stack. - * https://github.com/emscripten-core/emscripten/issues/6860#issuecomment-405818401 - */ -#define BorrowedHeapChar const char -#define OwnedHeapChar char -#define JSBorrowedChar const char - -/** - * Signal to our FFI code generator that this function should be called - * asynchronously when compiled with ASYNCIFY. - */ -#define MaybeAsync(T) T - -/** - * Signal to our FFI code generator that this function is only available in - * ASYNCIFY builds. - */ -#define AsyncifyOnly(T) T - -#define JSVoid void - -#define EvalFlags int -#define IntrinsicsFlags enum QTS_Intrinsic -#define EvalDetectModule int - -// Forward declarations for EM_JS callback functions -// These are implemented via EM_JS macro but need forward declarations for C99 compliance -#ifdef __EMSCRIPTEN__ -JSValue *qts_host_call_function(JSContext *ctx, JSValueConst *this_ptr, int argc, JSValueConst *argv, uint32_t magic_func_id); -int qts_host_interrupt_handler(JSRuntime *rt); -char *qts_host_load_module_source(JSRuntime *rt, JSContext *ctx, const char *module_name); -char *qts_host_normalize_module(JSRuntime *rt, JSContext *ctx, const char *module_base_name, const char *module_name); -#endif - -typedef struct qts_RuntimeData { - bool debug_log; -} qts_RuntimeData; - -qts_RuntimeData *qts_get_runtime_data(JSRuntime *rt) { - qts_RuntimeData *data = JS_GetRuntimeOpaque(rt); - if (data == NULL) { - data = malloc(sizeof(qts_RuntimeData)); - data->debug_log = false; - JS_SetRuntimeOpaque(rt, data); - } - return data; -} - -qts_RuntimeData *qts_get_context_rt_data(JSContext *ctx) { - return qts_get_runtime_data(JS_GetRuntime(ctx)); -} - -void qts_log(char *msg) { - fputs(PKG, stderr); - fputs(msg, stderr); - fputs("\n", stderr); -} - -void qts_dump(JSContext *ctx, JSValueConst value) { - const char *str = JS_ToCString(ctx, value); - if (!str) { - QTS_DEBUG("QTS_DUMP: can't dump"); - return; - } - fputs(str, stderr); - JS_FreeCString(ctx, str); - putchar('\n'); -} - -void copy_prop_if_needed(JSContext *ctx, JSValueConst dest, JSValueConst src, const char *prop_name) { - JSAtom prop_atom = JS_NewAtom(ctx, prop_name); - JSValue dest_prop = JS_GetProperty(ctx, dest, prop_atom); - if (JS_IsUndefined(dest_prop)) { - JSValue src_prop = JS_GetProperty(ctx, src, prop_atom); - if (!JS_IsUndefined(src_prop) && !JS_IsException(src_prop)) { - JS_SetProperty(ctx, dest, prop_atom, src_prop); - } - } else { - JS_FreeValue(ctx, dest_prop); - } - JS_FreeAtom(ctx, prop_atom); -} - -JSValue *jsvalue_to_heap(JSValueConst value) { - JSValue *result = malloc(sizeof(JSValue)); - if (result) { - // Could be better optimized, but at -0z / -ftlo, it - // appears to produce the same binary code as a memcpy. - *result = value; - } - return result; -} - -JSValue *QTS_Throw(JSContext *ctx, JSValueConst *error) { - JSValue copy = JS_DupValue(ctx, *error); - return jsvalue_to_heap(JS_Throw(ctx, copy)); -} - -JSValue *QTS_NewError(JSContext *ctx) { - return jsvalue_to_heap(JS_NewError(ctx)); -} - -/** - * Limits. - */ - -/** - * Memory limit. Set to -1 to disable. - */ -void QTS_RuntimeSetMemoryLimit(JSRuntime *rt, size_t limit) { - JS_SetMemoryLimit(rt, limit); -} - -/** - * Memory diagnostics - */ - -JSValue *QTS_RuntimeComputeMemoryUsage(JSRuntime *rt, JSContext *ctx) { - JSMemoryUsage s; - JS_ComputeMemoryUsage(rt, &s); - - // Note that we're going to allocate more memory just to report the memory usage. - // A more sound approach would be to bind JSMemoryUsage struct directly - but that's - // a lot of work. This should be okay in the mean time. - JSValue result = JS_NewObject(ctx); - - // Manually generated via editor-fu from JSMemoryUsage struct definition in quickjs.h - JS_SetPropertyStr(ctx, result, "malloc_limit", JS_NewInt64(ctx, s.malloc_limit)); - JS_SetPropertyStr(ctx, result, "memory_used_size", JS_NewInt64(ctx, s.memory_used_size)); - JS_SetPropertyStr(ctx, result, "malloc_count", JS_NewInt64(ctx, s.malloc_count)); - JS_SetPropertyStr(ctx, result, "memory_used_count", JS_NewInt64(ctx, s.memory_used_count)); - JS_SetPropertyStr(ctx, result, "atom_count", JS_NewInt64(ctx, s.atom_count)); - JS_SetPropertyStr(ctx, result, "atom_size", JS_NewInt64(ctx, s.atom_size)); - JS_SetPropertyStr(ctx, result, "str_count", JS_NewInt64(ctx, s.str_count)); - JS_SetPropertyStr(ctx, result, "str_size", JS_NewInt64(ctx, s.str_size)); - JS_SetPropertyStr(ctx, result, "obj_count", JS_NewInt64(ctx, s.obj_count)); - JS_SetPropertyStr(ctx, result, "obj_size", JS_NewInt64(ctx, s.obj_size)); - JS_SetPropertyStr(ctx, result, "prop_count", JS_NewInt64(ctx, s.prop_count)); - JS_SetPropertyStr(ctx, result, "prop_size", JS_NewInt64(ctx, s.prop_size)); - JS_SetPropertyStr(ctx, result, "shape_count", JS_NewInt64(ctx, s.shape_count)); - JS_SetPropertyStr(ctx, result, "shape_size", JS_NewInt64(ctx, s.shape_size)); - JS_SetPropertyStr(ctx, result, "js_func_count", JS_NewInt64(ctx, s.js_func_count)); - JS_SetPropertyStr(ctx, result, "js_func_size", JS_NewInt64(ctx, s.js_func_size)); - JS_SetPropertyStr(ctx, result, "js_func_code_size", JS_NewInt64(ctx, s.js_func_code_size)); - JS_SetPropertyStr(ctx, result, "js_func_pc2line_count", JS_NewInt64(ctx, s.js_func_pc2line_count)); - JS_SetPropertyStr(ctx, result, "js_func_pc2line_size", JS_NewInt64(ctx, s.js_func_pc2line_size)); - JS_SetPropertyStr(ctx, result, "c_func_count", JS_NewInt64(ctx, s.c_func_count)); - JS_SetPropertyStr(ctx, result, "array_count", JS_NewInt64(ctx, s.array_count)); - JS_SetPropertyStr(ctx, result, "fast_array_count", JS_NewInt64(ctx, s.fast_array_count)); - JS_SetPropertyStr(ctx, result, "fast_array_elements", JS_NewInt64(ctx, s.fast_array_elements)); - JS_SetPropertyStr(ctx, result, "binary_object_count", JS_NewInt64(ctx, s.binary_object_count)); - JS_SetPropertyStr(ctx, result, "binary_object_size", JS_NewInt64(ctx, s.binary_object_size)); - - return jsvalue_to_heap(result); -} - -OwnedHeapChar *QTS_RuntimeDumpMemoryUsage(JSRuntime *rt) { - char *result = malloc(sizeof(char) * 1024); - FILE *memfile = fmemopen(result, 1024, "w"); - JSMemoryUsage s; - JS_ComputeMemoryUsage(rt, &s); - JS_DumpMemoryUsage(memfile, &s, rt); - fclose(memfile); - return result; -} - -int QTS_RecoverableLeakCheck() { -#ifdef QTS_SANITIZE_LEAK - return __lsan_do_recoverable_leak_check(); -#else - return 0; -#endif -} - -int QTS_BuildIsSanitizeLeak() { -#ifdef QTS_SANITIZE_LEAK - return 1; -#else - return 0; -#endif -} - -#ifdef QTS_ASYNCIFY -EM_JS(void, set_asyncify_stack_size, (size_t size, size_t default_size), { - Asyncify.StackSize = size || default_size; -}); -#endif - -/** - * Set the stack size limit, in bytes. Set to 0 to disable. - */ -void QTS_RuntimeSetMaxStackSize(JSRuntime *rt, size_t stack_size) { -#ifdef QTS_ASYNCIFY - set_asyncify_stack_size(stack_size, QTS_ASYNCIFY_DEFAULT_STACK_SIZE); -#endif - JS_SetMaxStackSize(rt, stack_size); -} - -/** - * Constant pointers. Because we always use JSValue* from the host Javascript environment, - * we need helper fuctions to return pointers to these constants. - */ - -JSValueConst QTS_Undefined = JS_UNDEFINED; -JSValueConst *QTS_GetUndefined() { - return &QTS_Undefined; -} - -JSValueConst QTS_Null = JS_NULL; -JSValueConst *QTS_GetNull() { - return &QTS_Null; -} - -JSValueConst QTS_False = JS_FALSE; -JSValueConst *QTS_GetFalse() { - return &QTS_False; -} - -JSValueConst QTS_True = JS_TRUE; -JSValueConst *QTS_GetTrue() { - return &QTS_True; -} - -/** - * Standard FFI functions - */ - -JSRuntime *QTS_NewRuntime() { - return JS_NewRuntime(); -} - -void QTS_FreeRuntime(JSRuntime *rt) { - void *data = JS_GetRuntimeOpaque(rt); - if (data) { - free(data); - } - JS_FreeRuntime(rt); -} - -enum QTS_Intrinsic { - QTS_Intrinsic_BaseObjects = 1 << 0, - QTS_Intrinsic_Date = 1 << 1, - QTS_Intrinsic_Eval = 1 << 2, - QTS_Intrinsic_StringNormalize = 1 << 3, - QTS_Intrinsic_RegExp = 1 << 4, - QTS_Intrinsic_RegExpCompiler = 1 << 5, - QTS_Intrinsic_JSON = 1 << 6, - QTS_Intrinsic_Proxy = 1 << 7, - QTS_Intrinsic_MapSet = 1 << 8, - QTS_Intrinsic_TypedArrays = 1 << 9, - QTS_Intrinsic_Promise = 1 << 10, - QTS_Intrinsic_BigInt = 1 << 11, -}; - -JSContext *QTS_NewContext(JSRuntime *rt, IntrinsicsFlags intrinsics) { - if (intrinsics == 0) { - return JS_NewContext(rt); - } - - JSContext *ctx = JS_NewContextRaw(rt); - if (ctx == NULL) { - return NULL; - } - - if (intrinsics & QTS_Intrinsic_BaseObjects) { - JS_AddIntrinsicBaseObjects(ctx); - } - if (intrinsics & QTS_Intrinsic_Date) { - JS_AddIntrinsicDate(ctx); - } - if (intrinsics & QTS_Intrinsic_Eval) { - JS_AddIntrinsicEval(ctx); - } -#ifndef QTS_USE_QUICKJS_NG - if (intrinsics & QTS_Intrinsic_StringNormalize) { - JS_AddIntrinsicStringNormalize(ctx); - } -#endif - if (intrinsics & QTS_Intrinsic_RegExp) { - JS_AddIntrinsicRegExp(ctx); - } - if (intrinsics & QTS_Intrinsic_RegExpCompiler) { - JS_AddIntrinsicRegExpCompiler(ctx); - } - if (intrinsics & QTS_Intrinsic_JSON) { - JS_AddIntrinsicJSON(ctx); - } - if (intrinsics & QTS_Intrinsic_Proxy) { - JS_AddIntrinsicProxy(ctx); - } - if (intrinsics & QTS_Intrinsic_MapSet) { - JS_AddIntrinsicMapSet(ctx); - } - if (intrinsics & QTS_Intrinsic_TypedArrays) { - JS_AddIntrinsicTypedArrays(ctx); - } - if (intrinsics & QTS_Intrinsic_Promise) { - JS_AddIntrinsicPromise(ctx); - } - // Note: BigInt is now always part of QuickJS core, no need for separate intrinsic - return ctx; -} - -void QTS_FreeContext(JSContext *ctx) { - JS_FreeContext(ctx); -} - -void QTS_FreeValuePointer(JSContext *ctx, JSValue *value) { - JS_FreeValue(ctx, *value); - free(value); -} - -void QTS_FreeValuePointerRuntime(JSRuntime *rt, JSValue *value) { - JS_FreeValueRT(rt, *value); - free(value); -} - -void QTS_FreeVoidPointer(JSContext *ctx, JSVoid *ptr) { - js_free(ctx, ptr); -} - -void QTS_FreeCString(JSContext *ctx, JSBorrowedChar *str) { - JS_FreeCString(ctx, str); -} - -JSValue *QTS_DupValuePointer(JSContext *ctx, JSValueConst *val) { - return jsvalue_to_heap(JS_DupValue(ctx, *val)); -} - -JSValue *QTS_NewObject(JSContext *ctx) { - return jsvalue_to_heap(JS_NewObject(ctx)); -} - -JSValue *QTS_NewObjectProto(JSContext *ctx, JSValueConst *proto) { - return jsvalue_to_heap(JS_NewObjectProto(ctx, *proto)); -} - -JSValue *QTS_NewArray(JSContext *ctx) { - return jsvalue_to_heap(JS_NewArray(ctx)); -} - -void qts_free_buffer(JSRuntime *unused_rt, void *unused_opaque, void *ptr) { free(ptr); } - -JSValue *QTS_NewArrayBuffer(JSContext *ctx, JSVoid *buffer, size_t length) { - return jsvalue_to_heap( - JS_NewArrayBuffer(ctx, (uint8_t *)buffer, length, qts_free_buffer, NULL, false)); -} - -JSValue *QTS_NewFloat64(JSContext *ctx, double num) { - return jsvalue_to_heap(JS_NewFloat64(ctx, num)); -} - -double QTS_GetFloat64(JSContext *ctx, JSValueConst *value) { - double result = NAN; - JS_ToFloat64(ctx, &result, *value); - return result; -} - -JSValue *QTS_NewString(JSContext *ctx, BorrowedHeapChar *string) { - return jsvalue_to_heap(JS_NewString(ctx, string)); -} - -JSBorrowedChar *QTS_GetString(JSContext *ctx, JSValueConst *value) { - return JS_ToCString(ctx, *value); -} - -JSVoid *QTS_GetArrayBuffer(JSContext *ctx, JSValueConst *data) { - size_t length; - uint8_t *buffer = JS_GetArrayBuffer(ctx, &length, *data); - if (!buffer) - return 0; - uint8_t *result = malloc(length); - if (!result) - return result; - memcpy(result, buffer, length); - return result; -} - -// I don't know how to return two values in C, maybe allocate memory in stack? -size_t QTS_GetArrayBufferLength(JSContext *ctx, JSValueConst *data) { - size_t length; - uint8_t *buffer = JS_GetArrayBuffer(ctx, &length, *data); - return length; -} - -JSValue qts_get_symbol_key(JSContext *ctx, JSValueConst *value) { - JSValue global = JS_GetGlobalObject(ctx); - JSValue Symbol = JS_GetPropertyStr(ctx, global, "Symbol"); - JS_FreeValue(ctx, global); - - JSValue Symbol_keyFor = JS_GetPropertyStr(ctx, Symbol, "keyFor"); - JSValue key = JS_Call(ctx, Symbol_keyFor, Symbol, 1, value); - JS_FreeValue(ctx, Symbol_keyFor); - JS_FreeValue(ctx, Symbol); - return key; -} - -JSValue *QTS_NewSymbol(JSContext *ctx, BorrowedHeapChar *description, int isGlobal) { - JSValue global = JS_GetGlobalObject(ctx); - JSValue Symbol = JS_GetPropertyStr(ctx, global, "Symbol"); - JS_FreeValue(ctx, global); - JSValue descriptionValue = JS_NewString(ctx, description); - JSValue symbol; - - if (isGlobal != 0) { - JSValue Symbol_for = JS_GetPropertyStr(ctx, Symbol, "for"); - symbol = JS_Call(ctx, Symbol_for, Symbol, 1, &descriptionValue); - JS_FreeValue(ctx, descriptionValue); - JS_FreeValue(ctx, Symbol_for); - JS_FreeValue(ctx, Symbol); - return jsvalue_to_heap(symbol); - } - - symbol = JS_Call(ctx, Symbol, JS_UNDEFINED, 1, &descriptionValue); - JS_FreeValue(ctx, descriptionValue); - JS_FreeValue(ctx, Symbol); - - return jsvalue_to_heap(symbol); -} - -MaybeAsync(JSBorrowedChar *) QTS_GetSymbolDescriptionOrKey(JSContext *ctx, JSValueConst *value) { - JSBorrowedChar *result; - - JSValue key = qts_get_symbol_key(ctx, value); - if (!JS_IsUndefined(key)) { - result = JS_ToCString(ctx, key); - JS_FreeValue(ctx, key); - return result; - } - - JSValue description = JS_GetPropertyStr(ctx, *value, "description"); - result = JS_ToCString(ctx, description); - JS_FreeValue(ctx, description); - return result; -} - -int QTS_IsGlobalSymbol(JSContext *ctx, JSValueConst *value) { - JSValue key = qts_get_symbol_key(ctx, value); - int undefined = JS_IsUndefined(key); - JS_FreeValue(ctx, key); - - if (undefined) { - return 0; - } else { - return 1; - } -} - -int QTS_IsJobPending(JSRuntime *rt) { - return JS_IsJobPending(rt); -} - -/* - runs pending jobs (Promises/async functions) until it encounters - an exception or it executed the passed maxJobsToExecute jobs. - - Passing a negative value will run the loop until there are no more - pending jobs or an exception happened - - Returns the executed number of jobs or the exception encountered -*/ -MaybeAsync(JSValue *) QTS_ExecutePendingJob(JSRuntime *rt, int maxJobsToExecute, JSContext **lastJobContext) { - JSContext *pctx; - int status = 1; - int executed = 0; - while (executed != maxJobsToExecute && status == 1) { - status = JS_ExecutePendingJob(rt, &pctx); - if (status == -1) { - *lastJobContext = pctx; - return jsvalue_to_heap(JS_GetException(pctx)); - } else if (status == 1) { - *lastJobContext = pctx; - executed++; - } - } - IF_DEBUG_RT { - char msg[LOG_LEN]; - snprintf(msg, LOG_LEN, "QTS_ExecutePendingJob(executed: %d, pctx: %p, lastJobExecuted: %p)", executed, pctx, *lastJobContext); - qts_log(msg); - } - return jsvalue_to_heap(JS_NewFloat64(pctx, executed)); -} - -MaybeAsync(JSValue *) QTS_GetProp(JSContext *ctx, JSValueConst *this_val, JSValueConst *prop_name) { - JSAtom prop_atom = JS_ValueToAtom(ctx, *prop_name); - JSValue prop_val = JS_GetProperty(ctx, *this_val, prop_atom); - JS_FreeAtom(ctx, prop_atom); - return jsvalue_to_heap(prop_val); -} - -MaybeAsync(JSValue *) QTS_GetPropNumber(JSContext *ctx, JSValueConst *this_val, int prop_name) { - JSValue prop_val = JS_GetPropertyUint32(ctx, *this_val, (uint32_t)prop_name); - return jsvalue_to_heap(prop_val); -} - -MaybeAsync(void) QTS_SetProp(JSContext *ctx, JSValueConst *this_val, JSValueConst *prop_name, JSValueConst *prop_value) { - JSAtom prop_atom = JS_ValueToAtom(ctx, *prop_name); - JSValue extra_prop_value = JS_DupValue(ctx, *prop_value); - // TODO: should we use DefineProperty internally if this object doesn't have the property yet? - JS_SetProperty(ctx, *this_val, prop_atom, extra_prop_value); // consumes extra_prop_value - JS_FreeAtom(ctx, prop_atom); -} - -void QTS_DefineProp(JSContext *ctx, JSValueConst *this_val, JSValueConst *prop_name, JSValueConst *prop_value, JSValueConst *get, JSValueConst *set, bool configurable, bool enumerable, bool has_value) { - JSAtom prop_atom = JS_ValueToAtom(ctx, *prop_name); - - int flags = 0; - if (configurable) { - flags = flags | JS_PROP_CONFIGURABLE; - if (has_value) { - flags = flags | JS_PROP_HAS_CONFIGURABLE; - } - } - if (enumerable) { - flags = flags | JS_PROP_ENUMERABLE; - if (has_value) { - flags = flags | JS_PROP_HAS_ENUMERABLE; - } - } - if (!JS_IsUndefined(*get)) { - flags = flags | JS_PROP_HAS_GET; - } - if (!JS_IsUndefined(*set)) { - flags = flags | JS_PROP_HAS_SET; - } - if (has_value) { - flags = flags | JS_PROP_HAS_VALUE; - } - - JS_DefineProperty(ctx, *this_val, prop_atom, *prop_value, *get, *set, flags); - JS_FreeAtom(ctx, prop_atom); -} - -#define JS_ATOM_TAG_INT (1U << 31) -static inline BOOL __JS_AtomIsTaggedInt(JSAtom v) { - return (v & JS_ATOM_TAG_INT) != 0; -} - -static inline uint32_t __JS_AtomToUInt32(JSAtom atom) { - return atom & ~JS_ATOM_TAG_INT; -} - -/* include numbers. when only this is set, we filter out strings */ -#define QTS_GPN_NUMBER_MASK (1 << 6) -/* Treat numbers as strings */ -#define QTS_STANDARD_COMPLIANT_NUMBER (1 << 7) - -MaybeAsync(JSValue *) QTS_GetOwnPropertyNames(JSContext *ctx, JSValue ***out_ptrs, uint32_t *out_len, JSValueConst *obj, int flags) { - JSPropertyEnum *tab = NULL; - uint32_t total_props = 0; - uint32_t out_props = 0; - - BOOL qts_standard_compliant_number = (flags & QTS_STANDARD_COMPLIANT_NUMBER) != 0; - BOOL qts_include_string = (flags & JS_GPN_STRING_MASK) != 0; - BOOL qts_include_number = qts_standard_compliant_number ? 0 : (flags & QTS_GPN_NUMBER_MASK) != 0; - if (qts_include_number) { - // if we want numbers, we must include strings in call down - flags = flags | JS_GPN_STRING_MASK; - } - - int status = 0; - status = JS_GetOwnPropertyNames(ctx, &tab, &total_props, *obj, flags); - if (status < 0) { - if (tab != NULL) { - js_free(ctx, tab); - } - return jsvalue_to_heap(JS_GetException(ctx)); - } - *out_ptrs = malloc(sizeof(JSValue) * total_props); - for (int i = 0; i < total_props; i++) { - JSAtom atom = tab[i].atom; - - if (__JS_AtomIsTaggedInt(atom)) { - if (qts_include_number) { - uint32_t v = __JS_AtomToUInt32(atom); - (*out_ptrs)[out_props++] = jsvalue_to_heap(JS_NewUint32(ctx, v)); - } else if (qts_include_string && qts_standard_compliant_number) { - (*out_ptrs)[out_props++] = jsvalue_to_heap(JS_AtomToValue(ctx, tab[i].atom)); - } - JS_FreeAtom(ctx, atom); - continue; - } - - JSValue atom_value = JS_AtomToValue(ctx, atom); - JS_FreeAtom(ctx, atom); - - if (JS_IsString(atom_value)) { - if (qts_include_string) { - (*out_ptrs)[out_props++] = jsvalue_to_heap(atom_value); - } else { - JS_FreeValue(ctx, atom_value); - } - } else { // Symbol - // We must have set the includeSymbol or includePrivate flags - // if it's present - (*out_ptrs)[out_props++] = jsvalue_to_heap(atom_value); - } - } - js_free(ctx, tab); - *out_len = out_props; - return NULL; -} - -MaybeAsync(JSValue *) QTS_Call(JSContext *ctx, JSValueConst *func_obj, JSValueConst *this_obj, int argc, JSValueConst **argv_ptrs) { - // convert array of pointers to array of values - JSValueConst argv[argc]; - int i; - for (i = 0; i < argc; i++) { - argv[i] = *(argv_ptrs[i]); - } - - return jsvalue_to_heap(JS_Call(ctx, *func_obj, *this_obj, argc, argv)); -} - -/** - * If maybe_exception is an exception, get the error. - * Otherwise, return NULL. - */ -JSValue *QTS_ResolveException(JSContext *ctx, JSValue *maybe_exception) { - if (JS_IsException(*maybe_exception)) { - return jsvalue_to_heap(JS_GetException(ctx)); - } - - return NULL; -} - -MaybeAsync(JSBorrowedChar *) QTS_Dump(JSContext *ctx, JSValueConst *obj) { - JSValue obj_json_value = JS_JSONStringify(ctx, *obj, JS_UNDEFINED, JS_UNDEFINED); - if (!JS_IsException(obj_json_value)) { - const char *obj_json_chars = JS_ToCString(ctx, obj_json_value); - JS_FreeValue(ctx, obj_json_value); - if (obj_json_chars != NULL) { - JSValue enumerable_props = JS_ParseJSON(ctx, obj_json_chars, strlen(obj_json_chars), ""); - JS_FreeCString(ctx, obj_json_chars); - if (!JS_IsException(enumerable_props)) { - // Copy common non-enumerable props for different object types. - // Errors: - copy_prop_if_needed(ctx, enumerable_props, *obj, "name"); - copy_prop_if_needed(ctx, enumerable_props, *obj, "message"); - copy_prop_if_needed(ctx, enumerable_props, *obj, "stack"); - copy_prop_if_needed(ctx, enumerable_props, *obj, "fileName"); - copy_prop_if_needed(ctx, enumerable_props, *obj, "lineNumber"); - - // Serialize again. - JSValue enumerable_json = JS_JSONStringify(ctx, enumerable_props, JS_UNDEFINED, JS_UNDEFINED); - JS_FreeValue(ctx, enumerable_props); - - JSBorrowedChar *result = QTS_GetString(ctx, &enumerable_json); - JS_FreeValue(ctx, enumerable_json); - return result; - } - } - } - - IF_DEBUG { - qts_log("Error dumping JSON:"); - js_std_dump_error(ctx); - } - - // Fallback: convert to string - return QTS_GetString(ctx, obj); -} - -JSValue qts_resolve_func_data( - JSContext *ctx, - JSValueConst this_val, - int argc, - JSValueConst *argv, - int magic, - JSValue *func_data) { - return JS_DupValue(ctx, func_data[0]); -} - -MaybeAsync(JSValue *) QTS_Eval(JSContext *ctx, BorrowedHeapChar *js_code, size_t js_code_length, const char *filename, EvalDetectModule detectModule, EvalFlags evalFlags) { - char msg[LOG_LEN]; - if (detectModule) { - if (JS_DetectModule((const char *)js_code, js_code_length)) { - QTS_DEBUG("QTS_Eval: Detected module = true"); - evalFlags |= JS_EVAL_TYPE_MODULE; - } else { - QTS_DEBUG("QTS_Eval: Detected module = false"); - } - } else { - QTS_DEBUG("QTS_Eval: do not detect module"); - } - - JSModuleDef *module; - JSValue eval_result; - if ( - (evalFlags & JS_EVAL_TYPE_MODULE) != 0 && - (evalFlags & JS_EVAL_FLAG_COMPILE_ONLY) == 0) { - QTS_DEBUG("QTS_Eval: JS_EVAL_TYPE_MODULE"); - JSValue func_obj = JS_Eval(ctx, js_code, js_code_length, filename, evalFlags | JS_EVAL_FLAG_COMPILE_ONLY); - if (JS_IsException(func_obj)) { - QTS_DEBUG("QTS_Eval: JS_EVAL_FLAG_COMPILE_ONLY exception") - return jsvalue_to_heap(func_obj); - } - - if (JS_VALUE_GET_TAG(func_obj) != JS_TAG_MODULE) { - QTS_DEBUG("QTS_Eval: JS_EVAL_FLAG_COMPILE_ONLY result != JS_TAG_MODULE") - JS_FreeValue(ctx, func_obj); - return jsvalue_to_heap(JS_ThrowInternalError(ctx, "Module code compiled to non-module object")); - } - - module = JS_VALUE_GET_PTR(func_obj); - if (module == NULL) { - QTS_DEBUG("QTS_Eval: JSModuleDef == NULL") - JS_FreeValue(ctx, func_obj); - return jsvalue_to_heap(JS_ThrowInternalError(ctx, "Module compiled to null")); - } - - eval_result = JS_EvalFunction(ctx, func_obj); - QTS_DEBUG("QTS_Eval: JS_EVAL_TYPE_MODULE eval_result") - // It seems like this is a double-free. - // JS_FreeValue(ctx, func_obj); - } else { - eval_result = JS_Eval(ctx, js_code, js_code_length, filename, evalFlags); - QTS_DEBUG("QTS_Eval: JS_EVAL_TYPE_GLOBAL eval_result") - } - - IF_DEBUG { - snprintf(msg, LOG_LEN, "QTS_Eval: eval_result = %d", JS_VALUE_GET_TAG(eval_result)); - qts_log(msg); - } - - if ( - // Error - nothing more to do. - JS_IsException(eval_result) - // Non-module eval - return the result - || (evalFlags & JS_EVAL_TYPE_MODULE) == 0) { - QTS_DEBUG("QTS_Eval: non-module or exception") - return jsvalue_to_heap(eval_result); - } - - // We eval'd a module. - // Make our return type `ModuleExports | Promise>` - JSPromiseStateEnum state = JS_PromiseState(ctx, eval_result); - IF_DEBUG { - snprintf(msg, LOG_LEN, "QTS_Eval: eval_result JS_PromiseState = %i", state); - qts_log(msg); - } - if ( - // quickjs@2024-01-14 evaluating module - // produced a promise - (state == JS_PROMISE_FULFILLED) - // quickjs in compile mode - // quickjs-ng before rebasing on quickjs@2024-01-14 - // not a promise. - || (state == -1)) { - QTS_DEBUG("QTS_Eval: result: JS_PROMISE_FULFILLED or not a promise") - JS_FreeValue(ctx, eval_result); - return jsvalue_to_heap(JS_GetModuleNamespace(ctx, module)); - } else if (state == JS_PROMISE_REJECTED) { - // Throw the rejection response, to match evaluation of non-module code, - // or of code with a syntax error. - QTS_DEBUG("QTS_Eval: result: JS_PROMISE_REJECTED - throw rejection reason") - JS_Throw(ctx, JS_PromiseResult(ctx, eval_result)); - JS_FreeValue(ctx, eval_result); - return jsvalue_to_heap(JS_EXCEPTION); - } else if (state == JS_PROMISE_PENDING) { - QTS_DEBUG("QTS_Eval: result: JS_PROMISE_PENDING") - // return moduleDone.then(() => module_namespace) - JSValue module_namespace = JS_GetModuleNamespace(ctx, module); - if (JS_IsException(module_namespace)) { - QTS_DEBUG("QTS_Eval: module_namespace exception") - JS_FreeValue(ctx, eval_result); - return jsvalue_to_heap(module_namespace); - } - - JSValue then_resolve_module_namespace = JS_NewCFunctionData(ctx, &qts_resolve_func_data, 0, 0, 1, &module_namespace); - JS_FreeValue(ctx, module_namespace); - if (JS_IsException(then_resolve_module_namespace)) { - QTS_DEBUG("QTS_Eval: then_resolve_module_namespace exception") - JS_FreeValue(ctx, eval_result); - return jsvalue_to_heap(then_resolve_module_namespace); - } - - JSAtom then_atom = JS_NewAtom(ctx, "then"); - JSValue new_promise = JS_Invoke(ctx, eval_result, then_atom, 1, &then_resolve_module_namespace); - QTS_DEBUG("QTS_Eval: new_promise = promise.then(() => resolveModuleNamespace())") - JS_FreeAtom(ctx, then_atom); - JS_FreeValue(ctx, then_resolve_module_namespace); - JS_FreeValue(ctx, eval_result); - - return jsvalue_to_heap(new_promise); - } else { - // Unknown case - QTS_DEBUG("QTS_Eval: unknown JSPromiseStateEnum") - return jsvalue_to_heap(eval_result); - } -} - -JSValue *QTS_GetModuleNamespace(JSContext *ctx, JSValueConst *module_func_obj) { - if (JS_VALUE_GET_TAG(*module_func_obj) != JS_TAG_MODULE) { - return jsvalue_to_heap(JS_ThrowInternalError(ctx, "Not a module")); - } - - JSModuleDef *module = JS_VALUE_GET_PTR(*module_func_obj); - return jsvalue_to_heap(JS_GetModuleNamespace(ctx, module)); -} - -OwnedHeapChar *QTS_Typeof(JSContext *ctx, JSValueConst *value) { - const char *result = "unknown"; - - if (JS_IsNumber(*value)) { - result = "number"; - } else if (JS_IsBigInt(ctx, *value)) { - result = "bigint"; - } else if (JS_IsFunction(ctx, *value)) { - result = "function"; - } else if (JS_IsBool(*value)) { - result = "boolean"; - } else if (JS_IsNull(*value)) { - result = "object"; - } else if (JS_IsUndefined(*value)) { - result = "undefined"; - } else if (JS_IsUninitialized(*value)) { - result = "undefined"; - } else if (JS_IsString(*value)) { - result = "string"; - } else if (JS_IsSymbol(*value)) { - result = "symbol"; - } else if (JS_IsObject(*value)) { - result = "object"; - } - - char *out = strdup(result); - return out; -} - -JSAtom QTS_AtomLength = 0; -int QTS_GetLength(JSContext *ctx, uint32_t *out_len, JSValueConst *value) { - JSValue len_val; - int result; - - if (!JS_IsObject(*value)) { - return -1; - } - - if (QTS_AtomLength == 0) { - // This should result in a constant static atom we don't actually need to - // free, since it's interned within quickjs.c - QTS_AtomLength = JS_NewAtom(ctx, "length"); - } - - len_val = JS_GetProperty(ctx, *value, QTS_AtomLength); - if (JS_IsException(len_val)) { - return -1; - } - - result = JS_ToUint32(ctx, out_len, len_val); - JS_FreeValue(ctx, len_val); - return result; -} - -typedef enum IsEqualOp { - QTS_EqualOp_StrictEq = 0, - QTS_EqualOp_SameValue = 1, - QTS_EqualOp_SameValueZero = 2, -} IsEqualOp; - -int QTS_IsEqual(JSContext *ctx, JSValueConst *a, JSValueConst *b, IsEqualOp op) { -#ifdef QTS_USE_QUICKJS_NG - return -1; -#else - switch (op) { - case QTS_EqualOp_SameValue: - return JS_SameValue(ctx, *a, *b); - case QTS_EqualOp_SameValueZero: - return JS_SameValueZero(ctx, *a, *b); - default: - case QTS_EqualOp_StrictEq: - return JS_StrictEq(ctx, *a, *b); - } -#endif -} - -JSValue *QTS_GetGlobalObject(JSContext *ctx) { - return jsvalue_to_heap(JS_GetGlobalObject(ctx)); -} - -JSValue *QTS_NewPromiseCapability(JSContext *ctx, JSValue **resolve_funcs_out) { - JSValue resolve_funcs[2]; - JSValue promise = JS_NewPromiseCapability(ctx, resolve_funcs); - resolve_funcs_out[0] = jsvalue_to_heap(resolve_funcs[0]); - resolve_funcs_out[1] = jsvalue_to_heap(resolve_funcs[1]); - return jsvalue_to_heap(promise); -} - -JSPromiseStateEnum QTS_PromiseState(JSContext *ctx, JSValueConst *promise) { - return JS_PromiseState(ctx, *promise); -} - -JSValue *QTS_PromiseResult(JSContext *ctx, JSValueConst *promise) { - return jsvalue_to_heap(JS_PromiseResult(ctx, *promise)); -} - -void QTS_TestStringArg(const char *string) { - // pass -} - -int QTS_GetDebugLogEnabled(JSRuntime *rt) { - IF_DEBUG_RT { - return 1; - } - return 0; -} - -void QTS_SetDebugLogEnabled(JSRuntime *rt, int is_enabled) { -#ifdef QTS_DEBUG_MODE - qts_get_runtime_data(rt)->debug_log = (bool)is_enabled; -#endif -} - -int QTS_BuildIsDebug() { -#ifdef QTS_DEBUG_MODE - return 1; -#else - return 0; -#endif -} - -int QTS_BuildIsAsyncify() { -#ifdef QTS_ASYNCIFY - return 1; -#else - return 0; -#endif -} - -// ---------------------------------------------------------------------------- -// Module loading helpers - -// ---------------------------------------------------------------------------- -// C -> Host Callbacks -// Note: inside EM_JS, we need to use ['...'] subscript syntax for accessing JS -// objects, because in optimized builds, Closure compiler will mangle all the -// names. - -// ------------------- -// function: C -> Host -#ifdef __EMSCRIPTEN__ -EM_JS(MaybeAsync(JSValue *), qts_host_call_function, (JSContext * ctx, JSValueConst *this_ptr, int argc, JSValueConst *argv, uint32_t magic_func_id), { -#ifdef QTS_ASYNCIFY - const asyncify = {['handleSleep'] : Asyncify.handleSleep}; -#else - const asyncify = undefined; -#endif - return Module['callbacks']['callFunction'](asyncify, ctx, this_ptr, argc, argv, magic_func_id); -}); -#endif - -// Function: QuickJS -> C -JSValue qts_call_function(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic) { - JSValue *result_ptr = qts_host_call_function(ctx, &this_val, argc, argv, magic); - if (result_ptr == NULL) { - return JS_UNDEFINED; - } - JSValue result = *result_ptr; - free(result_ptr); - return result; -} - -// Function: Host -> QuickJS -JSValue *QTS_NewFunction(JSContext *ctx, uint32_t func_id, const char *name) { - IF_DEBUG { - char msg[LOG_LEN]; - snprintf(msg, LOG_LEN, "new_function(name: %s, magic: %d)", name, func_id); - qts_log(msg); - } - JSValue func_obj = JS_NewCFunctionMagic( - /* context */ ctx, - /* JSCFunctionMagic* */ &qts_call_function, - /* name */ name, - /* min argc */ 0, - /* function type */ JS_CFUNC_generic_magic, - /* magic: fn id */ func_id); - return jsvalue_to_heap(func_obj); -} - -JSValueConst *QTS_ArgvGetJSValueConstPointer(JSValueConst *argv, int index) { - return &argv[index]; -} - -// -------------------- -// interrupt: C -> Host -#ifdef __EMSCRIPTEN__ -EM_JS(int, qts_host_interrupt_handler, (JSRuntime * rt), { - // Async not supported here. - // #ifdef QTS_ASYNCIFY - // const asyncify = Asyncify; - // #else - const asyncify = undefined; - // #endif - return Module['callbacks']['shouldInterrupt'](asyncify, rt); -}); -#endif - -// interrupt: QuickJS -> C -int qts_interrupt_handler(JSRuntime *rt, void *_unused) { - return qts_host_interrupt_handler(rt); -} - -// interrupt: Host -> QuickJS -void QTS_RuntimeEnableInterruptHandler(JSRuntime *rt) { - JS_SetInterruptHandler(rt, &qts_interrupt_handler, NULL); -} - -void QTS_RuntimeDisableInterruptHandler(JSRuntime *rt) { - JS_SetInterruptHandler(rt, NULL, NULL); -} - -// -------------------- -// load module: C -> Host -// TODO: a future version can support host returning JSModuleDef* directly; -// for now we only support loading module source code. - -/* -The module loading model under ASYNCIFY is convoluted. We need to make sure we -never have an async request running concurrently for loading modules. - -The first implemenation looked like this: - -C HOST SUSPENDED -qts_host_load_module(name) ------> false - call rt.loadModule(name) false - Start async load module false - Suspend C true - Async load complete true - < --------------- QTS_CompileModule(source) true -QTS_Eval(source, COMPILE_ONLY) true -Loaded module has import true -qts_host_load_module(dep) -------> true - call rt.loadModule(dep) true - Start async load module true - ALREADY SUSPENDED, CRASH - -We can solve this in two different ways: - -1. Return to C as soon as we async load the module source. - That way, we unsuspend before calling QTS_CompileModule. -2. Once we load the module, use a new API to detect and async - load the module's downstream dependencies. This way - they're loaded synchronously so we don't need to suspend "again". - -Probably we could optimize (2) to make it more performant, eg with parallel -loading, but (1) seems much easier to implement in the sort run. -*/ - -JSModuleDef *qts_compile_module(JSContext *ctx, const char *module_name, BorrowedHeapChar *module_body) { - IF_DEBUG { - char msg[LOG_LEN]; - sprintf(msg, "QTS_CompileModule(ctx: %p, name: %s, bodyLength: %lu)", ctx, module_name, strlen(module_body)); - qts_log(msg); - } - JSValue func_val = JS_Eval(ctx, module_body, strlen(module_body), module_name, JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); - if (JS_IsException(func_val)) { - return NULL; - } - // TODO: Is exception ok? - // TODO: set import.meta? - JSModuleDef *module = JS_VALUE_GET_PTR(func_val); - JS_FreeValue(ctx, func_val); - return module; -} - -#ifdef __EMSCRIPTEN__ -EM_JS(MaybeAsync(char *), qts_host_load_module_source, (JSRuntime * rt, JSContext *ctx, const char *module_name), { -#ifdef QTS_ASYNCIFY - const asyncify = {['handleSleep'] : Asyncify.handleSleep}; -#else - const asyncify = undefined; -#endif - // https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - const moduleNameString = UTF8ToString(module_name); - return Module['callbacks']['loadModuleSource'](asyncify, rt, ctx, moduleNameString); -}); - -EM_JS(MaybeAsync(char *), qts_host_normalize_module, (JSRuntime * rt, JSContext *ctx, const char *module_base_name, const char *module_name), { -#ifdef QTS_ASYNCIFY - const asyncify = {['handleSleep'] : Asyncify.handleSleep}; -#else - const asyncify = undefined; -#endif - // https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - const moduleBaseNameString = UTF8ToString(module_base_name); - const moduleNameString = UTF8ToString(module_name); - return Module['callbacks']['normalizeModule'](asyncify, rt, ctx, moduleBaseNameString, moduleNameString); -}); -#endif - -// load module: QuickJS -> C -// See js_module_loader in quickjs/quickjs-libc.c:567 -JSModuleDef *qts_load_module(JSContext *ctx, const char *module_name, void *_unused) { - JSRuntime *rt = JS_GetRuntime(ctx); - IF_DEBUG_RT { - char msg[LOG_LEN]; - sprintf(msg, "qts_load_module(rt: %p, ctx: %p, name: %s)", rt, ctx, module_name); - qts_log(msg); - } - char *module_source = qts_host_load_module_source(rt, ctx, module_name); - if (module_source == NULL) { - return NULL; - } - - JSModuleDef *module = qts_compile_module(ctx, module_name, module_source); - free(module_source); - return module; -} - -char *qts_normalize_module(JSContext *ctx, const char *module_base_name, const char *module_name, void *_unused) { - JSRuntime *rt = JS_GetRuntime(ctx); - IF_DEBUG_RT { - char msg[LOG_LEN]; - sprintf(msg, "qts_normalize_module(rt: %p, ctx: %p, base_name: %s, name: %s)", rt, ctx, module_base_name, module_name); - qts_log(msg); - } - char *em_module_name = qts_host_normalize_module(rt, ctx, module_base_name, module_name); - char *js_module_name = js_strdup(ctx, em_module_name); - free(em_module_name); - return js_module_name; -} - -// Load module: Host -> QuickJS -void QTS_RuntimeEnableModuleLoader(JSRuntime *rt, int use_custom_normalize) { - JSModuleNormalizeFunc *module_normalize = NULL; /* use default name normalizer */ - if (use_custom_normalize) { - module_normalize = &qts_normalize_module; - } - JS_SetModuleLoaderFunc(rt, module_normalize, &qts_load_module, NULL); -} - -void QTS_RuntimeDisableModuleLoader(JSRuntime *rt) { - JS_SetModuleLoaderFunc(rt, NULL, NULL, NULL); -} - -JSValue *QTS_bjson_encode(JSContext *ctx, JSValueConst *val) { - size_t length; - uint8_t *buffer = JS_WriteObject(ctx, &length, *val, JS_WRITE_OBJ_REFERENCE); - if (!buffer) - return jsvalue_to_heap(JS_EXCEPTION); - - JSValue array = JS_NewArrayBufferCopy(ctx, buffer, length); - js_free(ctx, buffer); - return jsvalue_to_heap(array); -} - -JSValue *QTS_bjson_decode(JSContext *ctx, JSValueConst *data) { - size_t length; - uint8_t *buffer = JS_GetArrayBuffer(ctx, &length, *data); - if (!buffer) - return jsvalue_to_heap(JS_EXCEPTION); - - JSValue value = JS_ReadObject(ctx, buffer, length, 0); - return jsvalue_to_heap(value); -} \ No newline at end of file diff --git a/c/sanitize_test.c b/c/sanitize_test.c deleted file mode 100644 index 3aed5bdc1..000000000 --- a/c/sanitize_test.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include - -int main() { - malloc(5000); - __lsan_do_recoverable_leak_check(); -} \ No newline at end of file diff --git a/c/test.c b/c/test.c deleted file mode 100644 index 0f70118d0..000000000 --- a/c/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -#include "interface.h" - -/*void eval_and_log(char* code) {*/ -/*char* result = QTS_EvalToJSON(code);*/ -/*fputs("-->\n", stdout);*/ -/*fputs(result, stdout);*/ -/*fputs("<--\n", stdout);*/ -/*}*/ - -int main() { - /*eval_and_log(*/ - /*"\"hello \" + \"world!\""*/ - /*);*/ - /*eval_and_log(*/ - /*"\"hello \" + \"worl"*/ - /*);*/ - - return 0; -} diff --git a/vendor/quickjs/compat/test-closefrom.c b/compat/test-closefrom.c similarity index 100% rename from vendor/quickjs/compat/test-closefrom.c rename to compat/test-closefrom.c diff --git a/vendor/quickjs/cutils.c b/cutils.c similarity index 99% rename from vendor/quickjs/cutils.c rename to cutils.c index 52ff1649b..6a3aeca45 100644 --- a/vendor/quickjs/cutils.c +++ b/cutils.c @@ -315,7 +315,7 @@ int unicode_from_utf8(const uint8_t *p, int max_len, const uint8_t **pp) #if 0 -#if defined(EMSCRIPTEN) || defined(__ANDROID__) +#if defined(__EMSCRIPTEN__) || defined(__ANDROID__) static void *rqsort_arg; static int (*rqsort_cmp)(const void *, const void *, void *); diff --git a/vendor/quickjs/cutils.h b/cutils.h similarity index 100% rename from vendor/quickjs/cutils.h rename to cutils.h diff --git a/doc/.nojekyll b/doc/.nojekyll deleted file mode 100644 index e2ac6616a..000000000 --- a/doc/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md b/doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md deleted file mode 100644 index 9b9827be5..000000000 --- a/doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md +++ /dev/null @@ -1,91 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-asmjs-mjs-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-asmjs-mjs-release-sync - -Compiled to pure Javascript, no WebAssembly required. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-asmjs-mjs-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: import](README.md#exports-import) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? asmjs](README.md#single-file-or-separate-wasm-file-asmjs) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? asmjs - -The C library code is compiled to Javascript, no WebAssembly used. Sometimes called "asmjs". This is the slowest possible option, and is intended for constrained environments that do not support WebAssembly, like quickjs-for-quickjs. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Compiled to pure Javascript, no WebAssembly required.", - "emscriptenInclusion": "asmjs", - "emscriptenVersion": "3.1.43", - "exports": { - "import": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s WASM=0", - "-s SINGLE_FILE=1", - "-s WASM_ASYNC_COMPILATION=0" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-asmjs-mjs-release-sync/exports.md b/doc/@jitl/quickjs-asmjs-mjs-release-sync/exports.md deleted file mode 100644 index 297a9040e..000000000 --- a/doc/@jitl/quickjs-asmjs-mjs-release-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-asmjs-mjs-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-asmjs-mjs-release-sync - -# @jitl/quickjs-asmjs-mjs-release-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-asmjs-mjs-release-sync](exports.md#jitlquickjs-asmjs-mjs-release-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-asmjs-mjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md) | -Compiled to pure Javascript, no WebAssembly required. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | asmjs | The C library code is compiled to Javascript, no WebAssembly used. Sometimes called "asmjs". This is the slowest possible option, and is intended for constrained environments that do not support WebAssembly, like quickjs-for-quickjs. | -| exports | import | Has these package.json export conditions | - -#### Source - -[index.ts:19](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-asmjs-mjs-release-sync/src/index.ts#L19) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/README.md b/doc/@jitl/quickjs-ffi-types/README.md deleted file mode 100644 index eef2c377b..000000000 --- a/doc/@jitl/quickjs-ffi-types/README.md +++ /dev/null @@ -1,13 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-ffi-types - -This is an internal package, part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). - -See the main package for documentation. - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/exports.md b/doc/@jitl/quickjs-ffi-types/exports.md deleted file mode 100644 index 880f87859..000000000 --- a/doc/@jitl/quickjs-ffi-types/exports.md +++ /dev/null @@ -1,576 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-ffi-types - -# @jitl/quickjs-ffi-types - -## Contents - -- [Interfaces](exports.md#interfaces) -- [Type Aliases](exports.md#type-aliases) - - [BorrowedHeapCharPointer](exports.md#borrowedheapcharpointer) - - [EitherFFI](exports.md#eitherffi) - - [EitherModule](exports.md#eithermodule) - - [JSBorrowedCharPointer](exports.md#jsborrowedcharpointer) - - [JSContextPointer](exports.md#jscontextpointer) - - [JSContextPointerPointer](exports.md#jscontextpointerpointer) - - [JSModuleDefPointer](exports.md#jsmoduledefpointer) - - [JSPromiseStateEnum](exports.md#jspromisestateenum) - - [JSRuntimePointer](exports.md#jsruntimepointer) - - [JSValueConstPointer](exports.md#jsvalueconstpointer) - - [JSValueConstPointerPointer](exports.md#jsvalueconstpointerpointer) - - [JSValuePointer](exports.md#jsvaluepointer) - - [JSValuePointerPointer](exports.md#jsvaluepointerpointer) - - [JSValuePointerPointerPointer](exports.md#jsvaluepointerpointerpointer) - - [JSVoidPointer](exports.md#jsvoidpointer) - - [OwnedHeapCharPointer](exports.md#ownedheapcharpointer) - - [QTS\_C\_To\_HostCallbackFuncPointer](exports.md#qts-c-to-hostcallbackfuncpointer) - - [QTS\_C\_To\_HostInterruptFuncPointer](exports.md#qts-c-to-hostinterruptfuncpointer) - - [QTS\_C\_To\_HostLoadModuleFuncPointer](exports.md#qts-c-to-hostloadmodulefuncpointer) - - [QuickJSVariant](exports.md#quickjsvariant) - - [UInt32Pointer](exports.md#uint32pointer) -- [Variables](exports.md#variables) - - [EvalFlags](exports.md#evalflags) - - [GetOwnPropertyNamesFlags](exports.md#getownpropertynamesflags) - - [IntrinsicsFlags](exports.md#intrinsicsflags) - - [IsEqualOp](exports.md#isequalop) - - [JSPromiseStateEnum](exports.md#jspromisestateenum-1) -- [Functions](exports.md#functions) - - [assertSync()](exports.md#assertsync) - -## Interfaces - -- [EmscriptenModule](interfaces/EmscriptenModule.md) -- [EmscriptenModuleLoader](interfaces/EmscriptenModuleLoader.md) -- [EmscriptenModuleLoaderOptions](interfaces/EmscriptenModuleLoaderOptions.md) -- [QuickJSAsyncEmscriptenModule](interfaces/QuickJSAsyncEmscriptenModule.md) -- [QuickJSAsyncFFI](interfaces/QuickJSAsyncFFI.md) -- [QuickJSAsyncVariant](interfaces/QuickJSAsyncVariant.md) -- [QuickJSEmscriptenModule](interfaces/QuickJSEmscriptenModule.md) -- [QuickJSFFI](interfaces/QuickJSFFI.md) -- [QuickJSSyncVariant](interfaces/QuickJSSyncVariant.md) -- [SourceMapData](interfaces/SourceMapData.md) - -## Type Aliases - -### BorrowedHeapCharPointer - -> **BorrowedHeapCharPointer**: `Pointer`\<`"const char"` \| `"char"` \| `"js const char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:82](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L82) - -*** - -### EitherFFI - -> **EitherFFI**: [`QuickJSFFI`](interfaces/QuickJSFFI.md) \| [`QuickJSAsyncFFI`](interfaces/QuickJSAsyncFFI.md) - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:50](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L50) - -*** - -### EitherModule - -> **EitherModule**: [`QuickJSEmscriptenModule`](interfaces/QuickJSEmscriptenModule.md) \| [`QuickJSAsyncEmscriptenModule`](interfaces/QuickJSAsyncEmscriptenModule.md) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:246](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L246) - -*** - -### JSBorrowedCharPointer - -> **JSBorrowedCharPointer**: `Pointer`\<`"js const char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:94](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L94) - -*** - -### JSContextPointer - -> **JSContextPointer**: `Pointer`\<`"JSContext"`\> - -`JSContext*`. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:19](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L19) - -*** - -### JSContextPointerPointer - -> **JSContextPointerPointer**: `Pointer`\<`"JSContext"`\> - -`JSContext**`. Used internally for execute pending jobs. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:24](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L24) - -*** - -### JSModuleDefPointer - -> **JSModuleDefPointer**: `Pointer`\<`"JSModuleDef"`\> - -`JSModuleDef*`. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:29](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L29) - -*** - -### JSPromiseStateEnum - -> **JSPromiseStateEnum**: `Brand`\<*typeof* [`JSPromiseStateEnum`](exports.md#jspromisestateenum-1)\[keyof *typeof* [`JSPromiseStateEnum`](exports.md#jspromisestateenum-1)\], `"JSPromiseStateEnum"`\> - -State of a promise. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L131) - -*** - -### JSRuntimePointer - -> **JSRuntimePointer**: `Pointer`\<`"JSRuntime"`\> - -`JSRuntime*`. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:14](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L14) - -*** - -### JSValueConstPointer - -> **JSValueConstPointer**: `Pointer`\<`"JSValueConst"`\> - -`JSValueConst* -See JSValueConst and StaticJSValue. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L41) - -*** - -### JSValueConstPointerPointer - -> **JSValueConstPointerPointer**: `Pointer`\<`"JSValueConst[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L56) - -*** - -### JSValuePointer - -> **JSValuePointer**: `Pointer`\<`"JSValue"`\> - -`JSValue*`. -See JSValue. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L35) - -*** - -### JSValuePointerPointer - -> **JSValuePointerPointer**: `Pointer`\<`"JSValue[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L46) - -*** - -### JSValuePointerPointerPointer - -> **JSValuePointerPointerPointer**: `Pointer`\<`"*JSValue[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L51) - -*** - -### JSVoidPointer - -> **JSVoidPointer**: `Pointer`\<`any`\> - -Opaque pointer that was allocated by js_malloc. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:99](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L99) - -*** - -### OwnedHeapCharPointer - -> **OwnedHeapCharPointer**: `Pointer`\<`"char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:88](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L88) - -*** - -### QTS\_C\_To\_HostCallbackFuncPointer - -> **QTS\_C\_To\_HostCallbackFuncPointer**: `Pointer`\<`"C_To_HostCallbackFunc"`\> - -Used internally for C-to-Javascript function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:66](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L66) - -*** - -### QTS\_C\_To\_HostInterruptFuncPointer - -> **QTS\_C\_To\_HostInterruptFuncPointer**: `Pointer`\<`"C_To_HostInterruptFunc"`\> - -Used internally for C-to-Javascript interrupt handlers. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:71](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L71) - -*** - -### QTS\_C\_To\_HostLoadModuleFuncPointer - -> **QTS\_C\_To\_HostLoadModuleFuncPointer**: `Pointer`\<`"C_To_HostLoadModuleFunc"`\> - -Used internally for C-to-Javascript module loading. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L76) - -*** - -### QuickJSVariant - -> **QuickJSVariant**: [`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md) \| [`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md) - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L49) - -*** - -### UInt32Pointer - -> **UInt32Pointer**: `Pointer`\<`"uint32_t"`\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:101](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L101) - -## Variables - -### EvalFlags - -> **EvalFlags**: `Object` - -Bitfield options for JS_Eval() C function. - -#### Type declaration - -##### JS\_EVAL\_FLAG\_BACKTRACE\_BARRIER - -> **`readonly`** **JS\_EVAL\_FLAG\_BACKTRACE\_BARRIER**: `number` - -don't include the stack frames before this eval in the Error() backtraces - -##### JS\_EVAL\_FLAG\_COMPILE\_ONLY - -> **`readonly`** **JS\_EVAL\_FLAG\_COMPILE\_ONLY**: `number` - -compile but do not run. The result is an object with a -JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed -with JS_EvalFunction(). - -##### JS\_EVAL\_FLAG\_STRICT - -> **`readonly`** **JS\_EVAL\_FLAG\_STRICT**: `number` - -force 'strict' mode - -##### JS\_EVAL\_FLAG\_STRIP - -> **`readonly`** **JS\_EVAL\_FLAG\_STRIP**: `number` - -force 'strip' mode - -##### JS\_EVAL\_TYPE\_DIRECT - -> **`readonly`** **JS\_EVAL\_TYPE\_DIRECT**: `number` - -direct call (internal use) - -##### JS\_EVAL\_TYPE\_GLOBAL - -> **`readonly`** **JS\_EVAL\_TYPE\_GLOBAL**: `number` - -global code (default) - -##### JS\_EVAL\_TYPE\_INDIRECT - -> **`readonly`** **JS\_EVAL\_TYPE\_INDIRECT**: `number` - -indirect call (internal use) - -##### JS\_EVAL\_TYPE\_MASK - -> **`readonly`** **JS\_EVAL\_TYPE\_MASK**: `number` - -##### JS\_EVAL\_TYPE\_MODULE - -> **`readonly`** **JS\_EVAL\_TYPE\_MODULE**: `number` - -module code - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:106](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L106) - -*** - -### GetOwnPropertyNamesFlags - -> **GetOwnPropertyNamesFlags**: `Object` - -Bitfield options for QTS_GetOwnPropertyNames - -#### Type declaration - -##### JS\_GPN\_ENUM\_ONLY - -> **JS\_GPN\_ENUM\_ONLY**: `number` - -##### JS\_GPN\_PRIVATE\_MASK - -> **JS\_GPN\_PRIVATE\_MASK**: `number` - -##### JS\_GPN\_SET\_ENUM - -> **JS\_GPN\_SET\_ENUM**: `number` - -##### JS\_GPN\_STRING\_MASK - -> **JS\_GPN\_STRING\_MASK**: `number` - -##### JS\_GPN\_SYMBOL\_MASK - -> **JS\_GPN\_SYMBOL\_MASK**: `number` - -##### QTS\_GPN\_NUMBER\_MASK - -> **QTS\_GPN\_NUMBER\_MASK**: `number` - -##### QTS\_STANDARD\_COMPLIANT\_NUMBER - -> **QTS\_STANDARD\_COMPLIANT\_NUMBER**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:121](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L121) - -*** - -### IntrinsicsFlags - -> **IntrinsicsFlags**: `Object` - -Bitfield options for QTS_NewContext intrinsics - -#### Type declaration - -##### BaseObjects - -> **`readonly`** **BaseObjects**: `number` - -##### BigDecimal - -> **`readonly`** **BigDecimal**: `number` - -##### BigFloat - -> **`readonly`** **BigFloat**: `number` - -##### BigInt - -> **`readonly`** **BigInt**: `number` - -##### BignumExt - -> **`readonly`** **BignumExt**: `number` - -##### Date - -> **`readonly`** **Date**: `number` - -##### Eval - -> **`readonly`** **Eval**: `number` - -##### JSON - -> **`readonly`** **JSON**: `number` - -##### MapSet - -> **`readonly`** **MapSet**: `number` - -##### OperatorOverloading - -> **`readonly`** **OperatorOverloading**: `number` - -##### Promise - -> **`readonly`** **Promise**: `number` - -##### Proxy - -> **`readonly`** **Proxy**: `number` - -##### RegExp - -> **`readonly`** **RegExp**: `number` - -##### RegExpCompiler - -> **`readonly`** **RegExpCompiler**: `number` - -##### StringNormalize - -> **`readonly`** **StringNormalize**: `number` - -##### TypedArrays - -> **`readonly`** **TypedArrays**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L111) - -*** - -### IsEqualOp - -> **IsEqualOp**: `Object` - -#### Type declaration - -##### IsSameValue - -> **IsSameValue**: [`IsEqualOp`](exports.md#isequalop) - -##### IsSameValueZero - -> **IsSameValueZero**: [`IsEqualOp`](exports.md#isequalop) - -##### IsStrictlyEqual - -> **IsStrictlyEqual**: [`IsEqualOp`](exports.md#isequalop) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:126](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L126) - -*** - -### JSPromiseStateEnum - -> **JSPromiseStateEnum**: `Object` - -#### Type declaration - -##### Fulfilled - -> **`readonly`** **Fulfilled**: `1` = `1` - -##### Pending - -> **`readonly`** **Pending**: `0` = `0` - -##### Rejected - -> **`readonly`** **Rejected**: `2` = `2` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L131) - -## Functions - -### assertSync() - -> **assertSync**\<`Args`, `R`\>(`fn`): (...`args`) => `R` - -#### Type parameters - -• **Args** extends `any`[] - -• **R** - -#### Parameters - -• **fn**: (...`args`) => `R` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `Args` -> -> ##### Returns -> -> `R` -> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:136](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L136) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModule.md b/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModule.md deleted file mode 100644 index 6ca46e910..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModule.md +++ /dev/null @@ -1,417 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / EmscriptenModule - -# Interface: EmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](EmscriptenModule.md#extends) -- [Properties](EmscriptenModule.md#properties) - - [FAST\_MEMORY](EmscriptenModule.md#fast-memory) - - [HEAP16](EmscriptenModule.md#heap16) - - [HEAP32](EmscriptenModule.md#heap32) - - [HEAP8](EmscriptenModule.md#heap8) - - [HEAPF32](EmscriptenModule.md#heapf32) - - [HEAPF64](EmscriptenModule.md#heapf64) - - [HEAPU16](EmscriptenModule.md#heapu16) - - [HEAPU32](EmscriptenModule.md#heapu32) - - [HEAPU8](EmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](EmscriptenModule.md#total-memory) - - [TOTAL\_STACK](EmscriptenModule.md#total-stack) - - [wasmBinary?](EmscriptenModule.md#wasmbinary) - - [wasmMemory?](EmscriptenModule.md#wasmmemory) -- [Methods](EmscriptenModule.md#methods) - - [UTF8ToString()](EmscriptenModule.md#utf8tostring) - - [\_free()](EmscriptenModule.md#free) - - [\_malloc()](EmscriptenModule.md#malloc) - - [cwrap()](EmscriptenModule.md#cwrap) - - [instantiateWasm()?](EmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](EmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](EmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](EmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](EmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L168) - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:158](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L158) - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L159) - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:157](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L157) - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:163](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L163) - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L164) - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:161](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L161) - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L162) - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L160) - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:167](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L167) - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L166) - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModuleLoaderOptions.wasmBinary`](EmscriptenModuleLoaderOptions.md#wasmbinary) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModuleLoaderOptions.wasmMemory`](EmscriptenModuleLoaderOptions.md#wasmmemory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:144](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L144) - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L148) - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L147) - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:149](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L149) - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModuleLoaderOptions.instantiateWasm`](EmscriptenModuleLoaderOptions.md#instantiatewasm) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:145](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L145) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModuleLoaderOptions.locateFile`](EmscriptenModuleLoaderOptions.md#locatefile) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModuleLoaderOptions.monitorRunDependencies`](EmscriptenModuleLoaderOptions.md#monitorrundependencies) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:139](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L139) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoader.md b/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoader.md deleted file mode 100644 index 4192e3ac0..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoader.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / EmscriptenModuleLoader - -# Interface: EmscriptenModuleLoader()\ - -## Type parameters - -• **T** extends [`EmscriptenModule`](EmscriptenModule.md) - -> **EmscriptenModuleLoader**(`options`?): `Promise`\<`T`\> - -## Parameters - -• **options?**: [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -## Returns - -`Promise`\<`T`\> - -## Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:249](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L249) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoaderOptions.md b/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoaderOptions.md deleted file mode 100644 index f1159f51b..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/EmscriptenModuleLoaderOptions.md +++ /dev/null @@ -1,136 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / EmscriptenModuleLoaderOptions - -# Interface: EmscriptenModuleLoaderOptions - -This structure is defined by Emscripten. -It's possible to provide these parameters to an emscripten module loader. -See [the Emscripten Module API reference](https://emscripten.org/docs/api_reference/module.html). - -## Contents - -- [Extended By](EmscriptenModuleLoaderOptions.md#extended-by) -- [Properties](EmscriptenModuleLoaderOptions.md#properties) - - [wasmBinary?](EmscriptenModuleLoaderOptions.md#wasmbinary) - - [wasmMemory?](EmscriptenModuleLoaderOptions.md#wasmmemory) -- [Methods](EmscriptenModuleLoaderOptions.md#methods) - - [instantiateWasm()?](EmscriptenModuleLoaderOptions.md#instantiatewasm) - - [locateFile()?](EmscriptenModuleLoaderOptions.md#locatefile) - - [monitorRunDependencies()?](EmscriptenModuleLoaderOptions.md#monitorrundependencies) - -## Extended By - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncEmscriptenModule.md b/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncEmscriptenModule.md deleted file mode 100644 index 5236da5a1..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncEmscriptenModule.md +++ /dev/null @@ -1,511 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / QuickJSAsyncEmscriptenModule - -# Interface: QuickJSAsyncEmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](QuickJSAsyncEmscriptenModule.md#extends) -- [Properties](QuickJSAsyncEmscriptenModule.md#properties) - - [FAST\_MEMORY](QuickJSAsyncEmscriptenModule.md#fast-memory) - - [HEAP16](QuickJSAsyncEmscriptenModule.md#heap16) - - [HEAP32](QuickJSAsyncEmscriptenModule.md#heap32) - - [HEAP8](QuickJSAsyncEmscriptenModule.md#heap8) - - [HEAPF32](QuickJSAsyncEmscriptenModule.md#heapf32) - - [HEAPF64](QuickJSAsyncEmscriptenModule.md#heapf64) - - [HEAPU16](QuickJSAsyncEmscriptenModule.md#heapu16) - - [HEAPU32](QuickJSAsyncEmscriptenModule.md#heapu32) - - [HEAPU8](QuickJSAsyncEmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](QuickJSAsyncEmscriptenModule.md#total-memory) - - [TOTAL\_STACK](QuickJSAsyncEmscriptenModule.md#total-stack) - - [callbacks](QuickJSAsyncEmscriptenModule.md#callbacks) - - [type](QuickJSAsyncEmscriptenModule.md#type) - - [wasmBinary?](QuickJSAsyncEmscriptenModule.md#wasmbinary) - - [wasmMemory?](QuickJSAsyncEmscriptenModule.md#wasmmemory) -- [Methods](QuickJSAsyncEmscriptenModule.md#methods) - - [UTF8ToString()](QuickJSAsyncEmscriptenModule.md#utf8tostring) - - [\_free()](QuickJSAsyncEmscriptenModule.md#free) - - [\_malloc()](QuickJSAsyncEmscriptenModule.md#malloc) - - [cwrap()](QuickJSAsyncEmscriptenModule.md#cwrap) - - [instantiateWasm()?](QuickJSAsyncEmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](QuickJSAsyncEmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](QuickJSAsyncEmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](QuickJSAsyncEmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](QuickJSAsyncEmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.FAST_MEMORY`](EmscriptenModule.md#fast-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L168) - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAP16`](EmscriptenModule.md#heap16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:158](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L158) - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAP32`](EmscriptenModule.md#heap32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L159) - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAP8`](EmscriptenModule.md#heap8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:157](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L157) - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPF32`](EmscriptenModule.md#heapf32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:163](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L163) - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPF64`](EmscriptenModule.md#heapf64) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L164) - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPU16`](EmscriptenModule.md#heapu16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:161](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L161) - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPU32`](EmscriptenModule.md#heapu32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L162) - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPU8`](EmscriptenModule.md#heapu8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L160) - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.TOTAL_MEMORY`](EmscriptenModule.md#total-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:167](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L167) - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.TOTAL_STACK`](EmscriptenModule.md#total-stack) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L166) - -*** - -### callbacks - -> **callbacks**: `EmscriptenModuleCallbacks` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:243](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L243) - -*** - -### type - -> **type**: `"async"` - -#### Todo - -Implement this field - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:242](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L242) - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.wasmBinary`](EmscriptenModule.md#wasmbinary) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.wasmMemory`](EmscriptenModule.md#wasmmemory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.UTF8ToString`](EmscriptenModule.md#utf8tostring) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:144](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L144) - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule._free`](EmscriptenModule.md#free) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L148) - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule._malloc`](EmscriptenModule.md#malloc) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L147) - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.cwrap`](EmscriptenModule.md#cwrap) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:149](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L149) - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.instantiateWasm`](EmscriptenModule.md#instantiatewasm) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.lengthBytesUTF8`](EmscriptenModule.md#lengthbytesutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:145](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L145) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.locateFile`](EmscriptenModule.md#locatefile) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.monitorRunDependencies`](EmscriptenModule.md#monitorrundependencies) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.stringToUTF8`](EmscriptenModule.md#stringtoutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:139](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L139) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncFFI.md b/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncFFI.md deleted file mode 100644 index db50ca6ab..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncFFI.md +++ /dev/null @@ -1,1618 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / QuickJSAsyncFFI - -# Interface: QuickJSAsyncFFI - -Low-level FFI bindings to QuickJS's Emscripten module. -See instead QuickJSContext, the public Javascript interface exposed by this -library. - -## Contents - -- [Unstable](QuickJSAsyncFFI.md#unstable) -- [Properties](QuickJSAsyncFFI.md#properties) - - [DEBUG](QuickJSAsyncFFI.md#debug) - - [QTS\_ArgvGetJSValueConstPointer](QuickJSAsyncFFI.md#qts-argvgetjsvalueconstpointer) - - [QTS\_BuildIsAsyncify](QuickJSAsyncFFI.md#qts-buildisasyncify) - - [QTS\_BuildIsDebug](QuickJSAsyncFFI.md#qts-buildisdebug) - - [QTS\_BuildIsSanitizeLeak](QuickJSAsyncFFI.md#qts-buildissanitizeleak) - - [QTS\_Call](QuickJSAsyncFFI.md#qts-call) - - [QTS\_Call\_MaybeAsync](QuickJSAsyncFFI.md#qts-call-maybeasync) - - [QTS\_DefineProp](QuickJSAsyncFFI.md#qts-defineprop) - - [QTS\_Dump](QuickJSAsyncFFI.md#qts-dump) - - [QTS\_Dump\_MaybeAsync](QuickJSAsyncFFI.md#qts-dump-maybeasync) - - [QTS\_DupValuePointer](QuickJSAsyncFFI.md#qts-dupvaluepointer) - - [QTS\_Eval](QuickJSAsyncFFI.md#qts-eval) - - [QTS\_Eval\_MaybeAsync](QuickJSAsyncFFI.md#qts-eval-maybeasync) - - [QTS\_ExecutePendingJob](QuickJSAsyncFFI.md#qts-executependingjob) - - [QTS\_ExecutePendingJob\_MaybeAsync](QuickJSAsyncFFI.md#qts-executependingjob-maybeasync) - - [QTS\_FreeCString](QuickJSAsyncFFI.md#qts-freecstring) - - [QTS\_FreeContext](QuickJSAsyncFFI.md#qts-freecontext) - - [QTS\_FreeRuntime](QuickJSAsyncFFI.md#qts-freeruntime) - - [QTS\_FreeValuePointer](QuickJSAsyncFFI.md#qts-freevaluepointer) - - [QTS\_FreeValuePointerRuntime](QuickJSAsyncFFI.md#qts-freevaluepointerruntime) - - [QTS\_FreeVoidPointer](QuickJSAsyncFFI.md#qts-freevoidpointer) - - [QTS\_GetArrayBuffer](QuickJSAsyncFFI.md#qts-getarraybuffer) - - [QTS\_GetArrayBufferLength](QuickJSAsyncFFI.md#qts-getarraybufferlength) - - [QTS\_GetDebugLogEnabled](QuickJSAsyncFFI.md#qts-getdebuglogenabled) - - [QTS\_GetFalse](QuickJSAsyncFFI.md#qts-getfalse) - - [QTS\_GetFloat64](QuickJSAsyncFFI.md#qts-getfloat64) - - [QTS\_GetGlobalObject](QuickJSAsyncFFI.md#qts-getglobalobject) - - [QTS\_GetLength](QuickJSAsyncFFI.md#qts-getlength) - - [QTS\_GetModuleNamespace](QuickJSAsyncFFI.md#qts-getmodulenamespace) - - [QTS\_GetNull](QuickJSAsyncFFI.md#qts-getnull) - - [QTS\_GetOwnPropertyNames](QuickJSAsyncFFI.md#qts-getownpropertynames) - - [QTS\_GetOwnPropertyNames\_MaybeAsync](QuickJSAsyncFFI.md#qts-getownpropertynames-maybeasync) - - [QTS\_GetProp](QuickJSAsyncFFI.md#qts-getprop) - - [QTS\_GetPropNumber](QuickJSAsyncFFI.md#qts-getpropnumber) - - [QTS\_GetPropNumber\_MaybeAsync](QuickJSAsyncFFI.md#qts-getpropnumber-maybeasync) - - [QTS\_GetProp\_MaybeAsync](QuickJSAsyncFFI.md#qts-getprop-maybeasync) - - [QTS\_GetString](QuickJSAsyncFFI.md#qts-getstring) - - [QTS\_GetSymbolDescriptionOrKey](QuickJSAsyncFFI.md#qts-getsymboldescriptionorkey) - - [QTS\_GetSymbolDescriptionOrKey\_MaybeAsync](QuickJSAsyncFFI.md#qts-getsymboldescriptionorkey-maybeasync) - - [QTS\_GetTrue](QuickJSAsyncFFI.md#qts-gettrue) - - [QTS\_GetUndefined](QuickJSAsyncFFI.md#qts-getundefined) - - [QTS\_IsEqual](QuickJSAsyncFFI.md#qts-isequal) - - [QTS\_IsGlobalSymbol](QuickJSAsyncFFI.md#qts-isglobalsymbol) - - [QTS\_IsJobPending](QuickJSAsyncFFI.md#qts-isjobpending) - - [QTS\_NewArray](QuickJSAsyncFFI.md#qts-newarray) - - [QTS\_NewArrayBuffer](QuickJSAsyncFFI.md#qts-newarraybuffer) - - [QTS\_NewContext](QuickJSAsyncFFI.md#qts-newcontext) - - [QTS\_NewError](QuickJSAsyncFFI.md#qts-newerror) - - [QTS\_NewFloat64](QuickJSAsyncFFI.md#qts-newfloat64) - - [QTS\_NewFunction](QuickJSAsyncFFI.md#qts-newfunction) - - [QTS\_NewObject](QuickJSAsyncFFI.md#qts-newobject) - - [QTS\_NewObjectProto](QuickJSAsyncFFI.md#qts-newobjectproto) - - [QTS\_NewPromiseCapability](QuickJSAsyncFFI.md#qts-newpromisecapability) - - [QTS\_NewRuntime](QuickJSAsyncFFI.md#qts-newruntime) - - [QTS\_NewString](QuickJSAsyncFFI.md#qts-newstring) - - [QTS\_NewSymbol](QuickJSAsyncFFI.md#qts-newsymbol) - - [QTS\_PromiseResult](QuickJSAsyncFFI.md#qts-promiseresult) - - [QTS\_PromiseState](QuickJSAsyncFFI.md#qts-promisestate) - - [QTS\_RecoverableLeakCheck](QuickJSAsyncFFI.md#qts-recoverableleakcheck) - - [QTS\_ResolveException](QuickJSAsyncFFI.md#qts-resolveexception) - - [QTS\_RuntimeComputeMemoryUsage](QuickJSAsyncFFI.md#qts-runtimecomputememoryusage) - - [QTS\_RuntimeDisableInterruptHandler](QuickJSAsyncFFI.md#qts-runtimedisableinterrupthandler) - - [QTS\_RuntimeDisableModuleLoader](QuickJSAsyncFFI.md#qts-runtimedisablemoduleloader) - - [QTS\_RuntimeDumpMemoryUsage](QuickJSAsyncFFI.md#qts-runtimedumpmemoryusage) - - [QTS\_RuntimeEnableInterruptHandler](QuickJSAsyncFFI.md#qts-runtimeenableinterrupthandler) - - [QTS\_RuntimeEnableModuleLoader](QuickJSAsyncFFI.md#qts-runtimeenablemoduleloader) - - [QTS\_RuntimeSetMaxStackSize](QuickJSAsyncFFI.md#qts-runtimesetmaxstacksize) - - [QTS\_RuntimeSetMemoryLimit](QuickJSAsyncFFI.md#qts-runtimesetmemorylimit) - - [QTS\_SetDebugLogEnabled](QuickJSAsyncFFI.md#qts-setdebuglogenabled) - - [QTS\_SetProp](QuickJSAsyncFFI.md#qts-setprop) - - [QTS\_SetProp\_MaybeAsync](QuickJSAsyncFFI.md#qts-setprop-maybeasync) - - [QTS\_TestStringArg](QuickJSAsyncFFI.md#qts-teststringarg) - - [QTS\_Throw](QuickJSAsyncFFI.md#qts-throw) - - [QTS\_Typeof](QuickJSAsyncFFI.md#qts-typeof) - - [QTS\_bjson\_decode](QuickJSAsyncFFI.md#qts-bjson-decode) - - [QTS\_bjson\_encode](QuickJSAsyncFFI.md#qts-bjson-encode) - -## Unstable - -The FFI interface is considered private and may change. - -## Properties - -### DEBUG - -> **`readonly`** **DEBUG**: `boolean` - -Set at compile time. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:39](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L39) - -*** - -### QTS\_ArgvGetJSValueConstPointer - -> **QTS\_ArgvGetJSValueConstPointer**: (`argv`, `index`) => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Parameters - -• **argv**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **index**: `number` - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:250](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L250) - -*** - -### QTS\_BuildIsAsyncify - -> **QTS\_BuildIsAsyncify**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:248](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L248) - -*** - -### QTS\_BuildIsDebug - -> **QTS\_BuildIsDebug**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:247](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L247) - -*** - -### QTS\_BuildIsSanitizeLeak - -> **QTS\_BuildIsSanitizeLeak**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L47) - -*** - -### QTS\_Call - -> **QTS\_Call**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **this\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:173](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L173) - -*** - -### QTS\_Call\_MaybeAsync - -> **QTS\_Call\_MaybeAsync**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **this\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:180](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L180) - -*** - -### QTS\_DefineProp - -> **QTS\_DefineProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`, `get`, `set`, `configurable`, `enumerable`, `has_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **get**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **set**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **configurable**: `boolean` - -• **enumerable**: `boolean` - -• **has\_value**: `boolean` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L148) - -*** - -### QTS\_Dump - -> **QTS\_Dump**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:188](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L188) - -*** - -### QTS\_Dump\_MaybeAsync - -> **QTS\_Dump\_MaybeAsync**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:192](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L192) - -*** - -### QTS\_DupValuePointer - -> **QTS\_DupValuePointer**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:61](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L61) - -*** - -### QTS\_Eval - -> **QTS\_Eval**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:196](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L196) - -*** - -### QTS\_Eval\_MaybeAsync - -> **QTS\_Eval\_MaybeAsync**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:204](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L204) - -*** - -### QTS\_ExecutePendingJob - -> **QTS\_ExecutePendingJob**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:106](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L106) - -*** - -### QTS\_ExecutePendingJob\_MaybeAsync - -> **QTS\_ExecutePendingJob\_MaybeAsync**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L111) - -*** - -### QTS\_FreeCString - -> **QTS\_FreeCString**: (`ctx`, `str`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **str**: [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:60](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L60) - -*** - -### QTS\_FreeContext - -> **QTS\_FreeContext**: (`ctx`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L56) - -*** - -### QTS\_FreeRuntime - -> **QTS\_FreeRuntime**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:54](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L54) - -*** - -### QTS\_FreeValuePointer - -> **QTS\_FreeValuePointer**: (`ctx`, `value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L57) - -*** - -### QTS\_FreeValuePointerRuntime - -> **QTS\_FreeValuePointerRuntime**: (`rt`, `value`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:58](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L58) - -*** - -### QTS\_FreeVoidPointer - -> **QTS\_FreeVoidPointer**: (`ctx`, `ptr`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **ptr**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:59](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L59) - -*** - -### QTS\_GetArrayBuffer - -> **QTS\_GetArrayBuffer**: (`ctx`, `data`) => [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:83](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L83) - -*** - -### QTS\_GetArrayBufferLength - -> **QTS\_GetArrayBufferLength**: (`ctx`, `data`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L87) - -*** - -### QTS\_GetDebugLogEnabled - -> **QTS\_GetDebugLogEnabled**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:245](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L245) - -*** - -### QTS\_GetFalse - -> **QTS\_GetFalse**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L51) - -*** - -### QTS\_GetFloat64 - -> **QTS\_GetFloat64**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:77](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L77) - -*** - -### QTS\_GetGlobalObject - -> **QTS\_GetGlobalObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:231](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L231) - -*** - -### QTS\_GetLength - -> **QTS\_GetLength**: (`ctx`, `out_len`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:220](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L220) - -*** - -### QTS\_GetModuleNamespace - -> **QTS\_GetModuleNamespace**: (`ctx`, `module_func_obj`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **module\_func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:212](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L212) - -*** - -### QTS\_GetNull - -> **QTS\_GetNull**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:50](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L50) - -*** - -### QTS\_GetOwnPropertyNames - -> **QTS\_GetOwnPropertyNames**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L159) - -*** - -### QTS\_GetOwnPropertyNames\_MaybeAsync - -> **QTS\_GetOwnPropertyNames\_MaybeAsync**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L166) - -*** - -### QTS\_GetProp - -> **QTS\_GetProp**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L116) - -*** - -### QTS\_GetPropNumber - -> **QTS\_GetPropNumber**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:126](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L126) - -*** - -### QTS\_GetPropNumber\_MaybeAsync - -> **QTS\_GetPropNumber\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L131) - -*** - -### QTS\_GetProp\_MaybeAsync - -> **QTS\_GetProp\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:121](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L121) - -*** - -### QTS\_GetString - -> **QTS\_GetString**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:79](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L79) - -*** - -### QTS\_GetSymbolDescriptionOrKey - -> **QTS\_GetSymbolDescriptionOrKey**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:96](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L96) - -*** - -### QTS\_GetSymbolDescriptionOrKey\_MaybeAsync - -> **QTS\_GetSymbolDescriptionOrKey\_MaybeAsync**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L100) - -*** - -### QTS\_GetTrue - -> **QTS\_GetTrue**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:52](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L52) - -*** - -### QTS\_GetUndefined - -> **QTS\_GetUndefined**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L49) - -*** - -### QTS\_IsEqual - -> **QTS\_IsEqual**: (`ctx`, `a`, `b`, `op`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **a**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **b**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **op**: [`IsEqualOp`](../exports.md#isequalop) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:225](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L225) - -*** - -### QTS\_IsGlobalSymbol - -> **QTS\_IsGlobalSymbol**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L104) - -*** - -### QTS\_IsJobPending - -> **QTS\_IsJobPending**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:105](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L105) - -*** - -### QTS\_NewArray - -> **QTS\_NewArray**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L70) - -*** - -### QTS\_NewArrayBuffer - -> **QTS\_NewArrayBuffer**: (`ctx`, `buffer`, `length`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **buffer**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -• **length**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:71](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L71) - -*** - -### QTS\_NewContext - -> **QTS\_NewContext**: (`rt`, `intrinsics`) => [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **intrinsics**: [`IntrinsicsFlags`](../exports.md#intrinsicsflags) - -#### Returns - -[`JSContextPointer`](../exports.md#jscontextpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L55) - -*** - -### QTS\_NewError - -> **QTS\_NewError**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:42](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L42) - -*** - -### QTS\_NewFloat64 - -> **QTS\_NewFloat64**: (`ctx`, `num`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **num**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L76) - -*** - -### QTS\_NewFunction - -> **QTS\_NewFunction**: (`ctx`, `func_id`, `name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_id**: `number` - -• **name**: `string` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:249](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L249) - -*** - -### QTS\_NewObject - -> **QTS\_NewObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:65](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L65) - -*** - -### QTS\_NewObjectProto - -> **QTS\_NewObjectProto**: (`ctx`, `proto`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **proto**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:66](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L66) - -*** - -### QTS\_NewPromiseCapability - -> **QTS\_NewPromiseCapability**: (`ctx`, `resolve_funcs_out`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **resolve\_funcs\_out**: [`JSValuePointerPointer`](../exports.md#jsvaluepointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:232](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L232) - -*** - -### QTS\_NewRuntime - -> **QTS\_NewRuntime**: () => [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L53) - -*** - -### QTS\_NewString - -> **QTS\_NewString**: (`ctx`, `string`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **string**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:78](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L78) - -*** - -### QTS\_NewSymbol - -> **QTS\_NewSymbol**: (`ctx`, `description`, `isGlobal`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **description**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **isGlobal**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:91](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L91) - -*** - -### QTS\_PromiseResult - -> **QTS\_PromiseResult**: (`ctx`, `promise`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:240](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L240) - -*** - -### QTS\_PromiseState - -> **QTS\_PromiseState**: (`ctx`, `promise`) => [`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:236](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L236) - -*** - -### QTS\_RecoverableLeakCheck - -> **QTS\_RecoverableLeakCheck**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L46) - -*** - -### QTS\_ResolveException - -> **QTS\_ResolveException**: (`ctx`, `maybe_exception`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **maybe\_exception**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:187](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L187) - -*** - -### QTS\_RuntimeComputeMemoryUsage - -> **QTS\_RuntimeComputeMemoryUsage**: (`rt`, `ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L44) - -*** - -### QTS\_RuntimeDisableInterruptHandler - -> **QTS\_RuntimeDisableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L255) - -*** - -### QTS\_RuntimeDisableModuleLoader - -> **QTS\_RuntimeDisableModuleLoader**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:257](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L257) - -*** - -### QTS\_RuntimeDumpMemoryUsage - -> **QTS\_RuntimeDumpMemoryUsage**: (`rt`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L45) - -*** - -### QTS\_RuntimeEnableInterruptHandler - -> **QTS\_RuntimeEnableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:254](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L254) - -*** - -### QTS\_RuntimeEnableModuleLoader - -> **QTS\_RuntimeEnableModuleLoader**: (`rt`, `use_custom_normalize`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **use\_custom\_normalize**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:256](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L256) - -*** - -### QTS\_RuntimeSetMaxStackSize - -> **QTS\_RuntimeSetMaxStackSize**: (`rt`, `stack_size`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **stack\_size**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:48](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L48) - -*** - -### QTS\_RuntimeSetMemoryLimit - -> **QTS\_RuntimeSetMemoryLimit**: (`rt`, `limit`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **limit**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L43) - -*** - -### QTS\_SetDebugLogEnabled - -> **QTS\_SetDebugLogEnabled**: (`rt`, `is_enabled`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **is\_enabled**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:246](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L246) - -*** - -### QTS\_SetProp - -> **QTS\_SetProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:136](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L136) - -*** - -### QTS\_SetProp\_MaybeAsync - -> **QTS\_SetProp\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` \| `Promise`\<`void`\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`void` \| `Promise`\<`void`\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:142](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L142) - -*** - -### QTS\_TestStringArg - -> **QTS\_TestStringArg**: (`string`) => `void` - -#### Parameters - -• **string**: `string` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:244](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L244) - -*** - -### QTS\_Throw - -> **QTS\_Throw**: (`ctx`, `error`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **error**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L41) - -*** - -### QTS\_Typeof - -> **QTS\_Typeof**: (`ctx`, `value`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:216](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L216) - -*** - -### QTS\_bjson\_decode - -> **QTS\_bjson\_decode**: (`ctx`, `data`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:262](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L262) - -*** - -### QTS\_bjson\_encode - -> **QTS\_bjson\_encode**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:258](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L258) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncVariant.md b/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncVariant.md deleted file mode 100644 index aef45297c..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSAsyncVariant.md +++ /dev/null @@ -1,67 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / QuickJSAsyncVariant - -# Interface: QuickJSAsyncVariant - -An ASYNCIFY build variant. - -quickjs-emscripten provides multiple build variants of the core WebAssembly -module. These variants are each intended for a different use case. - -To create an instance of the library using a specific build variant, pass the -build variant to newQuickJSWASMModule or newQuickJSAsyncWASMModule. - -## Contents - -- [Properties](QuickJSAsyncVariant.md#properties) - - [importFFI](QuickJSAsyncVariant.md#importffi) - - [importModuleLoader](QuickJSAsyncVariant.md#importmoduleloader) - - [type](QuickJSAsyncVariant.md#type) - -## Properties - -### importFFI - -> **`readonly`** **importFFI**: () => `Promise`\<(`module`) => [`QuickJSAsyncFFI`](QuickJSAsyncFFI.md)\> - -#### Returns - -`Promise`\<(`module`) => [`QuickJSAsyncFFI`](QuickJSAsyncFFI.md)\> - -> -> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L45) - -*** - -### importModuleLoader - -> **`readonly`** **importModuleLoader**: () => `Promise`\<`EmscriptenImport`\<[`QuickJSAsyncEmscriptenModule`](QuickJSAsyncEmscriptenModule.md)\>\> - -#### Returns - -`Promise`\<`EmscriptenImport`\<[`QuickJSAsyncEmscriptenModule`](QuickJSAsyncEmscriptenModule.md)\>\> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L46) - -*** - -### type - -> **`readonly`** **type**: `"async"` - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L44) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSEmscriptenModule.md b/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSEmscriptenModule.md deleted file mode 100644 index 84d6d2d0a..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSEmscriptenModule.md +++ /dev/null @@ -1,507 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / QuickJSEmscriptenModule - -# Interface: QuickJSEmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](QuickJSEmscriptenModule.md#extends) -- [Properties](QuickJSEmscriptenModule.md#properties) - - [FAST\_MEMORY](QuickJSEmscriptenModule.md#fast-memory) - - [HEAP16](QuickJSEmscriptenModule.md#heap16) - - [HEAP32](QuickJSEmscriptenModule.md#heap32) - - [HEAP8](QuickJSEmscriptenModule.md#heap8) - - [HEAPF32](QuickJSEmscriptenModule.md#heapf32) - - [HEAPF64](QuickJSEmscriptenModule.md#heapf64) - - [HEAPU16](QuickJSEmscriptenModule.md#heapu16) - - [HEAPU32](QuickJSEmscriptenModule.md#heapu32) - - [HEAPU8](QuickJSEmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](QuickJSEmscriptenModule.md#total-memory) - - [TOTAL\_STACK](QuickJSEmscriptenModule.md#total-stack) - - [callbacks](QuickJSEmscriptenModule.md#callbacks) - - [type](QuickJSEmscriptenModule.md#type) - - [wasmBinary?](QuickJSEmscriptenModule.md#wasmbinary) - - [wasmMemory?](QuickJSEmscriptenModule.md#wasmmemory) -- [Methods](QuickJSEmscriptenModule.md#methods) - - [UTF8ToString()](QuickJSEmscriptenModule.md#utf8tostring) - - [\_free()](QuickJSEmscriptenModule.md#free) - - [\_malloc()](QuickJSEmscriptenModule.md#malloc) - - [cwrap()](QuickJSEmscriptenModule.md#cwrap) - - [instantiateWasm()?](QuickJSEmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](QuickJSEmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](QuickJSEmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](QuickJSEmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](QuickJSEmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.FAST_MEMORY`](EmscriptenModule.md#fast-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L168) - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAP16`](EmscriptenModule.md#heap16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:158](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L158) - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAP32`](EmscriptenModule.md#heap32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L159) - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAP8`](EmscriptenModule.md#heap8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:157](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L157) - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPF32`](EmscriptenModule.md#heapf32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:163](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L163) - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPF64`](EmscriptenModule.md#heapf64) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L164) - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPU16`](EmscriptenModule.md#heapu16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:161](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L161) - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPU32`](EmscriptenModule.md#heapu32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L162) - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.HEAPU8`](EmscriptenModule.md#heapu8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L160) - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.TOTAL_MEMORY`](EmscriptenModule.md#total-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:167](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L167) - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.TOTAL_STACK`](EmscriptenModule.md#total-stack) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L166) - -*** - -### callbacks - -> **callbacks**: `EmscriptenModuleCallbacks` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:237](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L237) - -*** - -### type - -> **type**: `"sync"` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:236](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L236) - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.wasmBinary`](EmscriptenModule.md#wasmbinary) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.wasmMemory`](EmscriptenModule.md#wasmmemory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.UTF8ToString`](EmscriptenModule.md#utf8tostring) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:144](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L144) - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule._free`](EmscriptenModule.md#free) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L148) - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule._malloc`](EmscriptenModule.md#malloc) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L147) - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.cwrap`](EmscriptenModule.md#cwrap) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:149](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L149) - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.instantiateWasm`](EmscriptenModule.md#instantiatewasm) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.lengthBytesUTF8`](EmscriptenModule.md#lengthbytesutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:145](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L145) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.locateFile`](EmscriptenModule.md#locatefile) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.monitorRunDependencies`](EmscriptenModule.md#monitorrundependencies) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`@jitl/quickjs-ffi-types.EmscriptenModule.stringToUTF8`](EmscriptenModule.md#stringtoutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:139](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L139) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSFFI.md b/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSFFI.md deleted file mode 100644 index eb92840e1..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSFFI.md +++ /dev/null @@ -1,1399 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / QuickJSFFI - -# Interface: QuickJSFFI - -Low-level FFI bindings to QuickJS's Emscripten module. -See instead QuickJSContext, the public Javascript interface exposed by this -library. - -## Contents - -- [Unstable](QuickJSFFI.md#unstable) -- [Properties](QuickJSFFI.md#properties) - - [DEBUG](QuickJSFFI.md#debug) - - [QTS\_ArgvGetJSValueConstPointer](QuickJSFFI.md#qts-argvgetjsvalueconstpointer) - - [QTS\_BuildIsAsyncify](QuickJSFFI.md#qts-buildisasyncify) - - [QTS\_BuildIsDebug](QuickJSFFI.md#qts-buildisdebug) - - [QTS\_BuildIsSanitizeLeak](QuickJSFFI.md#qts-buildissanitizeleak) - - [QTS\_Call](QuickJSFFI.md#qts-call) - - [QTS\_DefineProp](QuickJSFFI.md#qts-defineprop) - - [QTS\_Dump](QuickJSFFI.md#qts-dump) - - [QTS\_DupValuePointer](QuickJSFFI.md#qts-dupvaluepointer) - - [QTS\_Eval](QuickJSFFI.md#qts-eval) - - [QTS\_ExecutePendingJob](QuickJSFFI.md#qts-executependingjob) - - [QTS\_FreeCString](QuickJSFFI.md#qts-freecstring) - - [QTS\_FreeContext](QuickJSFFI.md#qts-freecontext) - - [QTS\_FreeRuntime](QuickJSFFI.md#qts-freeruntime) - - [QTS\_FreeValuePointer](QuickJSFFI.md#qts-freevaluepointer) - - [QTS\_FreeValuePointerRuntime](QuickJSFFI.md#qts-freevaluepointerruntime) - - [QTS\_FreeVoidPointer](QuickJSFFI.md#qts-freevoidpointer) - - [QTS\_GetArrayBuffer](QuickJSFFI.md#qts-getarraybuffer) - - [QTS\_GetArrayBufferLength](QuickJSFFI.md#qts-getarraybufferlength) - - [QTS\_GetDebugLogEnabled](QuickJSFFI.md#qts-getdebuglogenabled) - - [QTS\_GetFalse](QuickJSFFI.md#qts-getfalse) - - [QTS\_GetFloat64](QuickJSFFI.md#qts-getfloat64) - - [QTS\_GetGlobalObject](QuickJSFFI.md#qts-getglobalobject) - - [QTS\_GetLength](QuickJSFFI.md#qts-getlength) - - [QTS\_GetModuleNamespace](QuickJSFFI.md#qts-getmodulenamespace) - - [QTS\_GetNull](QuickJSFFI.md#qts-getnull) - - [QTS\_GetOwnPropertyNames](QuickJSFFI.md#qts-getownpropertynames) - - [QTS\_GetProp](QuickJSFFI.md#qts-getprop) - - [QTS\_GetPropNumber](QuickJSFFI.md#qts-getpropnumber) - - [QTS\_GetString](QuickJSFFI.md#qts-getstring) - - [QTS\_GetSymbolDescriptionOrKey](QuickJSFFI.md#qts-getsymboldescriptionorkey) - - [QTS\_GetTrue](QuickJSFFI.md#qts-gettrue) - - [QTS\_GetUndefined](QuickJSFFI.md#qts-getundefined) - - [QTS\_IsEqual](QuickJSFFI.md#qts-isequal) - - [QTS\_IsGlobalSymbol](QuickJSFFI.md#qts-isglobalsymbol) - - [QTS\_IsJobPending](QuickJSFFI.md#qts-isjobpending) - - [QTS\_NewArray](QuickJSFFI.md#qts-newarray) - - [QTS\_NewArrayBuffer](QuickJSFFI.md#qts-newarraybuffer) - - [QTS\_NewContext](QuickJSFFI.md#qts-newcontext) - - [QTS\_NewError](QuickJSFFI.md#qts-newerror) - - [QTS\_NewFloat64](QuickJSFFI.md#qts-newfloat64) - - [QTS\_NewFunction](QuickJSFFI.md#qts-newfunction) - - [QTS\_NewObject](QuickJSFFI.md#qts-newobject) - - [QTS\_NewObjectProto](QuickJSFFI.md#qts-newobjectproto) - - [QTS\_NewPromiseCapability](QuickJSFFI.md#qts-newpromisecapability) - - [QTS\_NewRuntime](QuickJSFFI.md#qts-newruntime) - - [QTS\_NewString](QuickJSFFI.md#qts-newstring) - - [QTS\_NewSymbol](QuickJSFFI.md#qts-newsymbol) - - [QTS\_PromiseResult](QuickJSFFI.md#qts-promiseresult) - - [QTS\_PromiseState](QuickJSFFI.md#qts-promisestate) - - [QTS\_RecoverableLeakCheck](QuickJSFFI.md#qts-recoverableleakcheck) - - [QTS\_ResolveException](QuickJSFFI.md#qts-resolveexception) - - [QTS\_RuntimeComputeMemoryUsage](QuickJSFFI.md#qts-runtimecomputememoryusage) - - [QTS\_RuntimeDisableInterruptHandler](QuickJSFFI.md#qts-runtimedisableinterrupthandler) - - [QTS\_RuntimeDisableModuleLoader](QuickJSFFI.md#qts-runtimedisablemoduleloader) - - [QTS\_RuntimeDumpMemoryUsage](QuickJSFFI.md#qts-runtimedumpmemoryusage) - - [QTS\_RuntimeEnableInterruptHandler](QuickJSFFI.md#qts-runtimeenableinterrupthandler) - - [QTS\_RuntimeEnableModuleLoader](QuickJSFFI.md#qts-runtimeenablemoduleloader) - - [QTS\_RuntimeSetMaxStackSize](QuickJSFFI.md#qts-runtimesetmaxstacksize) - - [QTS\_RuntimeSetMemoryLimit](QuickJSFFI.md#qts-runtimesetmemorylimit) - - [QTS\_SetDebugLogEnabled](QuickJSFFI.md#qts-setdebuglogenabled) - - [QTS\_SetProp](QuickJSFFI.md#qts-setprop) - - [QTS\_TestStringArg](QuickJSFFI.md#qts-teststringarg) - - [QTS\_Throw](QuickJSFFI.md#qts-throw) - - [QTS\_Typeof](QuickJSFFI.md#qts-typeof) - - [QTS\_bjson\_decode](QuickJSFFI.md#qts-bjson-decode) - - [QTS\_bjson\_encode](QuickJSFFI.md#qts-bjson-encode) - -## Unstable - -The FFI interface is considered private and may change. - -## Properties - -### DEBUG - -> **`readonly`** **DEBUG**: `boolean` - -Set at compile time. - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:38](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L38) - -*** - -### QTS\_ArgvGetJSValueConstPointer - -> **QTS\_ArgvGetJSValueConstPointer**: (`argv`, `index`) => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Parameters - -• **argv**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **index**: `number` - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:198](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L198) - -*** - -### QTS\_BuildIsAsyncify - -> **QTS\_BuildIsAsyncify**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:196](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L196) - -*** - -### QTS\_BuildIsDebug - -> **QTS\_BuildIsDebug**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:195](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L195) - -*** - -### QTS\_BuildIsSanitizeLeak - -> **QTS\_BuildIsSanitizeLeak**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L46) - -*** - -### QTS\_Call - -> **QTS\_Call**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **this\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:140](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L140) - -*** - -### QTS\_DefineProp - -> **QTS\_DefineProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`, `get`, `set`, `configurable`, `enumerable`, `has_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **get**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **set**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **configurable**: `boolean` - -• **enumerable**: `boolean` - -• **has\_value**: `boolean` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:122](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L122) - -*** - -### QTS\_Dump - -> **QTS\_Dump**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L148) - -*** - -### QTS\_DupValuePointer - -> **QTS\_DupValuePointer**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:60](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L60) - -*** - -### QTS\_Eval - -> **QTS\_Eval**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L152) - -*** - -### QTS\_ExecutePendingJob - -> **QTS\_ExecutePendingJob**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:101](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L101) - -*** - -### QTS\_FreeCString - -> **QTS\_FreeCString**: (`ctx`, `str`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **str**: [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:59](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L59) - -*** - -### QTS\_FreeContext - -> **QTS\_FreeContext**: (`ctx`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L55) - -*** - -### QTS\_FreeRuntime - -> **QTS\_FreeRuntime**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L53) - -*** - -### QTS\_FreeValuePointer - -> **QTS\_FreeValuePointer**: (`ctx`, `value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L56) - -*** - -### QTS\_FreeValuePointerRuntime - -> **QTS\_FreeValuePointerRuntime**: (`rt`, `value`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L57) - -*** - -### QTS\_FreeVoidPointer - -> **QTS\_FreeVoidPointer**: (`ctx`, `ptr`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **ptr**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:58](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L58) - -*** - -### QTS\_GetArrayBuffer - -> **QTS\_GetArrayBuffer**: (`ctx`, `data`) => [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:82](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L82) - -*** - -### QTS\_GetArrayBufferLength - -> **QTS\_GetArrayBufferLength**: (`ctx`, `data`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L86) - -*** - -### QTS\_GetDebugLogEnabled - -> **QTS\_GetDebugLogEnabled**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:193](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L193) - -*** - -### QTS\_GetFalse - -> **QTS\_GetFalse**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:50](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L50) - -*** - -### QTS\_GetFloat64 - -> **QTS\_GetFloat64**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L76) - -*** - -### QTS\_GetGlobalObject - -> **QTS\_GetGlobalObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:179](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L179) - -*** - -### QTS\_GetLength - -> **QTS\_GetLength**: (`ctx`, `out_len`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L168) - -*** - -### QTS\_GetModuleNamespace - -> **QTS\_GetModuleNamespace**: (`ctx`, `module_func_obj`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **module\_func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L160) - -*** - -### QTS\_GetNull - -> **QTS\_GetNull**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L49) - -*** - -### QTS\_GetOwnPropertyNames - -> **QTS\_GetOwnPropertyNames**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:133](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L133) - -*** - -### QTS\_GetProp - -> **QTS\_GetProp**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:106](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L106) - -*** - -### QTS\_GetPropNumber - -> **QTS\_GetPropNumber**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L111) - -*** - -### QTS\_GetString - -> **QTS\_GetString**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:78](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L78) - -*** - -### QTS\_GetSymbolDescriptionOrKey - -> **QTS\_GetSymbolDescriptionOrKey**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:95](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L95) - -*** - -### QTS\_GetTrue - -> **QTS\_GetTrue**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L51) - -*** - -### QTS\_GetUndefined - -> **QTS\_GetUndefined**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:48](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L48) - -*** - -### QTS\_IsEqual - -> **QTS\_IsEqual**: (`ctx`, `a`, `b`, `op`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **a**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **b**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **op**: [`IsEqualOp`](../exports.md#isequalop) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:173](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L173) - -*** - -### QTS\_IsGlobalSymbol - -> **QTS\_IsGlobalSymbol**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:99](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L99) - -*** - -### QTS\_IsJobPending - -> **QTS\_IsJobPending**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L100) - -*** - -### QTS\_NewArray - -> **QTS\_NewArray**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:69](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L69) - -*** - -### QTS\_NewArrayBuffer - -> **QTS\_NewArrayBuffer**: (`ctx`, `buffer`, `length`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **buffer**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -• **length**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L70) - -*** - -### QTS\_NewContext - -> **QTS\_NewContext**: (`rt`, `intrinsics`) => [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **intrinsics**: [`IntrinsicsFlags`](../exports.md#intrinsicsflags) - -#### Returns - -[`JSContextPointer`](../exports.md#jscontextpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:54](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L54) - -*** - -### QTS\_NewError - -> **QTS\_NewError**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L41) - -*** - -### QTS\_NewFloat64 - -> **QTS\_NewFloat64**: (`ctx`, `num`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **num**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:75](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L75) - -*** - -### QTS\_NewFunction - -> **QTS\_NewFunction**: (`ctx`, `func_id`, `name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_id**: `number` - -• **name**: `string` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:197](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L197) - -*** - -### QTS\_NewObject - -> **QTS\_NewObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:64](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L64) - -*** - -### QTS\_NewObjectProto - -> **QTS\_NewObjectProto**: (`ctx`, `proto`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **proto**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:65](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L65) - -*** - -### QTS\_NewPromiseCapability - -> **QTS\_NewPromiseCapability**: (`ctx`, `resolve_funcs_out`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **resolve\_funcs\_out**: [`JSValuePointerPointer`](../exports.md#jsvaluepointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:180](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L180) - -*** - -### QTS\_NewRuntime - -> **QTS\_NewRuntime**: () => [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:52](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L52) - -*** - -### QTS\_NewString - -> **QTS\_NewString**: (`ctx`, `string`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **string**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:77](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L77) - -*** - -### QTS\_NewSymbol - -> **QTS\_NewSymbol**: (`ctx`, `description`, `isGlobal`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **description**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **isGlobal**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:90](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L90) - -*** - -### QTS\_PromiseResult - -> **QTS\_PromiseResult**: (`ctx`, `promise`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:188](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L188) - -*** - -### QTS\_PromiseState - -> **QTS\_PromiseState**: (`ctx`, `promise`) => [`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:184](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L184) - -*** - -### QTS\_RecoverableLeakCheck - -> **QTS\_RecoverableLeakCheck**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L45) - -*** - -### QTS\_ResolveException - -> **QTS\_ResolveException**: (`ctx`, `maybe_exception`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **maybe\_exception**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L147) - -*** - -### QTS\_RuntimeComputeMemoryUsage - -> **QTS\_RuntimeComputeMemoryUsage**: (`rt`, `ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L43) - -*** - -### QTS\_RuntimeDisableInterruptHandler - -> **QTS\_RuntimeDisableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:203](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L203) - -*** - -### QTS\_RuntimeDisableModuleLoader - -> **QTS\_RuntimeDisableModuleLoader**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:205](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L205) - -*** - -### QTS\_RuntimeDumpMemoryUsage - -> **QTS\_RuntimeDumpMemoryUsage**: (`rt`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L44) - -*** - -### QTS\_RuntimeEnableInterruptHandler - -> **QTS\_RuntimeEnableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:202](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L202) - -*** - -### QTS\_RuntimeEnableModuleLoader - -> **QTS\_RuntimeEnableModuleLoader**: (`rt`, `use_custom_normalize`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **use\_custom\_normalize**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:204](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L204) - -*** - -### QTS\_RuntimeSetMaxStackSize - -> **QTS\_RuntimeSetMaxStackSize**: (`rt`, `stack_size`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **stack\_size**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L47) - -*** - -### QTS\_RuntimeSetMemoryLimit - -> **QTS\_RuntimeSetMemoryLimit**: (`rt`, `limit`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **limit**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:42](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L42) - -*** - -### QTS\_SetDebugLogEnabled - -> **QTS\_SetDebugLogEnabled**: (`rt`, `is_enabled`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **is\_enabled**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:194](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L194) - -*** - -### QTS\_SetProp - -> **QTS\_SetProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L116) - -*** - -### QTS\_TestStringArg - -> **QTS\_TestStringArg**: (`string`) => `void` - -#### Parameters - -• **string**: `string` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:192](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L192) - -*** - -### QTS\_Throw - -> **QTS\_Throw**: (`ctx`, `error`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **error**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:40](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L40) - -*** - -### QTS\_Typeof - -> **QTS\_Typeof**: (`ctx`, `value`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L164) - -*** - -### QTS\_bjson\_decode - -> **QTS\_bjson\_decode**: (`ctx`, `data`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:210](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L210) - -*** - -### QTS\_bjson\_encode - -> **QTS\_bjson\_encode**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:206](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L206) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSSyncVariant.md b/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSSyncVariant.md deleted file mode 100644 index 28b1756bc..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/QuickJSSyncVariant.md +++ /dev/null @@ -1,67 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / QuickJSSyncVariant - -# Interface: QuickJSSyncVariant - -A standard (sync) build variant. - -quickjs-emscripten provides multiple build variants of the core WebAssembly -module. These variants are each intended for a different use case. - -To create an instance of the library using a specific build variant, pass the -build variant to newQuickJSWASMModule or newQuickJSAsyncWASMModule. - -## Contents - -- [Properties](QuickJSSyncVariant.md#properties) - - [importFFI](QuickJSSyncVariant.md#importffi) - - [importModuleLoader](QuickJSSyncVariant.md#importmoduleloader) - - [type](QuickJSSyncVariant.md#type) - -## Properties - -### importFFI - -> **`readonly`** **importFFI**: () => `Promise`\<(`module`) => [`QuickJSFFI`](QuickJSFFI.md)\> - -#### Returns - -`Promise`\<(`module`) => [`QuickJSFFI`](QuickJSFFI.md)\> - -> -> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:30](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L30) - -*** - -### importModuleLoader - -> **`readonly`** **importModuleLoader**: () => `Promise`\<`EmscriptenImport`\<[`QuickJSEmscriptenModule`](QuickJSEmscriptenModule.md)\>\> - -#### Returns - -`Promise`\<`EmscriptenImport`\<[`QuickJSEmscriptenModule`](QuickJSEmscriptenModule.md)\>\> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:31](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L31) - -*** - -### type - -> **`readonly`** **type**: `"sync"` - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:29](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L29) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ffi-types/interfaces/SourceMapData.md b/doc/@jitl/quickjs-ffi-types/interfaces/SourceMapData.md deleted file mode 100644 index 5e00f16e2..000000000 --- a/doc/@jitl/quickjs-ffi-types/interfaces/SourceMapData.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **@jitl/quickjs-ffi-types** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [@jitl/quickjs-ffi-types](../exports.md) / SourceMapData - -# Interface: SourceMapData - -## Contents - -- [Properties](SourceMapData.md#properties) - - [mappings](SourceMapData.md#mappings) - - [names](SourceMapData.md#names) - - [sources](SourceMapData.md#sources) - - [version](SourceMapData.md#version) - -## Properties - -### mappings - -> **mappings**: `string` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:58](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L58) - -*** - -### names - -> **names**: `string`[] - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L57) - -*** - -### sources - -> **sources**: `string`[] - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L56) - -*** - -### version - -> **version**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L55) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md b/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md deleted file mode 100644 index 4623ca4d0..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md +++ /dev/null @@ -1,110 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-ng-wasmfile-debug-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs-ng](README.md#library-quickjs-ng) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-O3" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/exports.md b/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/exports.md deleted file mode 100644 index aa8e922d7..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-ng-wasmfile-debug-asyncify - -# @jitl/quickjs-ng-wasmfile-debug-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-ng-wasmfile-debug-asyncify](exports.md#jitlquickjs-ng-wasmfile-debug-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-ng-wasmfile-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md b/doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md deleted file mode 100644 index beeca5e23..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md +++ /dev/null @@ -1,105 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-ng-wasmfile-debug-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs-ng](README.md#library-quickjs-ng) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-debug-sync/exports.md b/doc/@jitl/quickjs-ng-wasmfile-debug-sync/exports.md deleted file mode 100644 index a60ad1665..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-debug-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-ng-wasmfile-debug-sync - -# @jitl/quickjs-ng-wasmfile-debug-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-ng-wasmfile-debug-sync](exports.md#jitlquickjs-ng-wasmfile-debug-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-ng-wasmfile-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-ng-wasmfile-debug-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md b/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md deleted file mode 100644 index 1384d2cc4..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md +++ /dev/null @@ -1,106 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-ng-wasmfile-release-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs-ng](README.md#library-quickjs-ng) -- [Release mode: release](README.md#release-mode-release) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/exports.md b/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/exports.md deleted file mode 100644 index bd33d5fd1..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-ng-wasmfile-release-asyncify - -# @jitl/quickjs-ng-wasmfile-release-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-ng-wasmfile-release-asyncify](exports.md#jitlquickjs-ng-wasmfile-release-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-ng-wasmfile-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-ng-wasmfile-release-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md b/doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md deleted file mode 100644 index f274ae8fa..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md +++ /dev/null @@ -1,99 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-ng-wasmfile-release-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs-ng](README.md#library-quickjs-ng) -- [Release mode: release](README.md#release-mode-release) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-ng-wasmfile-release-sync/exports.md b/doc/@jitl/quickjs-ng-wasmfile-release-sync/exports.md deleted file mode 100644 index 91f57d859..000000000 --- a/doc/@jitl/quickjs-ng-wasmfile-release-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-ng-wasmfile-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-ng-wasmfile-release-sync - -# @jitl/quickjs-ng-wasmfile-release-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-ng-wasmfile-release-sync](exports.md#jitlquickjs-ng-wasmfile-release-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-ng-wasmfile-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-ng-wasmfile-release-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md b/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md deleted file mode 100644 index d3f753aca..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md +++ /dev/null @@ -1,99 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-browser-debug-asyncify - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: browser](README.md#exports-browser) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-O3" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/exports.md b/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/exports.md deleted file mode 100644 index 249c4ec2b..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-browser-debug-asyncify - -# @jitl/quickjs-singlefile-browser-debug-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-browser-debug-asyncify](exports.md#jitlquickjs-singlefile-browser-debug-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-singlefile-browser-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-browser-debug-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md b/doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md deleted file mode 100644 index 1c695d81d..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md +++ /dev/null @@ -1,94 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-browser-debug-sync - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: browser](README.md#exports-browser) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-debug-sync/exports.md b/doc/@jitl/quickjs-singlefile-browser-debug-sync/exports.md deleted file mode 100644 index 379582654..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-debug-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-browser-debug-sync - -# @jitl/quickjs-singlefile-browser-debug-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-browser-debug-sync](exports.md#jitlquickjs-singlefile-browser-debug-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-singlefile-browser-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-browser-debug-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md b/doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md deleted file mode 100644 index 6bfeb0270..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md +++ /dev/null @@ -1,95 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-browser-release-asyncify - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: browser](README.md#exports-browser) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-release-asyncify/exports.md b/doc/@jitl/quickjs-singlefile-browser-release-asyncify/exports.md deleted file mode 100644 index 6aa6fca9e..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-release-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-browser-release-asyncify - -# @jitl/quickjs-singlefile-browser-release-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-browser-release-asyncify](exports.md#jitlquickjs-singlefile-browser-release-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-singlefile-browser-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-browser-release-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-release-sync/README.md b/doc/@jitl/quickjs-singlefile-browser-release-sync/README.md deleted file mode 100644 index e2f2986f5..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-release-sync/README.md +++ /dev/null @@ -1,88 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-browser-release-sync - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: browser](README.md#exports-browser) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-browser-release-sync/exports.md b/doc/@jitl/quickjs-singlefile-browser-release-sync/exports.md deleted file mode 100644 index c1fc64eaa..000000000 --- a/doc/@jitl/quickjs-singlefile-browser-release-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-browser-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-browser-release-sync - -# @jitl/quickjs-singlefile-browser-release-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-browser-release-sync](exports.md#jitlquickjs-singlefile-browser-release-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-singlefile-browser-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-sync/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-browser-release-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md b/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md deleted file mode 100644 index 40f85c2aa..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md +++ /dev/null @@ -1,99 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-cjs-debug-asyncify - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: require](README.md#exports-require) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-O3" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/exports.md b/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/exports.md deleted file mode 100644 index 309f7918d..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-cjs-debug-asyncify - -# @jitl/quickjs-singlefile-cjs-debug-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-cjs-debug-asyncify](exports.md#jitlquickjs-singlefile-cjs-debug-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-singlefile-cjs-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md b/doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md deleted file mode 100644 index d4a3dab09..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md +++ /dev/null @@ -1,94 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-cjs-debug-sync - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: require](README.md#exports-require) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-debug-sync/exports.md b/doc/@jitl/quickjs-singlefile-cjs-debug-sync/exports.md deleted file mode 100644 index 0f3732d50..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-debug-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-cjs-debug-sync - -# @jitl/quickjs-singlefile-cjs-debug-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-cjs-debug-sync](exports.md#jitlquickjs-singlefile-cjs-debug-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-singlefile-cjs-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-cjs-debug-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md b/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md deleted file mode 100644 index fa1f30c9e..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md +++ /dev/null @@ -1,95 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-cjs-release-asyncify - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: require](README.md#exports-require) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/exports.md b/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/exports.md deleted file mode 100644 index 22fbad21c..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-cjs-release-asyncify - -# @jitl/quickjs-singlefile-cjs-release-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-cjs-release-asyncify](exports.md#jitlquickjs-singlefile-cjs-release-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-singlefile-cjs-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-cjs-release-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md b/doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md deleted file mode 100644 index 48e32f86f..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md +++ /dev/null @@ -1,88 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-cjs-release-sync - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: require](README.md#exports-require) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-cjs-release-sync/exports.md b/doc/@jitl/quickjs-singlefile-cjs-release-sync/exports.md deleted file mode 100644 index 441e49e83..000000000 --- a/doc/@jitl/quickjs-singlefile-cjs-release-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-cjs-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-cjs-release-sync - -# @jitl/quickjs-singlefile-cjs-release-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-cjs-release-sync](exports.md#jitlquickjs-singlefile-cjs-release-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-singlefile-cjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-cjs-release-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md b/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md deleted file mode 100644 index c106c3f14..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md +++ /dev/null @@ -1,99 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-mjs-debug-asyncify - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: import](README.md#exports-import) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-O3" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/exports.md b/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/exports.md deleted file mode 100644 index 9bb40e9d7..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-mjs-debug-asyncify - -# @jitl/quickjs-singlefile-mjs-debug-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-mjs-debug-asyncify](exports.md#jitlquickjs-singlefile-mjs-debug-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-singlefile-mjs-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md b/doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md deleted file mode 100644 index 48a556db5..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md +++ /dev/null @@ -1,94 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-mjs-debug-sync - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: import](README.md#exports-import) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-debug-sync/exports.md b/doc/@jitl/quickjs-singlefile-mjs-debug-sync/exports.md deleted file mode 100644 index afaa52709..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-debug-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-mjs-debug-sync - -# @jitl/quickjs-singlefile-mjs-debug-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-mjs-debug-sync](exports.md#jitlquickjs-singlefile-mjs-debug-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-singlefile-mjs-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-mjs-debug-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md b/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md deleted file mode 100644 index 4d181f5e0..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md +++ /dev/null @@ -1,95 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-mjs-release-asyncify - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: import](README.md#exports-import) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/exports.md b/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/exports.md deleted file mode 100644 index aec711448..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-mjs-release-asyncify - -# @jitl/quickjs-singlefile-mjs-release-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-mjs-release-asyncify](exports.md#jitlquickjs-singlefile-mjs-release-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-singlefile-mjs-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-mjs-release-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md b/doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md deleted file mode 100644 index de40adf8a..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md +++ /dev/null @@ -1,88 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-singlefile-mjs-release-sync - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: import](README.md#exports-import) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? singlefile](README.md#single-file-or-separate-wasm-file-singlefile) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-singlefile-mjs-release-sync/exports.md b/doc/@jitl/quickjs-singlefile-mjs-release-sync/exports.md deleted file mode 100644 index 1d2ec3120..000000000 --- a/doc/@jitl/quickjs-singlefile-mjs-release-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-singlefile-mjs-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-singlefile-mjs-release-sync - -# @jitl/quickjs-singlefile-mjs-release-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-singlefile-mjs-release-sync](exports.md#jitlquickjs-singlefile-mjs-release-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-singlefile-mjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-singlefile-mjs-release-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md b/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md deleted file mode 100644 index 410ac7b12..000000000 --- a/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md +++ /dev/null @@ -1,110 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-wasmfile-debug-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-O3" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-debug-asyncify/exports.md b/doc/@jitl/quickjs-wasmfile-debug-asyncify/exports.md deleted file mode 100644 index 65d3b94c8..000000000 --- a/doc/@jitl/quickjs-wasmfile-debug-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-debug-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-wasmfile-debug-asyncify - -# @jitl/quickjs-wasmfile-debug-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-wasmfile-debug-asyncify](exports.md#jitlquickjs-wasmfile-debug-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-wasmfile-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-wasmfile-debug-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-debug-sync/README.md b/doc/@jitl/quickjs-wasmfile-debug-sync/README.md deleted file mode 100644 index 1024c8021..000000000 --- a/doc/@jitl/quickjs-wasmfile-debug-sync/README.md +++ /dev/null @@ -1,105 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-wasmfile-debug-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: debug](README.md#release-mode-debug) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-debug-sync/exports.md b/doc/@jitl/quickjs-wasmfile-debug-sync/exports.md deleted file mode 100644 index 8579e9dfd..000000000 --- a/doc/@jitl/quickjs-wasmfile-debug-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-debug-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-wasmfile-debug-sync - -# @jitl/quickjs-wasmfile-debug-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-wasmfile-debug-sync](exports.md#jitlquickjs-wasmfile-debug-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-wasmfile-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-wasmfile-debug-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md b/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md deleted file mode 100644 index b4224cf51..000000000 --- a/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md +++ /dev/null @@ -1,106 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-wasmfile-release-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? Yes](README.md#extra-async-magic-yes) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-release-asyncify/exports.md b/doc/@jitl/quickjs-wasmfile-release-asyncify/exports.md deleted file mode 100644 index ba17d38cf..000000000 --- a/doc/@jitl/quickjs-wasmfile-release-asyncify/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-release-asyncify** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-wasmfile-release-asyncify - -# @jitl/quickjs-wasmfile-release-asyncify - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-wasmfile-release-asyncify](exports.md#jitlquickjs-wasmfile-release-asyncify) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSAsyncVariant`](../../quickjs-emscripten/interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-wasmfile-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-wasmfile-release-asyncify/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-release-sync/README.md b/doc/@jitl/quickjs-wasmfile-release-sync/README.md deleted file mode 100644 index 6c2663e8f..000000000 --- a/doc/@jitl/quickjs-wasmfile-release-sync/README.md +++ /dev/null @@ -1,99 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# @jitl/quickjs-wasmfile-release-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Contents - -- [Library: quickjs](README.md#library-quickjs) -- [Release mode: release](README.md#release-mode-release) -- [Exports: require import browser workerd](README.md#exports-require-import-browser-workerd) -- [Extra async magic? No](README.md#extra-async-magic-no) -- [Single-file, or separate .wasm file? wasm](README.md#single-file-or-separate-wasm-file-wasm) -- [More details](README.md#more-details) - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/@jitl/quickjs-wasmfile-release-sync/exports.md b/doc/@jitl/quickjs-wasmfile-release-sync/exports.md deleted file mode 100644 index f488b8e18..000000000 --- a/doc/@jitl/quickjs-wasmfile-release-sync/exports.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **@jitl/quickjs-wasmfile-release-sync** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / @jitl/quickjs-wasmfile-release-sync - -# @jitl/quickjs-wasmfile-release-sync - -## Contents - -- [Variables](exports.md#variables) - - [default](exports.md#default) - - [@jitl/quickjs-wasmfile-release-sync](exports.md#jitlquickjs-wasmfile-release-sync) - -## Variables - -### default - -> **`const`** **default**: [`QuickJSSyncVariant`](../../quickjs-emscripten/interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-wasmfile-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -[index.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/variant-quickjs-wasmfile-release-sync/src/index.ts#L18) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/README.md b/doc/README.md deleted file mode 100644 index 02aca07c9..000000000 --- a/doc/README.md +++ /dev/null @@ -1,936 +0,0 @@ -**quickjs-emscripten** • [Readme](README.md) \| [Packages](packages.md) - -*** - -# quickjs-emscripten - -Javascript/Typescript bindings for QuickJS, a modern Javascript interpreter, -compiled to WebAssembly. - -- Safely evaluate untrusted Javascript (supports [most of ES2023](https://test262.fyi/#|qjs,qjs_ng)). -- Create and manipulate values inside the QuickJS runtime ([more][values]). -- Expose host functions to the QuickJS runtime ([more][functions]). -- Execute synchronous code that uses asynchronous functions, with [asyncify][asyncify]. -- Supports browsers, NodeJS, Deno, Bun, Cloudflare Workers, QuickJS (via [quickjs-for-quickjs][]). - -[Github] | [NPM] | [API Documentation][api] | [Variants][core] | [Examples][tests] - -```typescript -import { getQuickJS } from "quickjs-emscripten" - -async function main() { - const QuickJS = await getQuickJS() - const vm = QuickJS.newContext() - - const world = vm.newString("world") - vm.setProp(vm.global, "NAME", world) - world.dispose() - - const result = vm.evalCode(`"Hello " + NAME + "!"`) - if (result.error) { - console.log("Execution failed:", vm.dump(result.error)) - result.error.dispose() - } else { - console.log("Success:", vm.dump(result.value)) - result.value.dispose() - } - - vm.dispose() -} - -main() -``` - -[github]: https://github.com/justjake/quickjs-emscripten -[npm]: https://www.npmjs.com/package/quickjs-emscripten -[api]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/packages.md -[tests]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/quickjs.test.ts -[values]: #interfacing-with-the-interpreter -[asyncify]: #asyncify -[functions]: #exposing-apis -[quickjs-for-quickjs]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-for-quickjs - -- [quickjs-emscripten](#quickjs-emscripten) - - [Usage](#usage) - - [Safely evaluate Javascript code](#safely-evaluate-javascript-code) - - [Interfacing with the interpreter](#interfacing-with-the-interpreter) - - [Runtime](#runtime) - - [EcmaScript Module Exports](#ecmascript-module-exports) - - [Memory Management](#memory-management) - - [`using` statement](#using-statement) - - [Scope](#scope) - - [`Lifetime.consume(fn)`](#lifetimeconsumefn) - - [Exposing APIs](#exposing-apis) - - [Promises](#promises) - - [context.getPromiseState(handle)](#contextgetpromisestatehandle) - - [context.resolvePromise(handle)](#contextresolvepromisehandle) - - [Asyncify](#asyncify) - - [Async module loader](#async-module-loader) - - [Async on host, sync in QuickJS](#async-on-host-sync-in-quickjs) - - [Testing your code](#testing-your-code) - - [Packaging](#packaging) - - [Reducing package size](#reducing-package-size) - - [WebAssembly loading](#webassembly-loading) - - [quickjs-ng](#quickjs-ng) - - [Using in the browser without a build step](#using-in-the-browser-without-a-build-step) - - [Debugging](#debugging) - - [Supported Platforms](#supported-platforms) - - [More Documentation](#more-documentation) - - [Background](#background) - - [Status \& Roadmap](#status--roadmap) - - [Related](#related) - - [Developing](#developing) - - [The C parts](#the-c-parts) - - [The Typescript parts](#the-typescript-parts) - - [Yarn updates](#yarn-updates) - -## Usage - -Install from `npm`: `npm install --save quickjs-emscripten` or `yarn add quickjs-emscripten`. - -The root entrypoint of this library is the `getQuickJS` function, which returns -a promise that resolves to a [QuickJSWASMModule](./doc/quickjs-emscripten/classes/QuickJSWASMModule.md) when -the QuickJS WASM module is ready. - -Once `getQuickJS` has been awaited at least once, you also can use the `getQuickJSSync` -function to directly access the singleton in your synchronous code. - -### Safely evaluate Javascript code - -See [QuickJSWASMModule.evalCode](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSWASMModule.md#evalcode) - -```typescript -import { getQuickJS, shouldInterruptAfterDeadline } from "quickjs-emscripten" - -getQuickJS().then((QuickJS) => { - const result = QuickJS.evalCode("1 + 1", { - shouldInterrupt: shouldInterruptAfterDeadline(Date.now() + 1000), - memoryLimitBytes: 1024 * 1024, - }) - console.log(result) -}) -``` - -### Interfacing with the interpreter - -You can use [QuickJSContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md) -to build a scripting environment by modifying globals and exposing functions -into the QuickJS interpreter. - -Each `QuickJSContext` instance has its own environment -- globals, built-in -classes -- and actions from one context won't leak into other contexts or -runtimes (with one exception, see [Asyncify][asyncify]). - -Every context is created inside a -[QuickJSRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSRuntime.md). -A runtime represents a Javascript heap, and you can even share values between -contexts in the same runtime. - -```typescript -const vm = QuickJS.newContext() -let state = 0 - -const fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) -}) - -vm.setProp(vm.global, "nextId", fnHandle) -fnHandle.dispose() - -const nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) -console.log("vm result:", vm.getNumber(nextId), "native state:", state) - -nextId.dispose() -vm.dispose() -``` - -When you create a context from a top-level API like in the example above, -instead of by calling `runtime.newContext()`, a runtime is automatically created -for the lifetime of the context, and disposed of when you dispose the context. - -#### Runtime - -The runtime has APIs for CPU and memory limits that apply to all contexts within -the runtime in aggregate. You can also use the runtime to configure EcmaScript -module loading. - -```typescript -const runtime = QuickJS.newRuntime() -// "Should be enough for everyone" -- attributed to B. Gates -runtime.setMemoryLimit(1024 * 640) -// Limit stack size -runtime.setMaxStackSize(1024 * 320) -// Interrupt computation after 1024 calls to the interrupt handler -let interruptCycles = 0 -runtime.setInterruptHandler(() => ++interruptCycles > 1024) -// Toy module system that always returns the module name -// as the default export -runtime.setModuleLoader((moduleName) => `export default '${moduleName}'`) -const context = runtime.newContext() -const ok = context.evalCode(` -import fooName from './foo.js' -globalThis.result = fooName -`) -context.unwrapResult(ok).dispose() -// logs "foo.js" -console.log(context.getProp(context.global, "result").consume(context.dump)) -context.dispose() -runtime.dispose() -``` - -#### EcmaScript Module Exports - -When you evaluate code as an ES Module, the result will be a handle to the -module's exports, or a handle to a promise that resolves to the module's -exports if the module depends on a top-level await. - -```typescript -const context = QuickJS.newContext() -const result = context.evalCode( - ` - export const name = 'Jake' - export const favoriteBean = 'wax bean' - export default 'potato' -`, - "jake.js", - { type: "module" }, -) -const moduleExports = context.unwrapResult(result) -console.log(context.dump(moduleExports)) -// -> { name: 'Jake', favoriteBean: 'wax bean', default: 'potato' } -moduleExports.dispose() -``` - -### Memory Management - -Many methods in this library return handles to memory allocated inside the -WebAssembly heap. These types cannot be garbage-collected as usual in -Javascript. Instead, you must manually manage their memory by calling a -`.dispose()` method to free the underlying resources. Once a handle has been -disposed, it cannot be used anymore. Note that in the example above, we call -`.dispose()` on each handle once it is no longer needed. - -Calling `QuickJSContext.dispose()` will throw a RuntimeError if you've forgotten to -dispose any handles associated with that VM, so it's good practice to create a -new VM instance for each of your tests, and to call `vm.dispose()` at the end -of every test. - -```typescript -const vm = QuickJS.newContext() -const numberHandle = vm.newNumber(42) -// Note: numberHandle not disposed, so it leaks memory. -vm.dispose() -// throws RuntimeError: abort(Assertion failed: list_empty(&rt->gc_obj_list), at: quickjs/quickjs.c,1963,JS_FreeRuntime) -``` - -Here are some strategies to reduce the toil of calling `.dispose()` on each -handle you create: - -#### `using` statement - -The `using` statement is a Stage 3 (as of 2023-12-29) proposal for Javascript that declares a constant variable and automatically calls the `[Symbol.dispose]()` method of an object when it goes out of scope. Read more [in this Typescript release announcement][using]. Here's the "Interfacing with the interpreter" example re-written using `using`: - -```typescript -using vm = QuickJS.newContext() -let state = 0 - -// The block here isn't needed for correctness, but it shows -// how to get a tighter bound on the lifetime of `fnHandle`. -{ - using fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }) - - vm.setProp(vm.global, "nextId", fnHandle) - // fnHandle.dispose() is called automatically when the block exits -} - -using nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) -console.log("vm result:", vm.getNumber(nextId), "native state:", state) -// nextId.dispose() is called automatically when the block exits -// vm.dispose() is called automatically when the block exits -``` - -[using]: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management - -#### Scope - -A -[`Scope`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/Scope.md#class-scope) -instance manages a set of disposables and calls their `.dispose()` -method in the reverse order in which they're added to the scope. Here's the -"Interfacing with the interpreter" example re-written using `Scope`: - -```typescript -Scope.withScope((scope) => { - const vm = scope.manage(QuickJS.newContext()) - let state = 0 - - const fnHandle = scope.manage( - vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }), - ) - - vm.setProp(vm.global, "nextId", fnHandle) - - const nextId = scope.manage(vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`))) - console.log("vm result:", vm.getNumber(nextId), "native state:", state) - - // When the withScope block exits, it calls scope.dispose(), which in turn calls - // the .dispose() methods of all the disposables managed by the scope. -}) -``` - -You can also create `Scope` instances with `new Scope()` if you want to manage -calling `scope.dispose()` yourself. - -#### `Lifetime.consume(fn)` - -[`Lifetime.consume`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/lifetime.md#consume) -is sugar for the common pattern of using a handle and then -immediately disposing of it. `Lifetime.consume` takes a `map` function that -produces a result of any type. The `map` fuction is called with the handle, -then the handle is disposed, then the result is returned. - -Here's the "Interfacing with interpreter" example re-written using `.consume()`: - -```typescript -const vm = QuickJS.newContext() -let state = 0 - -vm.newFunction("nextId", () => { - return vm.newNumber(++state) -}).consume((fnHandle) => vm.setProp(vm.global, "nextId", fnHandle)) - -vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)).consume((nextId) => - console.log("vm result:", vm.getNumber(nextId), "native state:", state), -) - -vm.dispose() -``` - -Generally working with `Scope` leads to more straight-forward code, but -`Lifetime.consume` can be handy sugar as part of a method call chain. - -### Exposing APIs - -To add APIs inside the QuickJS environment, you'll need to [create objects][newObject] to -define the shape of your API, and [add properties][setProp] and [functions][newFunction] to those objects -to allow code inside QuickJS to call code on the host. -The [newFunction][] documentation covers writing functions in detail. - -By default, no host functionality is exposed to code running inside QuickJS. - -```typescript -const vm = QuickJS.newContext() -// `console.log` -const logHandle = vm.newFunction("log", (...args) => { - const nativeArgs = args.map(vm.dump) - console.log("QuickJS:", ...nativeArgs) -}) -// Partially implement `console` object -const consoleHandle = vm.newObject() -vm.setProp(consoleHandle, "log", logHandle) -vm.setProp(vm.global, "console", consoleHandle) -consoleHandle.dispose() -logHandle.dispose() - -vm.unwrapResult(vm.evalCode(`console.log("Hello from QuickJS!")`)).dispose() -``` - -[newObject]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#newobject -[newFunction]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#newfunction -[setProp]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#setprop - -#### Promises - -To expose an asynchronous function that _returns a promise_ to callers within -QuickJS, your function can return the handle of a `QuickJSDeferredPromise` -created via `context.newPromise()`. - -When you resolve a `QuickJSDeferredPromise` -- and generally whenever async -behavior completes for the VM -- pending listeners inside QuickJS may not -execute immediately. Your code needs to explicitly call -`runtime.executePendingJobs()` to resume execution inside QuickJS. This API -gives your code maximum control to _schedule_ when QuickJS will block the host's -event loop by resuming execution. - -To work with QuickJS handles that contain a promise inside the environment, -there are two options: - -##### context.getPromiseState(handle) - -You can synchronously peek into a QuickJS promise handle and get its state -without introducing asynchronous host code, described by the type [JSPromiseState][]: - -```typescript -type JSPromiseState = - | { type: "pending"; error: Error } - | { type: "fulfilled"; value: QuickJSHandle; notAPromise?: boolean } - | { type: "rejected"; error: QuickJSHandle } -``` - -The result conforms to the `SuccessOrFail` type returned by `context.evalCode`, so you can use `context.unwrapResult(context.getPromiseState(promiseHandle))` to assert a promise is settled successfully and retrieve its value. Calling `context.unwrapResult` on a pending or rejected promise will throw an error. - -```typescript -const promiseHandle = context.evalCode(`Promise.resolve(42)`) -const resultHandle = context.unwrapResult(context.getPromiseState(promiseHandle)) -context.getNumber(resultHandle) === 42 // true -resultHandle.dispose() -promiseHandle.dispose() -``` - -[JSPromiseState]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#jspromisestate - -##### context.resolvePromise(handle) - -You can convert the QuickJSHandle into a native promise using -`context.resolvePromise()`. Take care with this API to avoid 'deadlocks' where -the host awaits a guest promise, but the guest cannot make progress until the -host calls `runtime.executePendingJobs()`. The simplest way to avoid this kind -of deadlock is to always schedule `executePendingJobs` after any promise is -settled. - -```typescript -const vm = QuickJS.newContext() -const fakeFileSystem = new Map([["example.txt", "Example file content"]]) - -// Function that simulates reading data asynchronously -const readFileHandle = vm.newFunction("readFile", (pathHandle) => { - const path = vm.getString(pathHandle) - const promise = vm.newPromise() - setTimeout(() => { - const content = fakeFileSystem.get(path) - promise.resolve(vm.newString(content || "")) - }, 100) - // IMPORTANT: Once you resolve an async action inside QuickJS, - // call runtime.executePendingJobs() to run any code that was - // waiting on the promise or callback. - promise.settled.then(vm.runtime.executePendingJobs) - return promise.handle -}) -readFileHandle.consume((handle) => vm.setProp(vm.global, "readFile", handle)) - -// Evaluate code that uses `readFile`, which returns a promise -const result = vm.evalCode(`(async () => { - const content = await readFile('example.txt') - return content.toUpperCase() -})()`) -const promiseHandle = vm.unwrapResult(result) - -// Convert the promise handle into a native promise and await it. -// If code like this deadlocks, make sure you are calling -// runtime.executePendingJobs appropriately. -const resolvedResult = await vm.resolvePromise(promiseHandle) -promiseHandle.dispose() -const resolvedHandle = vm.unwrapResult(resolvedResult) -console.log("Result:", vm.getString(resolvedHandle)) -resolvedHandle.dispose() -``` - -#### Asyncify - -Sometimes, we want to create a function that's synchronous from the perspective -of QuickJS, but prefer to implement that function _asynchronously_ in your host -code. The most obvious use-case is for EcmaScript module loading. The underlying -QuickJS C library expects the module loader function to return synchronously, -but loading data synchronously in the browser or server is somewhere between "a -bad idea" and "impossible". QuickJS also doesn't expose an API to "pause" the -execution of a runtime, and adding such an API is tricky due to the VM's -implementation. - -As a work-around, we provide an alternate build of QuickJS processed by -Emscripten/Binaryen's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) -compiler transform. Here's how Emscripten's documentation describes Asyncify: - -> Asyncify lets synchronous C or C++ code interact with asynchronous \[host] JavaScript. This allows things like: -> -> - A synchronous call in C that yields to the event loop, which allows browser events to be handled. -> - A synchronous call in C that waits for an asynchronous operation in \[host] JS to complete. -> -> Asyncify automatically transforms ... code into a form that can be paused and -> resumed ..., so that it is asynchronous (hence the name “Asyncify”) even though -> \[it is written] in a normal synchronous way. - -This means we can suspend an _entire WebAssembly module_ (which could contain -multiple runtimes and contexts) while our host Javascript loads data -asynchronously, and then resume execution once the data load completes. This is -a very handy superpower, but it comes with a couple of major limitations: - -1. _An asyncified WebAssembly module can only suspend to wait for a single - asynchronous call at a time_. You may call back into a suspended WebAssembly - module eg. to create a QuickJS value to return a result, but the system will - crash if this call tries to suspend again. Take a look at Emscripten's documentation - on [reentrancy](https://emscripten.org/docs/porting/asyncify.html#reentrancy). - -2. _Asyncified code is bigger and runs slower_. The asyncified build of - Quickjs-emscripten library is 1M, 2x larger than the 500K of the default - version. There may be room for further - [optimization](https://emscripten.org/docs/porting/asyncify.html#optimizing) - Of our build in the future. - -To use asyncify features, use the following functions: - -- [newAsyncRuntime][]: create a runtime inside a new WebAssembly module. -- [newAsyncContext][]: create runtime and context together inside a new - WebAssembly module. -- [newQuickJSAsyncWASMModule][]: create an empty WebAssembly module. - -[newasyncruntime]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newasyncruntime -[newasynccontext]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newasynccontext -[newquickjsasyncwasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newquickjsasyncwasmmodule - -These functions are asynchronous because they always create a new underlying -WebAssembly module so that each instance can suspend and resume independently, -and instantiating a WebAssembly module is an async operation. This also adds -substantial overhead compared to creating a runtime or context inside an -existing module; if you only need to wait for a single async action at a time, -you can create a single top-level module and create runtimes or contexts inside -of it. - -##### Async module loader - -Here's an example of valuating a script that loads React asynchronously as an ES -module. In our example, we're loading from the filesystem for reproducibility, -but you can use this technique to load using `fetch`. - -```typescript -const module = await newQuickJSAsyncWASMModule() -const runtime = module.newRuntime() -const path = await import("path") -const { promises: fs } = await import("fs") - -const importsPath = path.join(__dirname, "../examples/imports") + "/" -// Module loaders can return promises. -// Execution will suspend until the promise resolves. -runtime.setModuleLoader((moduleName) => { - const modulePath = path.join(importsPath, moduleName) - if (!modulePath.startsWith(importsPath)) { - throw new Error("out of bounds") - } - console.log("loading", moduleName, "from", modulePath) - return fs.readFile(modulePath, "utf-8") -}) - -// evalCodeAsync is required when execution may suspend. -const context = runtime.newContext() -const result = await context.evalCodeAsync(` -import * as React from 'esm.sh/react@17' -import * as ReactDOMServer from 'esm.sh/react-dom@17/server' -const e = React.createElement -globalThis.html = ReactDOMServer.renderToStaticMarkup( - e('div', null, e('strong', null, 'Hello world!')) -) -`) -context.unwrapResult(result).dispose() -const html = context.getProp(context.global, "html").consume(context.getString) -console.log(html) //
Hello world!
-``` - -##### Async on host, sync in QuickJS - -Here's an example of turning an async function into a sync function inside the -VM. - -```typescript -const context = await newAsyncContext() -const path = await import("path") -const { promises: fs } = await import("fs") - -const importsPath = path.join(__dirname, "../examples/imports") + "/" -const readFileHandle = context.newAsyncifiedFunction("readFile", async (pathHandle) => { - const pathString = path.join(importsPath, context.getString(pathHandle)) - if (!pathString.startsWith(importsPath)) { - throw new Error("out of bounds") - } - const data = await fs.readFile(pathString, "utf-8") - return context.newString(data) -}) -readFileHandle.consume((fn) => context.setProp(context.global, "readFile", fn)) - -// evalCodeAsync is required when execution may suspend. -const result = await context.evalCodeAsync(` -// Not a promise! Sync! vvvvvvvvvvvvvvvvvvvv -const data = JSON.parse(readFile('data.json')) -data.map(x => x.toUpperCase()).join(' ') -`) -const upperCaseData = context.unwrapResult(result).consume(context.getString) -console.log(upperCaseData) // 'VERY USEFUL DATA' -``` - -### Testing your code - -This library is complicated to use, so please consider automated testing your -implementation. We highly writing your test suite to run with both the "release" -build variant of quickjs-emscripten, and also the [DEBUG_SYNC] build variant. -The debug sync build variant has extra instrumentation code for detecting memory -leaks. - -The class [TestQuickJSWASMModule] exposes the memory leak detection API, -although this API is only accurate when using `DEBUG_SYNC` variant. You can also -enable [debug logging](#debugging) to help diagnose failures. - -```typescript -// Define your test suite in a function, so that you can test against -// different module loaders. -function myTests(moduleLoader: () => Promise) { - let QuickJS: TestQuickJSWASMModule - beforeEach(async () => { - // Get a unique TestQuickJSWASMModule instance for each test. - const wasmModule = await moduleLoader() - QuickJS = new TestQuickJSWASMModule(wasmModule) - }) - afterEach(() => { - // Assert that the test disposed all handles. The DEBUG_SYNC build - // variant will show detailed traces for each leak. - QuickJS.assertNoMemoryAllocated() - }) - - it("works well", () => { - // TODO: write a test using QuickJS - const context = QuickJS.newContext() - context.unwrapResult(context.evalCode("1 + 1")).dispose() - context.dispose() - }) -} - -// Run the test suite against a matrix of module loaders. -describe("Check for memory leaks with QuickJS DEBUG build", () => { - const moduleLoader = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) - myTests(moduleLoader) -}) - -describe("Realistic test with QuickJS RELEASE build", () => { - myTests(getQuickJS) -}) -``` - -For more testing examples, please explore the typescript source of [quickjs-emscripten][ts] repository. - -[ts]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/ -[debug_sync]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#debug_sync -[testquickjswasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/TestQuickJSWASMModule.md - -### Packaging - -The main `quickjs-emscripten` package includes several build variants of the WebAssembly module: - -- `RELEASE...` build variants should be used in production. They offer better performance and smaller file size compared to `DEBUG...` build variants. - - `RELEASE_SYNC`: This is the default variant used when you don't explicitly provide one. It offers the fastest performance and smallest file size. - - `RELEASE_ASYNC`: The default variant if you need [asyncify][] magic, which comes at a performance cost. See the asyncify docs for details. -- `DEBUG...` build variants can be helpful during development and testing. They include source maps and assertions for catching bugs in your code. We recommend running your tests with _both_ a debug build variant and the release build variant you'll use in production. - - `DEBUG_SYNC`: Instrumented to detect memory leaks, in addition to assertions and source maps. - - `DEBUG_ASYNC`: An [asyncify][] variant with source maps. - -To use a variant, call `newQuickJSWASMModule` or `newQuickJSAsyncWASMModule` with the variant object. These functions return a promise that resolves to a [QuickJSWASMModule](./doc/quickjs-emscripten/classes/QuickJSWASMModule.md), the same as `getQuickJS`. - -```typescript -import { - newQuickJSWASMModule, - newQuickJSAsyncWASMModule, - RELEASE_SYNC, - DEBUG_SYNC, - RELEASE_ASYNC, - DEBUG_ASYNC, -} from "quickjs-emscripten" - -const QuickJSReleaseSync = await newQuickJSWASMModule(RELEASE_SYNC) -const QuickJSDebugSync = await newQuickJSWASMModule(DEBUG_SYNC) -const QuickJSReleaseAsync = await newQuickJSAsyncWASMModule(RELEASE_ASYNC) -const QuickJSDebugAsync = await newQuickJSAsyncWASMModule(DEBUG_ASYNC) - -for (const quickjs of [ - QuickJSReleaseSync, - QuickJSDebugSync, - QuickJSReleaseAsync, - QuickJSDebugAsync, -]) { - const vm = quickjs.newContext() - const result = vm.unwrapResult(vm.evalCode("1 + 1")).consume(vm.getNumber) - console.log(result) - vm.dispose() - quickjs.dispose() -} -``` - -#### Reducing package size - -Including 4 different copies of the WebAssembly module in the main package gives it an install size of [about 9.04mb](https://packagephobia.com/result?p=quickjs-emscripten). If you're building a CLI package or library of your own, or otherwise don't need to include 4 different variants in your `node_modules`, you can switch to the `quickjs-emscripten-core` package, which contains only the Javascript code for this library, and install one (or more) variants a-la-carte as separate packages. - -The most minimal setup would be to install `quickjs-emscripten-core` and `@jitl/quickjs-wasmfile-release-sync` (1.3mb total): - -```bash -yarn add quickjs-emscripten-core @jitl/quickjs-wasmfile-release-sync -du -h node_modules -# 640K node_modules/@jitl/quickjs-wasmfile-release-sync -# 80K node_modules/@jitl/quickjs-ffi-types -# 588K node_modules/quickjs-emscripten-core -# 1.3M node_modules -``` - -Then, you can use quickjs-emscripten-core's `newQuickJSWASMModuleFromVariant` to create a QuickJS module (see [the minimal example][minimal]): - -```typescript -// src/quickjs.mjs -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import RELEASE_SYNC from "@jitl/quickjs-wasmfile-release-sync" -export const QuickJS = await newQuickJSWASMModuleFromVariant(RELEASE_SYNC) - -// src/app.mjs -import { QuickJS } from "./quickjs.mjs" -console.log(QuickJS.evalCode("1 + 1")) -``` - -See the [documentation of quickjs-emscripten-core][core] for more details and the list of variant packages. - -[core]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten-core/README.md - -#### WebAssembly loading - -To run QuickJS, we need to load a WebAssembly module into the host Javascript runtime's memory (usually as an ArrayBuffer or TypedArray) and [compile it](https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/instantiate_static) to a [WebAssembly.Module](https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Module). This means we need to find the file path or URI of the WebAssembly module, and then read it using an API like `fetch` (browser) or `fs.readFile` (NodeJS). `quickjs-emscripten` tries to handle this automatically using patterns like `new URL('./local-path', import.meta.url)` that work in the browser or are handled automatically by bundlers, or `__dirname` in NodeJS, but you may need to configure this manually if these don't work in your environment, or you want more control about how the WebAssembly module is loaded. - -To customize the loading of an existing variant, create a new variant with your loading settings using `newVariant`, passing [CustomizeVariantOptions][newVariant]. For example, you need to customize loading in Cloudflare Workers (see [the full example][cloudflare]). - -```typescript -import { newQuickJSWASMModule, DEBUG_SYNC as baseVariant, newVariant } from "quickjs-emscripten" -import cloudflareWasmModule from "./DEBUG_SYNC.wasm" -import cloudflareWasmModuleSourceMap from "./DEBUG_SYNC.wasm.map.txt" - -/** - * We need to make a new variant that directly passes the imported WebAssembly.Module - * to Emscripten. Normally we'd load the wasm file as bytes from a URL, but - * that's forbidden in Cloudflare workers. - */ -const cloudflareVariant = newVariant(baseVariant, { - wasmModule: cloudflareWasmModule, - wasmSourceMapData: cloudflareWasmModuleSourceMap, -}) -``` - -[newVariant]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/interfaces/CustomizeVariantOptions.md - -#### quickjs-ng - -[quickjs-ng/quickjs](https://github.com/quickjs-ng/quickjs) (aka quickjs-ng) is a fork of the original [bellard/quickjs](https://github.com/quickjs-ng/quickjs) under active development. It implements more EcmaScript standards and removes some of quickjs's custom language features like BigFloat. - -There are several variants of quickjs-ng available, and quickjs-emscripten may switch to using quickjs-ng by default in the future. See [the list of variants][core]. - -#### Using in the browser without a build step - -You can use quickjs-emscripten directly from an HTML file in two ways: - -1. Import it in an ES Module script tag - - ```html - - - - ``` - -1. In edge cases, you might want to use the IIFE build which provides QuickJS as the global `QJS`. You should probably use the ES module though, any recent browser supports it. - - ```html - - - - - - ``` - -### Debugging - -Debug logging can be enabled globally, or for specific runtimes. You need to use a DEBUG build variant of the WebAssembly module to see debug log messages from the C part of this library. - -```typescript -import { newQuickJSWASMModule, DEBUG_SYNC } from "quickjs-emscripten" - -const QuickJS = await newQuickJSWASMModule(DEBUG_SYNC) -``` - -With quickjs-emscripten-core: - -```typescript -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import DEBUG_SYNC from "@jitl/quickjs-wasmfile-debug-sync" - -const QuickJS = await newQuickJSWASMModuleFromVariant(DEBUG_SYNC) -``` - -To enable debug logging globally, call [setDebugMode][setDebugMode]. This affects global Javascript parts of the library, like the module loader and asyncify internals, and is inherited by runtimes created after the call. - -```typescript -import { setDebugMode } from "quickjs-emscripten" - -setDebugMode(true) -``` - -With quickjs-emscripten-core: - -```typescript -import { setDebugMode } from "quickjs-emscripten-core" - -setDebugMode(true) -``` - -To enable debug logging for a specific runtime, call [setDebugModeRt][setDebugModeRt]. This affects only the runtime and its associated contexts. - -```typescript -const runtime = QuickJS.newRuntime() -runtime.setDebugMode(true) - -const context = QuickJS.newContext() -context.runtime.setDebugMode(true) -``` - -[setDebugMode]: doc/quickjs-emscripten/exports.md#setdebugmode -[setDebugModeRt]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten-core/classes/QuickJSRuntime.md#setdebugmode - -### Supported Platforms - -`quickjs-emscripten` and related packages should work in any environment that supports ES2020. - -- Browsers: we estimate support for the following browser versions. See the [global-iife][iife] and [esmodule][esm-html] HTML examples. - - Chrome 63+ - - Edge 79+ - - Safari 11.1+ - - Firefox 58+ -- NodeJS: requires v16.0.0 or later for WebAssembly compatibility. Tested with node@18. See the [node-typescript][tsx-example] and [node-minimal][minimal] examples. -- Typescript: tested with typescript@4.5.5 and typescript@5.3.3. See the [node-typescript example][tsx-example]. -- Vite: tested with vite@5.0.10. See the [Vite/Vue example][vite]. -- Create react app: tested with react-scripts@5.0.1. See the [create-react-app example][cra]. -- Webpack: tested with webpack@5.89.0 via create-react-app. -- Cloudflare Workers: tested with wrangler@3.22.1. See the [Cloudflare Workers example][cloudflare]. -- Deno: tested with deno 1.39.1. See the [Deno example][deno]. - -[iife]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/global-iife.html -[esm-html]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/esmodule.html -[deno]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/deno -[vite]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/vite-vue -[cra]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/create-react-app -[cloudflare]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/cloudflare-workers -[tsx-example]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/node-typescript -[minimal]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/node-minimal - -### More Documentation - -[Github] | [NPM] | [API Documentation][api] | [Variants][core] | [Examples][tests] - -## Background - -This was inspired by seeing https://github.com/maple3142/duktape-eval -[on Hacker News](https://news.ycombinator.com/item?id=21946565) and Figma's -blogposts about using building a Javascript plugin runtime: - -- [How Figma built the Figma plugin system](https://www.figma.com/blog/how-we-built-the-figma-plugin-system/): Describes the LowLevelJavascriptVm interface. -- [An update on plugin security](https://www.figma.com/blog/an-update-on-plugin-security/): Figma switches to QuickJS. - -## Status & Roadmap - -**Stability**: Because the version number of this project is below `1.0.0`, -\*expect occasional breaking API changes. - -**Security**: This project makes every effort to be secure, but has not been -audited. Please use with care in production settings. - -**Roadmap**: I work on this project in my free time, for fun. Here's I'm -thinking comes next. Last updated 2022-03-18. - -1. Further work on module loading APIs: - - - Create modules via Javascript, instead of source text. - - Scan source text for imports, for ahead of time or concurrent loading. - (This is possible with third-party tools, so lower priority.) - -2. Higher-level tools for reading QuickJS values: - - - Type guard functions: `context.isArray(handle)`, `context.isPromise(handle)`, etc. - - Iteration utilities: `context.getIterable(handle)`, `context.iterateObjectEntries(handle)`. - This better supports user-level code to deserialize complex handle objects. - -3. Higher-level tools for creating QuickJS values: - - - Devise a way to avoid needing to mess around with handles when setting up - the environment. - - Consider integrating - [quickjs-emscripten-sync](https://github.com/reearth/quickjs-emscripten-sync) - for automatic translation. - - Consider class-based or interface-type-based marshalling. - -4. SQLite integration. - -## Related - -- Duktape wrapped in Wasm: https://github.com/maple3142/duktape-eval/blob/main/src/Makefile -- QuickJS wrapped in C++: https://github.com/ftk/quickjspp - -## Developing - -This library is implemented in two languages: C (compiled to WASM with -Emscripten), and Typescript. - -You will need `node`, `yarn`, `make`, and `emscripten` to build this project. - -### The C parts - -The ./c directory contains C code that wraps the QuickJS C library (in ./quickjs). -Public functions (those starting with `QTS_`) in ./c/interface.c are -automatically exported to native code (via a generated header) and to -Typescript (via a generated FFI class). See ./generate.ts for how this works. - -The C code builds with `emscripten` (using `emcc`), to produce WebAssembly. -The version of Emscripten used by the project is defined in templates/Variant.mk. - -- On ARM64, you should install `emscripten` on your machine. For example on macOS, `brew install emscripten`. -- If _the correct version of emcc_ is not in your PATH, compilation falls back to using Docker. - On ARM64, this is 10-50x slower than native compilation, but it's just fine on x64. - -We produce multiple build variants of the C code compiled to WebAssembly using a -template script the ./packages directory. Each build variant uses its own copy of a Makefile -to build the C code. The Makefile is generated from a template in ./templates/Variant.mk. - -Related NPM scripts: - -- `yarn vendor:update` updates vendor/quickjs and vendor/quickjs-ng to the latest versions on Github. -- `yarn build:codegen` updates the ./packages from the template script `./prepareVariants.ts` and Variant.mk. -- `yarn build:packages` builds the variant packages in parallel. - -### The Typescript parts - -The Javascript/Typescript code is also organized into several NPM packages in ./packages: - -- ./packages/quickjs-ffi-types: Low-level types that define the FFI interface to the C code. - Each variant exposes an API conforming to these types that's consumed by the higher-level library. -- ./packages/quickjs-emscripten-core: The higher-level Typescript that implements the user-facing abstractions of the library. - This package doesn't link directly to the WebAssembly/C code; callers must provide a build variant. -- ./packages/quicks-emscripten: The main entrypoint of the library, which provides the `getQuickJS` function. - This package combines quickjs-emscripten-core with platform-appropriate WebAssembly/C code. - -Related NPM scripts: - -- `yarn check` runs all available checks (build, format, tests, etc). -- `yarn build` builds all the packages and generates the docs. -- `yarn test` runs the tests for all packages. - - `yarn test:fast` runs the tests using only fast build variants. -- `yarn doc` generates the docs into `./doc`. - - `yarn doc:serve` previews the current `./doc` in a browser. -- `yarn prettier` formats the repo. - -### Yarn updates - -Just run `yarn set version from sources` to upgrade the Yarn release. - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/packages.md b/doc/packages.md deleted file mode 100644 index 69e421486..000000000 --- a/doc/packages.md +++ /dev/null @@ -1,36 +0,0 @@ -**quickjs-emscripten** • [Readme](README.md) \| [Packages](packages.md) - -*** - -# quickjs-emscripten - -## Packages - -- [quickjs-emscripten](quickjs-emscripten/README.md) -- [quickjs-emscripten-core](quickjs-emscripten-core/README.md) -- [@jitl/quickjs-ffi-types](@jitl/quickjs-ffi-types/README.md) -- [@jitl/quickjs-wasmfile-debug-sync](@jitl/quickjs-wasmfile-debug-sync/README.md) -- [@jitl/quickjs-wasmfile-debug-asyncify](@jitl/quickjs-wasmfile-debug-asyncify/README.md) -- [@jitl/quickjs-wasmfile-release-sync](@jitl/quickjs-wasmfile-release-sync/README.md) -- [@jitl/quickjs-wasmfile-release-asyncify](@jitl/quickjs-wasmfile-release-asyncify/README.md) -- [@jitl/quickjs-ng-wasmfile-debug-sync](@jitl/quickjs-ng-wasmfile-debug-sync/README.md) -- [@jitl/quickjs-ng-wasmfile-debug-asyncify](@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md) -- [@jitl/quickjs-ng-wasmfile-release-sync](@jitl/quickjs-ng-wasmfile-release-sync/README.md) -- [@jitl/quickjs-ng-wasmfile-release-asyncify](@jitl/quickjs-ng-wasmfile-release-asyncify/README.md) -- [@jitl/quickjs-singlefile-cjs-debug-sync](@jitl/quickjs-singlefile-cjs-debug-sync/README.md) -- [@jitl/quickjs-singlefile-cjs-debug-asyncify](@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md) -- [@jitl/quickjs-singlefile-cjs-release-sync](@jitl/quickjs-singlefile-cjs-release-sync/README.md) -- [@jitl/quickjs-singlefile-cjs-release-asyncify](@jitl/quickjs-singlefile-cjs-release-asyncify/README.md) -- [@jitl/quickjs-singlefile-mjs-debug-sync](@jitl/quickjs-singlefile-mjs-debug-sync/README.md) -- [@jitl/quickjs-singlefile-mjs-debug-asyncify](@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md) -- [@jitl/quickjs-singlefile-mjs-release-sync](@jitl/quickjs-singlefile-mjs-release-sync/README.md) -- [@jitl/quickjs-singlefile-mjs-release-asyncify](@jitl/quickjs-singlefile-mjs-release-asyncify/README.md) -- [@jitl/quickjs-singlefile-browser-debug-sync](@jitl/quickjs-singlefile-browser-debug-sync/README.md) -- [@jitl/quickjs-singlefile-browser-debug-asyncify](@jitl/quickjs-singlefile-browser-debug-asyncify/README.md) -- [@jitl/quickjs-singlefile-browser-release-sync](@jitl/quickjs-singlefile-browser-release-sync/README.md) -- [@jitl/quickjs-singlefile-browser-release-asyncify](@jitl/quickjs-singlefile-browser-release-asyncify/README.md) -- [@jitl/quickjs-asmjs-mjs-release-sync](@jitl/quickjs-asmjs-mjs-release-sync/README.md) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/README.md b/doc/quickjs-emscripten-core/README.md deleted file mode 100644 index a1c093887..000000000 --- a/doc/quickjs-emscripten-core/README.md +++ /dev/null @@ -1,376 +0,0 @@ -[quickjs-emscripten](../packages.md) • **quickjs-emscripten-core** • [Readme](README.md) \| [Exports](exports.md) - -*** - - - -# quickjs-emscripten-core - -This package is part of [quickjs-emscripten](https://github.com/justjakel/quickjs-emscripten), a Javascript interface for QuickJS compiled to WebAssembly via Emscripten. - -This package (`quickjs-emscripten-core`) contains only Javascript code - no WebAssembly. To use this package, you'll need to install one or more _variants_ of the QuickJS WebAssembly build, see [available variants](#Available-variants) below. - -```typescript -// 1. Import a QuickJS module constructor function from quickjs-emscripten-core -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" - -// 2. Import a variant suitable for your use case. For example, if you only care to -// target with the fastest execution speed, import the release build variant -import releaseVariant from "@jitl/quickjs-singlefile-cjs-release-sync" - -// 3. Create the "QuickJS" module that presents the quickjs-emscripten API. -// Export and use in other files, or consume directly. -const QuickJS = await newQuickJSWASMModuleFromVariant(releaseVariant) -``` - -## Contents - -- [What's a variant?](README.md#whats-a-variant) -- [Environment-specific variants](README.md#environment-specific-variants) -- [Available variants](README.md#available-variants) - - [@jitl/quickjs-wasmfile-debug-sync](README.md#jitlquickjs-wasmfile-debug-sync) - - [@jitl/quickjs-wasmfile-debug-asyncify](README.md#jitlquickjs-wasmfile-debug-asyncify) - - [@jitl/quickjs-wasmfile-release-sync](README.md#jitlquickjs-wasmfile-release-sync) - - [@jitl/quickjs-wasmfile-release-asyncify](README.md#jitlquickjs-wasmfile-release-asyncify) - - [@jitl/quickjs-ng-wasmfile-debug-sync](README.md#jitlquickjs-ng-wasmfile-debug-sync) - - [@jitl/quickjs-ng-wasmfile-debug-asyncify](README.md#jitlquickjs-ng-wasmfile-debug-asyncify) - - [@jitl/quickjs-ng-wasmfile-release-sync](README.md#jitlquickjs-ng-wasmfile-release-sync) - - [@jitl/quickjs-ng-wasmfile-release-asyncify](README.md#jitlquickjs-ng-wasmfile-release-asyncify) - - [@jitl/quickjs-singlefile-cjs-debug-sync](README.md#jitlquickjs-singlefile-cjs-debug-sync) - - [@jitl/quickjs-singlefile-cjs-debug-asyncify](README.md#jitlquickjs-singlefile-cjs-debug-asyncify) - - [@jitl/quickjs-singlefile-cjs-release-sync](README.md#jitlquickjs-singlefile-cjs-release-sync) - - [@jitl/quickjs-singlefile-cjs-release-asyncify](README.md#jitlquickjs-singlefile-cjs-release-asyncify) - - [@jitl/quickjs-singlefile-mjs-debug-sync](README.md#jitlquickjs-singlefile-mjs-debug-sync) - - [@jitl/quickjs-singlefile-mjs-debug-asyncify](README.md#jitlquickjs-singlefile-mjs-debug-asyncify) - - [@jitl/quickjs-singlefile-mjs-release-sync](README.md#jitlquickjs-singlefile-mjs-release-sync) - - [@jitl/quickjs-singlefile-mjs-release-asyncify](README.md#jitlquickjs-singlefile-mjs-release-asyncify) - - [@jitl/quickjs-singlefile-browser-debug-sync](README.md#jitlquickjs-singlefile-browser-debug-sync) - - [@jitl/quickjs-singlefile-browser-debug-asyncify](README.md#jitlquickjs-singlefile-browser-debug-asyncify) - - [@jitl/quickjs-singlefile-browser-release-sync](README.md#jitlquickjs-singlefile-browser-release-sync) - - [@jitl/quickjs-singlefile-browser-release-asyncify](README.md#jitlquickjs-singlefile-browser-release-asyncify) - - [@jitl/quickjs-asmjs-mjs-release-sync](README.md#jitlquickjs-asmjs-mjs-release-sync) - -## What's a variant? - -A variant describes how to load a QuickJS WebAssembly build and how to call the low-level C API functions used by the higher-level abstractions in `quickjs-emscripten-core`. A variant is an object with the following properties: - -```typescript -const variant = { - // This should be `async` if the variant is built with ASYNCIFY - // so that the WebAssembly module execution can be suspended. - // - // Otherwise, this should be `sync`. - type: "sync", - // This should be a function that resolves to a QuickJSFFI class. - importFFI: () => import("something/ffi.ts").then((mod) => mod.QuickJSFFI), - // This should be a function that resolves to a Emscripten-shaped WASM module factory. - importModuleLoader: () => import("something/emscripten-module.ts"), -} -``` - -You can provide your own variant to control exactly how the large WebAssembly object is loaded. `quickjs-emscripten-core` will call your variant's importXYZ methods during `newQuickJSWASMModuleFromVariant` or `newQuickJSAsyncWASMModuleFromVariant`. - -## Environment-specific variants - -You can use [subpath imports in package.json](https://nodejs.org/api/packages.html#subpath-imports) to select the appropriate variant for a runtime. This is how the main `quickjs-emscripten` package picks between browser, Node ESM and Node CommonJS variants. - -```json -// in your package.json -{ - "imports": { - "#my-quickjs-variant": { - "types": "@jitl/quickjs-wasmfile-release-sync", - // In the browser, use the singlefile variant that doesn't need an external file - "browser": "@jitl/quickjs-singlefile-browser-release-sync", - // Otherwise, use the wasmfile variant, compatible with all environments - "default": "@jitl/quickjs-wasmfile-release-sync" - } - } -} -``` - -```typescript -// In your code -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import variant from "#my-quickjs-variant" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -## Available variants - -### @jitl/quickjs-wasmfile-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-wasmfile-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-wasmfile-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-wasmfile-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-sync/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-asmjs-mjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md) | -Compiled to pure Javascript, no WebAssembly required. - -| Variable | Setting | Description | -| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | asmjs | The C library code is compiled to Javascript, no WebAssembly used. Sometimes called "asmjs". This is the slowest possible option, and is intended for constrained environments that do not support WebAssembly, like quickjs-for-quickjs. | -| exports | import | Has these package.json export conditions | - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/DisposableFail.md b/doc/quickjs-emscripten-core/classes/DisposableFail.md deleted file mode 100644 index b1cef2242..000000000 --- a/doc/quickjs-emscripten-core/classes/DisposableFail.md +++ /dev/null @@ -1,246 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / DisposableFail - -# Class: DisposableFail\ - -## Contents - -- [Extends](DisposableFail.md#extends) -- [Type parameters](DisposableFail.md#type-parameters) -- [Constructors](DisposableFail.md#constructors) - - [new DisposableFail(error, onUnwrap)](DisposableFail.md#new-disposablefailerror-onunwrap) -- [Properties](DisposableFail.md#properties) - - [error](DisposableFail.md#error) -- [Accessors](DisposableFail.md#accessors) - - [alive](DisposableFail.md#alive) -- [Methods](DisposableFail.md#methods) - - [`[dispose]`()](DisposableFail.md#dispose) - - [dispose()](DisposableFail.md#dispose) - - [unwrap()](DisposableFail.md#unwrap) - - [unwrapOr()](DisposableFail.md#unwrapor) - - [fail()](DisposableFail.md#fail) - - [is()](DisposableFail.md#is) - - [success()](DisposableFail.md#success) - -## Extends - -- `AbstractDisposableResult` - -## Type parameters - -• **F** - -## Constructors - -### new DisposableFail(error, onUnwrap) - -> **new DisposableFail**\<`F`\>(`error`, `onUnwrap`): [`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Parameters - -• **error**: `F` - -• **onUnwrap**: (`status`) => `void` - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Overrides - -`AbstractDisposableResult.constructor` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:451](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L451) - -## Properties - -### error - -> **`readonly`** **error**: `F` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:452](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L452) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:458](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L458) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -`AbstractDisposableResult.[dispose]` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -#### Returns - -`void` - -#### Overrides - -`AbstractDisposableResult.dispose` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:462](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L462) - -*** - -### unwrap() - -> **unwrap**(): `never` - -#### Returns - -`never` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:468](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L468) - -*** - -### unwrapOr() - -> **unwrapOr**\<`T`\>(`fallback`): `T` - -#### Type parameters - -• **T** - -#### Parameters - -• **fallback**: `T` - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:473](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L473) - -*** - -### fail() - -> **`static`** **fail**\<`S`, `F`\>(`error`, `onUnwrap`): [`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **error**: `F` - -• **onUnwrap**: (`status`) => `void` - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Inherited from - -`AbstractDisposableResult.fail` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:409](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L409) - -*** - -### is() - -> **`static`** **is**\<`S`, `F`\>(`result`): `result is DisposableResult` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`result is DisposableResult` - -#### Inherited from - -`AbstractDisposableResult.is` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L416) - -*** - -### success() - -> **`static`** **success**\<`S`, `F`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Inherited from - -`AbstractDisposableResult.success` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:405](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L405) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/DisposableSuccess.md b/doc/quickjs-emscripten-core/classes/DisposableSuccess.md deleted file mode 100644 index 70b6aaeb6..000000000 --- a/doc/quickjs-emscripten-core/classes/DisposableSuccess.md +++ /dev/null @@ -1,255 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / DisposableSuccess - -# Class: DisposableSuccess\ - -## Contents - -- [Extends](DisposableSuccess.md#extends) -- [Type parameters](DisposableSuccess.md#type-parameters) -- [Constructors](DisposableSuccess.md#constructors) - - [new DisposableSuccess(value)](DisposableSuccess.md#new-disposablesuccessvalue) -- [Properties](DisposableSuccess.md#properties) - - [error?](DisposableSuccess.md#error) - - [value](DisposableSuccess.md#value) -- [Accessors](DisposableSuccess.md#accessors) - - [alive](DisposableSuccess.md#alive) -- [Methods](DisposableSuccess.md#methods) - - [`[dispose]`()](DisposableSuccess.md#dispose) - - [dispose()](DisposableSuccess.md#dispose) - - [unwrap()](DisposableSuccess.md#unwrap) - - [unwrapOr()](DisposableSuccess.md#unwrapor) - - [fail()](DisposableSuccess.md#fail) - - [is()](DisposableSuccess.md#is) - - [success()](DisposableSuccess.md#success) - -## Extends - -- `AbstractDisposableResult` - -## Type parameters - -• **S** - -## Constructors - -### new DisposableSuccess(value) - -> **new DisposableSuccess**\<`S`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Overrides - -`AbstractDisposableResult.constructor` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:427](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L427) - -## Properties - -### error? - -> **error**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:425](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L425) - -*** - -### value - -> **`readonly`** **value**: `S` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:427](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L427) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:431](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L431) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -`AbstractDisposableResult.[dispose]` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -#### Returns - -`void` - -#### Overrides - -`AbstractDisposableResult.dispose` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:435](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L435) - -*** - -### unwrap() - -> **unwrap**(): `S` - -#### Returns - -`S` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:441](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L441) - -*** - -### unwrapOr() - -> **unwrapOr**\<`T`\>(`_fallback`): `S` \| `T` - -#### Type parameters - -• **T** - -#### Parameters - -• **\_fallback**: `T` - -#### Returns - -`S` \| `T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:445](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L445) - -*** - -### fail() - -> **`static`** **fail**\<`S`, `F`\>(`error`, `onUnwrap`): [`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **error**: `F` - -• **onUnwrap**: (`status`) => `void` - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Inherited from - -`AbstractDisposableResult.fail` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:409](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L409) - -*** - -### is() - -> **`static`** **is**\<`S`, `F`\>(`result`): `result is DisposableResult` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`result is DisposableResult` - -#### Inherited from - -`AbstractDisposableResult.is` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L416) - -*** - -### success() - -> **`static`** **success**\<`S`, `F`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Inherited from - -`AbstractDisposableResult.success` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:405](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L405) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/Lifetime.md b/doc/quickjs-emscripten-core/classes/Lifetime.md deleted file mode 100644 index c88e8f5a9..000000000 --- a/doc/quickjs-emscripten-core/classes/Lifetime.md +++ /dev/null @@ -1,440 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / Lifetime - -# Class: Lifetime\ - -A lifetime prevents access to a value after the lifetime has been -[dispose](Lifetime.md#dispose-1)ed. - -Typically, quickjs-emscripten uses Lifetimes to protect C memory pointers. - -## Contents - -- [Extends](Lifetime.md#extends) -- [Type parameters](Lifetime.md#type-parameters) -- [Implements](Lifetime.md#implements) -- [Constructors](Lifetime.md#constructors) - - [new Lifetime(_value, copier, disposer, _owner)](Lifetime.md#new-lifetime-value-copier-disposer-owner) -- [Properties](Lifetime.md#properties) - - [\_alive](Lifetime.md#alive) - - [\_constructorStack](Lifetime.md#constructorstack) - - [\_owner?](Lifetime.md#owner) - - [\_value](Lifetime.md#value) - - [copier?](Lifetime.md#copier) - - [disposer?](Lifetime.md#disposer) -- [Accessors](Lifetime.md#accessors) - - [alive](Lifetime.md#alive) - - [dupable](Lifetime.md#dupable) - - [owner](Lifetime.md#owner) - - [value](Lifetime.md#value) -- [Methods](Lifetime.md#methods) - - [`[dispose]`()](Lifetime.md#dispose) - - [consume()](Lifetime.md#consume) - - [dispose()](Lifetime.md#dispose) - - [dup()](Lifetime.md#dup) - - [map()](Lifetime.md#map) - - [tap()](Lifetime.md#tap) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Type parameters - -• **T** - -• **TCopy** = `never` - -• **Owner** = `never` - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new Lifetime(_value, copier, disposer, _owner) - -> **new Lifetime**\<`T`, `TCopy`, `Owner`\>(`_value`, `copier`?, `disposer`?, `_owner`?): [`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -When the Lifetime is disposed, it will call `disposer(_value)`. Use the -disposer function to implement whatever cleanup needs to happen at the end -of `value`'s lifetime. - -`_owner` is not used or controlled by the lifetime. It's just metadata for -the creator. - -#### Parameters - -• **\_value**: `T` - -• **copier?**: (`value`) => `TCopy` - -• **disposer?**: (`value`) => `void` - -• **\_owner?**: `Owner` - -#### Returns - -[`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:83](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L83) - -## Properties - -### \_alive - -> **`protected`** **\_alive**: `boolean` = `true` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L72) - -*** - -### \_constructorStack - -> **`protected`** **\_constructorStack**: `undefined` \| `string` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L73) - -*** - -### \_owner? - -> **`protected`** **`readonly`** **\_owner**?: `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L87) - -*** - -### \_value - -> **`protected`** **`readonly`** **\_value**: `T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L84) - -*** - -### copier? - -> **`protected`** **`readonly`** **copier**?: (`value`) => `TCopy` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`TCopy` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L85) - -*** - -### disposer? - -> **`protected`** **`readonly`** **disposer**?: (`value`) => `void` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L86) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](Lifetime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L92) - -*** - -### dupable - -> **`get`** **dupable**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L111) - -*** - -### owner - -> **`get`** **owner**(): `undefined` \| `Owner` - -#### Returns - -`undefined` \| `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L107) - -*** - -### value - -> **`get`** **value**(): `T` - -The value this Lifetime protects. You must never retain the value - it -may become invalid, leading to memory errors. - -#### Throws - -If the lifetime has been [dispose](Lifetime.md#dispose-1)d already. - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:102](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L102) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten-core.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### consume() - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, then dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:135](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L135) - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:138](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L138) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of [value](Lifetime.md#value-1) and perform cleanup. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:174](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L174) - -*** - -### dup() - -> **dup**(): [`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -Create a new handle pointing to the same [value](Lifetime.md#value-1). - -#### Returns - -[`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L118) - -*** - -### map() - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, returning the result. -Does not dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L151) - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L152) - -*** - -### tap() - -#### tap(fn) - -> **tap**(`fn`): [`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -Call `fn` with this lifetime, then return `this`. Does not dispose the -lifetime. Useful for imperative operations within an expression, like when -you're building up objects, or to add logging in the middle of a call chain. - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -this - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L164) - -#### tap(fn) - -> **tap**(`fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:165](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L165) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/QuickJSAsyncContext.md b/doc/quickjs-emscripten-core/classes/QuickJSAsyncContext.md deleted file mode 100644 index 754d4bc92..000000000 --- a/doc/quickjs-emscripten-core/classes/QuickJSAsyncContext.md +++ /dev/null @@ -1,1701 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSAsyncContext - -# Class: QuickJSAsyncContext - -Asyncified version of [QuickJSContext](QuickJSContext.md). - -*Asyncify* allows normally synchronous code to wait for asynchronous Promises -or callbacks. The asyncified version of QuickJSContext can wait for async -host functions as though they were synchronous. - -## Contents - -- [Extends](QuickJSAsyncContext.md#extends) -- [Constructors](QuickJSAsyncContext.md#constructors) - - [new QuickJSAsyncContext(args)](QuickJSAsyncContext.md#new-quickjsasynccontextargs) -- [Properties](QuickJSAsyncContext.md#properties) - - [runtime](QuickJSAsyncContext.md#runtime) -- [Accessors](QuickJSAsyncContext.md#accessors) - - [alive](QuickJSAsyncContext.md#alive) - - [false](QuickJSAsyncContext.md#false) - - [global](QuickJSAsyncContext.md#global) - - [null](QuickJSAsyncContext.md#null) - - [true](QuickJSAsyncContext.md#true) - - [undefined](QuickJSAsyncContext.md#undefined) -- [Methods](QuickJSAsyncContext.md#methods) - - [`[dispose]`()](QuickJSAsyncContext.md#dispose) - - [callFunction()](QuickJSAsyncContext.md#callfunction) - - [callMethod()](QuickJSAsyncContext.md#callmethod) - - [decodeBinaryJSON()](QuickJSAsyncContext.md#decodebinaryjson) - - [defineProp()](QuickJSAsyncContext.md#defineprop) - - [dispose()](QuickJSAsyncContext.md#dispose) - - [dump()](QuickJSAsyncContext.md#dump) - - [encodeBinaryJSON()](QuickJSAsyncContext.md#encodebinaryjson) - - [eq()](QuickJSAsyncContext.md#eq) - - [evalCode()](QuickJSAsyncContext.md#evalcode) - - [evalCodeAsync()](QuickJSAsyncContext.md#evalcodeasync) - - [fail()](QuickJSAsyncContext.md#fail) - - [getArrayBuffer()](QuickJSAsyncContext.md#getarraybuffer) - - [getBigInt()](QuickJSAsyncContext.md#getbigint) - - [getIterator()](QuickJSAsyncContext.md#getiterator) - - [getLength()](QuickJSAsyncContext.md#getlength) - - [getNumber()](QuickJSAsyncContext.md#getnumber) - - [getOwnPropertyNames()](QuickJSAsyncContext.md#getownpropertynames) - - [getPromiseState()](QuickJSAsyncContext.md#getpromisestate) - - [getProp()](QuickJSAsyncContext.md#getprop) - - [getString()](QuickJSAsyncContext.md#getstring) - - [getSymbol()](QuickJSAsyncContext.md#getsymbol) - - [getWellKnownSymbol()](QuickJSAsyncContext.md#getwellknownsymbol) - - [newArray()](QuickJSAsyncContext.md#newarray) - - [newArrayBuffer()](QuickJSAsyncContext.md#newarraybuffer) - - [newAsyncifiedFunction()](QuickJSAsyncContext.md#newasyncifiedfunction) - - [newBigInt()](QuickJSAsyncContext.md#newbigint) - - [newError()](QuickJSAsyncContext.md#newerror) - - [newFunction()](QuickJSAsyncContext.md#newfunction) - - [newNumber()](QuickJSAsyncContext.md#newnumber) - - [newObject()](QuickJSAsyncContext.md#newobject) - - [newPromise()](QuickJSAsyncContext.md#newpromise) - - [newString()](QuickJSAsyncContext.md#newstring) - - [newSymbolFor()](QuickJSAsyncContext.md#newsymbolfor) - - [newUniqueSymbol()](QuickJSAsyncContext.md#newuniquesymbol) - - [resolvePromise()](QuickJSAsyncContext.md#resolvepromise) - - [sameValue()](QuickJSAsyncContext.md#samevalue) - - [sameValueZero()](QuickJSAsyncContext.md#samevaluezero) - - [setProp()](QuickJSAsyncContext.md#setprop) - - [success()](QuickJSAsyncContext.md#success) - - [throw()](QuickJSAsyncContext.md#throw) - - [typeof()](QuickJSAsyncContext.md#typeof) - - [unwrapResult()](QuickJSAsyncContext.md#unwrapresult) - -## Extends - -- [`QuickJSContext`](QuickJSContext.md) - -## Constructors - -### new QuickJSAsyncContext(args) - -> **new QuickJSAsyncContext**(`args`): [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -Use [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext) or [QuickJSWASMModule#newContext](QuickJSWASMModule.md#newcontext) -to create a new QuickJSContext. - -#### Parameters - -• **args**: `Object` - -• **args\.callbacks**: `QuickJSModuleCallbacks` - -• **args\.ctx**: [`Lifetime`](Lifetime.md)\<[`JSContextPointer`](../exports.md#jscontextpointer), `never`, `never`\> - -• **args\.ffi**: [`EitherFFI`](../exports.md#eitherffi) - -• **args\.module**: [`EitherModule`](../exports.md#eithermodule) - -• **args\.ownedLifetimes?**: [`Disposable`](../interfaces/Disposable.md)[] - -• **args\.rt**: [`Lifetime`](Lifetime.md)\<[`JSRuntimePointer`](../exports.md#jsruntimepointer), `never`, `never`\> - -• **args\.runtime**: [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Returns - -[`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.constructor`](QuickJSContext.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:224](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L224) - -## Properties - -### runtime - -> **runtime**: [`QuickJSAsyncRuntime`](QuickJSAsyncRuntime.md) - -The runtime that created this context. - -#### Overrides - -[`quickjs-emscripten-core.QuickJSContext.runtime`](QuickJSContext.md#runtime) - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:31](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L31) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSAsyncContext.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L255) - -*** - -### false - -> **`get`** **false**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:313](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L313) - -*** - -### global - -> **`get`** **global**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects). -A handle to the global object inside the interpreter. -You can set properties to create global variables. - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:328](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L328) - -*** - -### null - -> **`get`** **null**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:287](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L287) - -*** - -### true - -> **`get`** **true**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:300](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L300) - -*** - -### undefined - -> **`get`** **undefined**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:274](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L274) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.[dispose]`](QuickJSContext.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### callFunction() - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, `args`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -[`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) or -[`func.apply(thisVal, args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply). -Call a JSValue as a function. - -See [unwrapResult](QuickJSAsyncContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSAsyncContext.md#resolvepromise) to convert it to a native promise and -[runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args?**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -Example: - -```typescript -using parseIntHandle = context.getProp(global, "parseInt") -using stringHandle = context.newString("42") -using resultHandle = context.callFunction(parseIntHandle, context.undefined, stringHandle).unwrap() -console.log(context.dump(resultHandle)) // 42 -``` - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.callFunction`](QuickJSContext.md#callfunction) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1059](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1059) - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, ...`args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• ...**args**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.callFunction`](QuickJSContext.md#callfunction) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1064](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1064) - -*** - -### callMethod() - -> **callMethod**(`thisHandle`, `key`, `args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -`handle[key](...args)` - -Call a method on a JSValue. This is a convenience method that calls [getProp](QuickJSAsyncContext.md#getprop) and [callFunction](QuickJSAsyncContext.md#callfunction). - -#### Parameters - -• **thisHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -• **args**: [`QuickJSHandle`](../exports.md#quickjshandle)[]= `[]` - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.callMethod`](QuickJSContext.md#callmethod) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1113) - -*** - -### decodeBinaryJSON() - -> **decodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs Handle of the given QuickJS Object in binary form - -```ts -// imagine receiving data from another via IPC -socket.on("data", chunk => { - context.newArrayBuffer(chunk) - ?.consume(handle => context.decodeBinaryJSON(handle)) - ?.consume(handle => console.log(context.dump(handle))) -}) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.decodeBinaryJSON`](QuickJSContext.md#decodebinaryjson) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1431](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1431) - -*** - -### defineProp() - -> **defineProp**(`handle`, `key`, `descriptor`): `void` - -[`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **descriptor**: [`VmPropertyDescriptor`](../interfaces/VmPropertyDescriptor.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.defineProp`](QuickJSContext.md#defineprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1000](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1000) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of this VM's underlying resources. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.dispose`](QuickJSContext.md#dispose-1) - -#### Throws - -Calling this method without disposing of all created handles -will result in an error. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:265](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L265) - -*** - -### dump() - -> **dump**(`handle`): `any` - -Dump a JSValue to Javascript in a best-effort fashion. -If the value is a promise, dumps the promise's state. -Returns `handle.toString()` if it cannot be serialized to JSON. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`any` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.dump`](QuickJSContext.md#dump) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1234](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1234) - -*** - -### encodeBinaryJSON() - -> **encodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs QuickJS Objects in binary form - -**WARNING**: QuickJS's binary JSON doesn't have a standard so expect it to change between version - -```ts -// imagine sending data to another via IPC -let dataLifetime = context.newString("This is an example") - ?.consume(handle => context.encodeBinaryJSON(handle)) - ?.consume(handle => context.getArrayBuffer(handle)) -socket.write(dataLifetime?.value) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.encodeBinaryJSON`](QuickJSContext.md#encodebinaryjson) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1414](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1414) - -*** - -### eq() - -> **eq**(`handle`, `other`): `boolean` - -`handle === other` - IsStrictlyEqual. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.eq`](QuickJSContext.md#eq) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:811](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L811) - -*** - -### evalCode() - -> **evalCode**(`code`, `filename`, `options`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description). - -Evaluates `code`, as though it's in a file named `filename`, with options `options`. - -- When `options.type` is `"global"`, the code is evaluated in the global - scope of the QuickJSContext, and the return value is the result of the last - expression. -- When `options.type` is `"module"`, the code is evaluated is a module scope. - It may use `import` and `export` if [runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#setModuleLoader](QuickJSRuntime.md#setmoduleloader) was called. - It may use top-level await if supported by the underlying QuickJS library. - The return value is the module's exports, or a promise for the module's exports. -- When `options.type` is unset, the code is evaluated as a module if it - contains an `import` or `export` statement, otherwise it is evaluated in - the global scope. - -When working with async code, you many need to call [runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) -to execute callbacks pending after synchronous evaluation returns. - -See [unwrapResult](QuickJSAsyncContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSAsyncContext.md#resolvepromise) to convert it to a native promise and -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -*Note*: to protect against infinite loops, provide an interrupt handler to -[QuickJSRuntime#setInterruptHandler](QuickJSRuntime.md#setinterrupthandler). You can use [shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline) to -create a time-based deadline. - -#### Parameters - -• **code**: `string` - -• **filename**: `string`= `"eval.js"` - -• **options?**: `number` \| [`ContextEvalOptions`](../interfaces/ContextEvalOptions.md) - -If no options are passed, a heuristic will be used to detect if `code` is -an ES module. - -See [EvalFlags](../exports.md#evalflags) for number semantics. - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -The last statement's value. If the code threw synchronously, -`result.error` will be a handle to the exception. If execution was -interrupted, the error will have name `InternalError` and message -`interrupted`. - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.evalCode`](QuickJSContext.md#evalcode) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1156](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1156) - -*** - -### evalCodeAsync() - -> **evalCodeAsync**(`code`, `filename`, `options`?): `Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -Asyncified version of [evalCode](QuickJSAsyncContext.md#evalcode). - -#### Parameters - -• **code**: `string` - -• **filename**: `string`= `"eval.js"` - -• **options?**: `number` \| [`ContextEvalOptions`](../interfaces/ContextEvalOptions.md) - -See [EvalFlags](../exports.md#evalflags) for number semantics - -#### Returns - -`Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L44) - -*** - -### fail() - -> **`protected`** **fail**(`error`): [`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Parameters - -• **error**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.fail`](QuickJSContext.md#fail) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1440](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1440) - -*** - -### getArrayBuffer() - -> **getArrayBuffer**(`handle`): [`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -Coverts `handle` to a JavaScript ArrayBuffer - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getArrayBuffer`](QuickJSContext.md#getarraybuffer) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:690](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L690) - -*** - -### getBigInt() - -> **getBigInt**(`handle`): `bigint` - -Converts `handle` to a Javascript bigint. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`bigint` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getBigInt`](QuickJSContext.md#getbigint) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:681](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L681) - -*** - -### getIterator() - -> **getIterator**(`iterableHandle`): `QuickJSContextResult`\<`QuickJSIterator`\> - -`handle[Symbol.iterator]()`. See [QuickJSIterator]([object Object]). -Returns a host iterator that wraps and proxies calls to a guest iterator handle. -Each step of the iteration returns a result, either an error or a handle to the next value. -Once the iterator is done, the handle is automatically disposed, and the iterator -is considered done if the handle is disposed. - -```typescript -for (using entriesHandle of context.getIterator(mapHandle).unwrap()) { - using keyHandle = context.getProp(entriesHandle, 0) - using valueHandle = context.getProp(entriesHandle, 1) - console.log(context.dump(keyHandle), '->', context.dump(valueHandle)) -} -``` - -#### Parameters - -• **iterableHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`QuickJSContextResult`\<`QuickJSIterator`\> - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getIterator`](QuickJSContext.md#getiterator) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:960](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L960) - -*** - -### getLength() - -> **getLength**(`handle`): `undefined` \| `number` - -`handle.length` as a host number. - -Example use: -```typescript -const length = context.getLength(arrayHandle) ?? 0 -for (let i = 0; i < length; i++) { - using value = context.getProp(arrayHandle, i) - console.log(`array[${i}] =`, context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`undefined` \| `number` - -a number if the handle has a numeric length property, otherwise `undefined`. - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getLength`](QuickJSContext.md#getlength) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:870](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L870) - -*** - -### getNumber() - -> **getNumber**(`handle`): `number` - -Converts `handle` into a Javascript number. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`number` - -`NaN` on error, otherwise a `number`. - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getNumber`](QuickJSContext.md#getnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:652](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L652) - -*** - -### getOwnPropertyNames() - -> **getOwnPropertyNames**(`handle`, `options`): `QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Object.getOwnPropertyNames(handle)`. -Similar to the [standard semantics](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames), -but with extra, non-standard options for: - -- fetching array indexes as numbers (`numbers: true`) -- including symbols (`symbols: true`) -- only iterating over enumerable properties (`onlyEnumerable: true`) - -The default behavior is to emulate the standard: -```typescript -context.getOwnPropertyNames(handle, { strings: true, numbersAsStrings: true }) -``` - -Note when passing an explicit options object, you must set at least one -option, and `strings` are not included unless specified. - -Example use: -```typescript -for (using prop of context.getOwnPropertyNames(objectHandle).unwrap()) { - using value = context.getProp(handle, prop) - console.log(context.dump(prop), '->', context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **options**: `GetOwnPropertyNamesOptions`= `undefined` - -#### Returns - -`QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -an an array of handles of the property names. The array itself is disposable for your convenience. - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getOwnPropertyNames`](QuickJSContext.md#getownpropertynames) - -#### Throws - -QuickJSEmptyGetOwnPropertyNames if no options are set. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:907](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L907) - -*** - -### getPromiseState() - -> **getPromiseState**(`handle`): [`JSPromiseState`](../exports.md#jspromisestate) - -Get the current state of a QuickJS promise, see [JSPromiseState](../exports.md#jspromisestate) for the possible states. -This can be used to expect a promise to be fulfilled when combined with [unwrapResult](QuickJSAsyncContext.md#unwrapresult): - -```typescript -const promiseHandle = context.evalCode(`Promise.resolve(42)`); -const resultHandle = context.unwrapResult( - context.getPromiseState(promiseHandle) -); -context.getNumber(resultHandle) === 42; // true -resultHandle.dispose(); -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSPromiseState`](../exports.md#jspromisestate) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getPromiseState`](QuickJSContext.md#getpromisestate) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:715](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L715) - -*** - -### getProp() - -> **getProp**(`handle`, `key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -`handle[key]`. -Get a property from a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string (which will be converted automatically). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getProp`](QuickJSContext.md#getprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:840](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L840) - -*** - -### getString() - -> **getString**(`handle`): `string` - -Converts `handle` to a Javascript string. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getString`](QuickJSContext.md#getstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:660](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L660) - -*** - -### getSymbol() - -> **getSymbol**(`handle`): `symbol` - -Converts `handle` into a Javascript symbol. If the symbol is in the global -registry in the guest, it will be created with Symbol.for on the host. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`symbol` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getSymbol`](QuickJSContext.md#getsymbol) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:669](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L669) - -*** - -### getWellKnownSymbol() - -> **getWellKnownSymbol**(`name`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Access a well-known symbol that is a property of the global Symbol object, like `Symbol.iterator`. - -#### Parameters - -• **name**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.getWellKnownSymbol`](QuickJSContext.md#getwellknownsymbol) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:388](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L388) - -*** - -### newArray() - -> **newArray**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -`[]`. -Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newArray`](QuickJSContext.md#newarray) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:430](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L430) - -*** - -### newArrayBuffer() - -> **newArrayBuffer**(`buffer`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a new QuickJS [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). - -#### Parameters - -• **buffer**: `ArrayBufferLike` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newArrayBuffer`](QuickJSContext.md#newarraybuffer) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:438](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L438) - -*** - -### newAsyncifiedFunction() - -> **newAsyncifiedFunction**(`name`, `fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Similar to [newFunction](QuickJSAsyncContext.md#newfunction). -Convert an async host Javascript function into a synchronous QuickJS function value. - -Whenever QuickJS calls this function, the VM's stack will be unwound while -waiting the async function to complete, and then restored when the returned -promise resolves. - -Asyncified functions must never call other asyncified functions or -`import`, even indirectly, because the stack cannot be unwound twice. - -See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html). - -#### Parameters - -• **name**: `string` - -• **fn**: [`AsyncFunctionImplementation`](../exports.md#asyncfunctionimplementation) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:91](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L91) - -*** - -### newBigInt() - -> **newBigInt**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value. - -#### Parameters - -• **num**: `bigint` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newBigInt`](QuickJSContext.md#newbigint) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:396](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L396) - -*** - -### newError() - -#### newError(error) - -> **newError**(`error`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **error**: `Object` - -• **error\.message**: `string` - -• **error\.name**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newError`](QuickJSContext.md#newerror) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:607](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L607) - -#### newError(message) - -> **newError**(`message`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **message**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newError`](QuickJSContext.md#newerror) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:608](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L608) - -#### newError(undefined) - -> **newError**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newError`](QuickJSContext.md#newerror) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:609](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L609) - -*** - -### newFunction() - -> **newFunction**(`name`, `fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Convert a Javascript function into a QuickJS function value. -See [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) for more details. - -A [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) should not free its arguments or its return -value. A VmFunctionImplementation should also not retain any references to -its return value. - -The function argument handles are automatically disposed when the function -returns. If you want to retain a handle beyond the end of the function, you -can call [Lifetime#dup](Lifetime.md#dup) to create a copy of the handle that you own -and must dispose manually. For example, you need to use this API and do some -extra book keeping to implement `setInterval`: - -```typescript -// This won't work because `callbackHandle` expires when the function returns, -// so when the interval fires, the callback handle is already disposed. -const WRONG_setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - const delayMs = context.getNumber(delayHandle) - const intervalId = globalThis.setInterval(() => { - // ERROR: callbackHandle is already disposed here. - context.callFunction(callbackHandle) - }, intervalId) - return context.newNumber(intervalId) -}) - -// This works since we dup the callbackHandle. -// We just need to make sure we clean it up manually when the interval is cleared -- -// so we need to keep track of those interval IDs, and make sure we clean all -// of them up when we dispose the owning context. - -const setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - // Ensure the guest can't overload us by scheduling too many intervals. - if (QuickJSInterval.INTERVALS.size > 100) { - throw new Error(`Too many intervals scheduled already`) - } - - const delayMs = context.getNumber(delayHandle) - const longLivedCallbackHandle = callbackHandle.dup() - const intervalId = globalThis.setInterval(() => { - context.callFunction(longLivedCallbackHandle) - }, intervalId) - const disposable = new QuickJSInterval(longLivedCallbackHandle, context, intervalId) - QuickJSInterval.INTERVALS.set(intervalId, disposable) - return context.newNumber(intervalId) -}) - -const clearIntervalHandle = context.newFunction("clearInterval", (intervalIdHandle) => { - const intervalId = context.getNumber(intervalIdHandle) - const disposable = QuickJSInterval.INTERVALS.get(intervalId) - disposable?.dispose() -}) - -class QuickJSInterval extends UsingDisposable { - static INTERVALS = new Map() - - static disposeContext(context: QuickJSContext) { - for (const interval of QuickJSInterval.INTERVALS.values()) { - if (interval.context === context) { - interval.dispose() - } - } - } - - constructor( - public fnHandle: QuickJSHandle, - public context: QuickJSContext, - public intervalId: number, - ) { - super() - } - - dispose() { - globalThis.clearInterval(this.intervalId) - this.fnHandle.dispose() - QuickJSInterval.INTERVALS.delete(this.fnHandle.value) - } - - get alive() { - return this.fnHandle.alive - } -} -``` - -To implement an async function, create a promise with [newPromise](QuickJSAsyncContext.md#newpromise), then -return the deferred promise handle from `deferred.handle` from your -function implementation: - -```typescript -const deferred = vm.newPromise() -someNativeAsyncFunction().then(deferred.resolve) -return deferred.handle -``` - -#### Parameters - -• **name**: `string` - -• **fn**: [`VmFunctionImplementation`](../exports.md#vmfunctionimplementationvmhandle)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newFunction`](QuickJSContext.md#newfunction) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:601](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L601) - -*** - -### newNumber() - -> **newNumber**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Converts a Javascript number into a QuickJS value. - -#### Parameters - -• **num**: `number` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newNumber`](QuickJSContext.md#newnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:347](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L347) - -*** - -### newObject() - -> **newObject**(`prototype`?): [`QuickJSHandle`](../exports.md#quickjshandle) - -`{}`. -Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer). - -#### Parameters - -• **prototype?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newObject`](QuickJSContext.md#newobject) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L416) - -*** - -### newPromise() - -#### newPromise(undefined) - -> **newPromise**(): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md). Use `deferred.resolve(handle)` and -`deferred.reject(handle)` to fulfill the promise handle available at `deferred.handle`. -Note that you are responsible for calling `deferred.dispose()` to free the underlying -resources; see the documentation on [QuickJSDeferredPromise](QuickJSDeferredPromise.md) for details. - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newPromise`](QuickJSContext.md#newpromise) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:451](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L451) - -#### newPromise(promise) - -> **newPromise**(`promise`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md) that resolves when the -given native Promise`` resolves. Rejections will be coerced -to a QuickJS error. - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **promise**: `Promise`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newPromise`](QuickJSContext.md#newpromise) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:459](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L459) - -#### newPromise(newPromiseFn) - -> **newPromise**(`newPromiseFn`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Construct a new native Promise`` , and then convert it into a -[QuickJSDeferredPromise](QuickJSDeferredPromise.md). - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **newPromiseFn**: [`PromiseExecutor`](../exports.md#promiseexecutorresolvet-rejectt)\<[`QuickJSHandle`](../exports.md#quickjshandle), `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newPromise`](QuickJSContext.md#newpromise) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:466](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L466) - -*** - -### newString() - -> **newString**(`str`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value. - -#### Parameters - -• **str**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newString`](QuickJSContext.md#newstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:354](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L354) - -*** - -### newSymbolFor() - -> **newSymbolFor**(`key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key. -All symbols created with the same key will be the same value. - -#### Parameters - -• **key**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newSymbolFor`](QuickJSContext.md#newsymbolfor) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:377](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L377) - -*** - -### newUniqueSymbol() - -> **newUniqueSymbol**(`description`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value. -No two symbols created with this function will be the same value. - -#### Parameters - -• **description**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.newUniqueSymbol`](QuickJSContext.md#newuniquesymbol) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:365](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L365) - -*** - -### resolvePromise() - -> **resolvePromise**(`promiseLikeHandle`): `Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Promise.resolve(value)`. -Convert a handle containing a Promise-like value inside the VM into an -actual promise on the host. - -#### Parameters - -• **promiseLikeHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -A handle to a Promise-like value with a `.then(onSuccess, onError)` method. - -#### Returns - -`Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.resolvePromise`](QuickJSContext.md#resolvepromise) - -#### Remarks - -You may need to call [runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to ensure that the promise is resolved. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:754](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L754) - -*** - -### sameValue() - -> **sameValue**(`handle`, `other`): `boolean` - -`Object.is(a, b)` -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.sameValue`](QuickJSContext.md#samevalue) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:819](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L819) - -*** - -### sameValueZero() - -> **sameValueZero**(`handle`, `other`): `boolean` - -SameValueZero comparison. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.sameValueZero`](QuickJSContext.md#samevaluezero) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:827](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L827) - -*** - -### setProp() - -> **setProp**(`handle`, `key`, `value`): `void` - -`handle[key] = value`. -Set a property on a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **value**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.setProp`](QuickJSContext.md#setprop) - -#### Remarks - -Note that the QuickJS authors recommend using [defineProp](QuickJSAsyncContext.md#defineprop) to define new -properties. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:985](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L985) - -*** - -### success() - -> **`protected`** **success**\<`S`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.success`](QuickJSContext.md#success) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1436](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1436) - -*** - -### throw() - -> **throw**(`error`): [`JSValuePointer`](../exports.md#jsvaluepointer) - -Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes. - -#### Parameters - -• **error**: `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.throw`](QuickJSContext.md#throw) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1193](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1193) - -*** - -### typeof() - -> **typeof**(`handle`): `string` - -`typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.typeof`](QuickJSContext.md#typeof) - -#### Remarks - -Does not support BigInt values correctly. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:643](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L643) - -*** - -### unwrapResult() - -> **unwrapResult**\<`T`\>(`result`): `T` - -Unwrap a SuccessOrFail result such as a [VmCallResult](../exports.md#vmcallresultvmhandle) or a -[ExecutePendingJobsResult](../exports.md#executependingjobsresult), where the fail branch contains a handle to a QuickJS error value. -If the result is a success, returns the value. -If the result is an error, converts the error to a native object and throws the error. - -#### Type parameters - -• **T** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`T`, [`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`T` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSContext.unwrapResult`](QuickJSContext.md#unwrapresult) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1277](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1277) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/QuickJSAsyncRuntime.md b/doc/quickjs-emscripten-core/classes/QuickJSAsyncRuntime.md deleted file mode 100644 index d6c4945f1..000000000 --- a/doc/quickjs-emscripten-core/classes/QuickJSAsyncRuntime.md +++ /dev/null @@ -1,530 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSAsyncRuntime - -# Class: QuickJSAsyncRuntime - -A runtime represents a Javascript runtime corresponding to an object heap. -Several runtimes can exist at the same time but they cannot exchange objects. -Inside a given runtime, no multi-threading is supported. - -You can think of separate runtimes like different domains in a browser, and -the contexts within a runtime like the different windows open to the same -domain. - -Create a runtime via [QuickJSWASMModule.newRuntime](QuickJSWASMModule.md#newruntime). - -You should create separate runtime instances for untrusted code from -different sources for isolation. However, stronger isolation is also -available (at the cost of memory usage), by creating separate WebAssembly -modules to further isolate untrusted code. -See newQuickJSWASMModule. - -Implement memory and CPU constraints with [setInterruptHandler](QuickJSAsyncRuntime.md#setinterrupthandler) -(called regularly while the interpreter runs), [setMemoryLimit](QuickJSAsyncRuntime.md#setmemorylimit), and -[setMaxStackSize](QuickJSAsyncRuntime.md#setmaxstacksize). -Use [computeMemoryUsage](QuickJSAsyncRuntime.md#computememoryusage) or [dumpMemoryUsage](QuickJSAsyncRuntime.md#dumpmemoryusage) to guide memory limit -tuning. - -Configure ES module loading with [setModuleLoader](QuickJSAsyncRuntime.md#setmoduleloader). - -## Contents - -- [Extends](QuickJSAsyncRuntime.md#extends) -- [Properties](QuickJSAsyncRuntime.md#properties) - - [context](QuickJSAsyncRuntime.md#context) -- [Accessors](QuickJSAsyncRuntime.md#accessors) - - [alive](QuickJSAsyncRuntime.md#alive) -- [Methods](QuickJSAsyncRuntime.md#methods) - - [`[dispose]`()](QuickJSAsyncRuntime.md#dispose) - - [assertOwned()](QuickJSAsyncRuntime.md#assertowned) - - [computeMemoryUsage()](QuickJSAsyncRuntime.md#computememoryusage) - - [debugLog()](QuickJSAsyncRuntime.md#debuglog) - - [dispose()](QuickJSAsyncRuntime.md#dispose) - - [dumpMemoryUsage()](QuickJSAsyncRuntime.md#dumpmemoryusage) - - [executePendingJobs()](QuickJSAsyncRuntime.md#executependingjobs) - - [hasPendingJob()](QuickJSAsyncRuntime.md#haspendingjob) - - [isDebugMode()](QuickJSAsyncRuntime.md#isdebugmode) - - [newContext()](QuickJSAsyncRuntime.md#newcontext) - - [removeInterruptHandler()](QuickJSAsyncRuntime.md#removeinterrupthandler) - - [removeModuleLoader()](QuickJSAsyncRuntime.md#removemoduleloader) - - [setDebugMode()](QuickJSAsyncRuntime.md#setdebugmode) - - [setInterruptHandler()](QuickJSAsyncRuntime.md#setinterrupthandler) - - [setMaxStackSize()](QuickJSAsyncRuntime.md#setmaxstacksize) - - [setMemoryLimit()](QuickJSAsyncRuntime.md#setmemorylimit) - - [setModuleLoader()](QuickJSAsyncRuntime.md#setmoduleloader) - -## Extends - -- [`QuickJSRuntime`](QuickJSRuntime.md) - -## Properties - -### context - -> **context**: `undefined` \| [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -If this runtime was created as as part of a context, points to the context -associated with the runtime. - -If this runtime was created stand-alone, this may or may not contain a context. -A context here may be allocated if one is needed by the runtime, eg for [computeMemoryUsage](QuickJSAsyncRuntime.md#computememoryusage). - -#### Overrides - -[`quickjs-emscripten-core.QuickJSRuntime.context`](QuickJSRuntime.md#context) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L26) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSAsyncRuntime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:125](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L125) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.[dispose]`](QuickJSRuntime.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### assertOwned() - -> **assertOwned**(`handle`): `void` - -Assert that `handle` is owned by this runtime. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.assertOwned`](QuickJSRuntime.md#assertowned) - -#### Throws - -QuickJSWrongOwner if owned by a different runtime. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:327](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L327) - -*** - -### computeMemoryUsage() - -> **computeMemoryUsage**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -Compute memory usage for this runtime. Returns the result as a handle to a -JSValue object. Use [QuickJSContext#dump](QuickJSContext.md#dump) to convert to a native object. -Calling this method will allocate more memory inside the runtime. The information -is accurate as of just before the call to `computeMemoryUsage`. -For a human-digestible representation, see [dumpMemoryUsage](QuickJSAsyncRuntime.md#dumpmemoryusage). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.computeMemoryUsage`](QuickJSRuntime.md#computememoryusage) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:296](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L296) - -*** - -### debugLog() - -> **debugLog**(...`msg`): `void` - -In debug mode, log the result of calling `msg()`. - -We take a function instead of a log message to avoid expensive string -manipulation if debug logging is disabled. - -#### Parameters - -• ...**msg**: `unknown`[] - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.debugLog`](QuickJSRuntime.md#debuglog) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:363](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L363) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.dispose`](QuickJSRuntime.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:129](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L129) - -*** - -### dumpMemoryUsage() - -> **dumpMemoryUsage**(): `string` - -#### Returns - -`string` - -a human-readable description of memory usage in this runtime. -For programmatic access to this information, see [computeMemoryUsage](QuickJSAsyncRuntime.md#computememoryusage). - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.dumpMemoryUsage`](QuickJSRuntime.md#dumpmemoryusage) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:307](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L307) - -*** - -### executePendingJobs() - -> **executePendingJobs**(`maxJobsToExecute`): [`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -Execute pendingJobs on the runtime until `maxJobsToExecute` jobs are -executed (default all pendingJobs), the queue is exhausted, or the runtime -encounters an exception. - -In QuickJS, promises and async functions *inside the runtime* create -pendingJobs. These do not execute immediately and need to triggered to run. - -#### Parameters - -• **maxJobsToExecute**: `number` \| `void`= `-1` - -When negative, run all pending jobs. Otherwise execute -at most `maxJobsToExecute` before returning. - -#### Returns - -[`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -On success, the number of executed jobs. On error, the exception -that stopped execution, and the context it occurred in. Note that -executePendingJobs will not normally return errors thrown inside async -functions or rejected promises. Those errors are available by calling -[QuickJSContext#resolvePromise](QuickJSContext.md#resolvepromise) on the promise handle returned by the async function. - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.executePendingJobs`](QuickJSRuntime.md#executependingjobs) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:243](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L243) - -*** - -### hasPendingJob() - -> **hasPendingJob**(): `boolean` - -In QuickJS, promises and async functions create pendingJobs. These do not execute -immediately and need to be run by calling [executePendingJobs](QuickJSAsyncRuntime.md#executependingjobs). - -#### Returns - -`boolean` - -true if there is at least one pendingJob queued up. - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.hasPendingJob`](QuickJSRuntime.md#haspendingjob) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:194](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L194) - -*** - -### isDebugMode() - -> **isDebugMode**(): `boolean` - -#### Returns - -`boolean` - -true if debug logging is enabled - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.isDebugMode`](QuickJSRuntime.md#isdebugmode) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:353](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L353) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -Create a new context within this runtime. Contexts have isolated globals, -but you can explicitly share objects between contexts with the same -runtime. - -You should dispose a created context before disposing this runtime. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -#### Overrides - -[`quickjs-emscripten-core.QuickJSRuntime.newContext`](QuickJSRuntime.md#newcontext) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L49) - -*** - -### removeInterruptHandler() - -> **removeInterruptHandler**(): `void` - -Remove the interrupt handler, if any. -See [setInterruptHandler](QuickJSAsyncRuntime.md#setinterrupthandler). - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.removeInterruptHandler`](QuickJSRuntime.md#removeinterrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:219](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L219) - -*** - -### removeModuleLoader() - -> **removeModuleLoader**(): `void` - -Remove the the loader set by [setModuleLoader](QuickJSAsyncRuntime.md#setmoduleloader). This disables module loading. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.removeModuleLoader`](QuickJSRuntime.md#removemoduleloader) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:181](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L181) - -*** - -### setDebugMode() - -> **setDebugMode**(`enabled`): `void` - -Enable or disable debug logging. - -If this module is a DEBUG variant, more logs will be printed from the C -code. - -#### Parameters - -• **enabled**: `boolean` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.setDebugMode`](QuickJSRuntime.md#setdebugmode) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:343](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L343) - -*** - -### setInterruptHandler() - -> **setInterruptHandler**(`cb`): `void` - -Set a callback which is regularly called by the QuickJS engine when it is -executing code. This callback can be used to implement an execution -timeout. - -The interrupt handler can be removed with [removeInterruptHandler](QuickJSAsyncRuntime.md#removeinterrupthandler). - -#### Parameters - -• **cb**: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.setInterruptHandler`](QuickJSRuntime.md#setinterrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:207](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L207) - -*** - -### setMaxStackSize() - -> **setMaxStackSize**(`stackSize`): `void` - -Set the max stack size for this runtime in bytes. -To remove the limit, set to `0`. - -Setting this limit also adjusts the global `ASYNCIFY_STACK_SIZE` for the entire [QuickJSAsyncWASMModule](QuickJSAsyncWASMModule.md). -See the [pull request](https://github.com/justjake/quickjs-emscripten/pull/114) for more details. - -#### Parameters - -• **stackSize**: `number` - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten-core.QuickJSRuntime.setMaxStackSize`](QuickJSRuntime.md#setmaxstacksize) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L92) - -*** - -### setMemoryLimit() - -> **setMemoryLimit**(`limitBytes`): `void` - -Set the max memory this runtime can allocate. -To remove the limit, set to `-1`. - -#### Parameters - -• **limitBytes**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSRuntime.setMemoryLimit`](QuickJSRuntime.md#setmemorylimit) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:281](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L281) - -*** - -### setModuleLoader() - -> **setModuleLoader**(`moduleLoader`, `moduleNormalizer`?): `void` - -Set the loader for EcmaScript modules requested by any context in this -runtime. - -The loader can be removed with [removeModuleLoader](QuickJSAsyncRuntime.md#removemoduleloader). - -#### Parameters - -• **moduleLoader**: [`JSModuleLoaderAsync`](../interfaces/JSModuleLoaderAsync.md) - -• **moduleNormalizer?**: [`JSModuleNormalizerAsync`](../interfaces/JSModuleNormalizerAsync.md) - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten-core.QuickJSRuntime.setModuleLoader`](QuickJSRuntime.md#setmoduleloader) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:75](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L75) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/QuickJSAsyncWASMModule.md b/doc/quickjs-emscripten-core/classes/QuickJSAsyncWASMModule.md deleted file mode 100644 index 1ef31647f..000000000 --- a/doc/quickjs-emscripten-core/classes/QuickJSAsyncWASMModule.md +++ /dev/null @@ -1,163 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSAsyncWASMModule - -# Class: QuickJSAsyncWASMModule - -Asyncified version of [QuickJSWASMModule](QuickJSWASMModule.md). - -Due to limitations of Emscripten's ASYNCIFY process, only a single async -function call can happen at a time across the entire WebAssembly module. - -That means that all runtimes, contexts, functions, etc created inside this -WebAssembly are limited to a single concurrent async action. -**Multiple concurrent async actions is an error.** - -To allow for multiple concurrent async actions, you must create multiple WebAssembly -modules. - -## Contents - -- [Extends](QuickJSAsyncWASMModule.md#extends) -- [Methods](QuickJSAsyncWASMModule.md#methods) - - [evalCode()](QuickJSAsyncWASMModule.md#evalcode) - - [evalCodeAsync()](QuickJSAsyncWASMModule.md#evalcodeasync) - - [getWasmMemory()](QuickJSAsyncWASMModule.md#getwasmmemory) - - [newContext()](QuickJSAsyncWASMModule.md#newcontext) - - [newRuntime()](QuickJSAsyncWASMModule.md#newruntime) - -## Extends - -- [`QuickJSWASMModule`](QuickJSWASMModule.md) - -## Methods - -### evalCode() - -> **evalCode**(): `never` - -Synchronous evalCode is not supported. - -#### Returns - -`never` - -#### Overrides - -[`quickjs-emscripten-core.QuickJSWASMModule.evalCode`](QuickJSWASMModule.md#evalcode) - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L76) - -*** - -### evalCodeAsync() - -> **evalCodeAsync**(`code`, `options`): `Promise`\<`unknown`\> - -One-off evaluate code without needing to create a [QuickJSAsyncRuntime](QuickJSAsyncRuntime.md) or -[QuickJSAsyncContext](QuickJSAsyncContext.md) explicitly. - -This version allows for asynchronous Ecmascript module loading. - -Note that only a single async action can occur at a time inside the entire WebAssembly module. -**Multiple concurrent async actions is an error.** - -See the documentation for [QuickJSWASMModule#evalCode](QuickJSWASMModule.md#evalcode) for more details. - -#### Parameters - -• **code**: `string` - -• **options**: [`ModuleEvalOptions`](../interfaces/ModuleEvalOptions.md) - -#### Returns - -`Promise`\<`unknown`\> - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:91](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L91) - -*** - -### getWasmMemory() - -> **getWasmMemory**(): `Memory` - -Retrieve the WebAssembly memory used by this QuickJS module. -Use this access very carefully - you are responsible for safe interaction with the memory. - -To supply a custom, pre-initialized memory to QuickJS, create a new variant -and provide the [CustomizeVariantOptions#wasmMemory](../interfaces/CustomizeVariantOptions.md#wasmmemory) option. - -#### Returns - -`Memory` - -#### Inherited from - -[`quickjs-emscripten-core.QuickJSWASMModule.getWasmMemory`](QuickJSWASMModule.md#getwasmmemory) - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:426](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L426) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -A simplified API to create a new [QuickJSAsyncRuntime](QuickJSAsyncRuntime.md) and a -[QuickJSAsyncContext](QuickJSAsyncContext.md) inside that runtime at the same time. The runtime will -be disposed when the context is disposed. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -#### Overrides - -[`quickjs-emscripten-core.QuickJSWASMModule.newContext`](QuickJSWASMModule.md#newcontext) - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:67](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L67) - -*** - -### newRuntime() - -> **newRuntime**(`options`): [`QuickJSAsyncRuntime`](QuickJSAsyncRuntime.md) - -Create a new async runtime inside this WebAssembly module. All runtimes inside a -module are limited to a single async call at a time. For multiple -concurrent async actions, create multiple WebAssembly modules. - -#### Parameters - -• **options**: [`AsyncRuntimeOptions`](../interfaces/AsyncRuntimeOptions.md)= `{}` - -#### Returns - -[`QuickJSAsyncRuntime`](QuickJSAsyncRuntime.md) - -#### Overrides - -[`quickjs-emscripten-core.QuickJSWASMModule.newRuntime`](QuickJSWASMModule.md#newruntime) - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L41) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/QuickJSContext.md b/doc/quickjs-emscripten-core/classes/QuickJSContext.md deleted file mode 100644 index bf3f1ad76..000000000 --- a/doc/quickjs-emscripten-core/classes/QuickJSContext.md +++ /dev/null @@ -1,1551 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSContext - -# Class: QuickJSContext - -QuickJSContext wraps a QuickJS Javascript context (JSContext*) within a -runtime. The contexts within the same runtime may exchange objects freely. -You can think of separate runtimes like different domains in a browser, and -the contexts within a runtime like the different windows open to the same -domain. The [runtime](QuickJSContext.md#runtime) references the context's runtime. - -This class's methods return [QuickJSHandle](../exports.md#quickjshandle), which wrap C pointers (JSValue*). -It's the caller's responsibility to call `.dispose()` on any -handles you create to free memory once you're done with the handle. - -Use [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext) or [QuickJSWASMModule#newContext](QuickJSWASMModule.md#newcontext) -to create a new QuickJSContext. - -Create QuickJS values inside the interpreter with methods like -[newNumber](QuickJSContext.md#newnumber), [newString](QuickJSContext.md#newstring), [newArray](QuickJSContext.md#newarray), [newObject](QuickJSContext.md#newobject), -[newFunction](QuickJSContext.md#newfunction), and [newPromise](QuickJSContext.md#newpromise). - -Call [setProp](QuickJSContext.md#setprop) or [defineProp](QuickJSContext.md#defineprop) to customize objects. Use those methods -with [global](QuickJSContext.md#global) to expose the values you create to the interior of the -interpreter, so they can be used in [evalCode](QuickJSContext.md#evalcode). - -Use [evalCode](QuickJSContext.md#evalcode) or [callFunction](QuickJSContext.md#callfunction) to execute Javascript inside the VM. If -you're using asynchronous code inside the QuickJSContext, you may need to also -call [QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs). Executing code inside the runtime returns a -result object representing successful execution or an error. You must dispose -of any such results to avoid leaking memory inside the VM. - -Implement memory and CPU constraints at the runtime level, using [runtime](QuickJSContext.md#runtime). -See [QuickJSRuntime](QuickJSRuntime.md) for more information. - -## Contents - -- [Extends](QuickJSContext.md#extends) -- [Implements](QuickJSContext.md#implements) -- [Constructors](QuickJSContext.md#constructors) - - [new QuickJSContext(args)](QuickJSContext.md#new-quickjscontextargs) -- [Properties](QuickJSContext.md#properties) - - [runtime](QuickJSContext.md#runtime) -- [Accessors](QuickJSContext.md#accessors) - - [alive](QuickJSContext.md#alive) - - [false](QuickJSContext.md#false) - - [global](QuickJSContext.md#global) - - [null](QuickJSContext.md#null) - - [true](QuickJSContext.md#true) - - [undefined](QuickJSContext.md#undefined) -- [Methods](QuickJSContext.md#methods) - - [`[dispose]`()](QuickJSContext.md#dispose) - - [callFunction()](QuickJSContext.md#callfunction) - - [callMethod()](QuickJSContext.md#callmethod) - - [decodeBinaryJSON()](QuickJSContext.md#decodebinaryjson) - - [defineProp()](QuickJSContext.md#defineprop) - - [dispose()](QuickJSContext.md#dispose) - - [dump()](QuickJSContext.md#dump) - - [encodeBinaryJSON()](QuickJSContext.md#encodebinaryjson) - - [eq()](QuickJSContext.md#eq) - - [evalCode()](QuickJSContext.md#evalcode) - - [fail()](QuickJSContext.md#fail) - - [getArrayBuffer()](QuickJSContext.md#getarraybuffer) - - [getBigInt()](QuickJSContext.md#getbigint) - - [getIterator()](QuickJSContext.md#getiterator) - - [getLength()](QuickJSContext.md#getlength) - - [getNumber()](QuickJSContext.md#getnumber) - - [getOwnPropertyNames()](QuickJSContext.md#getownpropertynames) - - [getPromiseState()](QuickJSContext.md#getpromisestate) - - [getProp()](QuickJSContext.md#getprop) - - [getString()](QuickJSContext.md#getstring) - - [getSymbol()](QuickJSContext.md#getsymbol) - - [getWellKnownSymbol()](QuickJSContext.md#getwellknownsymbol) - - [newArray()](QuickJSContext.md#newarray) - - [newArrayBuffer()](QuickJSContext.md#newarraybuffer) - - [newBigInt()](QuickJSContext.md#newbigint) - - [newError()](QuickJSContext.md#newerror) - - [newFunction()](QuickJSContext.md#newfunction) - - [newNumber()](QuickJSContext.md#newnumber) - - [newObject()](QuickJSContext.md#newobject) - - [newPromise()](QuickJSContext.md#newpromise) - - [newString()](QuickJSContext.md#newstring) - - [newSymbolFor()](QuickJSContext.md#newsymbolfor) - - [newUniqueSymbol()](QuickJSContext.md#newuniquesymbol) - - [resolvePromise()](QuickJSContext.md#resolvepromise) - - [sameValue()](QuickJSContext.md#samevalue) - - [sameValueZero()](QuickJSContext.md#samevaluezero) - - [setProp()](QuickJSContext.md#setprop) - - [success()](QuickJSContext.md#success) - - [throw()](QuickJSContext.md#throw) - - [typeof()](QuickJSContext.md#typeof) - - [unwrapResult()](QuickJSContext.md#unwrapresult) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`LowLevelJavascriptVm`](../interfaces/LowLevelJavascriptVm.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new QuickJSContext(args) - -> **new QuickJSContext**(`args`): [`QuickJSContext`](QuickJSContext.md) - -Use [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext) or [QuickJSWASMModule#newContext](QuickJSWASMModule.md#newcontext) -to create a new QuickJSContext. - -#### Parameters - -• **args**: `Object` - -• **args\.callbacks**: `QuickJSModuleCallbacks` - -• **args\.ctx**: [`Lifetime`](Lifetime.md)\<[`JSContextPointer`](../exports.md#jscontextpointer), `never`, `never`\> - -• **args\.ffi**: [`EitherFFI`](../exports.md#eitherffi) - -• **args\.module**: [`EitherModule`](../exports.md#eithermodule) - -• **args\.ownedLifetimes?**: [`Disposable`](../interfaces/Disposable.md)[] - -• **args\.rt**: [`Lifetime`](Lifetime.md)\<[`JSRuntimePointer`](../exports.md#jsruntimepointer), `never`, `never`\> - -• **args\.runtime**: [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:224](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L224) - -## Properties - -### runtime - -> **`readonly`** **runtime**: [`QuickJSRuntime`](QuickJSRuntime.md) - -The runtime that created this context. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:186](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L186) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSContext.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L255) - -*** - -### false - -> **`get`** **false**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:313](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L313) - -*** - -### global - -> **`get`** **global**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects). -A handle to the global object inside the interpreter. -You can set properties to create global variables. - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:328](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L328) - -*** - -### null - -> **`get`** **null**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:287](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L287) - -*** - -### true - -> **`get`** **true**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:300](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L300) - -*** - -### undefined - -> **`get`** **undefined**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:274](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L274) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten-core.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### callFunction() - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, `args`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -[`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) or -[`func.apply(thisVal, args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply). -Call a JSValue as a function. - -See [unwrapResult](QuickJSContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSContext.md#resolvepromise) to convert it to a native promise and -[runtime](QuickJSContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args?**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -Example: - -```typescript -using parseIntHandle = context.getProp(global, "parseInt") -using stringHandle = context.newString("42") -using resultHandle = context.callFunction(parseIntHandle, context.undefined, stringHandle).unwrap() -console.log(context.dump(resultHandle)) // 42 -``` - -##### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.callFunction`](../interfaces/LowLevelJavascriptVm.md#callfunction) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1059](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1059) - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, ...`args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• ...**args**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Implementation of - -`LowLevelJavascriptVm.callFunction` - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1064](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1064) - -*** - -### callMethod() - -> **callMethod**(`thisHandle`, `key`, `args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -`handle[key](...args)` - -Call a method on a JSValue. This is a convenience method that calls [getProp](QuickJSContext.md#getprop) and [callFunction](QuickJSContext.md#callfunction). - -#### Parameters - -• **thisHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -• **args**: [`QuickJSHandle`](../exports.md#quickjshandle)[]= `[]` - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1113) - -*** - -### decodeBinaryJSON() - -> **decodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs Handle of the given QuickJS Object in binary form - -```ts -// imagine receiving data from another via IPC -socket.on("data", chunk => { - context.newArrayBuffer(chunk) - ?.consume(handle => context.decodeBinaryJSON(handle)) - ?.consume(handle => console.log(context.dump(handle))) -}) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1431](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1431) - -*** - -### defineProp() - -> **defineProp**(`handle`, `key`, `descriptor`): `void` - -[`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **descriptor**: [`VmPropertyDescriptor`](../interfaces/VmPropertyDescriptor.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.defineProp`](../interfaces/LowLevelJavascriptVm.md#defineprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1000](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1000) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of this VM's underlying resources. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Throws - -Calling this method without disposing of all created handles -will result in an error. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:265](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L265) - -*** - -### dump() - -> **dump**(`handle`): `any` - -Dump a JSValue to Javascript in a best-effort fashion. -If the value is a promise, dumps the promise's state. -Returns `handle.toString()` if it cannot be serialized to JSON. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`any` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1234](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1234) - -*** - -### encodeBinaryJSON() - -> **encodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs QuickJS Objects in binary form - -**WARNING**: QuickJS's binary JSON doesn't have a standard so expect it to change between version - -```ts -// imagine sending data to another via IPC -let dataLifetime = context.newString("This is an example") - ?.consume(handle => context.encodeBinaryJSON(handle)) - ?.consume(handle => context.getArrayBuffer(handle)) -socket.write(dataLifetime?.value) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1414](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1414) - -*** - -### eq() - -> **eq**(`handle`, `other`): `boolean` - -`handle === other` - IsStrictlyEqual. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:811](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L811) - -*** - -### evalCode() - -> **evalCode**(`code`, `filename`, `options`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description). - -Evaluates `code`, as though it's in a file named `filename`, with options `options`. - -- When `options.type` is `"global"`, the code is evaluated in the global - scope of the QuickJSContext, and the return value is the result of the last - expression. -- When `options.type` is `"module"`, the code is evaluated is a module scope. - It may use `import` and `export` if [runtime](QuickJSContext.md#runtime).[QuickJSRuntime#setModuleLoader](QuickJSRuntime.md#setmoduleloader) was called. - It may use top-level await if supported by the underlying QuickJS library. - The return value is the module's exports, or a promise for the module's exports. -- When `options.type` is unset, the code is evaluated as a module if it - contains an `import` or `export` statement, otherwise it is evaluated in - the global scope. - -When working with async code, you many need to call [runtime](QuickJSContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) -to execute callbacks pending after synchronous evaluation returns. - -See [unwrapResult](QuickJSContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSContext.md#resolvepromise) to convert it to a native promise and -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -*Note*: to protect against infinite loops, provide an interrupt handler to -[QuickJSRuntime#setInterruptHandler](QuickJSRuntime.md#setinterrupthandler). You can use [shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline) to -create a time-based deadline. - -#### Parameters - -• **code**: `string` - -• **filename**: `string`= `"eval.js"` - -• **options?**: `number` \| [`ContextEvalOptions`](../interfaces/ContextEvalOptions.md) - -If no options are passed, a heuristic will be used to detect if `code` is -an ES module. - -See [EvalFlags](../exports.md#evalflags) for number semantics. - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -The last statement's value. If the code threw synchronously, -`result.error` will be a handle to the exception. If execution was -interrupted, the error will have name `InternalError` and message -`interrupted`. - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.evalCode`](../interfaces/LowLevelJavascriptVm.md#evalcode) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1156](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1156) - -*** - -### fail() - -> **`protected`** **fail**(`error`): [`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Parameters - -• **error**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1440](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1440) - -*** - -### getArrayBuffer() - -> **getArrayBuffer**(`handle`): [`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -Coverts `handle` to a JavaScript ArrayBuffer - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:690](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L690) - -*** - -### getBigInt() - -> **getBigInt**(`handle`): `bigint` - -Converts `handle` to a Javascript bigint. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`bigint` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:681](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L681) - -*** - -### getIterator() - -> **getIterator**(`iterableHandle`): `QuickJSContextResult`\<`QuickJSIterator`\> - -`handle[Symbol.iterator]()`. See [QuickJSIterator]([object Object]). -Returns a host iterator that wraps and proxies calls to a guest iterator handle. -Each step of the iteration returns a result, either an error or a handle to the next value. -Once the iterator is done, the handle is automatically disposed, and the iterator -is considered done if the handle is disposed. - -```typescript -for (using entriesHandle of context.getIterator(mapHandle).unwrap()) { - using keyHandle = context.getProp(entriesHandle, 0) - using valueHandle = context.getProp(entriesHandle, 1) - console.log(context.dump(keyHandle), '->', context.dump(valueHandle)) -} -``` - -#### Parameters - -• **iterableHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`QuickJSContextResult`\<`QuickJSIterator`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:960](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L960) - -*** - -### getLength() - -> **getLength**(`handle`): `undefined` \| `number` - -`handle.length` as a host number. - -Example use: -```typescript -const length = context.getLength(arrayHandle) ?? 0 -for (let i = 0; i < length; i++) { - using value = context.getProp(arrayHandle, i) - console.log(`array[${i}] =`, context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`undefined` \| `number` - -a number if the handle has a numeric length property, otherwise `undefined`. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:870](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L870) - -*** - -### getNumber() - -> **getNumber**(`handle`): `number` - -Converts `handle` into a Javascript number. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`number` - -`NaN` on error, otherwise a `number`. - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.getNumber`](../interfaces/LowLevelJavascriptVm.md#getnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:652](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L652) - -*** - -### getOwnPropertyNames() - -> **getOwnPropertyNames**(`handle`, `options`): `QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Object.getOwnPropertyNames(handle)`. -Similar to the [standard semantics](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames), -but with extra, non-standard options for: - -- fetching array indexes as numbers (`numbers: true`) -- including symbols (`symbols: true`) -- only iterating over enumerable properties (`onlyEnumerable: true`) - -The default behavior is to emulate the standard: -```typescript -context.getOwnPropertyNames(handle, { strings: true, numbersAsStrings: true }) -``` - -Note when passing an explicit options object, you must set at least one -option, and `strings` are not included unless specified. - -Example use: -```typescript -for (using prop of context.getOwnPropertyNames(objectHandle).unwrap()) { - using value = context.getProp(handle, prop) - console.log(context.dump(prop), '->', context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **options**: `GetOwnPropertyNamesOptions`= `undefined` - -#### Returns - -`QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -an an array of handles of the property names. The array itself is disposable for your convenience. - -#### Throws - -QuickJSEmptyGetOwnPropertyNames if no options are set. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:907](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L907) - -*** - -### getPromiseState() - -> **getPromiseState**(`handle`): [`JSPromiseState`](../exports.md#jspromisestate) - -Get the current state of a QuickJS promise, see [JSPromiseState](../exports.md#jspromisestate) for the possible states. -This can be used to expect a promise to be fulfilled when combined with [unwrapResult](QuickJSContext.md#unwrapresult): - -```typescript -const promiseHandle = context.evalCode(`Promise.resolve(42)`); -const resultHandle = context.unwrapResult( - context.getPromiseState(promiseHandle) -); -context.getNumber(resultHandle) === 42; // true -resultHandle.dispose(); -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSPromiseState`](../exports.md#jspromisestate) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:715](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L715) - -*** - -### getProp() - -> **getProp**(`handle`, `key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -`handle[key]`. -Get a property from a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string (which will be converted automatically). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.getProp`](../interfaces/LowLevelJavascriptVm.md#getprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:840](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L840) - -*** - -### getString() - -> **getString**(`handle`): `string` - -Converts `handle` to a Javascript string. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.getString`](../interfaces/LowLevelJavascriptVm.md#getstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:660](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L660) - -*** - -### getSymbol() - -> **getSymbol**(`handle`): `symbol` - -Converts `handle` into a Javascript symbol. If the symbol is in the global -registry in the guest, it will be created with Symbol.for on the host. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`symbol` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:669](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L669) - -*** - -### getWellKnownSymbol() - -> **getWellKnownSymbol**(`name`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Access a well-known symbol that is a property of the global Symbol object, like `Symbol.iterator`. - -#### Parameters - -• **name**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:388](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L388) - -*** - -### newArray() - -> **newArray**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -`[]`. -Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:430](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L430) - -*** - -### newArrayBuffer() - -> **newArrayBuffer**(`buffer`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a new QuickJS [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). - -#### Parameters - -• **buffer**: `ArrayBufferLike` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:438](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L438) - -*** - -### newBigInt() - -> **newBigInt**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value. - -#### Parameters - -• **num**: `bigint` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:396](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L396) - -*** - -### newError() - -#### newError(error) - -> **newError**(`error`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **error**: `Object` - -• **error\.message**: `string` - -• **error\.name**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:607](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L607) - -#### newError(message) - -> **newError**(`message`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **message**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:608](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L608) - -#### newError(undefined) - -> **newError**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:609](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L609) - -*** - -### newFunction() - -> **newFunction**(`name`, `fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Convert a Javascript function into a QuickJS function value. -See [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) for more details. - -A [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) should not free its arguments or its return -value. A VmFunctionImplementation should also not retain any references to -its return value. - -The function argument handles are automatically disposed when the function -returns. If you want to retain a handle beyond the end of the function, you -can call [Lifetime#dup](Lifetime.md#dup) to create a copy of the handle that you own -and must dispose manually. For example, you need to use this API and do some -extra book keeping to implement `setInterval`: - -```typescript -// This won't work because `callbackHandle` expires when the function returns, -// so when the interval fires, the callback handle is already disposed. -const WRONG_setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - const delayMs = context.getNumber(delayHandle) - const intervalId = globalThis.setInterval(() => { - // ERROR: callbackHandle is already disposed here. - context.callFunction(callbackHandle) - }, intervalId) - return context.newNumber(intervalId) -}) - -// This works since we dup the callbackHandle. -// We just need to make sure we clean it up manually when the interval is cleared -- -// so we need to keep track of those interval IDs, and make sure we clean all -// of them up when we dispose the owning context. - -const setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - // Ensure the guest can't overload us by scheduling too many intervals. - if (QuickJSInterval.INTERVALS.size > 100) { - throw new Error(`Too many intervals scheduled already`) - } - - const delayMs = context.getNumber(delayHandle) - const longLivedCallbackHandle = callbackHandle.dup() - const intervalId = globalThis.setInterval(() => { - context.callFunction(longLivedCallbackHandle) - }, intervalId) - const disposable = new QuickJSInterval(longLivedCallbackHandle, context, intervalId) - QuickJSInterval.INTERVALS.set(intervalId, disposable) - return context.newNumber(intervalId) -}) - -const clearIntervalHandle = context.newFunction("clearInterval", (intervalIdHandle) => { - const intervalId = context.getNumber(intervalIdHandle) - const disposable = QuickJSInterval.INTERVALS.get(intervalId) - disposable?.dispose() -}) - -class QuickJSInterval extends UsingDisposable { - static INTERVALS = new Map() - - static disposeContext(context: QuickJSContext) { - for (const interval of QuickJSInterval.INTERVALS.values()) { - if (interval.context === context) { - interval.dispose() - } - } - } - - constructor( - public fnHandle: QuickJSHandle, - public context: QuickJSContext, - public intervalId: number, - ) { - super() - } - - dispose() { - globalThis.clearInterval(this.intervalId) - this.fnHandle.dispose() - QuickJSInterval.INTERVALS.delete(this.fnHandle.value) - } - - get alive() { - return this.fnHandle.alive - } -} -``` - -To implement an async function, create a promise with [newPromise](QuickJSContext.md#newpromise), then -return the deferred promise handle from `deferred.handle` from your -function implementation: - -```typescript -const deferred = vm.newPromise() -someNativeAsyncFunction().then(deferred.resolve) -return deferred.handle -``` - -#### Parameters - -• **name**: `string` - -• **fn**: [`VmFunctionImplementation`](../exports.md#vmfunctionimplementationvmhandle)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.newFunction`](../interfaces/LowLevelJavascriptVm.md#newfunction) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:601](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L601) - -*** - -### newNumber() - -> **newNumber**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Converts a Javascript number into a QuickJS value. - -#### Parameters - -• **num**: `number` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.newNumber`](../interfaces/LowLevelJavascriptVm.md#newnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:347](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L347) - -*** - -### newObject() - -> **newObject**(`prototype`?): [`QuickJSHandle`](../exports.md#quickjshandle) - -`{}`. -Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer). - -#### Parameters - -• **prototype?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.newObject`](../interfaces/LowLevelJavascriptVm.md#newobject) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L416) - -*** - -### newPromise() - -#### newPromise(undefined) - -> **newPromise**(): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md). Use `deferred.resolve(handle)` and -`deferred.reject(handle)` to fulfill the promise handle available at `deferred.handle`. -Note that you are responsible for calling `deferred.dispose()` to free the underlying -resources; see the documentation on [QuickJSDeferredPromise](QuickJSDeferredPromise.md) for details. - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:451](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L451) - -#### newPromise(promise) - -> **newPromise**(`promise`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md) that resolves when the -given native Promise`` resolves. Rejections will be coerced -to a QuickJS error. - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **promise**: `Promise`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:459](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L459) - -#### newPromise(newPromiseFn) - -> **newPromise**(`newPromiseFn`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Construct a new native Promise`` , and then convert it into a -[QuickJSDeferredPromise](QuickJSDeferredPromise.md). - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **newPromiseFn**: [`PromiseExecutor`](../exports.md#promiseexecutorresolvet-rejectt)\<[`QuickJSHandle`](../exports.md#quickjshandle), `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:466](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L466) - -*** - -### newString() - -> **newString**(`str`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value. - -#### Parameters - -• **str**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.newString`](../interfaces/LowLevelJavascriptVm.md#newstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:354](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L354) - -*** - -### newSymbolFor() - -> **newSymbolFor**(`key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key. -All symbols created with the same key will be the same value. - -#### Parameters - -• **key**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:377](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L377) - -*** - -### newUniqueSymbol() - -> **newUniqueSymbol**(`description`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value. -No two symbols created with this function will be the same value. - -#### Parameters - -• **description**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:365](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L365) - -*** - -### resolvePromise() - -> **resolvePromise**(`promiseLikeHandle`): `Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Promise.resolve(value)`. -Convert a handle containing a Promise-like value inside the VM into an -actual promise on the host. - -#### Parameters - -• **promiseLikeHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -A handle to a Promise-like value with a `.then(onSuccess, onError)` method. - -#### Returns - -`Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -#### Remarks - -You may need to call [runtime](QuickJSContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to ensure that the promise is resolved. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:754](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L754) - -*** - -### sameValue() - -> **sameValue**(`handle`, `other`): `boolean` - -`Object.is(a, b)` -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:819](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L819) - -*** - -### sameValueZero() - -> **sameValueZero**(`handle`, `other`): `boolean` - -SameValueZero comparison. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:827](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L827) - -*** - -### setProp() - -> **setProp**(`handle`, `key`, `value`): `void` - -`handle[key] = value`. -Set a property on a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **value**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.setProp`](../interfaces/LowLevelJavascriptVm.md#setprop) - -#### Remarks - -Note that the QuickJS authors recommend using [defineProp](QuickJSContext.md#defineprop) to define new -properties. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:985](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L985) - -*** - -### success() - -> **`protected`** **success**\<`S`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1436](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1436) - -*** - -### throw() - -> **throw**(`error`): [`JSValuePointer`](../exports.md#jsvaluepointer) - -Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes. - -#### Parameters - -• **error**: `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1193](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1193) - -*** - -### typeof() - -> **typeof**(`handle`): `string` - -`typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Implementation of - -[`quickjs-emscripten-core.LowLevelJavascriptVm.typeof`](../interfaces/LowLevelJavascriptVm.md#typeof) - -#### Remarks - -Does not support BigInt values correctly. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:643](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L643) - -*** - -### unwrapResult() - -> **unwrapResult**\<`T`\>(`result`): `T` - -Unwrap a SuccessOrFail result such as a [VmCallResult](../exports.md#vmcallresultvmhandle) or a -[ExecutePendingJobsResult](../exports.md#executependingjobsresult), where the fail branch contains a handle to a QuickJS error value. -If the result is a success, returns the value. -If the result is an error, converts the error to a native object and throws the error. - -#### Type parameters - -• **T** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`T`, [`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1277](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1277) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/QuickJSDeferredPromise.md b/doc/quickjs-emscripten-core/classes/QuickJSDeferredPromise.md deleted file mode 100644 index 6dea485c8..000000000 --- a/doc/quickjs-emscripten-core/classes/QuickJSDeferredPromise.md +++ /dev/null @@ -1,253 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSDeferredPromise - -# Class: QuickJSDeferredPromise - -QuickJSDeferredPromise wraps a QuickJS promise [handle](QuickJSDeferredPromise.md#handle) and allows -[resolve](QuickJSDeferredPromise.md#resolve)ing or [reject](QuickJSDeferredPromise.md#reject)ing that promise. Use it to bridge asynchronous -code on the host to APIs inside a QuickJSContext. - -Managing the lifetime of promises is tricky. There are three -[QuickJSHandle](../exports.md#quickjshandle)s inside of each deferred promise object: (1) the promise -itself, (2) the `resolve` callback, and (3) the `reject` callback. - -- If the promise will be fulfilled before the end of it's [owner](QuickJSDeferredPromise.md#owner)'s lifetime, - the only cleanup necessary is `deferred.handle.dispose()`, because - calling [resolve](QuickJSDeferredPromise.md#resolve) or [reject](QuickJSDeferredPromise.md#reject) will dispose of both callbacks automatically. - -- As the return value of a [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle), return [handle](QuickJSDeferredPromise.md#handle), - and ensure that either [resolve](QuickJSDeferredPromise.md#resolve) or [reject](QuickJSDeferredPromise.md#reject) will be called. No other - clean-up is necessary. - -- In other cases, call [dispose](QuickJSDeferredPromise.md#dispose-1), which will dispose [handle](QuickJSDeferredPromise.md#handle) as well as the - QuickJS handles that back [resolve](QuickJSDeferredPromise.md#resolve) and [reject](QuickJSDeferredPromise.md#reject). For this object, - [dispose](QuickJSDeferredPromise.md#dispose-1) is idempotent. - -## Contents - -- [Extends](QuickJSDeferredPromise.md#extends) -- [Implements](QuickJSDeferredPromise.md#implements) -- [Constructors](QuickJSDeferredPromise.md#constructors) - - [new QuickJSDeferredPromise(args)](QuickJSDeferredPromise.md#new-quickjsdeferredpromiseargs) -- [Properties](QuickJSDeferredPromise.md#properties) - - [context](QuickJSDeferredPromise.md#context) - - [handle](QuickJSDeferredPromise.md#handle) - - [owner](QuickJSDeferredPromise.md#owner) - - [settled](QuickJSDeferredPromise.md#settled) -- [Accessors](QuickJSDeferredPromise.md#accessors) - - [alive](QuickJSDeferredPromise.md#alive) -- [Methods](QuickJSDeferredPromise.md#methods) - - [`[dispose]`()](QuickJSDeferredPromise.md#dispose) - - [dispose()](QuickJSDeferredPromise.md#dispose) - - [reject()](QuickJSDeferredPromise.md#reject) - - [resolve()](QuickJSDeferredPromise.md#resolve) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new QuickJSDeferredPromise(args) - -> **new QuickJSDeferredPromise**(`args`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Use [QuickJSContext#newPromise](QuickJSContext.md#newpromise) to create a new promise instead of calling -this constructor directly. - -#### Parameters - -• **args**: `Object` - -• **args\.context**: [`QuickJSContext`](QuickJSContext.md) - -• **args\.promiseHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args\.rejectHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args\.resolveHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:95](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L95) - -## Properties - -### context - -> **context**: [`QuickJSContext`](QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L73) - -*** - -### handle - -> **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -A handle of the Promise instance inside the QuickJSContext. -You must dispose [handle](QuickJSDeferredPromise.md#handle) or the entire QuickJSDeferredPromise once you -are finished with it. - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:80](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L80) - -*** - -### owner - -> **owner**: [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L72) - -*** - -### settled - -> **settled**: `Promise`\<`void`\> - -A native promise that will resolve once this deferred is settled. - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L85) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSDeferredPromise.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L166) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten-core.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:170](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L170) - -*** - -### reject() - -> **reject**(`value`?): `void` - -Reject [handle](QuickJSDeferredPromise.md#handle) with the given value, if any. -Calling this method after calling [dispose](QuickJSDeferredPromise.md#dispose-1) is a no-op. - -Note that after rejecting a promise, you may need to call -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to propagate the result to the promise's -callbacks. - -#### Parameters - -• **value?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L147) - -*** - -### resolve() - -> **resolve**(`value`?): `void` - -Resolve [handle](QuickJSDeferredPromise.md#handle) with the given value, if any. -Calling this method after calling [dispose](QuickJSDeferredPromise.md#dispose-1) is a no-op. - -Note that after resolving a promise, you may need to call -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to propagate the result to the promise's -callbacks. - -#### Parameters - -• **value?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/QuickJSRuntime.md b/doc/quickjs-emscripten-core/classes/QuickJSRuntime.md deleted file mode 100644 index f8bf2eff6..000000000 --- a/doc/quickjs-emscripten-core/classes/QuickJSRuntime.md +++ /dev/null @@ -1,476 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSRuntime - -# Class: QuickJSRuntime - -A runtime represents a Javascript runtime corresponding to an object heap. -Several runtimes can exist at the same time but they cannot exchange objects. -Inside a given runtime, no multi-threading is supported. - -You can think of separate runtimes like different domains in a browser, and -the contexts within a runtime like the different windows open to the same -domain. - -Create a runtime via [QuickJSWASMModule.newRuntime](QuickJSWASMModule.md#newruntime). - -You should create separate runtime instances for untrusted code from -different sources for isolation. However, stronger isolation is also -available (at the cost of memory usage), by creating separate WebAssembly -modules to further isolate untrusted code. -See newQuickJSWASMModule. - -Implement memory and CPU constraints with [setInterruptHandler](QuickJSRuntime.md#setinterrupthandler) -(called regularly while the interpreter runs), [setMemoryLimit](QuickJSRuntime.md#setmemorylimit), and -[setMaxStackSize](QuickJSRuntime.md#setmaxstacksize). -Use [computeMemoryUsage](QuickJSRuntime.md#computememoryusage) or [dumpMemoryUsage](QuickJSRuntime.md#dumpmemoryusage) to guide memory limit -tuning. - -Configure ES module loading with [setModuleLoader](QuickJSRuntime.md#setmoduleloader). - -## Contents - -- [Extends](QuickJSRuntime.md#extends) -- [Implements](QuickJSRuntime.md#implements) -- [Properties](QuickJSRuntime.md#properties) - - [context](QuickJSRuntime.md#context) -- [Accessors](QuickJSRuntime.md#accessors) - - [alive](QuickJSRuntime.md#alive) -- [Methods](QuickJSRuntime.md#methods) - - [`[dispose]`()](QuickJSRuntime.md#dispose) - - [assertOwned()](QuickJSRuntime.md#assertowned) - - [computeMemoryUsage()](QuickJSRuntime.md#computememoryusage) - - [debugLog()](QuickJSRuntime.md#debuglog) - - [dispose()](QuickJSRuntime.md#dispose) - - [dumpMemoryUsage()](QuickJSRuntime.md#dumpmemoryusage) - - [executePendingJobs()](QuickJSRuntime.md#executependingjobs) - - [hasPendingJob()](QuickJSRuntime.md#haspendingjob) - - [isDebugMode()](QuickJSRuntime.md#isdebugmode) - - [newContext()](QuickJSRuntime.md#newcontext) - - [removeInterruptHandler()](QuickJSRuntime.md#removeinterrupthandler) - - [removeModuleLoader()](QuickJSRuntime.md#removemoduleloader) - - [setDebugMode()](QuickJSRuntime.md#setdebugmode) - - [setInterruptHandler()](QuickJSRuntime.md#setinterrupthandler) - - [setMaxStackSize()](QuickJSRuntime.md#setmaxstacksize) - - [setMemoryLimit()](QuickJSRuntime.md#setmemorylimit) - - [setModuleLoader()](QuickJSRuntime.md#setmoduleloader) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Properties - -### context - -> **context**: `undefined` \| [`QuickJSContext`](QuickJSContext.md) - -If this runtime was created as as part of a context, points to the context -associated with the runtime. - -If this runtime was created stand-alone, this may or may not contain a context. -A context here may be allocated if one is needed by the runtime, eg for [computeMemoryUsage](QuickJSRuntime.md#computememoryusage). - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:78](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L78) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSRuntime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:125](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L125) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten-core.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### assertOwned() - -> **assertOwned**(`handle`): `void` - -Assert that `handle` is owned by this runtime. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Throws - -QuickJSWrongOwner if owned by a different runtime. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:327](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L327) - -*** - -### computeMemoryUsage() - -> **computeMemoryUsage**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -Compute memory usage for this runtime. Returns the result as a handle to a -JSValue object. Use [QuickJSContext#dump](QuickJSContext.md#dump) to convert to a native object. -Calling this method will allocate more memory inside the runtime. The information -is accurate as of just before the call to `computeMemoryUsage`. -For a human-digestible representation, see [dumpMemoryUsage](QuickJSRuntime.md#dumpmemoryusage). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:296](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L296) - -*** - -### debugLog() - -> **debugLog**(...`msg`): `void` - -In debug mode, log the result of calling `msg()`. - -We take a function instead of a log message to avoid expensive string -manipulation if debug logging is disabled. - -#### Parameters - -• ...**msg**: `unknown`[] - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:363](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L363) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:129](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L129) - -*** - -### dumpMemoryUsage() - -> **dumpMemoryUsage**(): `string` - -#### Returns - -`string` - -a human-readable description of memory usage in this runtime. -For programmatic access to this information, see [computeMemoryUsage](QuickJSRuntime.md#computememoryusage). - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:307](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L307) - -*** - -### executePendingJobs() - -> **executePendingJobs**(`maxJobsToExecute`): [`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -Execute pendingJobs on the runtime until `maxJobsToExecute` jobs are -executed (default all pendingJobs), the queue is exhausted, or the runtime -encounters an exception. - -In QuickJS, promises and async functions *inside the runtime* create -pendingJobs. These do not execute immediately and need to triggered to run. - -#### Parameters - -• **maxJobsToExecute**: `number` \| `void`= `-1` - -When negative, run all pending jobs. Otherwise execute -at most `maxJobsToExecute` before returning. - -#### Returns - -[`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -On success, the number of executed jobs. On error, the exception -that stopped execution, and the context it occurred in. Note that -executePendingJobs will not normally return errors thrown inside async -functions or rejected promises. Those errors are available by calling -[QuickJSContext#resolvePromise](QuickJSContext.md#resolvepromise) on the promise handle returned by the async function. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:243](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L243) - -*** - -### hasPendingJob() - -> **hasPendingJob**(): `boolean` - -In QuickJS, promises and async functions create pendingJobs. These do not execute -immediately and need to be run by calling [executePendingJobs](QuickJSRuntime.md#executependingjobs). - -#### Returns - -`boolean` - -true if there is at least one pendingJob queued up. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:194](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L194) - -*** - -### isDebugMode() - -> **isDebugMode**(): `boolean` - -#### Returns - -`boolean` - -true if debug logging is enabled - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:353](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L353) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSContext`](QuickJSContext.md) - -Create a new context within this runtime. Contexts have isolated globals, -but you can explicitly share objects between contexts with the same -runtime. - -You should dispose a created context before disposing this runtime. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:140](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L140) - -*** - -### removeInterruptHandler() - -> **removeInterruptHandler**(): `void` - -Remove the interrupt handler, if any. -See [setInterruptHandler](QuickJSRuntime.md#setinterrupthandler). - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:219](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L219) - -*** - -### removeModuleLoader() - -> **removeModuleLoader**(): `void` - -Remove the the loader set by [setModuleLoader](QuickJSRuntime.md#setmoduleloader). This disables module loading. - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:181](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L181) - -*** - -### setDebugMode() - -> **setDebugMode**(`enabled`): `void` - -Enable or disable debug logging. - -If this module is a DEBUG variant, more logs will be printed from the C -code. - -#### Parameters - -• **enabled**: `boolean` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:343](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L343) - -*** - -### setInterruptHandler() - -> **setInterruptHandler**(`cb`): `void` - -Set a callback which is regularly called by the QuickJS engine when it is -executing code. This callback can be used to implement an execution -timeout. - -The interrupt handler can be removed with [removeInterruptHandler](QuickJSRuntime.md#removeinterrupthandler). - -#### Parameters - -• **cb**: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:207](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L207) - -*** - -### setMaxStackSize() - -> **setMaxStackSize**(`stackSize`): `void` - -Set the max stack size for this runtime, in bytes. -To remove the limit, set to `0`. - -#### Parameters - -• **stackSize**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:315](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L315) - -*** - -### setMemoryLimit() - -> **setMemoryLimit**(`limitBytes`): `void` - -Set the max memory this runtime can allocate. -To remove the limit, set to `-1`. - -#### Parameters - -• **limitBytes**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:281](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L281) - -*** - -### setModuleLoader() - -> **setModuleLoader**(`moduleLoader`, `moduleNormalizer`?): `void` - -Set the loader for EcmaScript modules requested by any context in this -runtime. - -The loader can be removed with [removeModuleLoader](QuickJSRuntime.md#removemoduleloader). - -#### Parameters - -• **moduleLoader**: [`JSModuleLoader`](../interfaces/JSModuleLoader.md) - -• **moduleNormalizer?**: [`JSModuleNormalizer`](../interfaces/JSModuleNormalizer.md) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:172](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L172) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/QuickJSWASMModule.md b/doc/quickjs-emscripten-core/classes/QuickJSWASMModule.md deleted file mode 100644 index bd3c82cd1..000000000 --- a/doc/quickjs-emscripten-core/classes/QuickJSWASMModule.md +++ /dev/null @@ -1,152 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSWASMModule - -# Class: QuickJSWASMModule - -This class presents a Javascript interface to QuickJS, a Javascript interpreter -that supports EcmaScript 2020 (ES2020). - -It wraps a single WebAssembly module containing the QuickJS library and -associated helper C code. WebAssembly modules are completely isolated from -each other by the host's WebAssembly runtime. Separate WebAssembly modules -have the most isolation guarantees possible with this library. - -The simplest way to start running code is [evalCode](QuickJSWASMModule.md#evalcode). This shortcut -method will evaluate Javascript safely and return the result as a native -Javascript value. - -For more control over the execution environment, or to interact with values -inside QuickJS, create a context with [newContext](QuickJSWASMModule.md#newcontext) or a runtime with -[newRuntime](QuickJSWASMModule.md#newruntime). - -## Contents - -- [Extended By](QuickJSWASMModule.md#extended-by) -- [Methods](QuickJSWASMModule.md#methods) - - [evalCode()](QuickJSWASMModule.md#evalcode) - - [getWasmMemory()](QuickJSWASMModule.md#getwasmmemory) - - [newContext()](QuickJSWASMModule.md#newcontext) - - [newRuntime()](QuickJSWASMModule.md#newruntime) - -## Extended By - -- [`QuickJSAsyncWASMModule`](QuickJSAsyncWASMModule.md) - -## Methods - -### evalCode() - -> **evalCode**(`code`, `options`): `unknown` - -One-off evaluate code without needing to create a [QuickJSRuntime](QuickJSRuntime.md) or -[QuickJSContext](QuickJSContext.md) explicitly. - -To protect against infinite loops, use the `shouldInterrupt` option. The -[shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline) function will create a time-based deadline. - -If you need more control over how the code executes, create a -[QuickJSRuntime](QuickJSRuntime.md) (with [newRuntime](QuickJSWASMModule.md#newruntime)) or a [QuickJSContext](QuickJSContext.md) (with -[newContext](QuickJSWASMModule.md#newcontext) or [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext)), and use its -[QuickJSContext#evalCode](QuickJSContext.md#evalcode) method. - -Asynchronous callbacks may not run during the first call to `evalCode`. If -you need to work with async code inside QuickJS, create a runtime and use -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs). - -#### Parameters - -• **code**: `string` - -• **options**: [`ModuleEvalOptions`](../interfaces/ModuleEvalOptions.md)= `{}` - -#### Returns - -`unknown` - -The result is coerced to a native Javascript value using JSON -serialization, so properties and values unsupported by JSON will be dropped. - -#### Throws - -If `code` throws during evaluation, the exception will be -converted into a native Javascript value and thrown. - -#### Throws - -if `options.shouldInterrupt` interrupted execution, will throw a Error -with name `"InternalError"` and message `"interrupted"`. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:395](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L395) - -*** - -### getWasmMemory() - -> **getWasmMemory**(): `Memory` - -Retrieve the WebAssembly memory used by this QuickJS module. -Use this access very carefully - you are responsible for safe interaction with the memory. - -To supply a custom, pre-initialized memory to QuickJS, create a new variant -and provide the [CustomizeVariantOptions#wasmMemory](../interfaces/CustomizeVariantOptions.md#wasmmemory) option. - -#### Returns - -`Memory` - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:426](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L426) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSContext`](QuickJSContext.md) - -A simplified API to create a new [QuickJSRuntime](QuickJSRuntime.md) and a -[QuickJSContext](QuickJSContext.md) inside that runtime at the same time. The runtime will -be disposed when the context is disposed. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:360](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L360) - -*** - -### newRuntime() - -> **newRuntime**(`options`): [`QuickJSRuntime`](QuickJSRuntime.md) - -Create a runtime. -Use the runtime to set limits on CPU and memory usage and configure module -loading for one or more [QuickJSContext](QuickJSContext.md)s inside the runtime. - -#### Parameters - -• **options**: [`RuntimeOptions`](../interfaces/RuntimeOptions.md)= `{}` - -#### Returns - -[`QuickJSRuntime`](QuickJSRuntime.md) - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:333](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L333) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/Scope.md b/doc/quickjs-emscripten-core/classes/Scope.md deleted file mode 100644 index 34f5312a1..000000000 --- a/doc/quickjs-emscripten-core/classes/Scope.md +++ /dev/null @@ -1,227 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / Scope - -# Class: Scope - -Scope helps reduce the burden of manually tracking and disposing of -Lifetimes. See [withScope](Scope.md#withscope). and [withScopeAsync](Scope.md#withscopeasync). - -## Contents - -- [Extends](Scope.md#extends) -- [Implements](Scope.md#implements) -- [Constructors](Scope.md#constructors) - - [new Scope(undefined)](Scope.md#new-scopeundefined) -- [Accessors](Scope.md#accessors) - - [alive](Scope.md#alive) -- [Methods](Scope.md#methods) - - [`[dispose]`()](Scope.md#dispose) - - [dispose()](Scope.md#dispose) - - [manage()](Scope.md#manage) - - [withScope()](Scope.md#withscope) - - [withScopeAsync()](Scope.md#withscopeasync) - - [withScopeMaybeAsync()](Scope.md#withscopemaybeasync) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new Scope(undefined) - -> **new Scope**(): [`Scope`](Scope.md) - -#### Returns - -[`Scope`](Scope.md) - -#### Inherited from - -[`quickjs-emscripten-core.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](Scope.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:333](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L333) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten-core.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten-core.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:337](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L337) - -*** - -### manage() - -> **manage**\<`T`\>(`lifetime`): `T` - -Track `lifetime` so that it is disposed when this scope is disposed. - -#### Type parameters - -• **T** extends [`Disposable`](../interfaces/Disposable.md) - -#### Parameters - -• **lifetime**: `T` - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:328](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L328) - -*** - -### withScope() - -> **`static`** **withScope**\<`R`\>(`block`): `R` - -Run `block` with a new Scope instance that will be disposed after the block returns. -Inside `block`, call `scope.manage` on each lifetime you create to have the lifetime -automatically disposed after the block returns. - -#### Type parameters - -• **R** - -#### Parameters - -• **block**: (`scope`) => `R` - -#### Returns - -`R` - -#### Warning - -Do not use with async functions. Instead, use [withScopeAsync](Scope.md#withscopeasync). - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:273](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L273) - -*** - -### withScopeAsync() - -> **`static`** **withScopeAsync**\<`R`\>(`block`): `Promise`\<`R`\> - -Run `block` with a new Scope instance that will be disposed after the -block's returned promise settles. Inside `block`, call `scope.manage` on each -lifetime you create to have the lifetime automatically disposed after the -block returns. - -#### Type parameters - -• **R** - -#### Parameters - -• **block**: (`scope`) => `Promise`\<`R`\> - -#### Returns - -`Promise`\<`R`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:310](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L310) - -*** - -### withScopeMaybeAsync() - -> **`static`** **withScopeMaybeAsync**\<`Return`, `This`, `Yielded`\>(`_this`, `block`): `Return` \| `Promise`\<`Return`\> - -#### Type parameters - -• **Return** - -• **This** - -• **Yielded** - -#### Parameters - -• **\_this**: `This` - -• **block**: `MaybeAsyncBlock`\<`Return`, `This`, `Yielded`, [[`Scope`](Scope.md)]\> - -#### Returns - -`Return` \| `Promise`\<`Return`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:286](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L286) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/StaticLifetime.md b/doc/quickjs-emscripten-core/classes/StaticLifetime.md deleted file mode 100644 index 97d17214d..000000000 --- a/doc/quickjs-emscripten-core/classes/StaticLifetime.md +++ /dev/null @@ -1,463 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / StaticLifetime - -# Class: StaticLifetime\ - -A Lifetime that lives forever. Used for constants. - -## Contents - -- [Extends](StaticLifetime.md#extends) -- [Type parameters](StaticLifetime.md#type-parameters) -- [Constructors](StaticLifetime.md#constructors) - - [new StaticLifetime(value, owner)](StaticLifetime.md#new-staticlifetimevalue-owner) -- [Properties](StaticLifetime.md#properties) - - [\_alive](StaticLifetime.md#alive) - - [\_constructorStack](StaticLifetime.md#constructorstack) - - [\_owner?](StaticLifetime.md#owner) - - [\_value](StaticLifetime.md#value) - - [copier?](StaticLifetime.md#copier) - - [disposer?](StaticLifetime.md#disposer) -- [Accessors](StaticLifetime.md#accessors) - - [alive](StaticLifetime.md#alive) - - [dupable](StaticLifetime.md#dupable) - - [owner](StaticLifetime.md#owner) - - [value](StaticLifetime.md#value) -- [Methods](StaticLifetime.md#methods) - - [`[dispose]`()](StaticLifetime.md#dispose) - - [consume()](StaticLifetime.md#consume) - - [dispose()](StaticLifetime.md#dispose) - - [dup()](StaticLifetime.md#dup) - - [map()](StaticLifetime.md#map) - - [tap()](StaticLifetime.md#tap) - -## Extends - -- [`Lifetime`](Lifetime.md)\<`T`, `T`, `Owner`\> - -## Type parameters - -• **T** - -• **Owner** = `never` - -## Constructors - -### new StaticLifetime(value, owner) - -> **new StaticLifetime**\<`T`, `Owner`\>(`value`, `owner`?): [`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -#### Parameters - -• **value**: `T` - -• **owner?**: `Owner` - -#### Returns - -[`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten-core.Lifetime.constructor`](Lifetime.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:198](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L198) - -## Properties - -### \_alive - -> **`protected`** **\_alive**: `boolean` = `true` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._alive`](Lifetime.md#alive) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L72) - -*** - -### \_constructorStack - -> **`protected`** **\_constructorStack**: `undefined` \| `string` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._constructorStack`](Lifetime.md#constructorstack) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L73) - -*** - -### \_owner? - -> **`protected`** **`readonly`** **\_owner**?: `Owner` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._owner`](Lifetime.md#owner) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L87) - -*** - -### \_value - -> **`protected`** **`readonly`** **\_value**: `T` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._value`](Lifetime.md#value) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L84) - -*** - -### copier? - -> **`protected`** **`readonly`** **copier**?: (`value`) => `T` - -#### Parameters - -• **value**: `T` - -#### Returns - -`T` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime.copier`](Lifetime.md#copier) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L85) - -*** - -### disposer? - -> **`protected`** **`readonly`** **disposer**?: (`value`) => `void` - -#### Parameters - -• **value**: `T` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime.disposer`](Lifetime.md#disposer) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L86) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](StaticLifetime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L92) - -*** - -### dupable - -> **`get`** **dupable**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:203](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L203) - -*** - -### owner - -> **`get`** **owner**(): `undefined` \| `Owner` - -#### Returns - -`undefined` \| `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L107) - -*** - -### value - -> **`get`** **value**(): `T` - -The value this Lifetime protects. You must never retain the value - it -may become invalid, leading to memory errors. - -#### Throws - -If the lifetime has been [dispose](StaticLifetime.md#dispose-1)d already. - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:102](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L102) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime.[dispose]`](Lifetime.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### consume() - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, then dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:135](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L135) - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:138](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L138) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of [value](StaticLifetime.md#value-1) and perform cleanup. - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten-core.Lifetime.dispose`](Lifetime.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:213](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L213) - -*** - -### dup() - -> **dup**(): [`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -Create a new handle pointing to the same [value](StaticLifetime.md#value-1). - -#### Returns - -[`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten-core.Lifetime.dup`](Lifetime.md#dup) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:208](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L208) - -*** - -### map() - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, returning the result. -Does not dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L151) - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L152) - -*** - -### tap() - -#### tap(fn) - -> **tap**(`fn`): [`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -Call `fn` with this lifetime, then return `this`. Does not dispose the -lifetime. Useful for imperative operations within an expression, like when -you're building up objects, or to add logging in the middle of a call chain. - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -this - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L164) - -#### tap(fn) - -> **tap**(`fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:165](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L165) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/TestQuickJSWASMModule.md b/doc/quickjs-emscripten-core/classes/TestQuickJSWASMModule.md deleted file mode 100644 index 6f1eb6876..000000000 --- a/doc/quickjs-emscripten-core/classes/TestQuickJSWASMModule.md +++ /dev/null @@ -1,192 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / TestQuickJSWASMModule - -# Class: TestQuickJSWASMModule - -A test wrapper of [QuickJSWASMModule](QuickJSWASMModule.md) that keeps a reference to each -context or runtime created. - -Call [disposeAll](TestQuickJSWASMModule.md#disposeall) to reset these sets and calls `dispose` on any left alive -(which may throw an error). - -Call [assertNoMemoryAllocated](TestQuickJSWASMModule.md#assertnomemoryallocated) at the end of a test, when you expect that you've -freed all the memory you've ever allocated. - -## Contents - -- [Implements](TestQuickJSWASMModule.md#implements) -- [Constructors](TestQuickJSWASMModule.md#constructors) - - [new TestQuickJSWASMModule(parent)](TestQuickJSWASMModule.md#new-testquickjswasmmoduleparent) -- [Properties](TestQuickJSWASMModule.md#properties) - - [contexts](TestQuickJSWASMModule.md#contexts) - - [runtimes](TestQuickJSWASMModule.md#runtimes) -- [Methods](TestQuickJSWASMModule.md#methods) - - [assertNoMemoryAllocated()](TestQuickJSWASMModule.md#assertnomemoryallocated) - - [disposeAll()](TestQuickJSWASMModule.md#disposeall) - - [evalCode()](TestQuickJSWASMModule.md#evalcode) - - [getWasmMemory()](TestQuickJSWASMModule.md#getwasmmemory) - - [newContext()](TestQuickJSWASMModule.md#newcontext) - - [newRuntime()](TestQuickJSWASMModule.md#newruntime) - -## Implements - -- `Pick`\<[`QuickJSWASMModule`](QuickJSWASMModule.md), keyof [`QuickJSWASMModule`](QuickJSWASMModule.md)\> - -## Constructors - -### new TestQuickJSWASMModule(parent) - -> **new TestQuickJSWASMModule**(`parent`): [`TestQuickJSWASMModule`](TestQuickJSWASMModule.md) - -#### Parameters - -• **parent**: [`QuickJSWASMModule`](QuickJSWASMModule.md) - -#### Returns - -[`TestQuickJSWASMModule`](TestQuickJSWASMModule.md) - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:21](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L21) - -## Properties - -### contexts - -> **contexts**: `Set`\<[`QuickJSContext`](QuickJSContext.md)\> - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:19](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L19) - -*** - -### runtimes - -> **runtimes**: `Set`\<[`QuickJSRuntime`](QuickJSRuntime.md)\> - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:20](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L20) - -## Methods - -### assertNoMemoryAllocated() - -> **assertNoMemoryAllocated**(): `void` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:62](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L62) - -*** - -### disposeAll() - -> **disposeAll**(): `void` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L51) - -*** - -### evalCode() - -> **evalCode**(`code`, `options`?): `unknown` - -#### Parameters - -• **code**: `string` - -• **options?**: [`ModuleEvalOptions`](../interfaces/ModuleEvalOptions.md) - -#### Returns - -`unknown` - -#### Implementation of - -`Pick.evalCode` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L47) - -*** - -### getWasmMemory() - -> **getWasmMemory**(): `Memory` - -#### Returns - -`Memory` - -#### Implementation of - -`Pick.getWasmMemory` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:79](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L79) - -*** - -### newContext() - -> **newContext**(`options`?): [`QuickJSContext`](QuickJSContext.md) - -#### Parameters - -• **options?**: [`ContextOptions`](../interfaces/ContextOptions.md) - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Implementation of - -`Pick.newContext` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L35) - -*** - -### newRuntime() - -> **newRuntime**(`options`?): [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Parameters - -• **options?**: [`RuntimeOptions`](../interfaces/RuntimeOptions.md) - -#### Returns - -[`QuickJSRuntime`](QuickJSRuntime.md) - -#### Implementation of - -`Pick.newRuntime` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:23](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L23) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/UsingDisposable.md b/doc/quickjs-emscripten-core/classes/UsingDisposable.md deleted file mode 100644 index 6ac48e477..000000000 --- a/doc/quickjs-emscripten-core/classes/UsingDisposable.md +++ /dev/null @@ -1,101 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / UsingDisposable - -# Class: `abstract` UsingDisposable - -Base abstract class that helps implement [Disposable](../interfaces/Disposable.md) by providing a default implementation of [Symbol.dispose]([object Object]). - -## Contents - -- [Extended By](UsingDisposable.md#extended-by) -- [Implements](UsingDisposable.md#implements) -- [Constructors](UsingDisposable.md#constructors) - - [new UsingDisposable(undefined)](UsingDisposable.md#new-usingdisposableundefined) -- [Properties](UsingDisposable.md#properties) - - [`abstract` alive](UsingDisposable.md#abstract-alive) -- [Methods](UsingDisposable.md#methods) - - [`[dispose]`()](UsingDisposable.md#dispose) - - [`abstract` dispose()](UsingDisposable.md#abstract-dispose) - -## Extended By - -- [`QuickJSContext`](QuickJSContext.md) -- [`QuickJSRuntime`](QuickJSRuntime.md) -- [`Lifetime`](Lifetime.md) -- [`Scope`](Scope.md) -- [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new UsingDisposable(undefined) - -> **new UsingDisposable**(): [`UsingDisposable`](UsingDisposable.md) - -#### Returns - -[`UsingDisposable`](UsingDisposable.md) - -## Properties - -### `abstract` alive - -> **`abstract`** **`readonly`** **alive**: `boolean` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.alive`](../interfaces/Disposable.md#alive) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:39](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L39) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### `abstract` dispose() - -> **`abstract`** **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten-core.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L43) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/classes/WeakLifetime.md b/doc/quickjs-emscripten-core/classes/WeakLifetime.md deleted file mode 100644 index 089cf48fe..000000000 --- a/doc/quickjs-emscripten-core/classes/WeakLifetime.md +++ /dev/null @@ -1,473 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / WeakLifetime - -# Class: WeakLifetime\ - -A Lifetime that does not own its `value`. A WeakLifetime never calls its -`disposer` function, but can be `dup`ed to produce regular lifetimes that -do. - -Used for function arguments. - -## Contents - -- [Extends](WeakLifetime.md#extends) -- [Type parameters](WeakLifetime.md#type-parameters) -- [Constructors](WeakLifetime.md#constructors) - - [new WeakLifetime(value, copier, disposer, owner)](WeakLifetime.md#new-weaklifetimevalue-copier-disposer-owner) -- [Properties](WeakLifetime.md#properties) - - [\_alive](WeakLifetime.md#alive) - - [\_constructorStack](WeakLifetime.md#constructorstack) - - [\_owner?](WeakLifetime.md#owner) - - [\_value](WeakLifetime.md#value) - - [copier?](WeakLifetime.md#copier) - - [disposer?](WeakLifetime.md#disposer) -- [Accessors](WeakLifetime.md#accessors) - - [alive](WeakLifetime.md#alive) - - [dupable](WeakLifetime.md#dupable) - - [owner](WeakLifetime.md#owner) - - [value](WeakLifetime.md#value) -- [Methods](WeakLifetime.md#methods) - - [`[dispose]`()](WeakLifetime.md#dispose) - - [consume()](WeakLifetime.md#consume) - - [dispose()](WeakLifetime.md#dispose) - - [dup()](WeakLifetime.md#dup) - - [map()](WeakLifetime.md#map) - - [tap()](WeakLifetime.md#tap) - -## Extends - -- [`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -## Type parameters - -• **T** - -• **TCopy** = `never` - -• **Owner** = `never` - -## Constructors - -### new WeakLifetime(value, copier, disposer, owner) - -> **new WeakLifetime**\<`T`, `TCopy`, `Owner`\>(`value`, `copier`?, `disposer`?, `owner`?): [`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -#### Parameters - -• **value**: `T` - -• **copier?**: (`value`) => `TCopy` - -• **disposer?**: (`value`) => `void` - -• **owner?**: `Owner` - -#### Returns - -[`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten-core.Lifetime.constructor`](Lifetime.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:224](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L224) - -## Properties - -### \_alive - -> **`protected`** **\_alive**: `boolean` = `true` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._alive`](Lifetime.md#alive) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L72) - -*** - -### \_constructorStack - -> **`protected`** **\_constructorStack**: `undefined` \| `string` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._constructorStack`](Lifetime.md#constructorstack) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L73) - -*** - -### \_owner? - -> **`protected`** **`readonly`** **\_owner**?: `Owner` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._owner`](Lifetime.md#owner) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L87) - -*** - -### \_value - -> **`protected`** **`readonly`** **\_value**: `T` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime._value`](Lifetime.md#value) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L84) - -*** - -### copier? - -> **`protected`** **`readonly`** **copier**?: (`value`) => `TCopy` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`TCopy` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime.copier`](Lifetime.md#copier) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L85) - -*** - -### disposer? - -> **`protected`** **`readonly`** **disposer**?: (`value`) => `void` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime.disposer`](Lifetime.md#disposer) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L86) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](WeakLifetime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L92) - -*** - -### dupable - -> **`get`** **dupable**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L111) - -*** - -### owner - -> **`get`** **owner**(): `undefined` \| `Owner` - -#### Returns - -`undefined` \| `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L107) - -*** - -### value - -> **`get`** **value**(): `T` - -The value this Lifetime protects. You must never retain the value - it -may become invalid, leading to memory errors. - -#### Throws - -If the lifetime has been [dispose](WeakLifetime.md#dispose-1)d already. - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:102](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L102) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime.[dispose]`](Lifetime.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### consume() - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, then dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:135](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L135) - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:138](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L138) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of [value](WeakLifetime.md#value-1) and perform cleanup. - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten-core.Lifetime.dispose`](Lifetime.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:234](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L234) - -*** - -### dup() - -> **dup**(): [`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -Create a new handle pointing to the same [value](WeakLifetime.md#value-1). - -#### Returns - -[`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -#### Inherited from - -[`quickjs-emscripten-core.Lifetime.dup`](Lifetime.md#dup) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L118) - -*** - -### map() - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, returning the result. -Does not dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L151) - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L152) - -*** - -### tap() - -#### tap(fn) - -> **tap**(`fn`): [`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -Call `fn` with this lifetime, then return `this`. Does not dispose the -lifetime. Useful for imperative operations within an expression, like when -you're building up objects, or to add logging in the middle of a call chain. - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -this - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L164) - -#### tap(fn) - -> **tap**(`fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten-core.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:165](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L165) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/exports.md b/doc/quickjs-emscripten-core/exports.md deleted file mode 100644 index 51df2323f..000000000 --- a/doc/quickjs-emscripten-core/exports.md +++ /dev/null @@ -1,1433 +0,0 @@ -[quickjs-emscripten](../packages.md) • **quickjs-emscripten-core** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../packages.md) / quickjs-emscripten-core - -# quickjs-emscripten-core - -## Contents - -- [Namespaces](exports.md#namespaces) -- [Classes](exports.md#classes) -- [Interfaces](exports.md#interfaces) -- [Type Aliases](exports.md#type-aliases) - - [AsyncFunctionImplementation](exports.md#asyncfunctionimplementation) - - [BorrowedHeapCharPointer](exports.md#borrowedheapcharpointer) - - [DisposableArray\](exports.md#disposablearrayt) - - [DisposableResult\](exports.md#disposableresults-f) - - [EitherFFI](exports.md#eitherffi) - - [EitherModule](exports.md#eithermodule) - - [ExecutePendingJobsResult](exports.md#executependingjobsresult) - - [InterruptHandler](exports.md#interrupthandler) - - [Intrinsics](exports.md#intrinsics) - - [JSBorrowedCharPointer](exports.md#jsborrowedcharpointer) - - [JSContextPointer](exports.md#jscontextpointer) - - [JSContextPointerPointer](exports.md#jscontextpointerpointer) - - [JSModuleDefPointer](exports.md#jsmoduledefpointer) - - [JSModuleLoadFailure](exports.md#jsmoduleloadfailure) - - [JSModuleLoadResult](exports.md#jsmoduleloadresult) - - [JSModuleLoadSuccess](exports.md#jsmoduleloadsuccess) - - [JSModuleNormalizeFailure](exports.md#jsmodulenormalizefailure) - - [JSModuleNormalizeResult](exports.md#jsmodulenormalizeresult) - - [JSModuleNormalizeSuccess](exports.md#jsmodulenormalizesuccess) - - [JSPromiseState](exports.md#jspromisestate) - - [JSPromiseStateEnum](exports.md#jspromisestateenum) - - [JSRuntimePointer](exports.md#jsruntimepointer) - - [JSValue](exports.md#jsvalue) - - [JSValueConst](exports.md#jsvalueconst) - - [JSValueConstPointer](exports.md#jsvalueconstpointer) - - [JSValueConstPointerPointer](exports.md#jsvalueconstpointerpointer) - - [JSValuePointer](exports.md#jsvaluepointer) - - [JSValuePointerPointer](exports.md#jsvaluepointerpointer) - - [JSValuePointerPointerPointer](exports.md#jsvaluepointerpointerpointer) - - [JSVoidPointer](exports.md#jsvoidpointer) - - [OrLoader\](exports.md#orloadert) - - [OwnedHeapCharPointer](exports.md#ownedheapcharpointer) - - [PromiseExecutor\](exports.md#promiseexecutorresolvet-rejectt) - - [PromisedDefault\](exports.md#promiseddefaultt) - - [QTS\_C\_To\_HostCallbackFuncPointer](exports.md#qts-c-to-hostcallbackfuncpointer) - - [QTS\_C\_To\_HostInterruptFuncPointer](exports.md#qts-c-to-hostinterruptfuncpointer) - - [QTS\_C\_To\_HostLoadModuleFuncPointer](exports.md#qts-c-to-hostloadmodulefuncpointer) - - [QuickJSHandle](exports.md#quickjshandle) - - [QuickJSPropertyKey](exports.md#quickjspropertykey) - - [QuickJSVariant](exports.md#quickjsvariant) - - [StaticJSValue](exports.md#staticjsvalue) - - [SuccessOrFail\](exports.md#successorfails-f) - - [UInt32Pointer](exports.md#uint32pointer) - - [VmCallResult\](exports.md#vmcallresultvmhandle) - - [VmFunctionImplementation\](exports.md#vmfunctionimplementationvmhandle) -- [Variables](exports.md#variables) - - [DefaultIntrinsics](exports.md#defaultintrinsics) - - [DisposableResult](exports.md#disposableresult) - - [EvalFlags](exports.md#evalflags) - - [GetOwnPropertyNamesFlags](exports.md#getownpropertynamesflags) - - [IntrinsicsFlags](exports.md#intrinsicsflags) - - [IsEqualOp](exports.md#isequalop) - - [JSPromiseStateEnum](exports.md#jspromisestateenum-1) -- [Functions](exports.md#functions) - - [assertSync()](exports.md#assertsync) - - [createDisposableArray()](exports.md#createdisposablearray) - - [isFail()](exports.md#isfail) - - [isSuccess()](exports.md#issuccess) - - [memoizePromiseFactory()](exports.md#memoizepromisefactory) - - [newQuickJSAsyncWASMModuleFromVariant()](exports.md#newquickjsasyncwasmmodulefromvariant) - - [newQuickJSWASMModuleFromVariant()](exports.md#newquickjswasmmodulefromvariant) - - [newVariant()](exports.md#newvariant) - - [setDebugMode()](exports.md#setdebugmode) - - [shouldInterruptAfterDeadline()](exports.md#shouldinterruptafterdeadline) - -## Namespaces - -- [errors](namespaces/errors/README.md) - -## Classes - -- [DisposableFail](classes/DisposableFail.md) -- [DisposableSuccess](classes/DisposableSuccess.md) -- [Lifetime](classes/Lifetime.md) -- [QuickJSAsyncContext](classes/QuickJSAsyncContext.md) -- [QuickJSAsyncRuntime](classes/QuickJSAsyncRuntime.md) -- [QuickJSAsyncWASMModule](classes/QuickJSAsyncWASMModule.md) -- [QuickJSContext](classes/QuickJSContext.md) -- [QuickJSDeferredPromise](classes/QuickJSDeferredPromise.md) -- [QuickJSRuntime](classes/QuickJSRuntime.md) -- [QuickJSWASMModule](classes/QuickJSWASMModule.md) -- [Scope](classes/Scope.md) -- [StaticLifetime](classes/StaticLifetime.md) -- [TestQuickJSWASMModule](classes/TestQuickJSWASMModule.md) -- [UsingDisposable](classes/UsingDisposable.md) -- [WeakLifetime](classes/WeakLifetime.md) - -## Interfaces - -- [AsyncRuntimeOptions](interfaces/AsyncRuntimeOptions.md) -- [ContextEvalOptions](interfaces/ContextEvalOptions.md) -- [ContextOptions](interfaces/ContextOptions.md) -- [CustomizeVariantOptions](interfaces/CustomizeVariantOptions.md) -- [Disposable](interfaces/Disposable.md) -- [EmscriptenModule](interfaces/EmscriptenModule.md) -- [EmscriptenModuleLoader](interfaces/EmscriptenModuleLoader.md) -- [EmscriptenModuleLoaderOptions](interfaces/EmscriptenModuleLoaderOptions.md) -- [JSModuleLoader](interfaces/JSModuleLoader.md) -- [JSModuleLoaderAsync](interfaces/JSModuleLoaderAsync.md) -- [JSModuleNormalizer](interfaces/JSModuleNormalizer.md) -- [JSModuleNormalizerAsync](interfaces/JSModuleNormalizerAsync.md) -- [JSPromiseStateFulfilled](interfaces/JSPromiseStateFulfilled.md) -- [JSPromiseStatePending](interfaces/JSPromiseStatePending.md) -- [JSPromiseStateRejected](interfaces/JSPromiseStateRejected.md) -- [LowLevelJavascriptVm](interfaces/LowLevelJavascriptVm.md) -- [ModuleEvalOptions](interfaces/ModuleEvalOptions.md) -- [QuickJSAsyncEmscriptenModule](interfaces/QuickJSAsyncEmscriptenModule.md) -- [QuickJSAsyncFFI](interfaces/QuickJSAsyncFFI.md) -- [QuickJSAsyncVariant](interfaces/QuickJSAsyncVariant.md) -- [QuickJSEmscriptenModule](interfaces/QuickJSEmscriptenModule.md) -- [QuickJSFFI](interfaces/QuickJSFFI.md) -- [QuickJSSyncVariant](interfaces/QuickJSSyncVariant.md) -- [RuntimeOptions](interfaces/RuntimeOptions.md) -- [RuntimeOptionsBase](interfaces/RuntimeOptionsBase.md) -- [SourceMapData](interfaces/SourceMapData.md) -- [VmPropertyDescriptor](interfaces/VmPropertyDescriptor.md) - -## Type Aliases - -### AsyncFunctionImplementation - -> **AsyncFunctionImplementation**: (`this`, ...`args`) => `Promise`\<[`QuickJSHandle`](exports.md#quickjshandle) \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<[`QuickJSHandle`](exports.md#quickjshandle)\> \| `void`\> - -#### Parameters - -• **this**: [`QuickJSHandle`](exports.md#quickjshandle) - -• ...**args**: [`QuickJSHandle`](exports.md#quickjshandle)[] - -#### Returns - -`Promise`\<[`QuickJSHandle`](exports.md#quickjshandle) \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<[`QuickJSHandle`](exports.md#quickjshandle)\> \| `void`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L18) - -*** - -### BorrowedHeapCharPointer - -> **BorrowedHeapCharPointer**: `Pointer`\<`"const char"` \| `"char"` \| `"js const char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:82](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L82) - -*** - -### DisposableArray\ - -> **DisposableArray**\<`T`\>: `T`[] & [`Disposable`](interfaces/Disposable.md) - -An `Array` that also implements [Disposable](interfaces/Disposable.md): - -- Considered [Disposable#alive](interfaces/Disposable.md#alive) if any of its elements are `alive`. -- When [Disposable#dispose](interfaces/Disposable.md#dispose-1)d, it will dispose of all its elements that are `alive`. - -#### Type parameters - -• **T** - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:354](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L354) - -*** - -### DisposableResult\ - -> **DisposableResult**\<`S`, `F`\>: [`DisposableSuccess`](classes/DisposableSuccess.md)\<`S`\> \| [`DisposableFail`](classes/DisposableFail.md)\<`F`\> - -#### Type parameters - -• **S** - -• **F** - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:478](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L478) - -*** - -### EitherFFI - -> **EitherFFI**: [`QuickJSFFI`](interfaces/QuickJSFFI.md) \| [`QuickJSAsyncFFI`](interfaces/QuickJSAsyncFFI.md) - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:50](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L50) - -*** - -### EitherModule - -> **EitherModule**: [`QuickJSEmscriptenModule`](interfaces/QuickJSEmscriptenModule.md) \| [`QuickJSAsyncEmscriptenModule`](interfaces/QuickJSAsyncEmscriptenModule.md) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:246](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L246) - -*** - -### ExecutePendingJobsResult - -> **ExecutePendingJobsResult**: [`DisposableResult`](exports.md#disposableresult)\<`number`, [`QuickJSHandle`](exports.md#quickjshandle) & `Object`\> - -Used as an optional for the results of executing pendingJobs. -On success, `value` contains the number of async jobs executed -by the runtime. - -#### Source - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L35) - -*** - -### InterruptHandler - -> **InterruptHandler**: (`runtime`) => `boolean` \| `undefined` \| `void` - -Callback called regularly while the VM executes code. -Determines if a VM's execution should be interrupted. - -#### Parameters - -• **runtime**: [`QuickJSRuntime`](classes/QuickJSRuntime.md) - -#### Returns - -`boolean` \| `undefined` \| `void` - -`true` to interrupt JS execution inside the VM. - -`false` or `undefined` to continue JS execution inside the VM. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:27](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L27) - -*** - -### Intrinsics - -> **Intrinsics**: `Object` - -Language features that can be enabled or disabled in a QuickJSContext. - -#### See - -[ContextOptions](interfaces/ContextOptions.md) - -#### Type declaration - -##### BaseObjects? - -> **BaseObjects**?: `boolean` - -##### BigDecimal? - -> **BigDecimal**?: `boolean` - -##### BigFloat? - -> **BigFloat**?: `boolean` - -##### BigInt? - -> **BigInt**?: `boolean` - -##### BignumExt? - -> **BignumExt**?: `boolean` - -##### Date? - -> **Date**?: `boolean` - -##### Eval? - -> **Eval**?: `boolean` - -##### JSON? - -> **JSON**?: `boolean` - -##### MapSet? - -> **MapSet**?: `boolean` - -##### OperatorOverloading? - -> **OperatorOverloading**?: `boolean` - -##### Promise? - -> **Promise**?: `boolean` - -##### Proxy? - -> **Proxy**?: `boolean` - -##### RegExp? - -> **RegExp**?: `boolean` - -##### RegExpCompiler? - -> **RegExpCompiler**?: `boolean` - -##### StringNormalize? - -> **StringNormalize**?: `boolean` - -##### TypedArrays? - -> **TypedArrays**?: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:146](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L146) - -*** - -### JSBorrowedCharPointer - -> **JSBorrowedCharPointer**: `Pointer`\<`"js const char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:94](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L94) - -*** - -### JSContextPointer - -> **JSContextPointer**: `Pointer`\<`"JSContext"`\> - -`JSContext*`. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:19](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L19) - -*** - -### JSContextPointerPointer - -> **JSContextPointerPointer**: `Pointer`\<`"JSContext"`\> - -`JSContext**`. Used internally for execute pending jobs. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:24](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L24) - -*** - -### JSModuleDefPointer - -> **JSModuleDefPointer**: `Pointer`\<`"JSModuleDef"`\> - -`JSModuleDef*`. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:29](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L29) - -*** - -### JSModuleLoadFailure - -> **JSModuleLoadFailure**: `Error` \| [`QuickJSHandle`](exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:69](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L69) - -*** - -### JSModuleLoadResult - -> **JSModuleLoadResult**: [`JSModuleLoadSuccess`](exports.md#jsmoduleloadsuccess) \| [`SuccessOrFail`](exports.md#successorfails-f)\<[`JSModuleLoadSuccess`](exports.md#jsmoduleloadsuccess), [`JSModuleLoadFailure`](exports.md#jsmoduleloadfailure)\> - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L70) - -*** - -### JSModuleLoadSuccess - -> **JSModuleLoadSuccess**: `string` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:68](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L68) - -*** - -### JSModuleNormalizeFailure - -> **JSModuleNormalizeFailure**: `Error` \| [`QuickJSHandle`](exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L87) - -*** - -### JSModuleNormalizeResult - -> **JSModuleNormalizeResult**: [`JSModuleNormalizeSuccess`](exports.md#jsmodulenormalizesuccess) \| [`SuccessOrFail`](exports.md#successorfails-f)\<[`JSModuleNormalizeSuccess`](exports.md#jsmodulenormalizesuccess), [`JSModuleNormalizeFailure`](exports.md#jsmodulenormalizefailure)\> - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:88](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L88) - -*** - -### JSModuleNormalizeSuccess - -> **JSModuleNormalizeSuccess**: `string` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L86) - -*** - -### JSPromiseState - -> **JSPromiseState**: [`JSPromiseStatePending`](interfaces/JSPromiseStatePending.md) \| [`JSPromiseStateFulfilled`](interfaces/JSPromiseStateFulfilled.md) \| [`JSPromiseStateRejected`](interfaces/JSPromiseStateRejected.md) - -A promise state inside QuickJS, which can be pending, fulfilled, or rejected. -You can unwrap a JSPromiseState with [QuickJSContext#unwrapResult](classes/QuickJSContext.md#unwrapresult). - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:11](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L11) - -*** - -### JSPromiseStateEnum - -> **JSPromiseStateEnum**: `Brand`\<*typeof* [`JSPromiseStateEnum`](exports.md#jspromisestateenum-1)\[keyof *typeof* [`JSPromiseStateEnum`](exports.md#jspromisestateenum-1)\], `"JSPromiseStateEnum"`\> - -State of a promise. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L131) - -*** - -### JSRuntimePointer - -> **JSRuntimePointer**: `Pointer`\<`"JSRuntime"`\> - -`JSRuntime*`. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:14](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L14) - -*** - -### JSValue - -> **JSValue**: [`Lifetime`](classes/Lifetime.md)\<[`JSValuePointer`](exports.md#jsvaluepointer), [`JSValuePointer`](exports.md#jsvaluepointer), [`QuickJSRuntime`](classes/QuickJSRuntime.md)\> - -A owned QuickJSHandle that should be disposed or returned. - -The QuickJS interpreter passes Javascript values between functions as -`JSValue` structs that references some internal data. Because passing -structs cross the Empscripten FFI interfaces is bothersome, we use pointers -to these structs instead. - -A JSValue reference is "owned" in its scope. before exiting the scope, it -should be freed, by calling `JS_FreeValue(ctx, js_value)`) or returned from -the scope. We extend that contract - a JSValuePointer (`JSValue*`) must also -be `free`d. - -You can do so from Javascript by calling the .dispose() method. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L43) - -*** - -### JSValueConst - -> **JSValueConst**: [`Lifetime`](classes/Lifetime.md)\<[`JSValueConstPointer`](exports.md#jsvalueconstpointer), [`JSValuePointer`](exports.md#jsvaluepointer), [`QuickJSRuntime`](classes/QuickJSRuntime.md)\> - -A QuickJSHandle to a borrowed value that does not need to be disposed. - -In QuickJS, a JSValueConst is a "borrowed" reference that isn't owned by the -current scope. That means that the current scope should not `JS_FreeValue` -it, or retain a reference to it after the scope exits, because it may be -freed by its owner. - -quickjs-emscripten takes care of disposing JSValueConst references. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L26) - -*** - -### JSValueConstPointer - -> **JSValueConstPointer**: `Pointer`\<`"JSValueConst"`\> - -`JSValueConst* -See [JSValueConst](exports.md#jsvalueconst) and [StaticJSValue](exports.md#staticjsvalue). - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L41) - -*** - -### JSValueConstPointerPointer - -> **JSValueConstPointerPointer**: `Pointer`\<`"JSValueConst[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L56) - -*** - -### JSValuePointer - -> **JSValuePointer**: `Pointer`\<`"JSValue"`\> - -`JSValue*`. -See [JSValue](exports.md#jsvalue). - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L35) - -*** - -### JSValuePointerPointer - -> **JSValuePointerPointer**: `Pointer`\<`"JSValue[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L46) - -*** - -### JSValuePointerPointerPointer - -> **JSValuePointerPointerPointer**: `Pointer`\<`"*JSValue[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L51) - -*** - -### JSVoidPointer - -> **JSVoidPointer**: `Pointer`\<`any`\> - -Opaque pointer that was allocated by js_malloc. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:99](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L99) - -*** - -### OrLoader\ - -> **OrLoader**\<`T`\>: `T` \| () => `Promise`\<`T`\> - -#### Type parameters - -• **T** - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L117) - -*** - -### OwnedHeapCharPointer - -> **OwnedHeapCharPointer**: `Pointer`\<`"char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:88](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L88) - -*** - -### PromiseExecutor\ - -> **PromiseExecutor**\<`ResolveT`, `RejectT`\>: (`resolve`, `reject`) => `void` - -#### Type parameters - -• **ResolveT** - -• **RejectT** - -#### Parameters - -• **resolve**: (`value`) => `void` - -• **reject**: (`reason`) => `void` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:333](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L333) - -*** - -### PromisedDefault\ - -> **PromisedDefault**\<`T`\>: `T` \| `Promise`\<`T`\> \| `Promise`\<`Object`\> \| `Promise`\<`Object`\> - -#### Type parameters - -• **T** - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:17](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L17) - -*** - -### QTS\_C\_To\_HostCallbackFuncPointer - -> **QTS\_C\_To\_HostCallbackFuncPointer**: `Pointer`\<`"C_To_HostCallbackFunc"`\> - -Used internally for C-to-Javascript function calls. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:66](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L66) - -*** - -### QTS\_C\_To\_HostInterruptFuncPointer - -> **QTS\_C\_To\_HostInterruptFuncPointer**: `Pointer`\<`"C_To_HostInterruptFunc"`\> - -Used internally for C-to-Javascript interrupt handlers. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:71](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L71) - -*** - -### QTS\_C\_To\_HostLoadModuleFuncPointer - -> **QTS\_C\_To\_HostLoadModuleFuncPointer**: `Pointer`\<`"C_To_HostLoadModuleFunc"`\> - -Used internally for C-to-Javascript module loading. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L76) - -*** - -### QuickJSHandle - -> **QuickJSHandle**: [`StaticJSValue`](exports.md#staticjsvalue) \| [`JSValue`](exports.md#jsvalue) \| [`JSValueConst`](exports.md#jsvalueconst) - -Wraps a C pointer to a QuickJS JSValue, which represents a Javascript value inside -a QuickJS virtual machine. - -Values must not be shared between QuickJSContext instances. -You must dispose of any handles you create by calling the `.dispose()` method. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L53) - -*** - -### QuickJSPropertyKey - -> **QuickJSPropertyKey**: `number` \| `string` \| [`QuickJSHandle`](exports.md#quickjshandle) - -Property key for getting or setting a property on a handle with -[QuickJSContext#getProp](classes/QuickJSContext.md#getprop), [QuickJSContext#setProp](classes/QuickJSContext.md#setprop), or [QuickJSContext#defineProp](classes/QuickJSContext.md#defineprop). - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:68](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L68) - -*** - -### QuickJSVariant - -> **QuickJSVariant**: [`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md) \| [`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md) - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L49) - -*** - -### StaticJSValue - -> **StaticJSValue**: [`Lifetime`](classes/Lifetime.md)\<[`JSValueConstPointer`](exports.md#jsvalueconstpointer), [`JSValueConstPointer`](exports.md#jsvalueconstpointer), [`QuickJSRuntime`](classes/QuickJSRuntime.md)\> - -A QuickJSHandle to a constant that will never change, and does not need to -be disposed. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:14](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L14) - -*** - -### SuccessOrFail\ - -> **SuccessOrFail**\<`S`, `F`\>: `Object` \| `Object` - -Used as an optional. -`{ value: S } | { error: E }`. - -#### Type parameters - -• **S** - -• **F** - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:5](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L5) - -*** - -### UInt32Pointer - -> **UInt32Pointer**: `Pointer`\<`"uint32_t"`\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:101](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L101) - -*** - -### VmCallResult\ - -> **VmCallResult**\<`VmHandle`\>: [`SuccessOrFail`](exports.md#successorfails-f)\<`VmHandle`, `VmHandle`\> - -Used as an optional for results of a Vm call. -`{ value: VmHandle } | { error: VmHandle }`. - -#### Type parameters - -• **VmHandle** - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L26) - -*** - -### VmFunctionImplementation\ - -> **VmFunctionImplementation**\<`VmHandle`\>: (`this`, ...`args`) => `VmHandle` \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<`VmHandle`\> \| `void` - -#### Type parameters - -• **VmHandle** - -A VmFunctionImplementation takes handles as arguments. -It should return a handle, or be void. - -To indicate an exception, a VMs can throw either a handle (transferred -directly) or any other Javascript value (only the poperties `name` and -`message` will be transferred). Or, the VmFunctionImplementation may return -a VmCallResult's `{ error: handle }` error variant. - -VmFunctionImplementation should not free its arguments or its return value. -It should not retain a reference to its return value or thrown error. - -#### Parameters - -• **this**: `VmHandle` - -• ...**args**: `VmHandle`[] - -#### Returns - -`VmHandle` \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<`VmHandle`\> \| `void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:40](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L40) - -## Variables - -### DefaultIntrinsics - -> **`const`** **DefaultIntrinsics**: `Readonly`\<`Object`\> - -The default [Intrinsics](exports.md#intrinsics) language features enabled in a QuickJSContext. - -#### See - -[ContextOptions](interfaces/ContextOptions.md) - -#### Type declaration - -##### BaseObjects - -> **`readonly`** **BaseObjects**: `true` = `true` - -##### Date - -> **`readonly`** **Date**: `true` = `true` - -##### Eval - -> **`readonly`** **Eval**: `true` = `true` - -##### JSON - -> **`readonly`** **JSON**: `true` = `true` - -##### MapSet - -> **`readonly`** **MapSet**: `true` = `true` - -##### Promise - -> **`readonly`** **Promise**: `true` = `true` - -##### Proxy - -> **`readonly`** **Proxy**: `true` = `true` - -##### RegExp - -> **`readonly`** **RegExp**: `true` = `true` - -##### StringNormalize - -> **`readonly`** **StringNormalize**: `true` = `true` - -##### TypedArrays - -> **`readonly`** **TypedArrays**: `true` = `true` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:173](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L173) - -*** - -### DisposableResult - -> **DisposableResult**: *typeof* `AbstractDisposableResult` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:478](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L478) - -*** - -### EvalFlags - -> **EvalFlags**: `Object` - -Bitfield options for JS_Eval() C function. - -#### Type declaration - -##### JS\_EVAL\_FLAG\_BACKTRACE\_BARRIER - -> **`readonly`** **JS\_EVAL\_FLAG\_BACKTRACE\_BARRIER**: `number` - -don't include the stack frames before this eval in the Error() backtraces - -##### JS\_EVAL\_FLAG\_COMPILE\_ONLY - -> **`readonly`** **JS\_EVAL\_FLAG\_COMPILE\_ONLY**: `number` - -compile but do not run. The result is an object with a -JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed -with JS_EvalFunction(). - -##### JS\_EVAL\_FLAG\_STRICT - -> **`readonly`** **JS\_EVAL\_FLAG\_STRICT**: `number` - -force 'strict' mode - -##### JS\_EVAL\_FLAG\_STRIP - -> **`readonly`** **JS\_EVAL\_FLAG\_STRIP**: `number` - -force 'strip' mode - -##### JS\_EVAL\_TYPE\_DIRECT - -> **`readonly`** **JS\_EVAL\_TYPE\_DIRECT**: `number` - -direct call (internal use) - -##### JS\_EVAL\_TYPE\_GLOBAL - -> **`readonly`** **JS\_EVAL\_TYPE\_GLOBAL**: `number` - -global code (default) - -##### JS\_EVAL\_TYPE\_INDIRECT - -> **`readonly`** **JS\_EVAL\_TYPE\_INDIRECT**: `number` - -indirect call (internal use) - -##### JS\_EVAL\_TYPE\_MASK - -> **`readonly`** **JS\_EVAL\_TYPE\_MASK**: `number` - -##### JS\_EVAL\_TYPE\_MODULE - -> **`readonly`** **JS\_EVAL\_TYPE\_MODULE**: `number` - -module code - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:106](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L106) - -*** - -### GetOwnPropertyNamesFlags - -> **GetOwnPropertyNamesFlags**: `Object` - -Bitfield options for QTS_GetOwnPropertyNames - -#### Type declaration - -##### JS\_GPN\_ENUM\_ONLY - -> **JS\_GPN\_ENUM\_ONLY**: `number` - -##### JS\_GPN\_PRIVATE\_MASK - -> **JS\_GPN\_PRIVATE\_MASK**: `number` - -##### JS\_GPN\_SET\_ENUM - -> **JS\_GPN\_SET\_ENUM**: `number` - -##### JS\_GPN\_STRING\_MASK - -> **JS\_GPN\_STRING\_MASK**: `number` - -##### JS\_GPN\_SYMBOL\_MASK - -> **JS\_GPN\_SYMBOL\_MASK**: `number` - -##### QTS\_GPN\_NUMBER\_MASK - -> **QTS\_GPN\_NUMBER\_MASK**: `number` - -##### QTS\_STANDARD\_COMPLIANT\_NUMBER - -> **QTS\_STANDARD\_COMPLIANT\_NUMBER**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:121](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L121) - -*** - -### IntrinsicsFlags - -> **IntrinsicsFlags**: `Object` - -Bitfield options for QTS_NewContext intrinsics - -#### Type declaration - -##### BaseObjects - -> **`readonly`** **BaseObjects**: `number` - -##### BigDecimal - -> **`readonly`** **BigDecimal**: `number` - -##### BigFloat - -> **`readonly`** **BigFloat**: `number` - -##### BigInt - -> **`readonly`** **BigInt**: `number` - -##### BignumExt - -> **`readonly`** **BignumExt**: `number` - -##### Date - -> **`readonly`** **Date**: `number` - -##### Eval - -> **`readonly`** **Eval**: `number` - -##### JSON - -> **`readonly`** **JSON**: `number` - -##### MapSet - -> **`readonly`** **MapSet**: `number` - -##### OperatorOverloading - -> **`readonly`** **OperatorOverloading**: `number` - -##### Promise - -> **`readonly`** **Promise**: `number` - -##### Proxy - -> **`readonly`** **Proxy**: `number` - -##### RegExp - -> **`readonly`** **RegExp**: `number` - -##### RegExpCompiler - -> **`readonly`** **RegExpCompiler**: `number` - -##### StringNormalize - -> **`readonly`** **StringNormalize**: `number` - -##### TypedArrays - -> **`readonly`** **TypedArrays**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L111) - -*** - -### IsEqualOp - -> **IsEqualOp**: `Object` - -#### Type declaration - -##### IsSameValue - -> **IsSameValue**: [`IsEqualOp`](exports.md#isequalop) - -##### IsSameValueZero - -> **IsSameValueZero**: [`IsEqualOp`](exports.md#isequalop) - -##### IsStrictlyEqual - -> **IsStrictlyEqual**: [`IsEqualOp`](exports.md#isequalop) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:126](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L126) - -*** - -### JSPromiseStateEnum - -> **JSPromiseStateEnum**: `Object` - -#### Type declaration - -##### Fulfilled - -> **`readonly`** **Fulfilled**: `1` = `1` - -##### Pending - -> **`readonly`** **Pending**: `0` = `0` - -##### Rejected - -> **`readonly`** **Rejected**: `2` = `2` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L131) - -## Functions - -### assertSync() - -> **assertSync**\<`Args`, `R`\>(`fn`): (...`args`) => `R` - -#### Type parameters - -• **Args** extends `any`[] - -• **R** - -#### Parameters - -• **fn**: (...`args`) => `R` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `Args` -> -> ##### Returns -> -> `R` -> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-types.ts:136](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-types.ts#L136) - -*** - -### createDisposableArray() - -> **createDisposableArray**\<`T`\>(`items`?): [`DisposableArray`](exports.md#disposablearrayt)\<`T`\> - -Create an array that also implements [Disposable](interfaces/Disposable.md). - -#### Type parameters - -• **T** extends [`Disposable`](interfaces/Disposable.md) - -#### Parameters - -• **items?**: `Iterable`\<`T`\> - -#### Returns - -[`DisposableArray`](exports.md#disposablearrayt)\<`T`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:359](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L359) - -*** - -### isFail() - -> **isFail**\<`S`, `F`\>(`successOrFail`): `successOrFail is Object` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **successOrFail**: [`SuccessOrFail`](exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`successOrFail is Object` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L18) - -*** - -### isSuccess() - -> **isSuccess**\<`S`, `F`\>(`successOrFail`): `successOrFail is Object` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **successOrFail**: [`SuccessOrFail`](exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`successOrFail is Object` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:14](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L14) - -*** - -### memoizePromiseFactory() - -> **memoizePromiseFactory**\<`T`\>(`fn`): () => `Promise`\<`T`\> - -Helper intended to memoize the creation of a WebAssembly module. -```typescript -const getDebugModule = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) -``` - -#### Type parameters - -• **T** - -#### Parameters - -• **fn**: () => `Promise`\<`T`\> - -#### Returns - -`Function` - -> ##### Returns -> -> `Promise`\<`T`\> -> - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L100) - -*** - -### newQuickJSAsyncWASMModuleFromVariant() - -> **newQuickJSAsyncWASMModuleFromVariant**(`variantOrPromise`): `Promise`\<[`QuickJSAsyncWASMModule`](classes/QuickJSAsyncWASMModule.md)\> - -Create a new, completely isolated WebAssembly module containing a version of the QuickJS library -compiled with Emscripten's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) transform. - -This version of the library offers features that enable synchronous code -inside the VM to interact with asynchronous code in the host environment. -See the documentation on [QuickJSAsyncWASMModule](classes/QuickJSAsyncWASMModule.md), [QuickJSAsyncRuntime](classes/QuickJSAsyncRuntime.md), -and [QuickJSAsyncContext](classes/QuickJSAsyncContext.md). - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **variantOrPromise**: [`PromisedDefault`](exports.md#promiseddefaultt)\<[`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md)\> - -A [QuickJSAsyncVariant](interfaces/QuickJSAsyncVariant.md) to construct the WebAssembly module. - -#### Returns - -`Promise`\<[`QuickJSAsyncWASMModule`](classes/QuickJSAsyncWASMModule.md)\> - -#### Example - -```ts -const quickjs = new newQuickJSAsyncWASMModuleFromVariant( - import('@jitl/quickjs-browser-debug-asyncify-wasm') -) -``` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L76) - -*** - -### newQuickJSWASMModuleFromVariant() - -> **newQuickJSWASMModuleFromVariant**(`variantOrPromise`): `Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -Create a new, completely isolated WebAssembly module containing the QuickJS library. -See the documentation on [QuickJSWASMModule](classes/QuickJSWASMModule.md). - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **variantOrPromise**: [`PromisedDefault`](exports.md#promiseddefaultt)\<[`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md)\> - -A [QuickJSSyncVariant](interfaces/QuickJSSyncVariant.md) to construct the WebAssembly module. - -#### Returns - -`Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -#### Example - -```ts -const quickjs = new newQuickJSWASMModuleFromVariant( - import('@jitl/quickjs-browser-release-sync-wasm') -) -``` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:38](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L38) - -*** - -### newVariant() - -> **newVariant**\<`T`\>(`baseVariant`, `options`): `T` - -Create a new variant by overriding how Emscripten obtains the WebAssembly module. -This may be necessary in Cloudflare Workers, which can't compile WebAssembly modules from binary data. - -#### Type parameters - -• **T** extends [`QuickJSVariant`](exports.md#quickjsvariant) - -#### Parameters - -• **baseVariant**: `T` - -• **options**: [`CustomizeVariantOptions`](interfaces/CustomizeVariantOptions.md) - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L162) - -*** - -### setDebugMode() - -> **setDebugMode**(`enabled`): `void` - -Enable (or disable) debug logging and object creation tracking globally. -This setting is inherited by newly created QuickJSRuntime instances. -To get debug logging in the WebAssembly module, you need to use a debug build variant. -See [the quickjs-emscripten-core README](https://github.com/justjake/quickjs-emscripten/tree/main/doc/quickjs-emscripten-core) for more about build variants. - -#### Parameters - -• **enabled**: `boolean`= `true` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/debug.ts:13](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/debug.ts#L13) - -*** - -### shouldInterruptAfterDeadline() - -> **shouldInterruptAfterDeadline**(`deadline`): [`InterruptHandler`](exports.md#interrupthandler) - -Returns an interrupt handler that interrupts Javascript execution after a deadline time. - -#### Parameters - -• **deadline**: `number` \| `Date` - -Interrupt execution if it's still running after this time. - Number values are compared against `Date.now()` - -#### Returns - -[`InterruptHandler`](exports.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/interrupt-helpers.ts:9](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/interrupt-helpers.ts#L9) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/AsyncRuntimeOptions.md b/doc/quickjs-emscripten-core/interfaces/AsyncRuntimeOptions.md deleted file mode 100644 index 252d061aa..000000000 --- a/doc/quickjs-emscripten-core/interfaces/AsyncRuntimeOptions.md +++ /dev/null @@ -1,136 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / AsyncRuntimeOptions - -# Interface: AsyncRuntimeOptions - -## Contents - -- [Extends](AsyncRuntimeOptions.md#extends) -- [Properties](AsyncRuntimeOptions.md#properties) - - [gcThreshold?](AsyncRuntimeOptions.md#gcthreshold) - - [interruptHandler?](AsyncRuntimeOptions.md#interrupthandler) - - [maxStackSizeBytes?](AsyncRuntimeOptions.md#maxstacksizebytes) - - [memoryLimitBytes?](AsyncRuntimeOptions.md#memorylimitbytes) - - [moduleLoader?](AsyncRuntimeOptions.md#moduleloader) - - [promiseRejectionHandler?](AsyncRuntimeOptions.md#promiserejectionhandler) - - [runtimeInfo?](AsyncRuntimeOptions.md#runtimeinfo) - - [sharedArrayBufferFunctions?](AsyncRuntimeOptions.md#sharedarraybufferfunctions) - -## Extends - -- [`RuntimeOptionsBase`](RuntimeOptionsBase.md) - -## Properties - -### gcThreshold? - -> **gcThreshold**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.gcThreshold`](RuntimeOptionsBase.md#gcthreshold) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:119](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L119) - -*** - -### interruptHandler? - -> **interruptHandler**?: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.interruptHandler`](RuntimeOptionsBase.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L113) - -*** - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.maxStackSizeBytes`](RuntimeOptionsBase.md#maxstacksizebytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:114](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L114) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.memoryLimitBytes`](RuntimeOptionsBase.md#memorylimitbytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:115](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L115) - -*** - -### moduleLoader? - -> **moduleLoader**?: [`JSModuleLoader`](JSModuleLoader.md) \| [`JSModuleLoaderAsync`](JSModuleLoaderAsync.md) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:137](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L137) - -*** - -### promiseRejectionHandler? - -> **promiseRejectionHandler**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.promiseRejectionHandler`](RuntimeOptionsBase.md#promiserejectionhandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L117) - -*** - -### runtimeInfo? - -> **runtimeInfo**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.runtimeInfo`](RuntimeOptionsBase.md#runtimeinfo) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L118) - -*** - -### sharedArrayBufferFunctions? - -> **sharedArrayBufferFunctions**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.sharedArrayBufferFunctions`](RuntimeOptionsBase.md#sharedarraybufferfunctions) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/ContextEvalOptions.md b/doc/quickjs-emscripten-core/interfaces/ContextEvalOptions.md deleted file mode 100644 index 1781940de..000000000 --- a/doc/quickjs-emscripten-core/interfaces/ContextEvalOptions.md +++ /dev/null @@ -1,85 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / ContextEvalOptions - -# Interface: ContextEvalOptions - -## Contents - -- [Properties](ContextEvalOptions.md#properties) - - [backtraceBarrier?](ContextEvalOptions.md#backtracebarrier) - - [compileOnly?](ContextEvalOptions.md#compileonly) - - [strict?](ContextEvalOptions.md#strict) - - [strip?](ContextEvalOptions.md#strip) - - [type?](ContextEvalOptions.md#type) - -## Properties - -### backtraceBarrier? - -> **backtraceBarrier**?: `boolean` - -don't include the stack frames before this eval in the Error() backtraces - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:263](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L263) - -*** - -### compileOnly? - -> **compileOnly**?: `boolean` - -compile but do not run. The result is an object with a -JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed -with JS_EvalFunction(). - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:261](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L261) - -*** - -### strict? - -> **strict**?: `boolean` - -Force "strict" mode - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:253](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L253) - -*** - -### strip? - -> **strip**?: `boolean` - -Force "strip" mode - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L255) - -*** - -### type? - -> **type**?: `"global"` \| `"module"` - -Global code (default), or "module" code? - -- When type is `"global"`, the code is evaluated in the global scope of the QuickJSContext, and the return value is the result of the last expression. -- When type is `"module"`, the code is evaluated is a module scope, may use `import`, `export`, and top-level `await`. The return value is the module's exports, or a promise for the module's exports. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:251](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L251) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/ContextOptions.md b/doc/quickjs-emscripten-core/interfaces/ContextOptions.md deleted file mode 100644 index 0c3cf454f..000000000 --- a/doc/quickjs-emscripten-core/interfaces/ContextOptions.md +++ /dev/null @@ -1,44 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / ContextOptions - -# Interface: ContextOptions - -Options for creating a [QuickJSContext](../classes/QuickJSContext.md) or [QuickJSAsyncContext](../classes/QuickJSAsyncContext.md) -Pass to [QuickJSRuntime#newContext](../classes/QuickJSRuntime.md#newcontext). - -## Contents - -- [Properties](ContextOptions.md#properties) - - [intrinsics?](ContextOptions.md#intrinsics) - -## Properties - -### intrinsics? - -> **intrinsics**?: [`Intrinsics`](../exports.md#intrinsics) - -What built-in objects and language features to enable? -If unset, the default intrinsics will be used. -To omit all intrinsics, pass an empty array. - -To remove a specific intrinsic, but retain the other defaults, -override it from [DefaultIntrinsics](../exports.md#defaultintrinsics) -```ts -const contextWithoutDateOrEval = runtime.newContext({ - intrinsics: { - ...DefaultIntrinsics, - Date: false, - } -}) -``` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:229](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L229) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/CustomizeVariantOptions.md b/doc/quickjs-emscripten-core/interfaces/CustomizeVariantOptions.md deleted file mode 100644 index fbc9a6111..000000000 --- a/doc/quickjs-emscripten-core/interfaces/CustomizeVariantOptions.md +++ /dev/null @@ -1,180 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / CustomizeVariantOptions - -# Interface: CustomizeVariantOptions - -## Contents - -- [Properties](CustomizeVariantOptions.md#properties) - - [emscriptenModule?](CustomizeVariantOptions.md#emscriptenmodule) - - [locateFile?](CustomizeVariantOptions.md#locatefile) - - [log?](CustomizeVariantOptions.md#log) - - [wasmBinary?](CustomizeVariantOptions.md#wasmbinary) - - [wasmLocation?](CustomizeVariantOptions.md#wasmlocation) - - [wasmMemory?](CustomizeVariantOptions.md#wasmmemory) - - [wasmModule?](CustomizeVariantOptions.md#wasmmodule) - - [wasmSourceMapData?](CustomizeVariantOptions.md#wasmsourcemapdata) - - [wasmSourceMapLocation?](CustomizeVariantOptions.md#wasmsourcemaplocation) - -## Properties - -### emscriptenModule? - -> **emscriptenModule**?: [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -The enumerable properties of this object will be passed verbatim, although they may be overwritten if you pass other options. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:153](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L153) - -*** - -### locateFile? - -> **locateFile**?: (`fileName`, `prefix`) => `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L151) - -*** - -### log? - -> **log**?: (...`data`) => `void`(`message`?, ...`optionalParams`) => `void` - -Debug logger - -#### Parameters - -• ...**data**: `any`[] - -#### Returns - -`void` - -Debug logger - -#### Parameters - -• **message?**: `any` - -• ...**optionalParams?**: `any`[] - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:155](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L155) - -*** - -### wasmBinary? - -> **wasmBinary**?: [`OrLoader`](../exports.md#orloadert)\<`ArrayBuffer`\> - -If given, Emscripten will compile the WebAssembly.Module from these bytes. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:123](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L123) - -*** - -### wasmLocation? - -> **wasmLocation**?: `string` - -If given, Emscripten will try to load the WebAssembly module data from this location (path or URI) as appropriate for the current platform. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:121](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L121) - -*** - -### wasmMemory? - -> **wasmMemory**?: [`OrLoader`](../exports.md#orloadert)\<`Memory`\> - -If given, use the Memory when instantiating the WebAssembly.Instance. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:127](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L127) - -*** - -### wasmModule? - -> **wasmModule**?: [`OrLoader`](../exports.md#orloadert)\<`Module`\> - -If given, Emscripten will instantiate the WebAssembly.Instance from this existing WebAssembly.Module - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:125](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L125) - -*** - -### wasmSourceMapData? - -> **wasmSourceMapData**?: [`OrLoader`](../exports.md#orloadert)\<`string` \| [`SourceMapData`](SourceMapData.md)\> - -If given, we will provide the source map to Emscripten directly. This may only be respected if wasmModule is also provided. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L131) - -*** - -### wasmSourceMapLocation? - -> **wasmSourceMapLocation**?: `string` - -If given, Emscripten will try to load the source map for the WebAssembly module from this location (path or URI) as appropriate for the current platform. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:129](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L129) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/Disposable.md b/doc/quickjs-emscripten-core/interfaces/Disposable.md deleted file mode 100644 index 0c13b9866..000000000 --- a/doc/quickjs-emscripten-core/interfaces/Disposable.md +++ /dev/null @@ -1,65 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / Disposable - -# Interface: Disposable - -An object that can be disposed. -[Lifetime](../classes/Lifetime.md) is the canonical implementation of Disposable. -Use [Scope](../classes/Scope.md) to manage cleaning up multiple disposables. - -## Contents - -- [Properties](Disposable.md#properties) - - [alive](Disposable.md#alive) -- [Methods](Disposable.md#methods) - - [`[dispose]`()](Disposable.md#dispose) - - [dispose()](Disposable.md#dispose) - -## Properties - -### alive - -> **alive**: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:23](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L23) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -A method that is used to release resources held by an object. Called by the semantics of the `using` statement. - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:28](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L28) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:17](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L17) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/EmscriptenModule.md b/doc/quickjs-emscripten-core/interfaces/EmscriptenModule.md deleted file mode 100644 index b92006021..000000000 --- a/doc/quickjs-emscripten-core/interfaces/EmscriptenModule.md +++ /dev/null @@ -1,417 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / EmscriptenModule - -# Interface: EmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](EmscriptenModule.md#extends) -- [Properties](EmscriptenModule.md#properties) - - [FAST\_MEMORY](EmscriptenModule.md#fast-memory) - - [HEAP16](EmscriptenModule.md#heap16) - - [HEAP32](EmscriptenModule.md#heap32) - - [HEAP8](EmscriptenModule.md#heap8) - - [HEAPF32](EmscriptenModule.md#heapf32) - - [HEAPF64](EmscriptenModule.md#heapf64) - - [HEAPU16](EmscriptenModule.md#heapu16) - - [HEAPU32](EmscriptenModule.md#heapu32) - - [HEAPU8](EmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](EmscriptenModule.md#total-memory) - - [TOTAL\_STACK](EmscriptenModule.md#total-stack) - - [wasmBinary?](EmscriptenModule.md#wasmbinary) - - [wasmMemory?](EmscriptenModule.md#wasmmemory) -- [Methods](EmscriptenModule.md#methods) - - [UTF8ToString()](EmscriptenModule.md#utf8tostring) - - [\_free()](EmscriptenModule.md#free) - - [\_malloc()](EmscriptenModule.md#malloc) - - [cwrap()](EmscriptenModule.md#cwrap) - - [instantiateWasm()?](EmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](EmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](EmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](EmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](EmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L168) - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:158](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L158) - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L159) - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:157](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L157) - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:163](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L163) - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L164) - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:161](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L161) - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L162) - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L160) - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:167](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L167) - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L166) - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModuleLoaderOptions.wasmBinary`](EmscriptenModuleLoaderOptions.md#wasmbinary) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModuleLoaderOptions.wasmMemory`](EmscriptenModuleLoaderOptions.md#wasmmemory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:144](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L144) - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L148) - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L147) - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:149](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L149) - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModuleLoaderOptions.instantiateWasm`](EmscriptenModuleLoaderOptions.md#instantiatewasm) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:145](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L145) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModuleLoaderOptions.locateFile`](EmscriptenModuleLoaderOptions.md#locatefile) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModuleLoaderOptions.monitorRunDependencies`](EmscriptenModuleLoaderOptions.md#monitorrundependencies) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:139](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L139) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoader.md b/doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoader.md deleted file mode 100644 index e31d5f435..000000000 --- a/doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoader.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / EmscriptenModuleLoader - -# Interface: EmscriptenModuleLoader()\ - -## Type parameters - -• **T** extends [`EmscriptenModule`](EmscriptenModule.md) - -> **EmscriptenModuleLoader**(`options`?): `Promise`\<`T`\> - -## Parameters - -• **options?**: [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -## Returns - -`Promise`\<`T`\> - -## Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:249](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L249) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoaderOptions.md b/doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoaderOptions.md deleted file mode 100644 index c8e525b5d..000000000 --- a/doc/quickjs-emscripten-core/interfaces/EmscriptenModuleLoaderOptions.md +++ /dev/null @@ -1,136 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / EmscriptenModuleLoaderOptions - -# Interface: EmscriptenModuleLoaderOptions - -This structure is defined by Emscripten. -It's possible to provide these parameters to an emscripten module loader. -See [the Emscripten Module API reference](https://emscripten.org/docs/api_reference/module.html). - -## Contents - -- [Extended By](EmscriptenModuleLoaderOptions.md#extended-by) -- [Properties](EmscriptenModuleLoaderOptions.md#properties) - - [wasmBinary?](EmscriptenModuleLoaderOptions.md#wasmbinary) - - [wasmMemory?](EmscriptenModuleLoaderOptions.md#wasmmemory) -- [Methods](EmscriptenModuleLoaderOptions.md#methods) - - [instantiateWasm()?](EmscriptenModuleLoaderOptions.md#instantiatewasm) - - [locateFile()?](EmscriptenModuleLoaderOptions.md#locatefile) - - [monitorRunDependencies()?](EmscriptenModuleLoaderOptions.md#monitorrundependencies) - -## Extended By - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/JSModuleLoader.md b/doc/quickjs-emscripten-core/interfaces/JSModuleLoader.md deleted file mode 100644 index 1faf3a536..000000000 --- a/doc/quickjs-emscripten-core/interfaces/JSModuleLoader.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / JSModuleLoader - -# Interface: JSModuleLoader() - -> **JSModuleLoader**(`moduleName`, `context`): [`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) - -Load module (sync) - -## Parameters - -• **moduleName**: `string` - -• **context**: [`QuickJSContext`](../classes/QuickJSContext.md) - -## Returns - -[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:83](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L83) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/JSModuleLoaderAsync.md b/doc/quickjs-emscripten-core/interfaces/JSModuleLoaderAsync.md deleted file mode 100644 index 01a7be193..000000000 --- a/doc/quickjs-emscripten-core/interfaces/JSModuleLoaderAsync.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / JSModuleLoaderAsync - -# Interface: JSModuleLoaderAsync() - -> **JSModuleLoaderAsync**(`moduleName`, `context`): [`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) \| `Promise`\<[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult)\> - -Load module (async) - -## Parameters - -• **moduleName**: `string` - -• **context**: [`QuickJSAsyncContext`](../classes/QuickJSAsyncContext.md) - -## Returns - -[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) \| `Promise`\<[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult)\> - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L76) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/JSModuleNormalizer.md b/doc/quickjs-emscripten-core/interfaces/JSModuleNormalizer.md deleted file mode 100644 index a7f0bae85..000000000 --- a/doc/quickjs-emscripten-core/interfaces/JSModuleNormalizer.md +++ /dev/null @@ -1,51 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / JSModuleNormalizer - -# Interface: JSModuleNormalizer() - -## Extends - -- [`JSModuleNormalizerAsync`](JSModuleNormalizerAsync.md) - -> **JSModuleNormalizer**(`baseModuleName`, `requestedName`, `vm`): [`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) - -## Parameters - -• **baseModuleName**: `string` - -• **requestedName**: `string` - -• **vm**: [`QuickJSContext`](../classes/QuickJSContext.md) - -## Returns - -[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L100) - -> **JSModuleNormalizer**(`baseModuleName`, `requestedName`, `vm`): [`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Parameters - -• **baseModuleName**: `string` - -• **requestedName**: `string` - -• **vm**: [`QuickJSAsyncContext`](../classes/QuickJSAsyncContext.md) - -## Returns - -[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:93](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L93) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/JSModuleNormalizerAsync.md b/doc/quickjs-emscripten-core/interfaces/JSModuleNormalizerAsync.md deleted file mode 100644 index 87171ee92..000000000 --- a/doc/quickjs-emscripten-core/interfaces/JSModuleNormalizerAsync.md +++ /dev/null @@ -1,33 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / JSModuleNormalizerAsync - -# Interface: JSModuleNormalizerAsync() - -## Extended By - -- [`JSModuleNormalizer`](JSModuleNormalizer.md) - -> **JSModuleNormalizerAsync**(`baseModuleName`, `requestedName`, `vm`): [`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Parameters - -• **baseModuleName**: `string` - -• **requestedName**: `string` - -• **vm**: [`QuickJSAsyncContext`](../classes/QuickJSAsyncContext.md) - -## Returns - -[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:93](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L93) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/JSPromiseStateFulfilled.md b/doc/quickjs-emscripten-core/interfaces/JSPromiseStateFulfilled.md deleted file mode 100644 index e3488398f..000000000 --- a/doc/quickjs-emscripten-core/interfaces/JSPromiseStateFulfilled.md +++ /dev/null @@ -1,64 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / JSPromiseStateFulfilled - -# Interface: JSPromiseStateFulfilled - -Fulfilled promise state. -See [JSPromiseState](../exports.md#jspromisestate). - -## Contents - -- [Properties](JSPromiseStateFulfilled.md#properties) - - [error?](JSPromiseStateFulfilled.md#error) - - [notAPromise?](JSPromiseStateFulfilled.md#notapromise) - - [type](JSPromiseStateFulfilled.md#type) - - [value](JSPromiseStateFulfilled.md#value) - -## Properties - -### error? - -> **error**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:36](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L36) - -*** - -### notAPromise? - -> **notAPromise**?: `boolean` - -Trying to get the promise state of a non-Promise value returns a fulfilled state with the original value, and `notAPromise: true`. - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:38](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L38) - -*** - -### type - -> **type**: `"fulfilled"` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:34](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L34) - -*** - -### value - -> **value**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L35) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/JSPromiseStatePending.md b/doc/quickjs-emscripten-core/interfaces/JSPromiseStatePending.md deleted file mode 100644 index 83781d6bd..000000000 --- a/doc/quickjs-emscripten-core/interfaces/JSPromiseStatePending.md +++ /dev/null @@ -1,48 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / JSPromiseStatePending - -# Interface: JSPromiseStatePending - -Pending promise state. -See [JSPromiseState](../exports.md#jspromisestate). - -## Contents - -- [Properties](JSPromiseStatePending.md#properties) - - [type](JSPromiseStatePending.md#type) -- [Accessors](JSPromiseStatePending.md#accessors) - - [error](JSPromiseStatePending.md#error) - -## Properties - -### type - -> **type**: `"pending"` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:21](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L21) - -## Accessors - -### error - -> **`get`** **error**(): `Error` - -The error property here allows unwrapping a JSPromiseState with [QuickJSContext#unwrapResult](../classes/QuickJSContext.md#unwrapresult). -Unwrapping a pending promise will throw a QuickJSPromisePending error. - -#### Returns - -`Error` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L26) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/JSPromiseStateRejected.md b/doc/quickjs-emscripten-core/interfaces/JSPromiseStateRejected.md deleted file mode 100644 index 6f5c6510c..000000000 --- a/doc/quickjs-emscripten-core/interfaces/JSPromiseStateRejected.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / JSPromiseStateRejected - -# Interface: JSPromiseStateRejected - -Rejected promise state. -See [JSPromiseState](../exports.md#jspromisestate). - -## Contents - -- [Properties](JSPromiseStateRejected.md#properties) - - [error](JSPromiseStateRejected.md#error) - - [type](JSPromiseStateRejected.md#type) - -## Properties - -### error - -> **error**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L47) - -*** - -### type - -> **type**: `"rejected"` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L46) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/LowLevelJavascriptVm.md b/doc/quickjs-emscripten-core/interfaces/LowLevelJavascriptVm.md deleted file mode 100644 index 696b69586..000000000 --- a/doc/quickjs-emscripten-core/interfaces/LowLevelJavascriptVm.md +++ /dev/null @@ -1,296 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / LowLevelJavascriptVm - -# Interface: LowLevelJavascriptVm\ - -A minimal interface to a Javascript execution environment. - -Higher-level tools should build over the LowLevelJavascriptVm interface to -share as much as possible between executors. - -From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/ - -## Contents - -- [Type parameters](LowLevelJavascriptVm.md#type-parameters) -- [Properties](LowLevelJavascriptVm.md#properties) - - [global](LowLevelJavascriptVm.md#global) - - [undefined](LowLevelJavascriptVm.md#undefined) -- [Methods](LowLevelJavascriptVm.md#methods) - - [callFunction()](LowLevelJavascriptVm.md#callfunction) - - [defineProp()](LowLevelJavascriptVm.md#defineprop) - - [evalCode()](LowLevelJavascriptVm.md#evalcode) - - [getNumber()](LowLevelJavascriptVm.md#getnumber) - - [getProp()](LowLevelJavascriptVm.md#getprop) - - [getString()](LowLevelJavascriptVm.md#getstring) - - [newFunction()](LowLevelJavascriptVm.md#newfunction) - - [newNumber()](LowLevelJavascriptVm.md#newnumber) - - [newObject()](LowLevelJavascriptVm.md#newobject) - - [newString()](LowLevelJavascriptVm.md#newstring) - - [setProp()](LowLevelJavascriptVm.md#setprop) - - [typeof()](LowLevelJavascriptVm.md#typeof) - -## Type parameters - -• **VmHandle** - -## Properties - -### global - -> **global**: `VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:54](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L54) - -*** - -### undefined - -> **undefined**: `VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L55) - -## Methods - -### callFunction() - -> **callFunction**(`func`, `thisVal`, ...`args`): [`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Parameters - -• **func**: `VmHandle` - -• **thisVal**: `VmHandle` - -• ...**args**: `VmHandle`[] - -#### Returns - -[`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L76) - -*** - -### defineProp() - -> **defineProp**(`handle`, `key`, `descriptor`): `void` - -#### Parameters - -• **handle**: `VmHandle` - -• **key**: `string` \| `VmHandle` - -• **descriptor**: [`VmPropertyDescriptor`](VmPropertyDescriptor.md)\<`VmHandle`\> - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L70) - -*** - -### evalCode() - -> **evalCode**(`code`, `filename`?): [`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Parameters - -• **code**: `string` - -• **filename?**: `string` - -#### Returns - -[`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:77](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L77) - -*** - -### getNumber() - -> **getNumber**(`handle`): `number` - -#### Parameters - -• **handle**: `VmHandle` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:59](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L59) - -*** - -### getProp() - -> **getProp**(`handle`, `key`): `VmHandle` - -#### Parameters - -• **handle**: `VmHandle` - -• **key**: `string` \| `VmHandle` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:68](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L68) - -*** - -### getString() - -> **getString**(`handle`): `string` - -#### Parameters - -• **handle**: `VmHandle` - -#### Returns - -`string` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:60](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L60) - -*** - -### newFunction() - -> **newFunction**(`name`, `value`): `VmHandle` - -#### Parameters - -• **name**: `string` - -• **value**: [`VmFunctionImplementation`](../exports.md#vmfunctionimplementationvmhandle)\<`VmHandle`\> - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:65](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L65) - -*** - -### newNumber() - -> **newNumber**(`value`): `VmHandle` - -#### Parameters - -• **value**: `number` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:62](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L62) - -*** - -### newObject() - -> **newObject**(`prototype`?): `VmHandle` - -#### Parameters - -• **prototype?**: `VmHandle` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:64](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L64) - -*** - -### newString() - -> **newString**(`value`): `VmHandle` - -#### Parameters - -• **value**: `string` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:63](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L63) - -*** - -### setProp() - -> **setProp**(`handle`, `key`, `value`): `void` - -#### Parameters - -• **handle**: `VmHandle` - -• **key**: `string` \| `VmHandle` - -• **value**: `VmHandle` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:69](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L69) - -*** - -### typeof() - -> **typeof**(`handle`): `string` - -#### Parameters - -• **handle**: `VmHandle` - -#### Returns - -`string` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L57) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/ModuleEvalOptions.md b/doc/quickjs-emscripten-core/interfaces/ModuleEvalOptions.md deleted file mode 100644 index 4007ac79b..000000000 --- a/doc/quickjs-emscripten-core/interfaces/ModuleEvalOptions.md +++ /dev/null @@ -1,71 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / ModuleEvalOptions - -# Interface: ModuleEvalOptions - -Options for [QuickJSWASMModule#evalCode](../classes/QuickJSWASMModule.md#evalcode). - -## Contents - -- [Properties](ModuleEvalOptions.md#properties) - - [maxStackSizeBytes?](ModuleEvalOptions.md#maxstacksizebytes) - - [memoryLimitBytes?](ModuleEvalOptions.md#memorylimitbytes) - - [moduleLoader?](ModuleEvalOptions.md#moduleloader) - - [shouldInterrupt?](ModuleEvalOptions.md#shouldinterrupt) - -## Properties - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -Stack size limit for this vm, in bytes -To remove the limit, set to `0`. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:82](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L82) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -Memory limit, in bytes, of WebAssembly heap memory used by the QuickJS VM. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L76) - -*** - -### moduleLoader? - -> **moduleLoader**?: [`JSModuleLoader`](JSModuleLoader.md) - -Module loader for any `import` statements or expressions. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L87) - -*** - -### shouldInterrupt? - -> **shouldInterrupt**?: [`InterruptHandler`](../exports.md#interrupthandler) - -Interrupt evaluation if `shouldInterrupt` returns `true`. -See [shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline). - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:71](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L71) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncEmscriptenModule.md b/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncEmscriptenModule.md deleted file mode 100644 index 5d3924f3c..000000000 --- a/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncEmscriptenModule.md +++ /dev/null @@ -1,511 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSAsyncEmscriptenModule - -# Interface: QuickJSAsyncEmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](QuickJSAsyncEmscriptenModule.md#extends) -- [Properties](QuickJSAsyncEmscriptenModule.md#properties) - - [FAST\_MEMORY](QuickJSAsyncEmscriptenModule.md#fast-memory) - - [HEAP16](QuickJSAsyncEmscriptenModule.md#heap16) - - [HEAP32](QuickJSAsyncEmscriptenModule.md#heap32) - - [HEAP8](QuickJSAsyncEmscriptenModule.md#heap8) - - [HEAPF32](QuickJSAsyncEmscriptenModule.md#heapf32) - - [HEAPF64](QuickJSAsyncEmscriptenModule.md#heapf64) - - [HEAPU16](QuickJSAsyncEmscriptenModule.md#heapu16) - - [HEAPU32](QuickJSAsyncEmscriptenModule.md#heapu32) - - [HEAPU8](QuickJSAsyncEmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](QuickJSAsyncEmscriptenModule.md#total-memory) - - [TOTAL\_STACK](QuickJSAsyncEmscriptenModule.md#total-stack) - - [callbacks](QuickJSAsyncEmscriptenModule.md#callbacks) - - [type](QuickJSAsyncEmscriptenModule.md#type) - - [wasmBinary?](QuickJSAsyncEmscriptenModule.md#wasmbinary) - - [wasmMemory?](QuickJSAsyncEmscriptenModule.md#wasmmemory) -- [Methods](QuickJSAsyncEmscriptenModule.md#methods) - - [UTF8ToString()](QuickJSAsyncEmscriptenModule.md#utf8tostring) - - [\_free()](QuickJSAsyncEmscriptenModule.md#free) - - [\_malloc()](QuickJSAsyncEmscriptenModule.md#malloc) - - [cwrap()](QuickJSAsyncEmscriptenModule.md#cwrap) - - [instantiateWasm()?](QuickJSAsyncEmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](QuickJSAsyncEmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](QuickJSAsyncEmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](QuickJSAsyncEmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](QuickJSAsyncEmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.FAST_MEMORY`](EmscriptenModule.md#fast-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L168) - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAP16`](EmscriptenModule.md#heap16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:158](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L158) - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAP32`](EmscriptenModule.md#heap32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L159) - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAP8`](EmscriptenModule.md#heap8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:157](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L157) - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPF32`](EmscriptenModule.md#heapf32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:163](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L163) - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPF64`](EmscriptenModule.md#heapf64) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L164) - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPU16`](EmscriptenModule.md#heapu16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:161](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L161) - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPU32`](EmscriptenModule.md#heapu32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L162) - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPU8`](EmscriptenModule.md#heapu8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L160) - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.TOTAL_MEMORY`](EmscriptenModule.md#total-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:167](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L167) - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.TOTAL_STACK`](EmscriptenModule.md#total-stack) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L166) - -*** - -### callbacks - -> **callbacks**: `EmscriptenModuleCallbacks` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:243](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L243) - -*** - -### type - -> **type**: `"async"` - -#### Todo - -Implement this field - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:242](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L242) - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.wasmBinary`](EmscriptenModule.md#wasmbinary) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.wasmMemory`](EmscriptenModule.md#wasmmemory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.UTF8ToString`](EmscriptenModule.md#utf8tostring) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:144](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L144) - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule._free`](EmscriptenModule.md#free) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L148) - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule._malloc`](EmscriptenModule.md#malloc) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L147) - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.cwrap`](EmscriptenModule.md#cwrap) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:149](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L149) - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.instantiateWasm`](EmscriptenModule.md#instantiatewasm) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.lengthBytesUTF8`](EmscriptenModule.md#lengthbytesutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:145](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L145) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.locateFile`](EmscriptenModule.md#locatefile) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.monitorRunDependencies`](EmscriptenModule.md#monitorrundependencies) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.stringToUTF8`](EmscriptenModule.md#stringtoutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:139](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L139) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncFFI.md b/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncFFI.md deleted file mode 100644 index cbcad7484..000000000 --- a/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncFFI.md +++ /dev/null @@ -1,1618 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSAsyncFFI - -# Interface: QuickJSAsyncFFI - -Low-level FFI bindings to QuickJS's Emscripten module. -See instead [QuickJSContext](../classes/QuickJSContext.md), the public Javascript interface exposed by this -library. - -## Contents - -- [Unstable](QuickJSAsyncFFI.md#unstable) -- [Properties](QuickJSAsyncFFI.md#properties) - - [DEBUG](QuickJSAsyncFFI.md#debug) - - [QTS\_ArgvGetJSValueConstPointer](QuickJSAsyncFFI.md#qts-argvgetjsvalueconstpointer) - - [QTS\_BuildIsAsyncify](QuickJSAsyncFFI.md#qts-buildisasyncify) - - [QTS\_BuildIsDebug](QuickJSAsyncFFI.md#qts-buildisdebug) - - [QTS\_BuildIsSanitizeLeak](QuickJSAsyncFFI.md#qts-buildissanitizeleak) - - [QTS\_Call](QuickJSAsyncFFI.md#qts-call) - - [QTS\_Call\_MaybeAsync](QuickJSAsyncFFI.md#qts-call-maybeasync) - - [QTS\_DefineProp](QuickJSAsyncFFI.md#qts-defineprop) - - [QTS\_Dump](QuickJSAsyncFFI.md#qts-dump) - - [QTS\_Dump\_MaybeAsync](QuickJSAsyncFFI.md#qts-dump-maybeasync) - - [QTS\_DupValuePointer](QuickJSAsyncFFI.md#qts-dupvaluepointer) - - [QTS\_Eval](QuickJSAsyncFFI.md#qts-eval) - - [QTS\_Eval\_MaybeAsync](QuickJSAsyncFFI.md#qts-eval-maybeasync) - - [QTS\_ExecutePendingJob](QuickJSAsyncFFI.md#qts-executependingjob) - - [QTS\_ExecutePendingJob\_MaybeAsync](QuickJSAsyncFFI.md#qts-executependingjob-maybeasync) - - [QTS\_FreeCString](QuickJSAsyncFFI.md#qts-freecstring) - - [QTS\_FreeContext](QuickJSAsyncFFI.md#qts-freecontext) - - [QTS\_FreeRuntime](QuickJSAsyncFFI.md#qts-freeruntime) - - [QTS\_FreeValuePointer](QuickJSAsyncFFI.md#qts-freevaluepointer) - - [QTS\_FreeValuePointerRuntime](QuickJSAsyncFFI.md#qts-freevaluepointerruntime) - - [QTS\_FreeVoidPointer](QuickJSAsyncFFI.md#qts-freevoidpointer) - - [QTS\_GetArrayBuffer](QuickJSAsyncFFI.md#qts-getarraybuffer) - - [QTS\_GetArrayBufferLength](QuickJSAsyncFFI.md#qts-getarraybufferlength) - - [QTS\_GetDebugLogEnabled](QuickJSAsyncFFI.md#qts-getdebuglogenabled) - - [QTS\_GetFalse](QuickJSAsyncFFI.md#qts-getfalse) - - [QTS\_GetFloat64](QuickJSAsyncFFI.md#qts-getfloat64) - - [QTS\_GetGlobalObject](QuickJSAsyncFFI.md#qts-getglobalobject) - - [QTS\_GetLength](QuickJSAsyncFFI.md#qts-getlength) - - [QTS\_GetModuleNamespace](QuickJSAsyncFFI.md#qts-getmodulenamespace) - - [QTS\_GetNull](QuickJSAsyncFFI.md#qts-getnull) - - [QTS\_GetOwnPropertyNames](QuickJSAsyncFFI.md#qts-getownpropertynames) - - [QTS\_GetOwnPropertyNames\_MaybeAsync](QuickJSAsyncFFI.md#qts-getownpropertynames-maybeasync) - - [QTS\_GetProp](QuickJSAsyncFFI.md#qts-getprop) - - [QTS\_GetPropNumber](QuickJSAsyncFFI.md#qts-getpropnumber) - - [QTS\_GetPropNumber\_MaybeAsync](QuickJSAsyncFFI.md#qts-getpropnumber-maybeasync) - - [QTS\_GetProp\_MaybeAsync](QuickJSAsyncFFI.md#qts-getprop-maybeasync) - - [QTS\_GetString](QuickJSAsyncFFI.md#qts-getstring) - - [QTS\_GetSymbolDescriptionOrKey](QuickJSAsyncFFI.md#qts-getsymboldescriptionorkey) - - [QTS\_GetSymbolDescriptionOrKey\_MaybeAsync](QuickJSAsyncFFI.md#qts-getsymboldescriptionorkey-maybeasync) - - [QTS\_GetTrue](QuickJSAsyncFFI.md#qts-gettrue) - - [QTS\_GetUndefined](QuickJSAsyncFFI.md#qts-getundefined) - - [QTS\_IsEqual](QuickJSAsyncFFI.md#qts-isequal) - - [QTS\_IsGlobalSymbol](QuickJSAsyncFFI.md#qts-isglobalsymbol) - - [QTS\_IsJobPending](QuickJSAsyncFFI.md#qts-isjobpending) - - [QTS\_NewArray](QuickJSAsyncFFI.md#qts-newarray) - - [QTS\_NewArrayBuffer](QuickJSAsyncFFI.md#qts-newarraybuffer) - - [QTS\_NewContext](QuickJSAsyncFFI.md#qts-newcontext) - - [QTS\_NewError](QuickJSAsyncFFI.md#qts-newerror) - - [QTS\_NewFloat64](QuickJSAsyncFFI.md#qts-newfloat64) - - [QTS\_NewFunction](QuickJSAsyncFFI.md#qts-newfunction) - - [QTS\_NewObject](QuickJSAsyncFFI.md#qts-newobject) - - [QTS\_NewObjectProto](QuickJSAsyncFFI.md#qts-newobjectproto) - - [QTS\_NewPromiseCapability](QuickJSAsyncFFI.md#qts-newpromisecapability) - - [QTS\_NewRuntime](QuickJSAsyncFFI.md#qts-newruntime) - - [QTS\_NewString](QuickJSAsyncFFI.md#qts-newstring) - - [QTS\_NewSymbol](QuickJSAsyncFFI.md#qts-newsymbol) - - [QTS\_PromiseResult](QuickJSAsyncFFI.md#qts-promiseresult) - - [QTS\_PromiseState](QuickJSAsyncFFI.md#qts-promisestate) - - [QTS\_RecoverableLeakCheck](QuickJSAsyncFFI.md#qts-recoverableleakcheck) - - [QTS\_ResolveException](QuickJSAsyncFFI.md#qts-resolveexception) - - [QTS\_RuntimeComputeMemoryUsage](QuickJSAsyncFFI.md#qts-runtimecomputememoryusage) - - [QTS\_RuntimeDisableInterruptHandler](QuickJSAsyncFFI.md#qts-runtimedisableinterrupthandler) - - [QTS\_RuntimeDisableModuleLoader](QuickJSAsyncFFI.md#qts-runtimedisablemoduleloader) - - [QTS\_RuntimeDumpMemoryUsage](QuickJSAsyncFFI.md#qts-runtimedumpmemoryusage) - - [QTS\_RuntimeEnableInterruptHandler](QuickJSAsyncFFI.md#qts-runtimeenableinterrupthandler) - - [QTS\_RuntimeEnableModuleLoader](QuickJSAsyncFFI.md#qts-runtimeenablemoduleloader) - - [QTS\_RuntimeSetMaxStackSize](QuickJSAsyncFFI.md#qts-runtimesetmaxstacksize) - - [QTS\_RuntimeSetMemoryLimit](QuickJSAsyncFFI.md#qts-runtimesetmemorylimit) - - [QTS\_SetDebugLogEnabled](QuickJSAsyncFFI.md#qts-setdebuglogenabled) - - [QTS\_SetProp](QuickJSAsyncFFI.md#qts-setprop) - - [QTS\_SetProp\_MaybeAsync](QuickJSAsyncFFI.md#qts-setprop-maybeasync) - - [QTS\_TestStringArg](QuickJSAsyncFFI.md#qts-teststringarg) - - [QTS\_Throw](QuickJSAsyncFFI.md#qts-throw) - - [QTS\_Typeof](QuickJSAsyncFFI.md#qts-typeof) - - [QTS\_bjson\_decode](QuickJSAsyncFFI.md#qts-bjson-decode) - - [QTS\_bjson\_encode](QuickJSAsyncFFI.md#qts-bjson-encode) - -## Unstable - -The FFI interface is considered private and may change. - -## Properties - -### DEBUG - -> **`readonly`** **DEBUG**: `boolean` - -Set at compile time. - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:39](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L39) - -*** - -### QTS\_ArgvGetJSValueConstPointer - -> **QTS\_ArgvGetJSValueConstPointer**: (`argv`, `index`) => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Parameters - -• **argv**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **index**: `number` - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:250](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L250) - -*** - -### QTS\_BuildIsAsyncify - -> **QTS\_BuildIsAsyncify**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:248](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L248) - -*** - -### QTS\_BuildIsDebug - -> **QTS\_BuildIsDebug**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:247](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L247) - -*** - -### QTS\_BuildIsSanitizeLeak - -> **QTS\_BuildIsSanitizeLeak**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L47) - -*** - -### QTS\_Call - -> **QTS\_Call**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **this\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:173](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L173) - -*** - -### QTS\_Call\_MaybeAsync - -> **QTS\_Call\_MaybeAsync**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **this\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:180](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L180) - -*** - -### QTS\_DefineProp - -> **QTS\_DefineProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`, `get`, `set`, `configurable`, `enumerable`, `has_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **get**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **set**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **configurable**: `boolean` - -• **enumerable**: `boolean` - -• **has\_value**: `boolean` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L148) - -*** - -### QTS\_Dump - -> **QTS\_Dump**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:188](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L188) - -*** - -### QTS\_Dump\_MaybeAsync - -> **QTS\_Dump\_MaybeAsync**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:192](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L192) - -*** - -### QTS\_DupValuePointer - -> **QTS\_DupValuePointer**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:61](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L61) - -*** - -### QTS\_Eval - -> **QTS\_Eval**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:196](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L196) - -*** - -### QTS\_Eval\_MaybeAsync - -> **QTS\_Eval\_MaybeAsync**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:204](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L204) - -*** - -### QTS\_ExecutePendingJob - -> **QTS\_ExecutePendingJob**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:106](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L106) - -*** - -### QTS\_ExecutePendingJob\_MaybeAsync - -> **QTS\_ExecutePendingJob\_MaybeAsync**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L111) - -*** - -### QTS\_FreeCString - -> **QTS\_FreeCString**: (`ctx`, `str`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **str**: [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:60](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L60) - -*** - -### QTS\_FreeContext - -> **QTS\_FreeContext**: (`ctx`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L56) - -*** - -### QTS\_FreeRuntime - -> **QTS\_FreeRuntime**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:54](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L54) - -*** - -### QTS\_FreeValuePointer - -> **QTS\_FreeValuePointer**: (`ctx`, `value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L57) - -*** - -### QTS\_FreeValuePointerRuntime - -> **QTS\_FreeValuePointerRuntime**: (`rt`, `value`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:58](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L58) - -*** - -### QTS\_FreeVoidPointer - -> **QTS\_FreeVoidPointer**: (`ctx`, `ptr`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **ptr**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:59](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L59) - -*** - -### QTS\_GetArrayBuffer - -> **QTS\_GetArrayBuffer**: (`ctx`, `data`) => [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:83](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L83) - -*** - -### QTS\_GetArrayBufferLength - -> **QTS\_GetArrayBufferLength**: (`ctx`, `data`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L87) - -*** - -### QTS\_GetDebugLogEnabled - -> **QTS\_GetDebugLogEnabled**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:245](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L245) - -*** - -### QTS\_GetFalse - -> **QTS\_GetFalse**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L51) - -*** - -### QTS\_GetFloat64 - -> **QTS\_GetFloat64**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:77](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L77) - -*** - -### QTS\_GetGlobalObject - -> **QTS\_GetGlobalObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:231](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L231) - -*** - -### QTS\_GetLength - -> **QTS\_GetLength**: (`ctx`, `out_len`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:220](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L220) - -*** - -### QTS\_GetModuleNamespace - -> **QTS\_GetModuleNamespace**: (`ctx`, `module_func_obj`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **module\_func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:212](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L212) - -*** - -### QTS\_GetNull - -> **QTS\_GetNull**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:50](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L50) - -*** - -### QTS\_GetOwnPropertyNames - -> **QTS\_GetOwnPropertyNames**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L159) - -*** - -### QTS\_GetOwnPropertyNames\_MaybeAsync - -> **QTS\_GetOwnPropertyNames\_MaybeAsync**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L166) - -*** - -### QTS\_GetProp - -> **QTS\_GetProp**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L116) - -*** - -### QTS\_GetPropNumber - -> **QTS\_GetPropNumber**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:126](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L126) - -*** - -### QTS\_GetPropNumber\_MaybeAsync - -> **QTS\_GetPropNumber\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L131) - -*** - -### QTS\_GetProp\_MaybeAsync - -> **QTS\_GetProp\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:121](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L121) - -*** - -### QTS\_GetString - -> **QTS\_GetString**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:79](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L79) - -*** - -### QTS\_GetSymbolDescriptionOrKey - -> **QTS\_GetSymbolDescriptionOrKey**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:96](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L96) - -*** - -### QTS\_GetSymbolDescriptionOrKey\_MaybeAsync - -> **QTS\_GetSymbolDescriptionOrKey\_MaybeAsync**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L100) - -*** - -### QTS\_GetTrue - -> **QTS\_GetTrue**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:52](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L52) - -*** - -### QTS\_GetUndefined - -> **QTS\_GetUndefined**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L49) - -*** - -### QTS\_IsEqual - -> **QTS\_IsEqual**: (`ctx`, `a`, `b`, `op`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **a**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **b**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **op**: [`IsEqualOp`](../exports.md#isequalop) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:225](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L225) - -*** - -### QTS\_IsGlobalSymbol - -> **QTS\_IsGlobalSymbol**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L104) - -*** - -### QTS\_IsJobPending - -> **QTS\_IsJobPending**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:105](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L105) - -*** - -### QTS\_NewArray - -> **QTS\_NewArray**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L70) - -*** - -### QTS\_NewArrayBuffer - -> **QTS\_NewArrayBuffer**: (`ctx`, `buffer`, `length`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **buffer**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -• **length**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:71](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L71) - -*** - -### QTS\_NewContext - -> **QTS\_NewContext**: (`rt`, `intrinsics`) => [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **intrinsics**: [`IntrinsicsFlags`](../exports.md#intrinsicsflags) - -#### Returns - -[`JSContextPointer`](../exports.md#jscontextpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L55) - -*** - -### QTS\_NewError - -> **QTS\_NewError**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:42](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L42) - -*** - -### QTS\_NewFloat64 - -> **QTS\_NewFloat64**: (`ctx`, `num`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **num**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L76) - -*** - -### QTS\_NewFunction - -> **QTS\_NewFunction**: (`ctx`, `func_id`, `name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_id**: `number` - -• **name**: `string` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:249](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L249) - -*** - -### QTS\_NewObject - -> **QTS\_NewObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:65](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L65) - -*** - -### QTS\_NewObjectProto - -> **QTS\_NewObjectProto**: (`ctx`, `proto`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **proto**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:66](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L66) - -*** - -### QTS\_NewPromiseCapability - -> **QTS\_NewPromiseCapability**: (`ctx`, `resolve_funcs_out`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **resolve\_funcs\_out**: [`JSValuePointerPointer`](../exports.md#jsvaluepointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:232](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L232) - -*** - -### QTS\_NewRuntime - -> **QTS\_NewRuntime**: () => [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L53) - -*** - -### QTS\_NewString - -> **QTS\_NewString**: (`ctx`, `string`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **string**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:78](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L78) - -*** - -### QTS\_NewSymbol - -> **QTS\_NewSymbol**: (`ctx`, `description`, `isGlobal`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **description**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **isGlobal**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:91](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L91) - -*** - -### QTS\_PromiseResult - -> **QTS\_PromiseResult**: (`ctx`, `promise`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:240](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L240) - -*** - -### QTS\_PromiseState - -> **QTS\_PromiseState**: (`ctx`, `promise`) => [`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:236](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L236) - -*** - -### QTS\_RecoverableLeakCheck - -> **QTS\_RecoverableLeakCheck**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L46) - -*** - -### QTS\_ResolveException - -> **QTS\_ResolveException**: (`ctx`, `maybe_exception`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **maybe\_exception**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:187](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L187) - -*** - -### QTS\_RuntimeComputeMemoryUsage - -> **QTS\_RuntimeComputeMemoryUsage**: (`rt`, `ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L44) - -*** - -### QTS\_RuntimeDisableInterruptHandler - -> **QTS\_RuntimeDisableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L255) - -*** - -### QTS\_RuntimeDisableModuleLoader - -> **QTS\_RuntimeDisableModuleLoader**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:257](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L257) - -*** - -### QTS\_RuntimeDumpMemoryUsage - -> **QTS\_RuntimeDumpMemoryUsage**: (`rt`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L45) - -*** - -### QTS\_RuntimeEnableInterruptHandler - -> **QTS\_RuntimeEnableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:254](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L254) - -*** - -### QTS\_RuntimeEnableModuleLoader - -> **QTS\_RuntimeEnableModuleLoader**: (`rt`, `use_custom_normalize`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **use\_custom\_normalize**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:256](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L256) - -*** - -### QTS\_RuntimeSetMaxStackSize - -> **QTS\_RuntimeSetMaxStackSize**: (`rt`, `stack_size`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **stack\_size**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:48](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L48) - -*** - -### QTS\_RuntimeSetMemoryLimit - -> **QTS\_RuntimeSetMemoryLimit**: (`rt`, `limit`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **limit**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L43) - -*** - -### QTS\_SetDebugLogEnabled - -> **QTS\_SetDebugLogEnabled**: (`rt`, `is_enabled`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **is\_enabled**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:246](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L246) - -*** - -### QTS\_SetProp - -> **QTS\_SetProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:136](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L136) - -*** - -### QTS\_SetProp\_MaybeAsync - -> **QTS\_SetProp\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` \| `Promise`\<`void`\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`void` \| `Promise`\<`void`\> - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:142](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L142) - -*** - -### QTS\_TestStringArg - -> **QTS\_TestStringArg**: (`string`) => `void` - -#### Parameters - -• **string**: `string` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:244](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L244) - -*** - -### QTS\_Throw - -> **QTS\_Throw**: (`ctx`, `error`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **error**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L41) - -*** - -### QTS\_Typeof - -> **QTS\_Typeof**: (`ctx`, `value`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:216](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L216) - -*** - -### QTS\_bjson\_decode - -> **QTS\_bjson\_decode**: (`ctx`, `data`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:262](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L262) - -*** - -### QTS\_bjson\_encode - -> **QTS\_bjson\_encode**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi-async.ts:258](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi-async.ts#L258) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncVariant.md b/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncVariant.md deleted file mode 100644 index c52c38891..000000000 --- a/doc/quickjs-emscripten-core/interfaces/QuickJSAsyncVariant.md +++ /dev/null @@ -1,67 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSAsyncVariant - -# Interface: QuickJSAsyncVariant - -An ASYNCIFY build variant. - -quickjs-emscripten provides multiple build variants of the core WebAssembly -module. These variants are each intended for a different use case. - -To create an instance of the library using a specific build variant, pass the -build variant to newQuickJSWASMModule or newQuickJSAsyncWASMModule. - -## Contents - -- [Properties](QuickJSAsyncVariant.md#properties) - - [importFFI](QuickJSAsyncVariant.md#importffi) - - [importModuleLoader](QuickJSAsyncVariant.md#importmoduleloader) - - [type](QuickJSAsyncVariant.md#type) - -## Properties - -### importFFI - -> **`readonly`** **importFFI**: () => `Promise`\<(`module`) => [`QuickJSAsyncFFI`](QuickJSAsyncFFI.md)\> - -#### Returns - -`Promise`\<(`module`) => [`QuickJSAsyncFFI`](QuickJSAsyncFFI.md)\> - -> -> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L45) - -*** - -### importModuleLoader - -> **`readonly`** **importModuleLoader**: () => `Promise`\<`EmscriptenImport`\<[`QuickJSAsyncEmscriptenModule`](QuickJSAsyncEmscriptenModule.md)\>\> - -#### Returns - -`Promise`\<`EmscriptenImport`\<[`QuickJSAsyncEmscriptenModule`](QuickJSAsyncEmscriptenModule.md)\>\> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L46) - -*** - -### type - -> **`readonly`** **type**: `"async"` - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L44) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/QuickJSEmscriptenModule.md b/doc/quickjs-emscripten-core/interfaces/QuickJSEmscriptenModule.md deleted file mode 100644 index f3621bfea..000000000 --- a/doc/quickjs-emscripten-core/interfaces/QuickJSEmscriptenModule.md +++ /dev/null @@ -1,507 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSEmscriptenModule - -# Interface: QuickJSEmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](QuickJSEmscriptenModule.md#extends) -- [Properties](QuickJSEmscriptenModule.md#properties) - - [FAST\_MEMORY](QuickJSEmscriptenModule.md#fast-memory) - - [HEAP16](QuickJSEmscriptenModule.md#heap16) - - [HEAP32](QuickJSEmscriptenModule.md#heap32) - - [HEAP8](QuickJSEmscriptenModule.md#heap8) - - [HEAPF32](QuickJSEmscriptenModule.md#heapf32) - - [HEAPF64](QuickJSEmscriptenModule.md#heapf64) - - [HEAPU16](QuickJSEmscriptenModule.md#heapu16) - - [HEAPU32](QuickJSEmscriptenModule.md#heapu32) - - [HEAPU8](QuickJSEmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](QuickJSEmscriptenModule.md#total-memory) - - [TOTAL\_STACK](QuickJSEmscriptenModule.md#total-stack) - - [callbacks](QuickJSEmscriptenModule.md#callbacks) - - [type](QuickJSEmscriptenModule.md#type) - - [wasmBinary?](QuickJSEmscriptenModule.md#wasmbinary) - - [wasmMemory?](QuickJSEmscriptenModule.md#wasmmemory) -- [Methods](QuickJSEmscriptenModule.md#methods) - - [UTF8ToString()](QuickJSEmscriptenModule.md#utf8tostring) - - [\_free()](QuickJSEmscriptenModule.md#free) - - [\_malloc()](QuickJSEmscriptenModule.md#malloc) - - [cwrap()](QuickJSEmscriptenModule.md#cwrap) - - [instantiateWasm()?](QuickJSEmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](QuickJSEmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](QuickJSEmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](QuickJSEmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](QuickJSEmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.FAST_MEMORY`](EmscriptenModule.md#fast-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L168) - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAP16`](EmscriptenModule.md#heap16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:158](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L158) - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAP32`](EmscriptenModule.md#heap32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:159](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L159) - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAP8`](EmscriptenModule.md#heap8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:157](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L157) - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPF32`](EmscriptenModule.md#heapf32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:163](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L163) - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPF64`](EmscriptenModule.md#heapf64) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L164) - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPU16`](EmscriptenModule.md#heapu16) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:161](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L161) - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPU32`](EmscriptenModule.md#heapu32) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L162) - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.HEAPU8`](EmscriptenModule.md#heapu8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L160) - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.TOTAL_MEMORY`](EmscriptenModule.md#total-memory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:167](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L167) - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.TOTAL_STACK`](EmscriptenModule.md#total-stack) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L166) - -*** - -### callbacks - -> **callbacks**: `EmscriptenModuleCallbacks` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:237](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L237) - -*** - -### type - -> **type**: `"sync"` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:236](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L236) - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.wasmBinary`](EmscriptenModule.md#wasmbinary) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:104](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L104) - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.wasmMemory`](EmscriptenModule.md#wasmmemory) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L107) - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.UTF8ToString`](EmscriptenModule.md#utf8tostring) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:144](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L144) - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule._free`](EmscriptenModule.md#free) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L148) - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule._malloc`](EmscriptenModule.md#malloc) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L147) - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.cwrap`](EmscriptenModule.md#cwrap) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:149](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L149) - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.instantiateWasm`](EmscriptenModule.md#instantiatewasm) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:110](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L110) - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.lengthBytesUTF8`](EmscriptenModule.md#lengthbytesutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:145](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L145) - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.locateFile`](EmscriptenModule.md#locatefile) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:97](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L97) - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.monitorRunDependencies`](EmscriptenModule.md#monitorrundependencies) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L116) - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten-core.EmscriptenModule.stringToUTF8`](EmscriptenModule.md#stringtoutf8) - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:139](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L139) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/QuickJSFFI.md b/doc/quickjs-emscripten-core/interfaces/QuickJSFFI.md deleted file mode 100644 index 4251716a5..000000000 --- a/doc/quickjs-emscripten-core/interfaces/QuickJSFFI.md +++ /dev/null @@ -1,1399 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSFFI - -# Interface: QuickJSFFI - -Low-level FFI bindings to QuickJS's Emscripten module. -See instead [QuickJSContext](../classes/QuickJSContext.md), the public Javascript interface exposed by this -library. - -## Contents - -- [Unstable](QuickJSFFI.md#unstable) -- [Properties](QuickJSFFI.md#properties) - - [DEBUG](QuickJSFFI.md#debug) - - [QTS\_ArgvGetJSValueConstPointer](QuickJSFFI.md#qts-argvgetjsvalueconstpointer) - - [QTS\_BuildIsAsyncify](QuickJSFFI.md#qts-buildisasyncify) - - [QTS\_BuildIsDebug](QuickJSFFI.md#qts-buildisdebug) - - [QTS\_BuildIsSanitizeLeak](QuickJSFFI.md#qts-buildissanitizeleak) - - [QTS\_Call](QuickJSFFI.md#qts-call) - - [QTS\_DefineProp](QuickJSFFI.md#qts-defineprop) - - [QTS\_Dump](QuickJSFFI.md#qts-dump) - - [QTS\_DupValuePointer](QuickJSFFI.md#qts-dupvaluepointer) - - [QTS\_Eval](QuickJSFFI.md#qts-eval) - - [QTS\_ExecutePendingJob](QuickJSFFI.md#qts-executependingjob) - - [QTS\_FreeCString](QuickJSFFI.md#qts-freecstring) - - [QTS\_FreeContext](QuickJSFFI.md#qts-freecontext) - - [QTS\_FreeRuntime](QuickJSFFI.md#qts-freeruntime) - - [QTS\_FreeValuePointer](QuickJSFFI.md#qts-freevaluepointer) - - [QTS\_FreeValuePointerRuntime](QuickJSFFI.md#qts-freevaluepointerruntime) - - [QTS\_FreeVoidPointer](QuickJSFFI.md#qts-freevoidpointer) - - [QTS\_GetArrayBuffer](QuickJSFFI.md#qts-getarraybuffer) - - [QTS\_GetArrayBufferLength](QuickJSFFI.md#qts-getarraybufferlength) - - [QTS\_GetDebugLogEnabled](QuickJSFFI.md#qts-getdebuglogenabled) - - [QTS\_GetFalse](QuickJSFFI.md#qts-getfalse) - - [QTS\_GetFloat64](QuickJSFFI.md#qts-getfloat64) - - [QTS\_GetGlobalObject](QuickJSFFI.md#qts-getglobalobject) - - [QTS\_GetLength](QuickJSFFI.md#qts-getlength) - - [QTS\_GetModuleNamespace](QuickJSFFI.md#qts-getmodulenamespace) - - [QTS\_GetNull](QuickJSFFI.md#qts-getnull) - - [QTS\_GetOwnPropertyNames](QuickJSFFI.md#qts-getownpropertynames) - - [QTS\_GetProp](QuickJSFFI.md#qts-getprop) - - [QTS\_GetPropNumber](QuickJSFFI.md#qts-getpropnumber) - - [QTS\_GetString](QuickJSFFI.md#qts-getstring) - - [QTS\_GetSymbolDescriptionOrKey](QuickJSFFI.md#qts-getsymboldescriptionorkey) - - [QTS\_GetTrue](QuickJSFFI.md#qts-gettrue) - - [QTS\_GetUndefined](QuickJSFFI.md#qts-getundefined) - - [QTS\_IsEqual](QuickJSFFI.md#qts-isequal) - - [QTS\_IsGlobalSymbol](QuickJSFFI.md#qts-isglobalsymbol) - - [QTS\_IsJobPending](QuickJSFFI.md#qts-isjobpending) - - [QTS\_NewArray](QuickJSFFI.md#qts-newarray) - - [QTS\_NewArrayBuffer](QuickJSFFI.md#qts-newarraybuffer) - - [QTS\_NewContext](QuickJSFFI.md#qts-newcontext) - - [QTS\_NewError](QuickJSFFI.md#qts-newerror) - - [QTS\_NewFloat64](QuickJSFFI.md#qts-newfloat64) - - [QTS\_NewFunction](QuickJSFFI.md#qts-newfunction) - - [QTS\_NewObject](QuickJSFFI.md#qts-newobject) - - [QTS\_NewObjectProto](QuickJSFFI.md#qts-newobjectproto) - - [QTS\_NewPromiseCapability](QuickJSFFI.md#qts-newpromisecapability) - - [QTS\_NewRuntime](QuickJSFFI.md#qts-newruntime) - - [QTS\_NewString](QuickJSFFI.md#qts-newstring) - - [QTS\_NewSymbol](QuickJSFFI.md#qts-newsymbol) - - [QTS\_PromiseResult](QuickJSFFI.md#qts-promiseresult) - - [QTS\_PromiseState](QuickJSFFI.md#qts-promisestate) - - [QTS\_RecoverableLeakCheck](QuickJSFFI.md#qts-recoverableleakcheck) - - [QTS\_ResolveException](QuickJSFFI.md#qts-resolveexception) - - [QTS\_RuntimeComputeMemoryUsage](QuickJSFFI.md#qts-runtimecomputememoryusage) - - [QTS\_RuntimeDisableInterruptHandler](QuickJSFFI.md#qts-runtimedisableinterrupthandler) - - [QTS\_RuntimeDisableModuleLoader](QuickJSFFI.md#qts-runtimedisablemoduleloader) - - [QTS\_RuntimeDumpMemoryUsage](QuickJSFFI.md#qts-runtimedumpmemoryusage) - - [QTS\_RuntimeEnableInterruptHandler](QuickJSFFI.md#qts-runtimeenableinterrupthandler) - - [QTS\_RuntimeEnableModuleLoader](QuickJSFFI.md#qts-runtimeenablemoduleloader) - - [QTS\_RuntimeSetMaxStackSize](QuickJSFFI.md#qts-runtimesetmaxstacksize) - - [QTS\_RuntimeSetMemoryLimit](QuickJSFFI.md#qts-runtimesetmemorylimit) - - [QTS\_SetDebugLogEnabled](QuickJSFFI.md#qts-setdebuglogenabled) - - [QTS\_SetProp](QuickJSFFI.md#qts-setprop) - - [QTS\_TestStringArg](QuickJSFFI.md#qts-teststringarg) - - [QTS\_Throw](QuickJSFFI.md#qts-throw) - - [QTS\_Typeof](QuickJSFFI.md#qts-typeof) - - [QTS\_bjson\_decode](QuickJSFFI.md#qts-bjson-decode) - - [QTS\_bjson\_encode](QuickJSFFI.md#qts-bjson-encode) - -## Unstable - -The FFI interface is considered private and may change. - -## Properties - -### DEBUG - -> **`readonly`** **DEBUG**: `boolean` - -Set at compile time. - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:38](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L38) - -*** - -### QTS\_ArgvGetJSValueConstPointer - -> **QTS\_ArgvGetJSValueConstPointer**: (`argv`, `index`) => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Parameters - -• **argv**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **index**: `number` - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:198](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L198) - -*** - -### QTS\_BuildIsAsyncify - -> **QTS\_BuildIsAsyncify**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:196](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L196) - -*** - -### QTS\_BuildIsDebug - -> **QTS\_BuildIsDebug**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:195](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L195) - -*** - -### QTS\_BuildIsSanitizeLeak - -> **QTS\_BuildIsSanitizeLeak**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L46) - -*** - -### QTS\_Call - -> **QTS\_Call**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **this\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:140](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L140) - -*** - -### QTS\_DefineProp - -> **QTS\_DefineProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`, `get`, `set`, `configurable`, `enumerable`, `has_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **get**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **set**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **configurable**: `boolean` - -• **enumerable**: `boolean` - -• **has\_value**: `boolean` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:122](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L122) - -*** - -### QTS\_Dump - -> **QTS\_Dump**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:148](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L148) - -*** - -### QTS\_DupValuePointer - -> **QTS\_DupValuePointer**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:60](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L60) - -*** - -### QTS\_Eval - -> **QTS\_Eval**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L152) - -*** - -### QTS\_ExecutePendingJob - -> **QTS\_ExecutePendingJob**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:101](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L101) - -*** - -### QTS\_FreeCString - -> **QTS\_FreeCString**: (`ctx`, `str`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **str**: [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:59](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L59) - -*** - -### QTS\_FreeContext - -> **QTS\_FreeContext**: (`ctx`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L55) - -*** - -### QTS\_FreeRuntime - -> **QTS\_FreeRuntime**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L53) - -*** - -### QTS\_FreeValuePointer - -> **QTS\_FreeValuePointer**: (`ctx`, `value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L56) - -*** - -### QTS\_FreeValuePointerRuntime - -> **QTS\_FreeValuePointerRuntime**: (`rt`, `value`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L57) - -*** - -### QTS\_FreeVoidPointer - -> **QTS\_FreeVoidPointer**: (`ctx`, `ptr`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **ptr**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:58](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L58) - -*** - -### QTS\_GetArrayBuffer - -> **QTS\_GetArrayBuffer**: (`ctx`, `data`) => [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:82](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L82) - -*** - -### QTS\_GetArrayBufferLength - -> **QTS\_GetArrayBufferLength**: (`ctx`, `data`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L86) - -*** - -### QTS\_GetDebugLogEnabled - -> **QTS\_GetDebugLogEnabled**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:193](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L193) - -*** - -### QTS\_GetFalse - -> **QTS\_GetFalse**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:50](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L50) - -*** - -### QTS\_GetFloat64 - -> **QTS\_GetFloat64**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L76) - -*** - -### QTS\_GetGlobalObject - -> **QTS\_GetGlobalObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:179](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L179) - -*** - -### QTS\_GetLength - -> **QTS\_GetLength**: (`ctx`, `out_len`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:168](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L168) - -*** - -### QTS\_GetModuleNamespace - -> **QTS\_GetModuleNamespace**: (`ctx`, `module_func_obj`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **module\_func\_obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:160](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L160) - -*** - -### QTS\_GetNull - -> **QTS\_GetNull**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L49) - -*** - -### QTS\_GetOwnPropertyNames - -> **QTS\_GetOwnPropertyNames**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:133](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L133) - -*** - -### QTS\_GetProp - -> **QTS\_GetProp**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:106](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L106) - -*** - -### QTS\_GetPropNumber - -> **QTS\_GetPropNumber**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L111) - -*** - -### QTS\_GetString - -> **QTS\_GetString**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:78](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L78) - -*** - -### QTS\_GetSymbolDescriptionOrKey - -> **QTS\_GetSymbolDescriptionOrKey**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:95](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L95) - -*** - -### QTS\_GetTrue - -> **QTS\_GetTrue**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L51) - -*** - -### QTS\_GetUndefined - -> **QTS\_GetUndefined**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:48](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L48) - -*** - -### QTS\_IsEqual - -> **QTS\_IsEqual**: (`ctx`, `a`, `b`, `op`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **a**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **b**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **op**: [`IsEqualOp`](../exports.md#isequalop) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:173](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L173) - -*** - -### QTS\_IsGlobalSymbol - -> **QTS\_IsGlobalSymbol**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:99](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L99) - -*** - -### QTS\_IsJobPending - -> **QTS\_IsJobPending**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L100) - -*** - -### QTS\_NewArray - -> **QTS\_NewArray**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:69](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L69) - -*** - -### QTS\_NewArrayBuffer - -> **QTS\_NewArrayBuffer**: (`ctx`, `buffer`, `length`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **buffer**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -• **length**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L70) - -*** - -### QTS\_NewContext - -> **QTS\_NewContext**: (`rt`, `intrinsics`) => [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **intrinsics**: [`IntrinsicsFlags`](../exports.md#intrinsicsflags) - -#### Returns - -[`JSContextPointer`](../exports.md#jscontextpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:54](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L54) - -*** - -### QTS\_NewError - -> **QTS\_NewError**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L41) - -*** - -### QTS\_NewFloat64 - -> **QTS\_NewFloat64**: (`ctx`, `num`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **num**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:75](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L75) - -*** - -### QTS\_NewFunction - -> **QTS\_NewFunction**: (`ctx`, `func_id`, `name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_id**: `number` - -• **name**: `string` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:197](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L197) - -*** - -### QTS\_NewObject - -> **QTS\_NewObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:64](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L64) - -*** - -### QTS\_NewObjectProto - -> **QTS\_NewObjectProto**: (`ctx`, `proto`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **proto**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:65](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L65) - -*** - -### QTS\_NewPromiseCapability - -> **QTS\_NewPromiseCapability**: (`ctx`, `resolve_funcs_out`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **resolve\_funcs\_out**: [`JSValuePointerPointer`](../exports.md#jsvaluepointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:180](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L180) - -*** - -### QTS\_NewRuntime - -> **QTS\_NewRuntime**: () => [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:52](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L52) - -*** - -### QTS\_NewString - -> **QTS\_NewString**: (`ctx`, `string`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **string**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:77](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L77) - -*** - -### QTS\_NewSymbol - -> **QTS\_NewSymbol**: (`ctx`, `description`, `isGlobal`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **description**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **isGlobal**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:90](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L90) - -*** - -### QTS\_PromiseResult - -> **QTS\_PromiseResult**: (`ctx`, `promise`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:188](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L188) - -*** - -### QTS\_PromiseState - -> **QTS\_PromiseState**: (`ctx`, `promise`) => [`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:184](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L184) - -*** - -### QTS\_RecoverableLeakCheck - -> **QTS\_RecoverableLeakCheck**: () => `number` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L45) - -*** - -### QTS\_ResolveException - -> **QTS\_ResolveException**: (`ctx`, `maybe_exception`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **maybe\_exception**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L147) - -*** - -### QTS\_RuntimeComputeMemoryUsage - -> **QTS\_RuntimeComputeMemoryUsage**: (`rt`, `ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L43) - -*** - -### QTS\_RuntimeDisableInterruptHandler - -> **QTS\_RuntimeDisableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:203](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L203) - -*** - -### QTS\_RuntimeDisableModuleLoader - -> **QTS\_RuntimeDisableModuleLoader**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:205](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L205) - -*** - -### QTS\_RuntimeDumpMemoryUsage - -> **QTS\_RuntimeDumpMemoryUsage**: (`rt`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L44) - -*** - -### QTS\_RuntimeEnableInterruptHandler - -> **QTS\_RuntimeEnableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:202](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L202) - -*** - -### QTS\_RuntimeEnableModuleLoader - -> **QTS\_RuntimeEnableModuleLoader**: (`rt`, `use_custom_normalize`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **use\_custom\_normalize**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:204](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L204) - -*** - -### QTS\_RuntimeSetMaxStackSize - -> **QTS\_RuntimeSetMaxStackSize**: (`rt`, `stack_size`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **stack\_size**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L47) - -*** - -### QTS\_RuntimeSetMemoryLimit - -> **QTS\_RuntimeSetMemoryLimit**: (`rt`, `limit`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **limit**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:42](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L42) - -*** - -### QTS\_SetDebugLogEnabled - -> **QTS\_SetDebugLogEnabled**: (`rt`, `is_enabled`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **is\_enabled**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:194](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L194) - -*** - -### QTS\_SetProp - -> **QTS\_SetProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_name**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -• **prop\_value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:116](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L116) - -*** - -### QTS\_TestStringArg - -> **QTS\_TestStringArg**: (`string`) => `void` - -#### Parameters - -• **string**: `string` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:192](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L192) - -*** - -### QTS\_Throw - -> **QTS\_Throw**: (`ctx`, `error`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **error**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:40](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L40) - -*** - -### QTS\_Typeof - -> **QTS\_Typeof**: (`ctx`, `value`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L164) - -*** - -### QTS\_bjson\_decode - -> **QTS\_bjson\_decode**: (`ctx`, `data`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:210](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L210) - -*** - -### QTS\_bjson\_encode - -> **QTS\_bjson\_encode**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValuePointer`](../exports.md#jsvaluepointer) \| [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-ffi-types/src/ffi.ts:206](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/ffi.ts#L206) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/QuickJSSyncVariant.md b/doc/quickjs-emscripten-core/interfaces/QuickJSSyncVariant.md deleted file mode 100644 index d751c9f87..000000000 --- a/doc/quickjs-emscripten-core/interfaces/QuickJSSyncVariant.md +++ /dev/null @@ -1,67 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / QuickJSSyncVariant - -# Interface: QuickJSSyncVariant - -A standard (sync) build variant. - -quickjs-emscripten provides multiple build variants of the core WebAssembly -module. These variants are each intended for a different use case. - -To create an instance of the library using a specific build variant, pass the -build variant to newQuickJSWASMModule or newQuickJSAsyncWASMModule. - -## Contents - -- [Properties](QuickJSSyncVariant.md#properties) - - [importFFI](QuickJSSyncVariant.md#importffi) - - [importModuleLoader](QuickJSSyncVariant.md#importmoduleloader) - - [type](QuickJSSyncVariant.md#type) - -## Properties - -### importFFI - -> **`readonly`** **importFFI**: () => `Promise`\<(`module`) => [`QuickJSFFI`](QuickJSFFI.md)\> - -#### Returns - -`Promise`\<(`module`) => [`QuickJSFFI`](QuickJSFFI.md)\> - -> -> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:30](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L30) - -*** - -### importModuleLoader - -> **`readonly`** **importModuleLoader**: () => `Promise`\<`EmscriptenImport`\<[`QuickJSEmscriptenModule`](QuickJSEmscriptenModule.md)\>\> - -#### Returns - -`Promise`\<`EmscriptenImport`\<[`QuickJSEmscriptenModule`](QuickJSEmscriptenModule.md)\>\> - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:31](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L31) - -*** - -### type - -> **`readonly`** **type**: `"sync"` - -#### Source - -[packages/quickjs-ffi-types/src/variant-types.ts:29](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/variant-types.ts#L29) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/RuntimeOptions.md b/doc/quickjs-emscripten-core/interfaces/RuntimeOptions.md deleted file mode 100644 index 28800342b..000000000 --- a/doc/quickjs-emscripten-core/interfaces/RuntimeOptions.md +++ /dev/null @@ -1,136 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / RuntimeOptions - -# Interface: RuntimeOptions - -## Contents - -- [Extends](RuntimeOptions.md#extends) -- [Properties](RuntimeOptions.md#properties) - - [gcThreshold?](RuntimeOptions.md#gcthreshold) - - [interruptHandler?](RuntimeOptions.md#interrupthandler) - - [maxStackSizeBytes?](RuntimeOptions.md#maxstacksizebytes) - - [memoryLimitBytes?](RuntimeOptions.md#memorylimitbytes) - - [moduleLoader?](RuntimeOptions.md#moduleloader) - - [promiseRejectionHandler?](RuntimeOptions.md#promiserejectionhandler) - - [runtimeInfo?](RuntimeOptions.md#runtimeinfo) - - [sharedArrayBufferFunctions?](RuntimeOptions.md#sharedarraybufferfunctions) - -## Extends - -- [`RuntimeOptionsBase`](RuntimeOptionsBase.md) - -## Properties - -### gcThreshold? - -> **gcThreshold**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.gcThreshold`](RuntimeOptionsBase.md#gcthreshold) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:119](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L119) - -*** - -### interruptHandler? - -> **interruptHandler**?: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.interruptHandler`](RuntimeOptionsBase.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L113) - -*** - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.maxStackSizeBytes`](RuntimeOptionsBase.md#maxstacksizebytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:114](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L114) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.memoryLimitBytes`](RuntimeOptionsBase.md#memorylimitbytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:115](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L115) - -*** - -### moduleLoader? - -> **moduleLoader**?: [`JSModuleLoader`](JSModuleLoader.md) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:133](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L133) - -*** - -### promiseRejectionHandler? - -> **promiseRejectionHandler**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.promiseRejectionHandler`](RuntimeOptionsBase.md#promiserejectionhandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L117) - -*** - -### runtimeInfo? - -> **runtimeInfo**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.runtimeInfo`](RuntimeOptionsBase.md#runtimeinfo) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L118) - -*** - -### sharedArrayBufferFunctions? - -> **sharedArrayBufferFunctions**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten-core.RuntimeOptionsBase.sharedArrayBufferFunctions`](RuntimeOptionsBase.md#sharedarraybufferfunctions) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/RuntimeOptionsBase.md b/doc/quickjs-emscripten-core/interfaces/RuntimeOptionsBase.md deleted file mode 100644 index bc775a177..000000000 --- a/doc/quickjs-emscripten-core/interfaces/RuntimeOptionsBase.md +++ /dev/null @@ -1,98 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / RuntimeOptionsBase - -# Interface: RuntimeOptionsBase - -## Contents - -- [Extended By](RuntimeOptionsBase.md#extended-by) -- [Properties](RuntimeOptionsBase.md#properties) - - [gcThreshold?](RuntimeOptionsBase.md#gcthreshold) - - [interruptHandler?](RuntimeOptionsBase.md#interrupthandler) - - [maxStackSizeBytes?](RuntimeOptionsBase.md#maxstacksizebytes) - - [memoryLimitBytes?](RuntimeOptionsBase.md#memorylimitbytes) - - [promiseRejectionHandler?](RuntimeOptionsBase.md#promiserejectionhandler) - - [runtimeInfo?](RuntimeOptionsBase.md#runtimeinfo) - - [sharedArrayBufferFunctions?](RuntimeOptionsBase.md#sharedarraybufferfunctions) - -## Extended By - -- [`RuntimeOptions`](RuntimeOptions.md) -- [`AsyncRuntimeOptions`](AsyncRuntimeOptions.md) - -## Properties - -### gcThreshold? - -> **gcThreshold**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:119](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L119) - -*** - -### interruptHandler? - -> **interruptHandler**?: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L113) - -*** - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:114](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L114) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:115](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L115) - -*** - -### promiseRejectionHandler? - -> **promiseRejectionHandler**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L117) - -*** - -### runtimeInfo? - -> **runtimeInfo**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L118) - -*** - -### sharedArrayBufferFunctions? - -> **sharedArrayBufferFunctions**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/SourceMapData.md b/doc/quickjs-emscripten-core/interfaces/SourceMapData.md deleted file mode 100644 index 31350f94f..000000000 --- a/doc/quickjs-emscripten-core/interfaces/SourceMapData.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / SourceMapData - -# Interface: SourceMapData - -## Contents - -- [Properties](SourceMapData.md#properties) - - [mappings](SourceMapData.md#mappings) - - [names](SourceMapData.md#names) - - [sources](SourceMapData.md#sources) - - [version](SourceMapData.md#version) - -## Properties - -### mappings - -> **mappings**: `string` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:58](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L58) - -*** - -### names - -> **names**: `string`[] - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L57) - -*** - -### sources - -> **sources**: `string`[] - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:56](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L56) - -*** - -### version - -> **version**: `number` - -#### Source - -[packages/quickjs-ffi-types/src/emscripten-types.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-ffi-types/src/emscripten-types.ts#L55) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/interfaces/VmPropertyDescriptor.md b/doc/quickjs-emscripten-core/interfaces/VmPropertyDescriptor.md deleted file mode 100644 index a00e7bc92..000000000 --- a/doc/quickjs-emscripten-core/interfaces/VmPropertyDescriptor.md +++ /dev/null @@ -1,95 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten-core** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten-core](../exports.md) / VmPropertyDescriptor - -# Interface: VmPropertyDescriptor\ - -From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/ - -## Contents - -- [Type parameters](VmPropertyDescriptor.md#type-parameters) -- [Properties](VmPropertyDescriptor.md#properties) - - [configurable?](VmPropertyDescriptor.md#configurable) - - [enumerable?](VmPropertyDescriptor.md#enumerable) - - [get?](VmPropertyDescriptor.md#get) - - [set?](VmPropertyDescriptor.md#set) - - [value?](VmPropertyDescriptor.md#value) - -## Type parameters - -• **VmHandle** - -## Properties - -### configurable? - -> **configurable**?: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L85) - -*** - -### enumerable? - -> **enumerable**?: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L86) - -*** - -### get? - -> **get**?: (`this`) => `VmHandle` - -#### Parameters - -• **this**: `VmHandle` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L87) - -*** - -### set? - -> **set**?: (`this`, `value`) => `void` - -#### Parameters - -• **this**: `VmHandle` - -• **value**: `VmHandle` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:88](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L88) - -*** - -### value? - -> **value**?: `VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L84) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/README.md b/doc/quickjs-emscripten-core/namespaces/errors/README.md deleted file mode 100644 index 46c855dd5..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/README.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../README.md) \| [Exports](../../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [quickjs-emscripten-core](../../exports.md) / errors - -# Namespace: errors - -Collects the informative errors this library may throw. - -## Index - -### Classes - -- [QuickJSAsyncifyError](classes/QuickJSAsyncifyError.md) -- [QuickJSAsyncifySuspended](classes/QuickJSAsyncifySuspended.md) -- [QuickJSEmptyGetOwnPropertyNames](classes/QuickJSEmptyGetOwnPropertyNames.md) -- [QuickJSEmscriptenModuleError](classes/QuickJSEmscriptenModuleError.md) -- [QuickJSMemoryLeakDetected](classes/QuickJSMemoryLeakDetected.md) -- [QuickJSNotImplemented](classes/QuickJSNotImplemented.md) -- [QuickJSPromisePending](classes/QuickJSPromisePending.md) -- [QuickJSUnknownIntrinsic](classes/QuickJSUnknownIntrinsic.md) -- [QuickJSUnwrapError](classes/QuickJSUnwrapError.md) -- [QuickJSUseAfterFree](classes/QuickJSUseAfterFree.md) -- [QuickJSWrongOwner](classes/QuickJSWrongOwner.md) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifyError.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifyError.md deleted file mode 100644 index f54e832f5..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifyError.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSAsyncifyError - -# Class: QuickJSAsyncifyError - -## Contents - -- [Extends](QuickJSAsyncifyError.md#extends) -- [Constructors](QuickJSAsyncifyError.md#constructors) - - [new QuickJSAsyncifyError(message)](QuickJSAsyncifyError.md#new-quickjsasyncifyerrormessage) -- [Properties](QuickJSAsyncifyError.md#properties) - - [name](QuickJSAsyncifyError.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSAsyncifyError(message) - -> **new QuickJSAsyncifyError**(`message`?): [`QuickJSAsyncifyError`](QuickJSAsyncifyError.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSAsyncifyError`](QuickJSAsyncifyError.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSAsyncifyError"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:33](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L33) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifySuspended.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifySuspended.md deleted file mode 100644 index 05168843b..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSAsyncifySuspended.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSAsyncifySuspended - -# Class: QuickJSAsyncifySuspended - -## Contents - -- [Extends](QuickJSAsyncifySuspended.md#extends) -- [Constructors](QuickJSAsyncifySuspended.md#constructors) - - [new QuickJSAsyncifySuspended(message)](QuickJSAsyncifySuspended.md#new-quickjsasyncifysuspendedmessage) -- [Properties](QuickJSAsyncifySuspended.md#properties) - - [name](QuickJSAsyncifySuspended.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSAsyncifySuspended(message) - -> **new QuickJSAsyncifySuspended**(`message`?): [`QuickJSAsyncifySuspended`](QuickJSAsyncifySuspended.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSAsyncifySuspended`](QuickJSAsyncifySuspended.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSAsyncifySuspended"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:37](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L37) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md deleted file mode 100644 index 38907f4da..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSEmptyGetOwnPropertyNames - -# Class: QuickJSEmptyGetOwnPropertyNames - -## Contents - -- [Extends](QuickJSEmptyGetOwnPropertyNames.md#extends) -- [Constructors](QuickJSEmptyGetOwnPropertyNames.md#constructors) - - [new QuickJSEmptyGetOwnPropertyNames(message)](QuickJSEmptyGetOwnPropertyNames.md#new-quickjsemptygetownpropertynamesmessage) -- [Properties](QuickJSEmptyGetOwnPropertyNames.md#properties) - - [name](QuickJSEmptyGetOwnPropertyNames.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSEmptyGetOwnPropertyNames(message) - -> **new QuickJSEmptyGetOwnPropertyNames**(`message`?): [`QuickJSEmptyGetOwnPropertyNames`](QuickJSEmptyGetOwnPropertyNames.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSEmptyGetOwnPropertyNames`](QuickJSEmptyGetOwnPropertyNames.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSEmptyGetOwnPropertyNames"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L57) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmscriptenModuleError.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmscriptenModuleError.md deleted file mode 100644 index 6de3198c6..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSEmscriptenModuleError.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSEmscriptenModuleError - -# Class: QuickJSEmscriptenModuleError - -## Contents - -- [Extends](QuickJSEmscriptenModuleError.md#extends) -- [Constructors](QuickJSEmscriptenModuleError.md#constructors) - - [new QuickJSEmscriptenModuleError(message)](QuickJSEmscriptenModuleError.md#new-quickjsemscriptenmoduleerrormessage) -- [Properties](QuickJSEmscriptenModuleError.md#properties) - - [name](QuickJSEmscriptenModuleError.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSEmscriptenModuleError(message) - -> **new QuickJSEmscriptenModuleError**(`message`?): [`QuickJSEmscriptenModuleError`](QuickJSEmscriptenModuleError.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSEmscriptenModuleError`](QuickJSEmscriptenModuleError.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSEmscriptenModuleError"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L45) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSMemoryLeakDetected.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSMemoryLeakDetected.md deleted file mode 100644 index 85c5385a7..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSMemoryLeakDetected.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSMemoryLeakDetected - -# Class: QuickJSMemoryLeakDetected - -## Contents - -- [Extends](QuickJSMemoryLeakDetected.md#extends) -- [Constructors](QuickJSMemoryLeakDetected.md#constructors) - - [new QuickJSMemoryLeakDetected(message)](QuickJSMemoryLeakDetected.md#new-quickjsmemoryleakdetectedmessage) -- [Properties](QuickJSMemoryLeakDetected.md#properties) - - [name](QuickJSMemoryLeakDetected.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSMemoryLeakDetected(message) - -> **new QuickJSMemoryLeakDetected**(`message`?): [`QuickJSMemoryLeakDetected`](QuickJSMemoryLeakDetected.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSMemoryLeakDetected`](QuickJSMemoryLeakDetected.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSMemoryLeakDetected"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L41) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSNotImplemented.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSNotImplemented.md deleted file mode 100644 index ab28b86af..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSNotImplemented.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSNotImplemented - -# Class: QuickJSNotImplemented - -## Contents - -- [Extends](QuickJSNotImplemented.md#extends) -- [Constructors](QuickJSNotImplemented.md#constructors) - - [new QuickJSNotImplemented(message)](QuickJSNotImplemented.md#new-quickjsnotimplementedmessage) -- [Properties](QuickJSNotImplemented.md#properties) - - [name](QuickJSNotImplemented.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSNotImplemented(message) - -> **new QuickJSNotImplemented**(`message`?): [`QuickJSNotImplemented`](QuickJSNotImplemented.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSNotImplemented`](QuickJSNotImplemented.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSNotImplemented"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:29](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L29) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSPromisePending.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSPromisePending.md deleted file mode 100644 index 48153e064..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSPromisePending.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSPromisePending - -# Class: QuickJSPromisePending - -## Contents - -- [Extends](QuickJSPromisePending.md#extends) -- [Constructors](QuickJSPromisePending.md#constructors) - - [new QuickJSPromisePending(message)](QuickJSPromisePending.md#new-quickjspromisependingmessage) -- [Properties](QuickJSPromisePending.md#properties) - - [name](QuickJSPromisePending.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSPromisePending(message) - -> **new QuickJSPromisePending**(`message`?): [`QuickJSPromisePending`](QuickJSPromisePending.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSPromisePending`](QuickJSPromisePending.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSPromisePending"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L53) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnknownIntrinsic.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnknownIntrinsic.md deleted file mode 100644 index 6cd58c476..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnknownIntrinsic.md +++ /dev/null @@ -1,80 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSUnknownIntrinsic - -# Class: QuickJSUnknownIntrinsic - -## Contents - -- [Extends](QuickJSUnknownIntrinsic.md#extends) -- [Constructors](QuickJSUnknownIntrinsic.md#constructors) - - [new QuickJSUnknownIntrinsic(message)](QuickJSUnknownIntrinsic.md#new-quickjsunknownintrinsicmessage) - - [new QuickJSUnknownIntrinsic(message)](QuickJSUnknownIntrinsic.md#new-quickjsunknownintrinsicmessage-1) -- [Properties](QuickJSUnknownIntrinsic.md#properties) - - [name](QuickJSUnknownIntrinsic.md#name) - -## Extends - -- `TypeError` - -## Constructors - -### new QuickJSUnknownIntrinsic(message) - -> **new QuickJSUnknownIntrinsic**(`message`?): [`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Inherited from - -`TypeError.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1136 - -### new QuickJSUnknownIntrinsic(message) - -> **new QuickJSUnknownIntrinsic**(`message`?): [`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Inherited from - -`TypeError.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSUnknownIntrinsic"` - -#### Overrides - -`TypeError.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L49) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnwrapError.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnwrapError.md deleted file mode 100644 index 69367ca28..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUnwrapError.md +++ /dev/null @@ -1,85 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSUnwrapError - -# Class: QuickJSUnwrapError - -Error thrown if [QuickJSContext#unwrapResult](../../../classes/QuickJSContext.md#unwrapresult) unwraps an error value that isn't an object. - -## Contents - -- [Extends](QuickJSUnwrapError.md#extends) -- [Constructors](QuickJSUnwrapError.md#constructors) - - [new QuickJSUnwrapError(cause, context)](QuickJSUnwrapError.md#new-quickjsunwraperrorcause-context) -- [Properties](QuickJSUnwrapError.md#properties) - - [cause](QuickJSUnwrapError.md#cause) - - [context?](QuickJSUnwrapError.md#context) - - [name](QuickJSUnwrapError.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSUnwrapError(cause, context) - -> **new QuickJSUnwrapError**(`cause`, `context`?): [`QuickJSUnwrapError`](QuickJSUnwrapError.md) - -#### Parameters - -• **cause**: `unknown` - -• **context?**: [`QuickJSContext`](../../../classes/QuickJSContext.md) - -#### Returns - -[`QuickJSUnwrapError`](QuickJSUnwrapError.md) - -#### Overrides - -`Error.constructor` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:8](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L8) - -## Properties - -### cause - -> **cause**: `unknown` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:9](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L9) - -*** - -### context? - -> **context**?: [`QuickJSContext`](../../../classes/QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:10](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L10) - -*** - -### name - -> **name**: `string` = `"QuickJSUnwrapError"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:7](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L7) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUseAfterFree.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUseAfterFree.md deleted file mode 100644 index 5b9a0df93..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSUseAfterFree.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSUseAfterFree - -# Class: QuickJSUseAfterFree - -## Contents - -- [Extends](QuickJSUseAfterFree.md#extends) -- [Constructors](QuickJSUseAfterFree.md#constructors) - - [new QuickJSUseAfterFree(message)](QuickJSUseAfterFree.md#new-quickjsuseafterfreemessage) -- [Properties](QuickJSUseAfterFree.md#properties) - - [name](QuickJSUseAfterFree.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSUseAfterFree(message) - -> **new QuickJSUseAfterFree**(`message`?): [`QuickJSUseAfterFree`](QuickJSUseAfterFree.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSUseAfterFree`](QuickJSUseAfterFree.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSUseAfterFree"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:25](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L25) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSWrongOwner.md b/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSWrongOwner.md deleted file mode 100644 index 174051134..000000000 --- a/doc/quickjs-emscripten-core/namespaces/errors/classes/QuickJSWrongOwner.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten-core** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten-core](../../../exports.md) / [errors](../README.md) / QuickJSWrongOwner - -# Class: QuickJSWrongOwner - -## Contents - -- [Extends](QuickJSWrongOwner.md#extends) -- [Constructors](QuickJSWrongOwner.md#constructors) - - [new QuickJSWrongOwner(message)](QuickJSWrongOwner.md#new-quickjswrongownermessage) -- [Properties](QuickJSWrongOwner.md#properties) - - [name](QuickJSWrongOwner.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSWrongOwner(message) - -> **new QuickJSWrongOwner**(`message`?): [`QuickJSWrongOwner`](QuickJSWrongOwner.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSWrongOwner`](QuickJSWrongOwner.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSWrongOwner"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:21](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L21) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/README.md b/doc/quickjs-emscripten/README.md deleted file mode 100644 index 56d90b3d2..000000000 --- a/doc/quickjs-emscripten/README.md +++ /dev/null @@ -1,956 +0,0 @@ -[quickjs-emscripten](../packages.md) • **quickjs-emscripten** • [Readme](README.md) \| [Exports](exports.md) - -*** - -# quickjs-emscripten - -Javascript/Typescript bindings for QuickJS, a modern Javascript interpreter, -compiled to WebAssembly. - -- Safely evaluate untrusted Javascript (supports [most of ES2023](https://test262.fyi/#|qjs,qjs_ng)). -- Create and manipulate values inside the QuickJS runtime ([more][values]). -- Expose host functions to the QuickJS runtime ([more][functions]). -- Execute synchronous code that uses asynchronous functions, with [asyncify][asyncify]. -- Supports browsers, NodeJS, Deno, Bun, Cloudflare Workers, QuickJS (via [quickjs-for-quickjs][]). - -[Github] | [NPM] | [API Documentation][api] | [Variants][core] | [Examples][tests] - -```typescript -import { getQuickJS } from "quickjs-emscripten" - -async function main() { - const QuickJS = await getQuickJS() - const vm = QuickJS.newContext() - - const world = vm.newString("world") - vm.setProp(vm.global, "NAME", world) - world.dispose() - - const result = vm.evalCode(`"Hello " + NAME + "!"`) - if (result.error) { - console.log("Execution failed:", vm.dump(result.error)) - result.error.dispose() - } else { - console.log("Success:", vm.dump(result.value)) - result.value.dispose() - } - - vm.dispose() -} - -main() -``` - -[github]: https://github.com/justjake/quickjs-emscripten -[npm]: https://www.npmjs.com/package/quickjs-emscripten -[api]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/packages.md -[tests]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/quickjs.test.ts -[values]: #interfacing-with-the-interpreter -[asyncify]: #asyncify -[functions]: #exposing-apis -[quickjs-for-quickjs]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-for-quickjs - -- [quickjs-emscripten](#quickjs-emscripten) - - [Usage](#usage) - - [Safely evaluate Javascript code](#safely-evaluate-javascript-code) - - [Interfacing with the interpreter](#interfacing-with-the-interpreter) - - [Runtime](#runtime) - - [EcmaScript Module Exports](#ecmascript-module-exports) - - [Memory Management](#memory-management) - - [`using` statement](#using-statement) - - [Scope](#scope) - - [`Lifetime.consume(fn)`](#lifetimeconsumefn) - - [Exposing APIs](#exposing-apis) - - [Promises](#promises) - - [context.getPromiseState(handle)](#contextgetpromisestatehandle) - - [context.resolvePromise(handle)](#contextresolvepromisehandle) - - [Asyncify](#asyncify) - - [Async module loader](#async-module-loader) - - [Async on host, sync in QuickJS](#async-on-host-sync-in-quickjs) - - [Testing your code](#testing-your-code) - - [Packaging](#packaging) - - [Reducing package size](#reducing-package-size) - - [WebAssembly loading](#webassembly-loading) - - [quickjs-ng](#quickjs-ng) - - [Using in the browser without a build step](#using-in-the-browser-without-a-build-step) - - [Debugging](#debugging) - - [Supported Platforms](#supported-platforms) - - [More Documentation](#more-documentation) - - [Background](#background) - - [Status \& Roadmap](#status--roadmap) - - [Related](#related) - - [Developing](#developing) - - [The C parts](#the-c-parts) - - [The Typescript parts](#the-typescript-parts) - - [Yarn updates](#yarn-updates) - -## Contents - -- [Usage](README.md#usage) - - [Safely evaluate Javascript code](README.md#safely-evaluate-javascript-code) - - [Interfacing with the interpreter](README.md#interfacing-with-the-interpreter) - - [Memory Management](README.md#memory-management) - - [Exposing APIs](README.md#exposing-apis) - - [Testing your code](README.md#testing-your-code) - - [Packaging](README.md#packaging) - - [Debugging](README.md#debugging) - - [Supported Platforms](README.md#supported-platforms) - - [More Documentation](README.md#more-documentation) -- [Background](README.md#background) -- [Status & Roadmap](README.md#status-roadmap) -- [Related](README.md#related) -- [Developing](README.md#developing) - - [The C parts](README.md#the-c-parts) - - [The Typescript parts](README.md#the-typescript-parts) - - [Yarn updates](README.md#yarn-updates) - -## Usage - -Install from `npm`: `npm install --save quickjs-emscripten` or `yarn add quickjs-emscripten`. - -The root entrypoint of this library is the `getQuickJS` function, which returns -a promise that resolves to a [QuickJSWASMModule](./doc/quickjs-emscripten/classes/QuickJSWASMModule.md) when -the QuickJS WASM module is ready. - -Once `getQuickJS` has been awaited at least once, you also can use the `getQuickJSSync` -function to directly access the singleton in your synchronous code. - -### Safely evaluate Javascript code - -See [QuickJSWASMModule.evalCode](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSWASMModule.md#evalcode) - -```typescript -import { getQuickJS, shouldInterruptAfterDeadline } from "quickjs-emscripten" - -getQuickJS().then((QuickJS) => { - const result = QuickJS.evalCode("1 + 1", { - shouldInterrupt: shouldInterruptAfterDeadline(Date.now() + 1000), - memoryLimitBytes: 1024 * 1024, - }) - console.log(result) -}) -``` - -### Interfacing with the interpreter - -You can use [QuickJSContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md) -to build a scripting environment by modifying globals and exposing functions -into the QuickJS interpreter. - -Each `QuickJSContext` instance has its own environment -- globals, built-in -classes -- and actions from one context won't leak into other contexts or -runtimes (with one exception, see [Asyncify][asyncify]). - -Every context is created inside a -[QuickJSRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSRuntime.md). -A runtime represents a Javascript heap, and you can even share values between -contexts in the same runtime. - -```typescript -const vm = QuickJS.newContext() -let state = 0 - -const fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) -}) - -vm.setProp(vm.global, "nextId", fnHandle) -fnHandle.dispose() - -const nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) -console.log("vm result:", vm.getNumber(nextId), "native state:", state) - -nextId.dispose() -vm.dispose() -``` - -When you create a context from a top-level API like in the example above, -instead of by calling `runtime.newContext()`, a runtime is automatically created -for the lifetime of the context, and disposed of when you dispose the context. - -#### Runtime - -The runtime has APIs for CPU and memory limits that apply to all contexts within -the runtime in aggregate. You can also use the runtime to configure EcmaScript -module loading. - -```typescript -const runtime = QuickJS.newRuntime() -// "Should be enough for everyone" -- attributed to B. Gates -runtime.setMemoryLimit(1024 * 640) -// Limit stack size -runtime.setMaxStackSize(1024 * 320) -// Interrupt computation after 1024 calls to the interrupt handler -let interruptCycles = 0 -runtime.setInterruptHandler(() => ++interruptCycles > 1024) -// Toy module system that always returns the module name -// as the default export -runtime.setModuleLoader((moduleName) => `export default '${moduleName}'`) -const context = runtime.newContext() -const ok = context.evalCode(` -import fooName from './foo.js' -globalThis.result = fooName -`) -context.unwrapResult(ok).dispose() -// logs "foo.js" -console.log(context.getProp(context.global, "result").consume(context.dump)) -context.dispose() -runtime.dispose() -``` - -#### EcmaScript Module Exports - -When you evaluate code as an ES Module, the result will be a handle to the -module's exports, or a handle to a promise that resolves to the module's -exports if the module depends on a top-level await. - -```typescript -const context = QuickJS.newContext() -const result = context.evalCode( - ` - export const name = 'Jake' - export const favoriteBean = 'wax bean' - export default 'potato' -`, - "jake.js", - { type: "module" }, -) -const moduleExports = context.unwrapResult(result) -console.log(context.dump(moduleExports)) -// -> { name: 'Jake', favoriteBean: 'wax bean', default: 'potato' } -moduleExports.dispose() -``` - -### Memory Management - -Many methods in this library return handles to memory allocated inside the -WebAssembly heap. These types cannot be garbage-collected as usual in -Javascript. Instead, you must manually manage their memory by calling a -`.dispose()` method to free the underlying resources. Once a handle has been -disposed, it cannot be used anymore. Note that in the example above, we call -`.dispose()` on each handle once it is no longer needed. - -Calling `QuickJSContext.dispose()` will throw a RuntimeError if you've forgotten to -dispose any handles associated with that VM, so it's good practice to create a -new VM instance for each of your tests, and to call `vm.dispose()` at the end -of every test. - -```typescript -const vm = QuickJS.newContext() -const numberHandle = vm.newNumber(42) -// Note: numberHandle not disposed, so it leaks memory. -vm.dispose() -// throws RuntimeError: abort(Assertion failed: list_empty(&rt->gc_obj_list), at: quickjs/quickjs.c,1963,JS_FreeRuntime) -``` - -Here are some strategies to reduce the toil of calling `.dispose()` on each -handle you create: - -#### `using` statement - -The `using` statement is a Stage 3 (as of 2023-12-29) proposal for Javascript that declares a constant variable and automatically calls the `[Symbol.dispose]()` method of an object when it goes out of scope. Read more [in this Typescript release announcement][using]. Here's the "Interfacing with the interpreter" example re-written using `using`: - -```typescript -using vm = QuickJS.newContext() -let state = 0 - -// The block here isn't needed for correctness, but it shows -// how to get a tighter bound on the lifetime of `fnHandle`. -{ - using fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }) - - vm.setProp(vm.global, "nextId", fnHandle) - // fnHandle.dispose() is called automatically when the block exits -} - -using nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) -console.log("vm result:", vm.getNumber(nextId), "native state:", state) -// nextId.dispose() is called automatically when the block exits -// vm.dispose() is called automatically when the block exits -``` - -[using]: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management - -#### Scope - -A -[`Scope`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/Scope.md#class-scope) -instance manages a set of disposables and calls their `.dispose()` -method in the reverse order in which they're added to the scope. Here's the -"Interfacing with the interpreter" example re-written using `Scope`: - -```typescript -Scope.withScope((scope) => { - const vm = scope.manage(QuickJS.newContext()) - let state = 0 - - const fnHandle = scope.manage( - vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }), - ) - - vm.setProp(vm.global, "nextId", fnHandle) - - const nextId = scope.manage(vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`))) - console.log("vm result:", vm.getNumber(nextId), "native state:", state) - - // When the withScope block exits, it calls scope.dispose(), which in turn calls - // the .dispose() methods of all the disposables managed by the scope. -}) -``` - -You can also create `Scope` instances with `new Scope()` if you want to manage -calling `scope.dispose()` yourself. - -#### `Lifetime.consume(fn)` - -[`Lifetime.consume`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/lifetime.md#consume) -is sugar for the common pattern of using a handle and then -immediately disposing of it. `Lifetime.consume` takes a `map` function that -produces a result of any type. The `map` fuction is called with the handle, -then the handle is disposed, then the result is returned. - -Here's the "Interfacing with interpreter" example re-written using `.consume()`: - -```typescript -const vm = QuickJS.newContext() -let state = 0 - -vm.newFunction("nextId", () => { - return vm.newNumber(++state) -}).consume((fnHandle) => vm.setProp(vm.global, "nextId", fnHandle)) - -vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)).consume((nextId) => - console.log("vm result:", vm.getNumber(nextId), "native state:", state), -) - -vm.dispose() -``` - -Generally working with `Scope` leads to more straight-forward code, but -`Lifetime.consume` can be handy sugar as part of a method call chain. - -### Exposing APIs - -To add APIs inside the QuickJS environment, you'll need to [create objects][newObject] to -define the shape of your API, and [add properties][setProp] and [functions][newFunction] to those objects -to allow code inside QuickJS to call code on the host. -The [newFunction][] documentation covers writing functions in detail. - -By default, no host functionality is exposed to code running inside QuickJS. - -```typescript -const vm = QuickJS.newContext() -// `console.log` -const logHandle = vm.newFunction("log", (...args) => { - const nativeArgs = args.map(vm.dump) - console.log("QuickJS:", ...nativeArgs) -}) -// Partially implement `console` object -const consoleHandle = vm.newObject() -vm.setProp(consoleHandle, "log", logHandle) -vm.setProp(vm.global, "console", consoleHandle) -consoleHandle.dispose() -logHandle.dispose() - -vm.unwrapResult(vm.evalCode(`console.log("Hello from QuickJS!")`)).dispose() -``` - -[newObject]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#newobject -[newFunction]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#newfunction -[setProp]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSContext.md#setprop - -#### Promises - -To expose an asynchronous function that _returns a promise_ to callers within -QuickJS, your function can return the handle of a `QuickJSDeferredPromise` -created via `context.newPromise()`. - -When you resolve a `QuickJSDeferredPromise` -- and generally whenever async -behavior completes for the VM -- pending listeners inside QuickJS may not -execute immediately. Your code needs to explicitly call -`runtime.executePendingJobs()` to resume execution inside QuickJS. This API -gives your code maximum control to _schedule_ when QuickJS will block the host's -event loop by resuming execution. - -To work with QuickJS handles that contain a promise inside the environment, -there are two options: - -##### context.getPromiseState(handle) - -You can synchronously peek into a QuickJS promise handle and get its state -without introducing asynchronous host code, described by the type [JSPromiseState][]: - -```typescript -type JSPromiseState = - | { type: "pending"; error: Error } - | { type: "fulfilled"; value: QuickJSHandle; notAPromise?: boolean } - | { type: "rejected"; error: QuickJSHandle } -``` - -The result conforms to the `SuccessOrFail` type returned by `context.evalCode`, so you can use `context.unwrapResult(context.getPromiseState(promiseHandle))` to assert a promise is settled successfully and retrieve its value. Calling `context.unwrapResult` on a pending or rejected promise will throw an error. - -```typescript -const promiseHandle = context.evalCode(`Promise.resolve(42)`) -const resultHandle = context.unwrapResult(context.getPromiseState(promiseHandle)) -context.getNumber(resultHandle) === 42 // true -resultHandle.dispose() -promiseHandle.dispose() -``` - -[JSPromiseState]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#jspromisestate - -##### context.resolvePromise(handle) - -You can convert the QuickJSHandle into a native promise using -`context.resolvePromise()`. Take care with this API to avoid 'deadlocks' where -the host awaits a guest promise, but the guest cannot make progress until the -host calls `runtime.executePendingJobs()`. The simplest way to avoid this kind -of deadlock is to always schedule `executePendingJobs` after any promise is -settled. - -```typescript -const vm = QuickJS.newContext() -const fakeFileSystem = new Map([["example.txt", "Example file content"]]) - -// Function that simulates reading data asynchronously -const readFileHandle = vm.newFunction("readFile", (pathHandle) => { - const path = vm.getString(pathHandle) - const promise = vm.newPromise() - setTimeout(() => { - const content = fakeFileSystem.get(path) - promise.resolve(vm.newString(content || "")) - }, 100) - // IMPORTANT: Once you resolve an async action inside QuickJS, - // call runtime.executePendingJobs() to run any code that was - // waiting on the promise or callback. - promise.settled.then(vm.runtime.executePendingJobs) - return promise.handle -}) -readFileHandle.consume((handle) => vm.setProp(vm.global, "readFile", handle)) - -// Evaluate code that uses `readFile`, which returns a promise -const result = vm.evalCode(`(async () => { - const content = await readFile('example.txt') - return content.toUpperCase() -})()`) -const promiseHandle = vm.unwrapResult(result) - -// Convert the promise handle into a native promise and await it. -// If code like this deadlocks, make sure you are calling -// runtime.executePendingJobs appropriately. -const resolvedResult = await vm.resolvePromise(promiseHandle) -promiseHandle.dispose() -const resolvedHandle = vm.unwrapResult(resolvedResult) -console.log("Result:", vm.getString(resolvedHandle)) -resolvedHandle.dispose() -``` - -#### Asyncify - -Sometimes, we want to create a function that's synchronous from the perspective -of QuickJS, but prefer to implement that function _asynchronously_ in your host -code. The most obvious use-case is for EcmaScript module loading. The underlying -QuickJS C library expects the module loader function to return synchronously, -but loading data synchronously in the browser or server is somewhere between "a -bad idea" and "impossible". QuickJS also doesn't expose an API to "pause" the -execution of a runtime, and adding such an API is tricky due to the VM's -implementation. - -As a work-around, we provide an alternate build of QuickJS processed by -Emscripten/Binaryen's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) -compiler transform. Here's how Emscripten's documentation describes Asyncify: - -> Asyncify lets synchronous C or C++ code interact with asynchronous \[host] JavaScript. This allows things like: -> -> - A synchronous call in C that yields to the event loop, which allows browser events to be handled. -> - A synchronous call in C that waits for an asynchronous operation in \[host] JS to complete. -> -> Asyncify automatically transforms ... code into a form that can be paused and -> resumed ..., so that it is asynchronous (hence the name “Asyncify”) even though -> \[it is written] in a normal synchronous way. - -This means we can suspend an _entire WebAssembly module_ (which could contain -multiple runtimes and contexts) while our host Javascript loads data -asynchronously, and then resume execution once the data load completes. This is -a very handy superpower, but it comes with a couple of major limitations: - -1. _An asyncified WebAssembly module can only suspend to wait for a single - asynchronous call at a time_. You may call back into a suspended WebAssembly - module eg. to create a QuickJS value to return a result, but the system will - crash if this call tries to suspend again. Take a look at Emscripten's documentation - on [reentrancy](https://emscripten.org/docs/porting/asyncify.html#reentrancy). - -2. _Asyncified code is bigger and runs slower_. The asyncified build of - Quickjs-emscripten library is 1M, 2x larger than the 500K of the default - version. There may be room for further - [optimization](https://emscripten.org/docs/porting/asyncify.html#optimizing) - Of our build in the future. - -To use asyncify features, use the following functions: - -- [newAsyncRuntime][]: create a runtime inside a new WebAssembly module. -- [newAsyncContext][]: create runtime and context together inside a new - WebAssembly module. -- [newQuickJSAsyncWASMModule][]: create an empty WebAssembly module. - -[newasyncruntime]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newasyncruntime -[newasynccontext]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newasynccontext -[newquickjsasyncwasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#newquickjsasyncwasmmodule - -These functions are asynchronous because they always create a new underlying -WebAssembly module so that each instance can suspend and resume independently, -and instantiating a WebAssembly module is an async operation. This also adds -substantial overhead compared to creating a runtime or context inside an -existing module; if you only need to wait for a single async action at a time, -you can create a single top-level module and create runtimes or contexts inside -of it. - -##### Async module loader - -Here's an example of valuating a script that loads React asynchronously as an ES -module. In our example, we're loading from the filesystem for reproducibility, -but you can use this technique to load using `fetch`. - -```typescript -const module = await newQuickJSAsyncWASMModule() -const runtime = module.newRuntime() -const path = await import("path") -const { promises: fs } = await import("fs") - -const importsPath = path.join(__dirname, "../examples/imports") + "/" -// Module loaders can return promises. -// Execution will suspend until the promise resolves. -runtime.setModuleLoader((moduleName) => { - const modulePath = path.join(importsPath, moduleName) - if (!modulePath.startsWith(importsPath)) { - throw new Error("out of bounds") - } - console.log("loading", moduleName, "from", modulePath) - return fs.readFile(modulePath, "utf-8") -}) - -// evalCodeAsync is required when execution may suspend. -const context = runtime.newContext() -const result = await context.evalCodeAsync(` -import * as React from 'esm.sh/react@17' -import * as ReactDOMServer from 'esm.sh/react-dom@17/server' -const e = React.createElement -globalThis.html = ReactDOMServer.renderToStaticMarkup( - e('div', null, e('strong', null, 'Hello world!')) -) -`) -context.unwrapResult(result).dispose() -const html = context.getProp(context.global, "html").consume(context.getString) -console.log(html) //
Hello world!
-``` - -##### Async on host, sync in QuickJS - -Here's an example of turning an async function into a sync function inside the -VM. - -```typescript -const context = await newAsyncContext() -const path = await import("path") -const { promises: fs } = await import("fs") - -const importsPath = path.join(__dirname, "../examples/imports") + "/" -const readFileHandle = context.newAsyncifiedFunction("readFile", async (pathHandle) => { - const pathString = path.join(importsPath, context.getString(pathHandle)) - if (!pathString.startsWith(importsPath)) { - throw new Error("out of bounds") - } - const data = await fs.readFile(pathString, "utf-8") - return context.newString(data) -}) -readFileHandle.consume((fn) => context.setProp(context.global, "readFile", fn)) - -// evalCodeAsync is required when execution may suspend. -const result = await context.evalCodeAsync(` -// Not a promise! Sync! vvvvvvvvvvvvvvvvvvvv -const data = JSON.parse(readFile('data.json')) -data.map(x => x.toUpperCase()).join(' ') -`) -const upperCaseData = context.unwrapResult(result).consume(context.getString) -console.log(upperCaseData) // 'VERY USEFUL DATA' -``` - -### Testing your code - -This library is complicated to use, so please consider automated testing your -implementation. We highly writing your test suite to run with both the "release" -build variant of quickjs-emscripten, and also the [DEBUG_SYNC] build variant. -The debug sync build variant has extra instrumentation code for detecting memory -leaks. - -The class [TestQuickJSWASMModule] exposes the memory leak detection API, -although this API is only accurate when using `DEBUG_SYNC` variant. You can also -enable [debug logging](#debugging) to help diagnose failures. - -```typescript -// Define your test suite in a function, so that you can test against -// different module loaders. -function myTests(moduleLoader: () => Promise) { - let QuickJS: TestQuickJSWASMModule - beforeEach(async () => { - // Get a unique TestQuickJSWASMModule instance for each test. - const wasmModule = await moduleLoader() - QuickJS = new TestQuickJSWASMModule(wasmModule) - }) - afterEach(() => { - // Assert that the test disposed all handles. The DEBUG_SYNC build - // variant will show detailed traces for each leak. - QuickJS.assertNoMemoryAllocated() - }) - - it("works well", () => { - // TODO: write a test using QuickJS - const context = QuickJS.newContext() - context.unwrapResult(context.evalCode("1 + 1")).dispose() - context.dispose() - }) -} - -// Run the test suite against a matrix of module loaders. -describe("Check for memory leaks with QuickJS DEBUG build", () => { - const moduleLoader = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) - myTests(moduleLoader) -}) - -describe("Realistic test with QuickJS RELEASE build", () => { - myTests(getQuickJS) -}) -``` - -For more testing examples, please explore the typescript source of [quickjs-emscripten][ts] repository. - -[ts]: https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/ -[debug_sync]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/exports.md#debug_sync -[testquickjswasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/TestQuickJSWASMModule.md - -### Packaging - -The main `quickjs-emscripten` package includes several build variants of the WebAssembly module: - -- `RELEASE...` build variants should be used in production. They offer better performance and smaller file size compared to `DEBUG...` build variants. - - `RELEASE_SYNC`: This is the default variant used when you don't explicitly provide one. It offers the fastest performance and smallest file size. - - `RELEASE_ASYNC`: The default variant if you need [asyncify][] magic, which comes at a performance cost. See the asyncify docs for details. -- `DEBUG...` build variants can be helpful during development and testing. They include source maps and assertions for catching bugs in your code. We recommend running your tests with _both_ a debug build variant and the release build variant you'll use in production. - - `DEBUG_SYNC`: Instrumented to detect memory leaks, in addition to assertions and source maps. - - `DEBUG_ASYNC`: An [asyncify][] variant with source maps. - -To use a variant, call `newQuickJSWASMModule` or `newQuickJSAsyncWASMModule` with the variant object. These functions return a promise that resolves to a [QuickJSWASMModule](./doc/quickjs-emscripten/classes/QuickJSWASMModule.md), the same as `getQuickJS`. - -```typescript -import { - newQuickJSWASMModule, - newQuickJSAsyncWASMModule, - RELEASE_SYNC, - DEBUG_SYNC, - RELEASE_ASYNC, - DEBUG_ASYNC, -} from "quickjs-emscripten" - -const QuickJSReleaseSync = await newQuickJSWASMModule(RELEASE_SYNC) -const QuickJSDebugSync = await newQuickJSWASMModule(DEBUG_SYNC) -const QuickJSReleaseAsync = await newQuickJSAsyncWASMModule(RELEASE_ASYNC) -const QuickJSDebugAsync = await newQuickJSAsyncWASMModule(DEBUG_ASYNC) - -for (const quickjs of [ - QuickJSReleaseSync, - QuickJSDebugSync, - QuickJSReleaseAsync, - QuickJSDebugAsync, -]) { - const vm = quickjs.newContext() - const result = vm.unwrapResult(vm.evalCode("1 + 1")).consume(vm.getNumber) - console.log(result) - vm.dispose() - quickjs.dispose() -} -``` - -#### Reducing package size - -Including 4 different copies of the WebAssembly module in the main package gives it an install size of [about 9.04mb](https://packagephobia.com/result?p=quickjs-emscripten). If you're building a CLI package or library of your own, or otherwise don't need to include 4 different variants in your `node_modules`, you can switch to the `quickjs-emscripten-core` package, which contains only the Javascript code for this library, and install one (or more) variants a-la-carte as separate packages. - -The most minimal setup would be to install `quickjs-emscripten-core` and `@jitl/quickjs-wasmfile-release-sync` (1.3mb total): - -```bash -yarn add quickjs-emscripten-core @jitl/quickjs-wasmfile-release-sync -du -h node_modules -# 640K node_modules/@jitl/quickjs-wasmfile-release-sync -# 80K node_modules/@jitl/quickjs-ffi-types -# 588K node_modules/quickjs-emscripten-core -# 1.3M node_modules -``` - -Then, you can use quickjs-emscripten-core's `newQuickJSWASMModuleFromVariant` to create a QuickJS module (see [the minimal example][minimal]): - -```typescript -// src/quickjs.mjs -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import RELEASE_SYNC from "@jitl/quickjs-wasmfile-release-sync" -export const QuickJS = await newQuickJSWASMModuleFromVariant(RELEASE_SYNC) - -// src/app.mjs -import { QuickJS } from "./quickjs.mjs" -console.log(QuickJS.evalCode("1 + 1")) -``` - -See the [documentation of quickjs-emscripten-core][core] for more details and the list of variant packages. - -[core]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten-core/README.md - -#### WebAssembly loading - -To run QuickJS, we need to load a WebAssembly module into the host Javascript runtime's memory (usually as an ArrayBuffer or TypedArray) and [compile it](https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/instantiate_static) to a [WebAssembly.Module](https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Module). This means we need to find the file path or URI of the WebAssembly module, and then read it using an API like `fetch` (browser) or `fs.readFile` (NodeJS). `quickjs-emscripten` tries to handle this automatically using patterns like `new URL('./local-path', import.meta.url)` that work in the browser or are handled automatically by bundlers, or `__dirname` in NodeJS, but you may need to configure this manually if these don't work in your environment, or you want more control about how the WebAssembly module is loaded. - -To customize the loading of an existing variant, create a new variant with your loading settings using `newVariant`, passing [CustomizeVariantOptions][newVariant]. For example, you need to customize loading in Cloudflare Workers (see [the full example][cloudflare]). - -```typescript -import { newQuickJSWASMModule, DEBUG_SYNC as baseVariant, newVariant } from "quickjs-emscripten" -import cloudflareWasmModule from "./DEBUG_SYNC.wasm" -import cloudflareWasmModuleSourceMap from "./DEBUG_SYNC.wasm.map.txt" - -/** - * We need to make a new variant that directly passes the imported WebAssembly.Module - * to Emscripten. Normally we'd load the wasm file as bytes from a URL, but - * that's forbidden in Cloudflare workers. - */ -const cloudflareVariant = newVariant(baseVariant, { - wasmModule: cloudflareWasmModule, - wasmSourceMapData: cloudflareWasmModuleSourceMap, -}) -``` - -[newVariant]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/interfaces/CustomizeVariantOptions.md - -#### quickjs-ng - -[quickjs-ng/quickjs](https://github.com/quickjs-ng/quickjs) (aka quickjs-ng) is a fork of the original [bellard/quickjs](https://github.com/quickjs-ng/quickjs) under active development. It implements more EcmaScript standards and removes some of quickjs's custom language features like BigFloat. - -There are several variants of quickjs-ng available, and quickjs-emscripten may switch to using quickjs-ng by default in the future. See [the list of variants][core]. - -#### Using in the browser without a build step - -You can use quickjs-emscripten directly from an HTML file in two ways: - -1. Import it in an ES Module script tag - - ```html - - - - ``` - -1. In edge cases, you might want to use the IIFE build which provides QuickJS as the global `QJS`. You should probably use the ES module though, any recent browser supports it. - - ```html - - - - - - ``` - -### Debugging - -Debug logging can be enabled globally, or for specific runtimes. You need to use a DEBUG build variant of the WebAssembly module to see debug log messages from the C part of this library. - -```typescript -import { newQuickJSWASMModule, DEBUG_SYNC } from "quickjs-emscripten" - -const QuickJS = await newQuickJSWASMModule(DEBUG_SYNC) -``` - -With quickjs-emscripten-core: - -```typescript -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import DEBUG_SYNC from "@jitl/quickjs-wasmfile-debug-sync" - -const QuickJS = await newQuickJSWASMModuleFromVariant(DEBUG_SYNC) -``` - -To enable debug logging globally, call [setDebugMode][setDebugMode]. This affects global Javascript parts of the library, like the module loader and asyncify internals, and is inherited by runtimes created after the call. - -```typescript -import { setDebugMode } from "quickjs-emscripten" - -setDebugMode(true) -``` - -With quickjs-emscripten-core: - -```typescript -import { setDebugMode } from "quickjs-emscripten-core" - -setDebugMode(true) -``` - -To enable debug logging for a specific runtime, call [setDebugModeRt][setDebugModeRt]. This affects only the runtime and its associated contexts. - -```typescript -const runtime = QuickJS.newRuntime() -runtime.setDebugMode(true) - -const context = QuickJS.newContext() -context.runtime.setDebugMode(true) -``` - -[setDebugMode]: doc/quickjs-emscripten/exports.md#setdebugmode -[setDebugModeRt]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten-core/classes/QuickJSRuntime.md#setdebugmode - -### Supported Platforms - -`quickjs-emscripten` and related packages should work in any environment that supports ES2020. - -- Browsers: we estimate support for the following browser versions. See the [global-iife][iife] and [esmodule][esm-html] HTML examples. - - Chrome 63+ - - Edge 79+ - - Safari 11.1+ - - Firefox 58+ -- NodeJS: requires v16.0.0 or later for WebAssembly compatibility. Tested with node@18. See the [node-typescript][tsx-example] and [node-minimal][minimal] examples. -- Typescript: tested with typescript@4.5.5 and typescript@5.3.3. See the [node-typescript example][tsx-example]. -- Vite: tested with vite@5.0.10. See the [Vite/Vue example][vite]. -- Create react app: tested with react-scripts@5.0.1. See the [create-react-app example][cra]. -- Webpack: tested with webpack@5.89.0 via create-react-app. -- Cloudflare Workers: tested with wrangler@3.22.1. See the [Cloudflare Workers example][cloudflare]. -- Deno: tested with deno 1.39.1. See the [Deno example][deno]. - -[iife]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/global-iife.html -[esm-html]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/esmodule.html -[deno]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/deno -[vite]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/vite-vue -[cra]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/create-react-app -[cloudflare]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/cloudflare-workers -[tsx-example]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/node-typescript -[minimal]: https://github.com/justjake/quickjs-emscripten/blob/main/examples/node-minimal - -### More Documentation - -[Github] | [NPM] | [API Documentation][api] | [Variants][core] | [Examples][tests] - -## Background - -This was inspired by seeing https://github.com/maple3142/duktape-eval -[on Hacker News](https://news.ycombinator.com/item?id=21946565) and Figma's -blogposts about using building a Javascript plugin runtime: - -- [How Figma built the Figma plugin system](https://www.figma.com/blog/how-we-built-the-figma-plugin-system/): Describes the LowLevelJavascriptVm interface. -- [An update on plugin security](https://www.figma.com/blog/an-update-on-plugin-security/): Figma switches to QuickJS. - -## Status & Roadmap - -**Stability**: Because the version number of this project is below `1.0.0`, -\*expect occasional breaking API changes. - -**Security**: This project makes every effort to be secure, but has not been -audited. Please use with care in production settings. - -**Roadmap**: I work on this project in my free time, for fun. Here's I'm -thinking comes next. Last updated 2022-03-18. - -1. Further work on module loading APIs: - - - Create modules via Javascript, instead of source text. - - Scan source text for imports, for ahead of time or concurrent loading. - (This is possible with third-party tools, so lower priority.) - -2. Higher-level tools for reading QuickJS values: - - - Type guard functions: `context.isArray(handle)`, `context.isPromise(handle)`, etc. - - Iteration utilities: `context.getIterable(handle)`, `context.iterateObjectEntries(handle)`. - This better supports user-level code to deserialize complex handle objects. - -3. Higher-level tools for creating QuickJS values: - - - Devise a way to avoid needing to mess around with handles when setting up - the environment. - - Consider integrating - [quickjs-emscripten-sync](https://github.com/reearth/quickjs-emscripten-sync) - for automatic translation. - - Consider class-based or interface-type-based marshalling. - -4. SQLite integration. - -## Related - -- Duktape wrapped in Wasm: https://github.com/maple3142/duktape-eval/blob/main/src/Makefile -- QuickJS wrapped in C++: https://github.com/ftk/quickjspp - -## Developing - -This library is implemented in two languages: C (compiled to WASM with -Emscripten), and Typescript. - -You will need `node`, `yarn`, `make`, and `emscripten` to build this project. - -### The C parts - -The ./c directory contains C code that wraps the QuickJS C library (in ./quickjs). -Public functions (those starting with `QTS_`) in ./c/interface.c are -automatically exported to native code (via a generated header) and to -Typescript (via a generated FFI class). See ./generate.ts for how this works. - -The C code builds with `emscripten` (using `emcc`), to produce WebAssembly. -The version of Emscripten used by the project is defined in templates/Variant.mk. - -- On ARM64, you should install `emscripten` on your machine. For example on macOS, `brew install emscripten`. -- If _the correct version of emcc_ is not in your PATH, compilation falls back to using Docker. - On ARM64, this is 10-50x slower than native compilation, but it's just fine on x64. - -We produce multiple build variants of the C code compiled to WebAssembly using a -template script the ./packages directory. Each build variant uses its own copy of a Makefile -to build the C code. The Makefile is generated from a template in ./templates/Variant.mk. - -Related NPM scripts: - -- `yarn vendor:update` updates vendor/quickjs and vendor/quickjs-ng to the latest versions on Github. -- `yarn build:codegen` updates the ./packages from the template script `./prepareVariants.ts` and Variant.mk. -- `yarn build:packages` builds the variant packages in parallel. - -### The Typescript parts - -The Javascript/Typescript code is also organized into several NPM packages in ./packages: - -- ./packages/quickjs-ffi-types: Low-level types that define the FFI interface to the C code. - Each variant exposes an API conforming to these types that's consumed by the higher-level library. -- ./packages/quickjs-emscripten-core: The higher-level Typescript that implements the user-facing abstractions of the library. - This package doesn't link directly to the WebAssembly/C code; callers must provide a build variant. -- ./packages/quicks-emscripten: The main entrypoint of the library, which provides the `getQuickJS` function. - This package combines quickjs-emscripten-core with platform-appropriate WebAssembly/C code. - -Related NPM scripts: - -- `yarn check` runs all available checks (build, format, tests, etc). -- `yarn build` builds all the packages and generates the docs. -- `yarn test` runs the tests for all packages. - - `yarn test:fast` runs the tests using only fast build variants. -- `yarn doc` generates the docs into `./doc`. - - `yarn doc:serve` previews the current `./doc` in a browser. -- `yarn prettier` formats the repo. - -### Yarn updates - -Just run `yarn set version from sources` to upgrade the Yarn release. - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/DisposableFail.md b/doc/quickjs-emscripten/classes/DisposableFail.md deleted file mode 100644 index af081e635..000000000 --- a/doc/quickjs-emscripten/classes/DisposableFail.md +++ /dev/null @@ -1,246 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / DisposableFail - -# Class: DisposableFail\ - -## Contents - -- [Extends](DisposableFail.md#extends) -- [Type parameters](DisposableFail.md#type-parameters) -- [Constructors](DisposableFail.md#constructors) - - [new DisposableFail(error, onUnwrap)](DisposableFail.md#new-disposablefailerror-onunwrap) -- [Properties](DisposableFail.md#properties) - - [error](DisposableFail.md#error) -- [Accessors](DisposableFail.md#accessors) - - [alive](DisposableFail.md#alive) -- [Methods](DisposableFail.md#methods) - - [`[dispose]`()](DisposableFail.md#dispose) - - [dispose()](DisposableFail.md#dispose) - - [unwrap()](DisposableFail.md#unwrap) - - [unwrapOr()](DisposableFail.md#unwrapor) - - [fail()](DisposableFail.md#fail) - - [is()](DisposableFail.md#is) - - [success()](DisposableFail.md#success) - -## Extends - -- `AbstractDisposableResult` - -## Type parameters - -• **F** - -## Constructors - -### new DisposableFail(error, onUnwrap) - -> **new DisposableFail**\<`F`\>(`error`, `onUnwrap`): [`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Parameters - -• **error**: `F` - -• **onUnwrap**: (`status`) => `void` - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Overrides - -`AbstractDisposableResult.constructor` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:451](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L451) - -## Properties - -### error - -> **`readonly`** **error**: `F` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:452](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L452) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:458](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L458) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -`AbstractDisposableResult.[dispose]` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -#### Returns - -`void` - -#### Overrides - -`AbstractDisposableResult.dispose` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:462](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L462) - -*** - -### unwrap() - -> **unwrap**(): `never` - -#### Returns - -`never` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:468](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L468) - -*** - -### unwrapOr() - -> **unwrapOr**\<`T`\>(`fallback`): `T` - -#### Type parameters - -• **T** - -#### Parameters - -• **fallback**: `T` - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:473](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L473) - -*** - -### fail() - -> **`static`** **fail**\<`S`, `F`\>(`error`, `onUnwrap`): [`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **error**: `F` - -• **onUnwrap**: (`status`) => `void` - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Inherited from - -`AbstractDisposableResult.fail` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:409](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L409) - -*** - -### is() - -> **`static`** **is**\<`S`, `F`\>(`result`): `result is DisposableResult` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`result is DisposableResult` - -#### Inherited from - -`AbstractDisposableResult.is` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L416) - -*** - -### success() - -> **`static`** **success**\<`S`, `F`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Inherited from - -`AbstractDisposableResult.success` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:405](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L405) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/DisposableSuccess.md b/doc/quickjs-emscripten/classes/DisposableSuccess.md deleted file mode 100644 index c4dce0844..000000000 --- a/doc/quickjs-emscripten/classes/DisposableSuccess.md +++ /dev/null @@ -1,255 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / DisposableSuccess - -# Class: DisposableSuccess\ - -## Contents - -- [Extends](DisposableSuccess.md#extends) -- [Type parameters](DisposableSuccess.md#type-parameters) -- [Constructors](DisposableSuccess.md#constructors) - - [new DisposableSuccess(value)](DisposableSuccess.md#new-disposablesuccessvalue) -- [Properties](DisposableSuccess.md#properties) - - [error?](DisposableSuccess.md#error) - - [value](DisposableSuccess.md#value) -- [Accessors](DisposableSuccess.md#accessors) - - [alive](DisposableSuccess.md#alive) -- [Methods](DisposableSuccess.md#methods) - - [`[dispose]`()](DisposableSuccess.md#dispose) - - [dispose()](DisposableSuccess.md#dispose) - - [unwrap()](DisposableSuccess.md#unwrap) - - [unwrapOr()](DisposableSuccess.md#unwrapor) - - [fail()](DisposableSuccess.md#fail) - - [is()](DisposableSuccess.md#is) - - [success()](DisposableSuccess.md#success) - -## Extends - -- `AbstractDisposableResult` - -## Type parameters - -• **S** - -## Constructors - -### new DisposableSuccess(value) - -> **new DisposableSuccess**\<`S`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Overrides - -`AbstractDisposableResult.constructor` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:427](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L427) - -## Properties - -### error? - -> **error**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:425](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L425) - -*** - -### value - -> **`readonly`** **value**: `S` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:427](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L427) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:431](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L431) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -`AbstractDisposableResult.[dispose]` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -#### Returns - -`void` - -#### Overrides - -`AbstractDisposableResult.dispose` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:435](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L435) - -*** - -### unwrap() - -> **unwrap**(): `S` - -#### Returns - -`S` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:441](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L441) - -*** - -### unwrapOr() - -> **unwrapOr**\<`T`\>(`_fallback`): `S` \| `T` - -#### Type parameters - -• **T** - -#### Parameters - -• **\_fallback**: `T` - -#### Returns - -`S` \| `T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:445](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L445) - -*** - -### fail() - -> **`static`** **fail**\<`S`, `F`\>(`error`, `onUnwrap`): [`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **error**: `F` - -• **onUnwrap**: (`status`) => `void` - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<`F`\> - -#### Inherited from - -`AbstractDisposableResult.fail` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:409](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L409) - -*** - -### is() - -> **`static`** **is**\<`S`, `F`\>(`result`): `result is DisposableResult` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`result is DisposableResult` - -#### Inherited from - -`AbstractDisposableResult.is` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L416) - -*** - -### success() - -> **`static`** **success**\<`S`, `F`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Inherited from - -`AbstractDisposableResult.success` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:405](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L405) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/Lifetime.md b/doc/quickjs-emscripten/classes/Lifetime.md deleted file mode 100644 index 62ec48a93..000000000 --- a/doc/quickjs-emscripten/classes/Lifetime.md +++ /dev/null @@ -1,440 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / Lifetime - -# Class: Lifetime\ - -A lifetime prevents access to a value after the lifetime has been -[dispose](Lifetime.md#dispose-1)ed. - -Typically, quickjs-emscripten uses Lifetimes to protect C memory pointers. - -## Contents - -- [Extends](Lifetime.md#extends) -- [Type parameters](Lifetime.md#type-parameters) -- [Implements](Lifetime.md#implements) -- [Constructors](Lifetime.md#constructors) - - [new Lifetime(_value, copier, disposer, _owner)](Lifetime.md#new-lifetime-value-copier-disposer-owner) -- [Properties](Lifetime.md#properties) - - [\_alive](Lifetime.md#alive) - - [\_constructorStack](Lifetime.md#constructorstack) - - [\_owner?](Lifetime.md#owner) - - [\_value](Lifetime.md#value) - - [copier?](Lifetime.md#copier) - - [disposer?](Lifetime.md#disposer) -- [Accessors](Lifetime.md#accessors) - - [alive](Lifetime.md#alive) - - [dupable](Lifetime.md#dupable) - - [owner](Lifetime.md#owner) - - [value](Lifetime.md#value) -- [Methods](Lifetime.md#methods) - - [`[dispose]`()](Lifetime.md#dispose) - - [consume()](Lifetime.md#consume) - - [dispose()](Lifetime.md#dispose) - - [dup()](Lifetime.md#dup) - - [map()](Lifetime.md#map) - - [tap()](Lifetime.md#tap) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Type parameters - -• **T** - -• **TCopy** = `never` - -• **Owner** = `never` - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new Lifetime(_value, copier, disposer, _owner) - -> **new Lifetime**\<`T`, `TCopy`, `Owner`\>(`_value`, `copier`?, `disposer`?, `_owner`?): [`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -When the Lifetime is disposed, it will call `disposer(_value)`. Use the -disposer function to implement whatever cleanup needs to happen at the end -of `value`'s lifetime. - -`_owner` is not used or controlled by the lifetime. It's just metadata for -the creator. - -#### Parameters - -• **\_value**: `T` - -• **copier?**: (`value`) => `TCopy` - -• **disposer?**: (`value`) => `void` - -• **\_owner?**: `Owner` - -#### Returns - -[`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:83](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L83) - -## Properties - -### \_alive - -> **`protected`** **\_alive**: `boolean` = `true` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L72) - -*** - -### \_constructorStack - -> **`protected`** **\_constructorStack**: `undefined` \| `string` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L73) - -*** - -### \_owner? - -> **`protected`** **`readonly`** **\_owner**?: `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L87) - -*** - -### \_value - -> **`protected`** **`readonly`** **\_value**: `T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L84) - -*** - -### copier? - -> **`protected`** **`readonly`** **copier**?: (`value`) => `TCopy` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`TCopy` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L85) - -*** - -### disposer? - -> **`protected`** **`readonly`** **disposer**?: (`value`) => `void` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L86) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](Lifetime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L92) - -*** - -### dupable - -> **`get`** **dupable**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L111) - -*** - -### owner - -> **`get`** **owner**(): `undefined` \| `Owner` - -#### Returns - -`undefined` \| `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L107) - -*** - -### value - -> **`get`** **value**(): `T` - -The value this Lifetime protects. You must never retain the value - it -may become invalid, leading to memory errors. - -#### Throws - -If the lifetime has been [dispose](Lifetime.md#dispose-1)d already. - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:102](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L102) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### consume() - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, then dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:135](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L135) - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:138](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L138) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of [value](Lifetime.md#value-1) and perform cleanup. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:174](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L174) - -*** - -### dup() - -> **dup**(): [`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -Create a new handle pointing to the same [value](Lifetime.md#value-1). - -#### Returns - -[`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L118) - -*** - -### map() - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, returning the result. -Does not dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L151) - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L152) - -*** - -### tap() - -#### tap(fn) - -> **tap**(`fn`): [`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -Call `fn` with this lifetime, then return `this`. Does not dispose the -lifetime. Useful for imperative operations within an expression, like when -you're building up objects, or to add logging in the middle of a call chain. - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -this - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L164) - -#### tap(fn) - -> **tap**(`fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:165](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L165) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md b/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md deleted file mode 100644 index d5fdcc5b3..000000000 --- a/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md +++ /dev/null @@ -1,1701 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSAsyncContext - -# Class: QuickJSAsyncContext - -Asyncified version of [QuickJSContext](QuickJSContext.md). - -*Asyncify* allows normally synchronous code to wait for asynchronous Promises -or callbacks. The asyncified version of QuickJSContext can wait for async -host functions as though they were synchronous. - -## Contents - -- [Extends](QuickJSAsyncContext.md#extends) -- [Constructors](QuickJSAsyncContext.md#constructors) - - [new QuickJSAsyncContext(args)](QuickJSAsyncContext.md#new-quickjsasynccontextargs) -- [Properties](QuickJSAsyncContext.md#properties) - - [runtime](QuickJSAsyncContext.md#runtime) -- [Accessors](QuickJSAsyncContext.md#accessors) - - [alive](QuickJSAsyncContext.md#alive) - - [false](QuickJSAsyncContext.md#false) - - [global](QuickJSAsyncContext.md#global) - - [null](QuickJSAsyncContext.md#null) - - [true](QuickJSAsyncContext.md#true) - - [undefined](QuickJSAsyncContext.md#undefined) -- [Methods](QuickJSAsyncContext.md#methods) - - [`[dispose]`()](QuickJSAsyncContext.md#dispose) - - [callFunction()](QuickJSAsyncContext.md#callfunction) - - [callMethod()](QuickJSAsyncContext.md#callmethod) - - [decodeBinaryJSON()](QuickJSAsyncContext.md#decodebinaryjson) - - [defineProp()](QuickJSAsyncContext.md#defineprop) - - [dispose()](QuickJSAsyncContext.md#dispose) - - [dump()](QuickJSAsyncContext.md#dump) - - [encodeBinaryJSON()](QuickJSAsyncContext.md#encodebinaryjson) - - [eq()](QuickJSAsyncContext.md#eq) - - [evalCode()](QuickJSAsyncContext.md#evalcode) - - [evalCodeAsync()](QuickJSAsyncContext.md#evalcodeasync) - - [fail()](QuickJSAsyncContext.md#fail) - - [getArrayBuffer()](QuickJSAsyncContext.md#getarraybuffer) - - [getBigInt()](QuickJSAsyncContext.md#getbigint) - - [getIterator()](QuickJSAsyncContext.md#getiterator) - - [getLength()](QuickJSAsyncContext.md#getlength) - - [getNumber()](QuickJSAsyncContext.md#getnumber) - - [getOwnPropertyNames()](QuickJSAsyncContext.md#getownpropertynames) - - [getPromiseState()](QuickJSAsyncContext.md#getpromisestate) - - [getProp()](QuickJSAsyncContext.md#getprop) - - [getString()](QuickJSAsyncContext.md#getstring) - - [getSymbol()](QuickJSAsyncContext.md#getsymbol) - - [getWellKnownSymbol()](QuickJSAsyncContext.md#getwellknownsymbol) - - [newArray()](QuickJSAsyncContext.md#newarray) - - [newArrayBuffer()](QuickJSAsyncContext.md#newarraybuffer) - - [newAsyncifiedFunction()](QuickJSAsyncContext.md#newasyncifiedfunction) - - [newBigInt()](QuickJSAsyncContext.md#newbigint) - - [newError()](QuickJSAsyncContext.md#newerror) - - [newFunction()](QuickJSAsyncContext.md#newfunction) - - [newNumber()](QuickJSAsyncContext.md#newnumber) - - [newObject()](QuickJSAsyncContext.md#newobject) - - [newPromise()](QuickJSAsyncContext.md#newpromise) - - [newString()](QuickJSAsyncContext.md#newstring) - - [newSymbolFor()](QuickJSAsyncContext.md#newsymbolfor) - - [newUniqueSymbol()](QuickJSAsyncContext.md#newuniquesymbol) - - [resolvePromise()](QuickJSAsyncContext.md#resolvepromise) - - [sameValue()](QuickJSAsyncContext.md#samevalue) - - [sameValueZero()](QuickJSAsyncContext.md#samevaluezero) - - [setProp()](QuickJSAsyncContext.md#setprop) - - [success()](QuickJSAsyncContext.md#success) - - [throw()](QuickJSAsyncContext.md#throw) - - [typeof()](QuickJSAsyncContext.md#typeof) - - [unwrapResult()](QuickJSAsyncContext.md#unwrapresult) - -## Extends - -- [`QuickJSContext`](QuickJSContext.md) - -## Constructors - -### new QuickJSAsyncContext(args) - -> **new QuickJSAsyncContext**(`args`): [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -Use [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext) or [QuickJSWASMModule#newContext](QuickJSWASMModule.md#newcontext) -to create a new QuickJSContext. - -#### Parameters - -• **args**: `Object` - -• **args\.callbacks**: `QuickJSModuleCallbacks` - -• **args\.ctx**: [`Lifetime`](Lifetime.md)\<[`JSContextPointer`](../exports.md#jscontextpointer), `never`, `never`\> - -• **args\.ffi**: [`EitherFFI`](../exports.md#eitherffi) - -• **args\.module**: [`EitherModule`](../exports.md#eithermodule) - -• **args\.ownedLifetimes?**: [`Disposable`](../interfaces/Disposable.md)[] - -• **args\.rt**: [`Lifetime`](Lifetime.md)\<[`JSRuntimePointer`](../exports.md#jsruntimepointer), `never`, `never`\> - -• **args\.runtime**: [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Returns - -[`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.constructor`](QuickJSContext.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:224](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L224) - -## Properties - -### runtime - -> **runtime**: [`QuickJSAsyncRuntime`](QuickJSAsyncRuntime.md) - -The runtime that created this context. - -#### Overrides - -[`quickjs-emscripten.QuickJSContext.runtime`](QuickJSContext.md#runtime) - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:31](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L31) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSAsyncContext.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L255) - -*** - -### false - -> **`get`** **false**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:313](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L313) - -*** - -### global - -> **`get`** **global**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects). -A handle to the global object inside the interpreter. -You can set properties to create global variables. - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:328](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L328) - -*** - -### null - -> **`get`** **null**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:287](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L287) - -*** - -### true - -> **`get`** **true**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:300](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L300) - -*** - -### undefined - -> **`get`** **undefined**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:274](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L274) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.[dispose]`](QuickJSContext.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### callFunction() - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, `args`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -[`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) or -[`func.apply(thisVal, args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply). -Call a JSValue as a function. - -See [unwrapResult](QuickJSAsyncContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSAsyncContext.md#resolvepromise) to convert it to a native promise and -[runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args?**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -Example: - -```typescript -using parseIntHandle = context.getProp(global, "parseInt") -using stringHandle = context.newString("42") -using resultHandle = context.callFunction(parseIntHandle, context.undefined, stringHandle).unwrap() -console.log(context.dump(resultHandle)) // 42 -``` - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.callFunction`](QuickJSContext.md#callfunction) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1059](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1059) - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, ...`args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• ...**args**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.callFunction`](QuickJSContext.md#callfunction) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1064](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1064) - -*** - -### callMethod() - -> **callMethod**(`thisHandle`, `key`, `args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -`handle[key](...args)` - -Call a method on a JSValue. This is a convenience method that calls [getProp](QuickJSAsyncContext.md#getprop) and [callFunction](QuickJSAsyncContext.md#callfunction). - -#### Parameters - -• **thisHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -• **args**: [`QuickJSHandle`](../exports.md#quickjshandle)[]= `[]` - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.callMethod`](QuickJSContext.md#callmethod) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1113) - -*** - -### decodeBinaryJSON() - -> **decodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs Handle of the given QuickJS Object in binary form - -```ts -// imagine receiving data from another via IPC -socket.on("data", chunk => { - context.newArrayBuffer(chunk) - ?.consume(handle => context.decodeBinaryJSON(handle)) - ?.consume(handle => console.log(context.dump(handle))) -}) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.decodeBinaryJSON`](QuickJSContext.md#decodebinaryjson) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1431](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1431) - -*** - -### defineProp() - -> **defineProp**(`handle`, `key`, `descriptor`): `void` - -[`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **descriptor**: [`VmPropertyDescriptor`](../interfaces/VmPropertyDescriptor.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.defineProp`](QuickJSContext.md#defineprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1000](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1000) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of this VM's underlying resources. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.dispose`](QuickJSContext.md#dispose-1) - -#### Throws - -Calling this method without disposing of all created handles -will result in an error. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:265](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L265) - -*** - -### dump() - -> **dump**(`handle`): `any` - -Dump a JSValue to Javascript in a best-effort fashion. -If the value is a promise, dumps the promise's state. -Returns `handle.toString()` if it cannot be serialized to JSON. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`any` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.dump`](QuickJSContext.md#dump) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1234](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1234) - -*** - -### encodeBinaryJSON() - -> **encodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs QuickJS Objects in binary form - -**WARNING**: QuickJS's binary JSON doesn't have a standard so expect it to change between version - -```ts -// imagine sending data to another via IPC -let dataLifetime = context.newString("This is an example") - ?.consume(handle => context.encodeBinaryJSON(handle)) - ?.consume(handle => context.getArrayBuffer(handle)) -socket.write(dataLifetime?.value) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.encodeBinaryJSON`](QuickJSContext.md#encodebinaryjson) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1414](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1414) - -*** - -### eq() - -> **eq**(`handle`, `other`): `boolean` - -`handle === other` - IsStrictlyEqual. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.eq`](QuickJSContext.md#eq) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:811](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L811) - -*** - -### evalCode() - -> **evalCode**(`code`, `filename`, `options`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description). - -Evaluates `code`, as though it's in a file named `filename`, with options `options`. - -- When `options.type` is `"global"`, the code is evaluated in the global - scope of the QuickJSContext, and the return value is the result of the last - expression. -- When `options.type` is `"module"`, the code is evaluated is a module scope. - It may use `import` and `export` if [runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#setModuleLoader](QuickJSRuntime.md#setmoduleloader) was called. - It may use top-level await if supported by the underlying QuickJS library. - The return value is the module's exports, or a promise for the module's exports. -- When `options.type` is unset, the code is evaluated as a module if it - contains an `import` or `export` statement, otherwise it is evaluated in - the global scope. - -When working with async code, you many need to call [runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) -to execute callbacks pending after synchronous evaluation returns. - -See [unwrapResult](QuickJSAsyncContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSAsyncContext.md#resolvepromise) to convert it to a native promise and -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -*Note*: to protect against infinite loops, provide an interrupt handler to -[QuickJSRuntime#setInterruptHandler](QuickJSRuntime.md#setinterrupthandler). You can use [shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline) to -create a time-based deadline. - -#### Parameters - -• **code**: `string` - -• **filename**: `string`= `"eval.js"` - -• **options?**: `number` \| [`ContextEvalOptions`](../interfaces/ContextEvalOptions.md) - -If no options are passed, a heuristic will be used to detect if `code` is -an ES module. - -See [EvalFlags](../exports.md#evalflags) for number semantics. - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -The last statement's value. If the code threw synchronously, -`result.error` will be a handle to the exception. If execution was -interrupted, the error will have name `InternalError` and message -`interrupted`. - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.evalCode`](QuickJSContext.md#evalcode) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1156](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1156) - -*** - -### evalCodeAsync() - -> **evalCodeAsync**(`code`, `filename`, `options`?): `Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -Asyncified version of [evalCode](QuickJSAsyncContext.md#evalcode). - -#### Parameters - -• **code**: `string` - -• **filename**: `string`= `"eval.js"` - -• **options?**: `number` \| [`ContextEvalOptions`](../interfaces/ContextEvalOptions.md) - -See [EvalFlags](../exports.md#evalflags) for number semantics - -#### Returns - -`Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:44](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L44) - -*** - -### fail() - -> **`protected`** **fail**(`error`): [`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Parameters - -• **error**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.fail`](QuickJSContext.md#fail) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1440](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1440) - -*** - -### getArrayBuffer() - -> **getArrayBuffer**(`handle`): [`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -Coverts `handle` to a JavaScript ArrayBuffer - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getArrayBuffer`](QuickJSContext.md#getarraybuffer) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:690](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L690) - -*** - -### getBigInt() - -> **getBigInt**(`handle`): `bigint` - -Converts `handle` to a Javascript bigint. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`bigint` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getBigInt`](QuickJSContext.md#getbigint) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:681](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L681) - -*** - -### getIterator() - -> **getIterator**(`iterableHandle`): `QuickJSContextResult`\<`QuickJSIterator`\> - -`handle[Symbol.iterator]()`. See [QuickJSIterator]([object Object]). -Returns a host iterator that wraps and proxies calls to a guest iterator handle. -Each step of the iteration returns a result, either an error or a handle to the next value. -Once the iterator is done, the handle is automatically disposed, and the iterator -is considered done if the handle is disposed. - -```typescript -for (using entriesHandle of context.getIterator(mapHandle).unwrap()) { - using keyHandle = context.getProp(entriesHandle, 0) - using valueHandle = context.getProp(entriesHandle, 1) - console.log(context.dump(keyHandle), '->', context.dump(valueHandle)) -} -``` - -#### Parameters - -• **iterableHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`QuickJSContextResult`\<`QuickJSIterator`\> - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getIterator`](QuickJSContext.md#getiterator) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:960](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L960) - -*** - -### getLength() - -> **getLength**(`handle`): `undefined` \| `number` - -`handle.length` as a host number. - -Example use: -```typescript -const length = context.getLength(arrayHandle) ?? 0 -for (let i = 0; i < length; i++) { - using value = context.getProp(arrayHandle, i) - console.log(`array[${i}] =`, context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`undefined` \| `number` - -a number if the handle has a numeric length property, otherwise `undefined`. - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getLength`](QuickJSContext.md#getlength) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:870](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L870) - -*** - -### getNumber() - -> **getNumber**(`handle`): `number` - -Converts `handle` into a Javascript number. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`number` - -`NaN` on error, otherwise a `number`. - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getNumber`](QuickJSContext.md#getnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:652](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L652) - -*** - -### getOwnPropertyNames() - -> **getOwnPropertyNames**(`handle`, `options`): `QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Object.getOwnPropertyNames(handle)`. -Similar to the [standard semantics](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames), -but with extra, non-standard options for: - -- fetching array indexes as numbers (`numbers: true`) -- including symbols (`symbols: true`) -- only iterating over enumerable properties (`onlyEnumerable: true`) - -The default behavior is to emulate the standard: -```typescript -context.getOwnPropertyNames(handle, { strings: true, numbersAsStrings: true }) -``` - -Note when passing an explicit options object, you must set at least one -option, and `strings` are not included unless specified. - -Example use: -```typescript -for (using prop of context.getOwnPropertyNames(objectHandle).unwrap()) { - using value = context.getProp(handle, prop) - console.log(context.dump(prop), '->', context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **options**: `GetOwnPropertyNamesOptions`= `undefined` - -#### Returns - -`QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -an an array of handles of the property names. The array itself is disposable for your convenience. - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getOwnPropertyNames`](QuickJSContext.md#getownpropertynames) - -#### Throws - -QuickJSEmptyGetOwnPropertyNames if no options are set. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:907](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L907) - -*** - -### getPromiseState() - -> **getPromiseState**(`handle`): [`JSPromiseState`](../exports.md#jspromisestate) - -Get the current state of a QuickJS promise, see [JSPromiseState](../exports.md#jspromisestate) for the possible states. -This can be used to expect a promise to be fulfilled when combined with [unwrapResult](QuickJSAsyncContext.md#unwrapresult): - -```typescript -const promiseHandle = context.evalCode(`Promise.resolve(42)`); -const resultHandle = context.unwrapResult( - context.getPromiseState(promiseHandle) -); -context.getNumber(resultHandle) === 42; // true -resultHandle.dispose(); -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSPromiseState`](../exports.md#jspromisestate) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getPromiseState`](QuickJSContext.md#getpromisestate) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:715](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L715) - -*** - -### getProp() - -> **getProp**(`handle`, `key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -`handle[key]`. -Get a property from a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string (which will be converted automatically). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getProp`](QuickJSContext.md#getprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:840](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L840) - -*** - -### getString() - -> **getString**(`handle`): `string` - -Converts `handle` to a Javascript string. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getString`](QuickJSContext.md#getstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:660](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L660) - -*** - -### getSymbol() - -> **getSymbol**(`handle`): `symbol` - -Converts `handle` into a Javascript symbol. If the symbol is in the global -registry in the guest, it will be created with Symbol.for on the host. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`symbol` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getSymbol`](QuickJSContext.md#getsymbol) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:669](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L669) - -*** - -### getWellKnownSymbol() - -> **getWellKnownSymbol**(`name`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Access a well-known symbol that is a property of the global Symbol object, like `Symbol.iterator`. - -#### Parameters - -• **name**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.getWellKnownSymbol`](QuickJSContext.md#getwellknownsymbol) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:388](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L388) - -*** - -### newArray() - -> **newArray**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -`[]`. -Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newArray`](QuickJSContext.md#newarray) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:430](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L430) - -*** - -### newArrayBuffer() - -> **newArrayBuffer**(`buffer`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a new QuickJS [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). - -#### Parameters - -• **buffer**: `ArrayBufferLike` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newArrayBuffer`](QuickJSContext.md#newarraybuffer) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:438](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L438) - -*** - -### newAsyncifiedFunction() - -> **newAsyncifiedFunction**(`name`, `fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Similar to [newFunction](QuickJSAsyncContext.md#newfunction). -Convert an async host Javascript function into a synchronous QuickJS function value. - -Whenever QuickJS calls this function, the VM's stack will be unwound while -waiting the async function to complete, and then restored when the returned -promise resolves. - -Asyncified functions must never call other asyncified functions or -`import`, even indirectly, because the stack cannot be unwound twice. - -See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html). - -#### Parameters - -• **name**: `string` - -• **fn**: [`AsyncFunctionImplementation`](../exports.md#asyncfunctionimplementation) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:91](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L91) - -*** - -### newBigInt() - -> **newBigInt**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value. - -#### Parameters - -• **num**: `bigint` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newBigInt`](QuickJSContext.md#newbigint) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:396](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L396) - -*** - -### newError() - -#### newError(error) - -> **newError**(`error`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **error**: `Object` - -• **error\.message**: `string` - -• **error\.name**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.newError`](QuickJSContext.md#newerror) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:607](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L607) - -#### newError(message) - -> **newError**(`message`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **message**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.newError`](QuickJSContext.md#newerror) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:608](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L608) - -#### newError(undefined) - -> **newError**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.newError`](QuickJSContext.md#newerror) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:609](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L609) - -*** - -### newFunction() - -> **newFunction**(`name`, `fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Convert a Javascript function into a QuickJS function value. -See [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) for more details. - -A [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) should not free its arguments or its return -value. A VmFunctionImplementation should also not retain any references to -its return value. - -The function argument handles are automatically disposed when the function -returns. If you want to retain a handle beyond the end of the function, you -can call [Lifetime#dup](Lifetime.md#dup) to create a copy of the handle that you own -and must dispose manually. For example, you need to use this API and do some -extra book keeping to implement `setInterval`: - -```typescript -// This won't work because `callbackHandle` expires when the function returns, -// so when the interval fires, the callback handle is already disposed. -const WRONG_setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - const delayMs = context.getNumber(delayHandle) - const intervalId = globalThis.setInterval(() => { - // ERROR: callbackHandle is already disposed here. - context.callFunction(callbackHandle) - }, intervalId) - return context.newNumber(intervalId) -}) - -// This works since we dup the callbackHandle. -// We just need to make sure we clean it up manually when the interval is cleared -- -// so we need to keep track of those interval IDs, and make sure we clean all -// of them up when we dispose the owning context. - -const setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - // Ensure the guest can't overload us by scheduling too many intervals. - if (QuickJSInterval.INTERVALS.size > 100) { - throw new Error(`Too many intervals scheduled already`) - } - - const delayMs = context.getNumber(delayHandle) - const longLivedCallbackHandle = callbackHandle.dup() - const intervalId = globalThis.setInterval(() => { - context.callFunction(longLivedCallbackHandle) - }, intervalId) - const disposable = new QuickJSInterval(longLivedCallbackHandle, context, intervalId) - QuickJSInterval.INTERVALS.set(intervalId, disposable) - return context.newNumber(intervalId) -}) - -const clearIntervalHandle = context.newFunction("clearInterval", (intervalIdHandle) => { - const intervalId = context.getNumber(intervalIdHandle) - const disposable = QuickJSInterval.INTERVALS.get(intervalId) - disposable?.dispose() -}) - -class QuickJSInterval extends UsingDisposable { - static INTERVALS = new Map() - - static disposeContext(context: QuickJSContext) { - for (const interval of QuickJSInterval.INTERVALS.values()) { - if (interval.context === context) { - interval.dispose() - } - } - } - - constructor( - public fnHandle: QuickJSHandle, - public context: QuickJSContext, - public intervalId: number, - ) { - super() - } - - dispose() { - globalThis.clearInterval(this.intervalId) - this.fnHandle.dispose() - QuickJSInterval.INTERVALS.delete(this.fnHandle.value) - } - - get alive() { - return this.fnHandle.alive - } -} -``` - -To implement an async function, create a promise with [newPromise](QuickJSAsyncContext.md#newpromise), then -return the deferred promise handle from `deferred.handle` from your -function implementation: - -```typescript -const deferred = vm.newPromise() -someNativeAsyncFunction().then(deferred.resolve) -return deferred.handle -``` - -#### Parameters - -• **name**: `string` - -• **fn**: [`VmFunctionImplementation`](../exports.md#vmfunctionimplementationvmhandle)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newFunction`](QuickJSContext.md#newfunction) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:601](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L601) - -*** - -### newNumber() - -> **newNumber**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Converts a Javascript number into a QuickJS value. - -#### Parameters - -• **num**: `number` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newNumber`](QuickJSContext.md#newnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:347](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L347) - -*** - -### newObject() - -> **newObject**(`prototype`?): [`QuickJSHandle`](../exports.md#quickjshandle) - -`{}`. -Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer). - -#### Parameters - -• **prototype?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newObject`](QuickJSContext.md#newobject) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L416) - -*** - -### newPromise() - -#### newPromise(undefined) - -> **newPromise**(): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md). Use `deferred.resolve(handle)` and -`deferred.reject(handle)` to fulfill the promise handle available at `deferred.handle`. -Note that you are responsible for calling `deferred.dispose()` to free the underlying -resources; see the documentation on [QuickJSDeferredPromise](QuickJSDeferredPromise.md) for details. - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.newPromise`](QuickJSContext.md#newpromise) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:451](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L451) - -#### newPromise(promise) - -> **newPromise**(`promise`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md) that resolves when the -given native Promise`` resolves. Rejections will be coerced -to a QuickJS error. - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **promise**: `Promise`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.newPromise`](QuickJSContext.md#newpromise) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:459](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L459) - -#### newPromise(newPromiseFn) - -> **newPromise**(`newPromiseFn`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Construct a new native Promise`` , and then convert it into a -[QuickJSDeferredPromise](QuickJSDeferredPromise.md). - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **newPromiseFn**: [`PromiseExecutor`](../exports.md#promiseexecutorresolvet-rejectt)\<[`QuickJSHandle`](../exports.md#quickjshandle), `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Inherited from - -[`quickjs-emscripten.QuickJSContext.newPromise`](QuickJSContext.md#newpromise) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:466](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L466) - -*** - -### newString() - -> **newString**(`str`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value. - -#### Parameters - -• **str**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newString`](QuickJSContext.md#newstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:354](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L354) - -*** - -### newSymbolFor() - -> **newSymbolFor**(`key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key. -All symbols created with the same key will be the same value. - -#### Parameters - -• **key**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newSymbolFor`](QuickJSContext.md#newsymbolfor) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:377](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L377) - -*** - -### newUniqueSymbol() - -> **newUniqueSymbol**(`description`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value. -No two symbols created with this function will be the same value. - -#### Parameters - -• **description**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.newUniqueSymbol`](QuickJSContext.md#newuniquesymbol) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:365](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L365) - -*** - -### resolvePromise() - -> **resolvePromise**(`promiseLikeHandle`): `Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Promise.resolve(value)`. -Convert a handle containing a Promise-like value inside the VM into an -actual promise on the host. - -#### Parameters - -• **promiseLikeHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -A handle to a Promise-like value with a `.then(onSuccess, onError)` method. - -#### Returns - -`Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.resolvePromise`](QuickJSContext.md#resolvepromise) - -#### Remarks - -You may need to call [runtime](QuickJSAsyncContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to ensure that the promise is resolved. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:754](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L754) - -*** - -### sameValue() - -> **sameValue**(`handle`, `other`): `boolean` - -`Object.is(a, b)` -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.sameValue`](QuickJSContext.md#samevalue) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:819](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L819) - -*** - -### sameValueZero() - -> **sameValueZero**(`handle`, `other`): `boolean` - -SameValueZero comparison. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.sameValueZero`](QuickJSContext.md#samevaluezero) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:827](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L827) - -*** - -### setProp() - -> **setProp**(`handle`, `key`, `value`): `void` - -`handle[key] = value`. -Set a property on a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **value**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.setProp`](QuickJSContext.md#setprop) - -#### Remarks - -Note that the QuickJS authors recommend using [defineProp](QuickJSAsyncContext.md#defineprop) to define new -properties. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:985](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L985) - -*** - -### success() - -> **`protected`** **success**\<`S`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.success`](QuickJSContext.md#success) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1436](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1436) - -*** - -### throw() - -> **throw**(`error`): [`JSValuePointer`](../exports.md#jsvaluepointer) - -Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes. - -#### Parameters - -• **error**: `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.throw`](QuickJSContext.md#throw) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1193](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1193) - -*** - -### typeof() - -> **typeof**(`handle`): `string` - -`typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.typeof`](QuickJSContext.md#typeof) - -#### Remarks - -Does not support BigInt values correctly. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:643](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L643) - -*** - -### unwrapResult() - -> **unwrapResult**\<`T`\>(`result`): `T` - -Unwrap a SuccessOrFail result such as a [VmCallResult](../exports.md#vmcallresultvmhandle) or a -[ExecutePendingJobsResult](../exports.md#executependingjobsresult), where the fail branch contains a handle to a QuickJS error value. -If the result is a success, returns the value. -If the result is an error, converts the error to a native object and throws the error. - -#### Type parameters - -• **T** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`T`, [`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`T` - -#### Inherited from - -[`quickjs-emscripten.QuickJSContext.unwrapResult`](QuickJSContext.md#unwrapresult) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1277](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1277) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md b/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md deleted file mode 100644 index 1167449a2..000000000 --- a/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md +++ /dev/null @@ -1,530 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSAsyncRuntime - -# Class: QuickJSAsyncRuntime - -A runtime represents a Javascript runtime corresponding to an object heap. -Several runtimes can exist at the same time but they cannot exchange objects. -Inside a given runtime, no multi-threading is supported. - -You can think of separate runtimes like different domains in a browser, and -the contexts within a runtime like the different windows open to the same -domain. - -Create a runtime via [QuickJSWASMModule.newRuntime](QuickJSWASMModule.md#newruntime). - -You should create separate runtime instances for untrusted code from -different sources for isolation. However, stronger isolation is also -available (at the cost of memory usage), by creating separate WebAssembly -modules to further isolate untrusted code. -See [newQuickJSWASMModule](../exports.md#newquickjswasmmodule). - -Implement memory and CPU constraints with [setInterruptHandler](QuickJSAsyncRuntime.md#setinterrupthandler) -(called regularly while the interpreter runs), [setMemoryLimit](QuickJSAsyncRuntime.md#setmemorylimit), and -[setMaxStackSize](QuickJSAsyncRuntime.md#setmaxstacksize). -Use [computeMemoryUsage](QuickJSAsyncRuntime.md#computememoryusage) or [dumpMemoryUsage](QuickJSAsyncRuntime.md#dumpmemoryusage) to guide memory limit -tuning. - -Configure ES module loading with [setModuleLoader](QuickJSAsyncRuntime.md#setmoduleloader). - -## Contents - -- [Extends](QuickJSAsyncRuntime.md#extends) -- [Properties](QuickJSAsyncRuntime.md#properties) - - [context](QuickJSAsyncRuntime.md#context) -- [Accessors](QuickJSAsyncRuntime.md#accessors) - - [alive](QuickJSAsyncRuntime.md#alive) -- [Methods](QuickJSAsyncRuntime.md#methods) - - [`[dispose]`()](QuickJSAsyncRuntime.md#dispose) - - [assertOwned()](QuickJSAsyncRuntime.md#assertowned) - - [computeMemoryUsage()](QuickJSAsyncRuntime.md#computememoryusage) - - [debugLog()](QuickJSAsyncRuntime.md#debuglog) - - [dispose()](QuickJSAsyncRuntime.md#dispose) - - [dumpMemoryUsage()](QuickJSAsyncRuntime.md#dumpmemoryusage) - - [executePendingJobs()](QuickJSAsyncRuntime.md#executependingjobs) - - [hasPendingJob()](QuickJSAsyncRuntime.md#haspendingjob) - - [isDebugMode()](QuickJSAsyncRuntime.md#isdebugmode) - - [newContext()](QuickJSAsyncRuntime.md#newcontext) - - [removeInterruptHandler()](QuickJSAsyncRuntime.md#removeinterrupthandler) - - [removeModuleLoader()](QuickJSAsyncRuntime.md#removemoduleloader) - - [setDebugMode()](QuickJSAsyncRuntime.md#setdebugmode) - - [setInterruptHandler()](QuickJSAsyncRuntime.md#setinterrupthandler) - - [setMaxStackSize()](QuickJSAsyncRuntime.md#setmaxstacksize) - - [setMemoryLimit()](QuickJSAsyncRuntime.md#setmemorylimit) - - [setModuleLoader()](QuickJSAsyncRuntime.md#setmoduleloader) - -## Extends - -- [`QuickJSRuntime`](QuickJSRuntime.md) - -## Properties - -### context - -> **context**: `undefined` \| [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -If this runtime was created as as part of a context, points to the context -associated with the runtime. - -If this runtime was created stand-alone, this may or may not contain a context. -A context here may be allocated if one is needed by the runtime, eg for [computeMemoryUsage](QuickJSAsyncRuntime.md#computememoryusage). - -#### Overrides - -[`quickjs-emscripten.QuickJSRuntime.context`](QuickJSRuntime.md#context) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L26) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSAsyncRuntime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:125](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L125) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.[dispose]`](QuickJSRuntime.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### assertOwned() - -> **assertOwned**(`handle`): `void` - -Assert that `handle` is owned by this runtime. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.assertOwned`](QuickJSRuntime.md#assertowned) - -#### Throws - -QuickJSWrongOwner if owned by a different runtime. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:327](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L327) - -*** - -### computeMemoryUsage() - -> **computeMemoryUsage**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -Compute memory usage for this runtime. Returns the result as a handle to a -JSValue object. Use [QuickJSContext#dump](QuickJSContext.md#dump) to convert to a native object. -Calling this method will allocate more memory inside the runtime. The information -is accurate as of just before the call to `computeMemoryUsage`. -For a human-digestible representation, see [dumpMemoryUsage](QuickJSAsyncRuntime.md#dumpmemoryusage). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.computeMemoryUsage`](QuickJSRuntime.md#computememoryusage) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:296](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L296) - -*** - -### debugLog() - -> **debugLog**(...`msg`): `void` - -In debug mode, log the result of calling `msg()`. - -We take a function instead of a log message to avoid expensive string -manipulation if debug logging is disabled. - -#### Parameters - -• ...**msg**: `unknown`[] - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.debugLog`](QuickJSRuntime.md#debuglog) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:363](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L363) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.dispose`](QuickJSRuntime.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:129](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L129) - -*** - -### dumpMemoryUsage() - -> **dumpMemoryUsage**(): `string` - -#### Returns - -`string` - -a human-readable description of memory usage in this runtime. -For programmatic access to this information, see [computeMemoryUsage](QuickJSAsyncRuntime.md#computememoryusage). - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.dumpMemoryUsage`](QuickJSRuntime.md#dumpmemoryusage) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:307](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L307) - -*** - -### executePendingJobs() - -> **executePendingJobs**(`maxJobsToExecute`): [`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -Execute pendingJobs on the runtime until `maxJobsToExecute` jobs are -executed (default all pendingJobs), the queue is exhausted, or the runtime -encounters an exception. - -In QuickJS, promises and async functions *inside the runtime* create -pendingJobs. These do not execute immediately and need to triggered to run. - -#### Parameters - -• **maxJobsToExecute**: `number` \| `void`= `-1` - -When negative, run all pending jobs. Otherwise execute -at most `maxJobsToExecute` before returning. - -#### Returns - -[`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -On success, the number of executed jobs. On error, the exception -that stopped execution, and the context it occurred in. Note that -executePendingJobs will not normally return errors thrown inside async -functions or rejected promises. Those errors are available by calling -[QuickJSContext#resolvePromise](QuickJSContext.md#resolvepromise) on the promise handle returned by the async function. - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.executePendingJobs`](QuickJSRuntime.md#executependingjobs) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:243](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L243) - -*** - -### hasPendingJob() - -> **hasPendingJob**(): `boolean` - -In QuickJS, promises and async functions create pendingJobs. These do not execute -immediately and need to be run by calling [executePendingJobs](QuickJSAsyncRuntime.md#executependingjobs). - -#### Returns - -`boolean` - -true if there is at least one pendingJob queued up. - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.hasPendingJob`](QuickJSRuntime.md#haspendingjob) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:194](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L194) - -*** - -### isDebugMode() - -> **isDebugMode**(): `boolean` - -#### Returns - -`boolean` - -true if debug logging is enabled - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.isDebugMode`](QuickJSRuntime.md#isdebugmode) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:353](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L353) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -Create a new context within this runtime. Contexts have isolated globals, -but you can explicitly share objects between contexts with the same -runtime. - -You should dispose a created context before disposing this runtime. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -#### Overrides - -[`quickjs-emscripten.QuickJSRuntime.newContext`](QuickJSRuntime.md#newcontext) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L49) - -*** - -### removeInterruptHandler() - -> **removeInterruptHandler**(): `void` - -Remove the interrupt handler, if any. -See [setInterruptHandler](QuickJSAsyncRuntime.md#setinterrupthandler). - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.removeInterruptHandler`](QuickJSRuntime.md#removeinterrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:219](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L219) - -*** - -### removeModuleLoader() - -> **removeModuleLoader**(): `void` - -Remove the the loader set by [setModuleLoader](QuickJSAsyncRuntime.md#setmoduleloader). This disables module loading. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.removeModuleLoader`](QuickJSRuntime.md#removemoduleloader) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:181](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L181) - -*** - -### setDebugMode() - -> **setDebugMode**(`enabled`): `void` - -Enable or disable debug logging. - -If this module is a DEBUG variant, more logs will be printed from the C -code. - -#### Parameters - -• **enabled**: `boolean` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.setDebugMode`](QuickJSRuntime.md#setdebugmode) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:343](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L343) - -*** - -### setInterruptHandler() - -> **setInterruptHandler**(`cb`): `void` - -Set a callback which is regularly called by the QuickJS engine when it is -executing code. This callback can be used to implement an execution -timeout. - -The interrupt handler can be removed with [removeInterruptHandler](QuickJSAsyncRuntime.md#removeinterrupthandler). - -#### Parameters - -• **cb**: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.setInterruptHandler`](QuickJSRuntime.md#setinterrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:207](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L207) - -*** - -### setMaxStackSize() - -> **setMaxStackSize**(`stackSize`): `void` - -Set the max stack size for this runtime in bytes. -To remove the limit, set to `0`. - -Setting this limit also adjusts the global `ASYNCIFY_STACK_SIZE` for the entire [QuickJSAsyncWASMModule](QuickJSAsyncWASMModule.md). -See the [pull request](https://github.com/justjake/quickjs-emscripten/pull/114) for more details. - -#### Parameters - -• **stackSize**: `number` - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten.QuickJSRuntime.setMaxStackSize`](QuickJSRuntime.md#setmaxstacksize) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L92) - -*** - -### setMemoryLimit() - -> **setMemoryLimit**(`limitBytes`): `void` - -Set the max memory this runtime can allocate. -To remove the limit, set to `-1`. - -#### Parameters - -• **limitBytes**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.QuickJSRuntime.setMemoryLimit`](QuickJSRuntime.md#setmemorylimit) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:281](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L281) - -*** - -### setModuleLoader() - -> **setModuleLoader**(`moduleLoader`, `moduleNormalizer`?): `void` - -Set the loader for EcmaScript modules requested by any context in this -runtime. - -The loader can be removed with [removeModuleLoader](QuickJSAsyncRuntime.md#removemoduleloader). - -#### Parameters - -• **moduleLoader**: [`JSModuleLoaderAsync`](../interfaces/JSModuleLoaderAsync.md) - -• **moduleNormalizer?**: [`JSModuleNormalizerAsync`](../interfaces/JSModuleNormalizerAsync.md) - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten.QuickJSRuntime.setModuleLoader`](QuickJSRuntime.md#setmoduleloader) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime-asyncify.ts:75](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime-asyncify.ts#L75) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/QuickJSAsyncWASMModule.md b/doc/quickjs-emscripten/classes/QuickJSAsyncWASMModule.md deleted file mode 100644 index bdbe26f6c..000000000 --- a/doc/quickjs-emscripten/classes/QuickJSAsyncWASMModule.md +++ /dev/null @@ -1,163 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSAsyncWASMModule - -# Class: QuickJSAsyncWASMModule - -Asyncified version of [QuickJSWASMModule](QuickJSWASMModule.md). - -Due to limitations of Emscripten's ASYNCIFY process, only a single async -function call can happen at a time across the entire WebAssembly module. - -That means that all runtimes, contexts, functions, etc created inside this -WebAssembly are limited to a single concurrent async action. -**Multiple concurrent async actions is an error.** - -To allow for multiple concurrent async actions, you must create multiple WebAssembly -modules. - -## Contents - -- [Extends](QuickJSAsyncWASMModule.md#extends) -- [Methods](QuickJSAsyncWASMModule.md#methods) - - [evalCode()](QuickJSAsyncWASMModule.md#evalcode) - - [evalCodeAsync()](QuickJSAsyncWASMModule.md#evalcodeasync) - - [getWasmMemory()](QuickJSAsyncWASMModule.md#getwasmmemory) - - [newContext()](QuickJSAsyncWASMModule.md#newcontext) - - [newRuntime()](QuickJSAsyncWASMModule.md#newruntime) - -## Extends - -- [`QuickJSWASMModule`](QuickJSWASMModule.md) - -## Methods - -### evalCode() - -> **evalCode**(): `never` - -Synchronous evalCode is not supported. - -#### Returns - -`never` - -#### Overrides - -[`quickjs-emscripten.QuickJSWASMModule.evalCode`](QuickJSWASMModule.md#evalcode) - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L76) - -*** - -### evalCodeAsync() - -> **evalCodeAsync**(`code`, `options`): `Promise`\<`unknown`\> - -One-off evaluate code without needing to create a [QuickJSAsyncRuntime](QuickJSAsyncRuntime.md) or -[QuickJSAsyncContext](QuickJSAsyncContext.md) explicitly. - -This version allows for asynchronous Ecmascript module loading. - -Note that only a single async action can occur at a time inside the entire WebAssembly module. -**Multiple concurrent async actions is an error.** - -See the documentation for [QuickJSWASMModule#evalCode](QuickJSWASMModule.md#evalcode) for more details. - -#### Parameters - -• **code**: `string` - -• **options**: [`ModuleEvalOptions`](../interfaces/ModuleEvalOptions.md) - -#### Returns - -`Promise`\<`unknown`\> - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:91](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L91) - -*** - -### getWasmMemory() - -> **getWasmMemory**(): `Memory` - -Retrieve the WebAssembly memory used by this QuickJS module. -Use this access very carefully - you are responsible for safe interaction with the memory. - -To supply a custom, pre-initialized memory to QuickJS, create a new variant -and provide the [CustomizeVariantOptions#wasmMemory](../interfaces/CustomizeVariantOptions.md#wasmmemory) option. - -#### Returns - -`Memory` - -#### Inherited from - -[`quickjs-emscripten.QuickJSWASMModule.getWasmMemory`](QuickJSWASMModule.md#getwasmmemory) - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:426](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L426) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -A simplified API to create a new [QuickJSAsyncRuntime](QuickJSAsyncRuntime.md) and a -[QuickJSAsyncContext](QuickJSAsyncContext.md) inside that runtime at the same time. The runtime will -be disposed when the context is disposed. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSAsyncContext`](QuickJSAsyncContext.md) - -#### Overrides - -[`quickjs-emscripten.QuickJSWASMModule.newContext`](QuickJSWASMModule.md#newcontext) - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:67](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L67) - -*** - -### newRuntime() - -> **newRuntime**(`options`): [`QuickJSAsyncRuntime`](QuickJSAsyncRuntime.md) - -Create a new async runtime inside this WebAssembly module. All runtimes inside a -module are limited to a single async call at a time. For multiple -concurrent async actions, create multiple WebAssembly modules. - -#### Parameters - -• **options**: [`AsyncRuntimeOptions`](../interfaces/AsyncRuntimeOptions.md)= `{}` - -#### Returns - -[`QuickJSAsyncRuntime`](QuickJSAsyncRuntime.md) - -#### Overrides - -[`quickjs-emscripten.QuickJSWASMModule.newRuntime`](QuickJSWASMModule.md#newruntime) - -#### Source - -[packages/quickjs-emscripten-core/src/module-asyncify.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-asyncify.ts#L41) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/QuickJSContext.md b/doc/quickjs-emscripten/classes/QuickJSContext.md deleted file mode 100644 index 00d400b92..000000000 --- a/doc/quickjs-emscripten/classes/QuickJSContext.md +++ /dev/null @@ -1,1551 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSContext - -# Class: QuickJSContext - -QuickJSContext wraps a QuickJS Javascript context (JSContext*) within a -runtime. The contexts within the same runtime may exchange objects freely. -You can think of separate runtimes like different domains in a browser, and -the contexts within a runtime like the different windows open to the same -domain. The [runtime](QuickJSContext.md#runtime) references the context's runtime. - -This class's methods return [QuickJSHandle](../exports.md#quickjshandle), which wrap C pointers (JSValue*). -It's the caller's responsibility to call `.dispose()` on any -handles you create to free memory once you're done with the handle. - -Use [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext) or [QuickJSWASMModule#newContext](QuickJSWASMModule.md#newcontext) -to create a new QuickJSContext. - -Create QuickJS values inside the interpreter with methods like -[newNumber](QuickJSContext.md#newnumber), [newString](QuickJSContext.md#newstring), [newArray](QuickJSContext.md#newarray), [newObject](QuickJSContext.md#newobject), -[newFunction](QuickJSContext.md#newfunction), and [newPromise](QuickJSContext.md#newpromise). - -Call [setProp](QuickJSContext.md#setprop) or [defineProp](QuickJSContext.md#defineprop) to customize objects. Use those methods -with [global](QuickJSContext.md#global) to expose the values you create to the interior of the -interpreter, so they can be used in [evalCode](QuickJSContext.md#evalcode). - -Use [evalCode](QuickJSContext.md#evalcode) or [callFunction](QuickJSContext.md#callfunction) to execute Javascript inside the VM. If -you're using asynchronous code inside the QuickJSContext, you may need to also -call [QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs). Executing code inside the runtime returns a -result object representing successful execution or an error. You must dispose -of any such results to avoid leaking memory inside the VM. - -Implement memory and CPU constraints at the runtime level, using [runtime](QuickJSContext.md#runtime). -See [QuickJSRuntime](QuickJSRuntime.md) for more information. - -## Contents - -- [Extends](QuickJSContext.md#extends) -- [Implements](QuickJSContext.md#implements) -- [Constructors](QuickJSContext.md#constructors) - - [new QuickJSContext(args)](QuickJSContext.md#new-quickjscontextargs) -- [Properties](QuickJSContext.md#properties) - - [runtime](QuickJSContext.md#runtime) -- [Accessors](QuickJSContext.md#accessors) - - [alive](QuickJSContext.md#alive) - - [false](QuickJSContext.md#false) - - [global](QuickJSContext.md#global) - - [null](QuickJSContext.md#null) - - [true](QuickJSContext.md#true) - - [undefined](QuickJSContext.md#undefined) -- [Methods](QuickJSContext.md#methods) - - [`[dispose]`()](QuickJSContext.md#dispose) - - [callFunction()](QuickJSContext.md#callfunction) - - [callMethod()](QuickJSContext.md#callmethod) - - [decodeBinaryJSON()](QuickJSContext.md#decodebinaryjson) - - [defineProp()](QuickJSContext.md#defineprop) - - [dispose()](QuickJSContext.md#dispose) - - [dump()](QuickJSContext.md#dump) - - [encodeBinaryJSON()](QuickJSContext.md#encodebinaryjson) - - [eq()](QuickJSContext.md#eq) - - [evalCode()](QuickJSContext.md#evalcode) - - [fail()](QuickJSContext.md#fail) - - [getArrayBuffer()](QuickJSContext.md#getarraybuffer) - - [getBigInt()](QuickJSContext.md#getbigint) - - [getIterator()](QuickJSContext.md#getiterator) - - [getLength()](QuickJSContext.md#getlength) - - [getNumber()](QuickJSContext.md#getnumber) - - [getOwnPropertyNames()](QuickJSContext.md#getownpropertynames) - - [getPromiseState()](QuickJSContext.md#getpromisestate) - - [getProp()](QuickJSContext.md#getprop) - - [getString()](QuickJSContext.md#getstring) - - [getSymbol()](QuickJSContext.md#getsymbol) - - [getWellKnownSymbol()](QuickJSContext.md#getwellknownsymbol) - - [newArray()](QuickJSContext.md#newarray) - - [newArrayBuffer()](QuickJSContext.md#newarraybuffer) - - [newBigInt()](QuickJSContext.md#newbigint) - - [newError()](QuickJSContext.md#newerror) - - [newFunction()](QuickJSContext.md#newfunction) - - [newNumber()](QuickJSContext.md#newnumber) - - [newObject()](QuickJSContext.md#newobject) - - [newPromise()](QuickJSContext.md#newpromise) - - [newString()](QuickJSContext.md#newstring) - - [newSymbolFor()](QuickJSContext.md#newsymbolfor) - - [newUniqueSymbol()](QuickJSContext.md#newuniquesymbol) - - [resolvePromise()](QuickJSContext.md#resolvepromise) - - [sameValue()](QuickJSContext.md#samevalue) - - [sameValueZero()](QuickJSContext.md#samevaluezero) - - [setProp()](QuickJSContext.md#setprop) - - [success()](QuickJSContext.md#success) - - [throw()](QuickJSContext.md#throw) - - [typeof()](QuickJSContext.md#typeof) - - [unwrapResult()](QuickJSContext.md#unwrapresult) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`LowLevelJavascriptVm`](../interfaces/LowLevelJavascriptVm.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new QuickJSContext(args) - -> **new QuickJSContext**(`args`): [`QuickJSContext`](QuickJSContext.md) - -Use [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext) or [QuickJSWASMModule#newContext](QuickJSWASMModule.md#newcontext) -to create a new QuickJSContext. - -#### Parameters - -• **args**: `Object` - -• **args\.callbacks**: `QuickJSModuleCallbacks` - -• **args\.ctx**: [`Lifetime`](Lifetime.md)\<[`JSContextPointer`](../exports.md#jscontextpointer), `never`, `never`\> - -• **args\.ffi**: [`EitherFFI`](../exports.md#eitherffi) - -• **args\.module**: [`EitherModule`](../exports.md#eithermodule) - -• **args\.ownedLifetimes?**: [`Disposable`](../interfaces/Disposable.md)[] - -• **args\.rt**: [`Lifetime`](Lifetime.md)\<[`JSRuntimePointer`](../exports.md#jsruntimepointer), `never`, `never`\> - -• **args\.runtime**: [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:224](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L224) - -## Properties - -### runtime - -> **`readonly`** **runtime**: [`QuickJSRuntime`](QuickJSRuntime.md) - -The runtime that created this context. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:186](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L186) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSContext.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L255) - -*** - -### false - -> **`get`** **false**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:313](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L313) - -*** - -### global - -> **`get`** **global**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects). -A handle to the global object inside the interpreter. -You can set properties to create global variables. - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:328](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L328) - -*** - -### null - -> **`get`** **null**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:287](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L287) - -*** - -### true - -> **`get`** **true**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:300](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L300) - -*** - -### undefined - -> **`get`** **undefined**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -[`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:274](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L274) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### callFunction() - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, `args`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -[`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) or -[`func.apply(thisVal, args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply). -Call a JSValue as a function. - -See [unwrapResult](QuickJSContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSContext.md#resolvepromise) to convert it to a native promise and -[runtime](QuickJSContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args?**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -Example: - -```typescript -using parseIntHandle = context.getProp(global, "parseInt") -using stringHandle = context.newString("42") -using resultHandle = context.callFunction(parseIntHandle, context.undefined, stringHandle).unwrap() -console.log(context.dump(resultHandle)) // 42 -``` - -##### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.callFunction`](../interfaces/LowLevelJavascriptVm.md#callfunction) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1059](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1059) - -#### callFunction(func, thisVal, args) - -> **callFunction**(`func`, `thisVal`, ...`args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Parameters - -• **func**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **thisVal**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• ...**args**: [`QuickJSHandle`](../exports.md#quickjshandle)[] - -##### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Implementation of - -`LowLevelJavascriptVm.callFunction` - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:1064](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1064) - -*** - -### callMethod() - -> **callMethod**(`thisHandle`, `key`, `args`): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -`handle[key](...args)` - -Call a method on a JSValue. This is a convenience method that calls [getProp](QuickJSContext.md#getprop) and [callFunction](QuickJSContext.md#callfunction). - -#### Parameters - -• **thisHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -• **args**: [`QuickJSHandle`](../exports.md#quickjshandle)[]= `[]` - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -A result. If the function threw synchronously, `result.error` be a -handle to the exception. Otherwise `result.value` will be a handle to the -value. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1113) - -*** - -### decodeBinaryJSON() - -> **decodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs Handle of the given QuickJS Object in binary form - -```ts -// imagine receiving data from another via IPC -socket.on("data", chunk => { - context.newArrayBuffer(chunk) - ?.consume(handle => context.decodeBinaryJSON(handle)) - ?.consume(handle => console.log(context.dump(handle))) -}) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1431](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1431) - -*** - -### defineProp() - -> **defineProp**(`handle`, `key`, `descriptor`): `void` - -[`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **descriptor**: [`VmPropertyDescriptor`](../interfaces/VmPropertyDescriptor.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.defineProp`](../interfaces/LowLevelJavascriptVm.md#defineprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1000](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1000) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of this VM's underlying resources. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Throws - -Calling this method without disposing of all created handles -will result in an error. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:265](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L265) - -*** - -### dump() - -> **dump**(`handle`): `any` - -Dump a JSValue to Javascript in a best-effort fashion. -If the value is a promise, dumps the promise's state. -Returns `handle.toString()` if it cannot be serialized to JSON. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`any` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1234](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1234) - -*** - -### encodeBinaryJSON() - -> **encodeBinaryJSON**(`handle`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Outputs QuickJS Objects in binary form - -**WARNING**: QuickJS's binary JSON doesn't have a standard so expect it to change between version - -```ts -// imagine sending data to another via IPC -let dataLifetime = context.newString("This is an example") - ?.consume(handle => context.encodeBinaryJSON(handle)) - ?.consume(handle => context.getArrayBuffer(handle)) -socket.write(dataLifetime?.value) -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1414](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1414) - -*** - -### eq() - -> **eq**(`handle`, `other`): `boolean` - -`handle === other` - IsStrictlyEqual. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:811](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L811) - -*** - -### evalCode() - -> **evalCode**(`code`, `filename`, `options`?): `QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description). - -Evaluates `code`, as though it's in a file named `filename`, with options `options`. - -- When `options.type` is `"global"`, the code is evaluated in the global - scope of the QuickJSContext, and the return value is the result of the last - expression. -- When `options.type` is `"module"`, the code is evaluated is a module scope. - It may use `import` and `export` if [runtime](QuickJSContext.md#runtime).[QuickJSRuntime#setModuleLoader](QuickJSRuntime.md#setmoduleloader) was called. - It may use top-level await if supported by the underlying QuickJS library. - The return value is the module's exports, or a promise for the module's exports. -- When `options.type` is unset, the code is evaluated as a module if it - contains an `import` or `export` statement, otherwise it is evaluated in - the global scope. - -When working with async code, you many need to call [runtime](QuickJSContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) -to execute callbacks pending after synchronous evaluation returns. - -See [unwrapResult](QuickJSContext.md#unwrapresult), which will throw if the function returned an error, or -return the result handle directly. If evaluation returned a handle containing -a promise, use [resolvePromise](QuickJSContext.md#resolvepromise) to convert it to a native promise and -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to finish evaluating the promise. - -*Note*: to protect against infinite loops, provide an interrupt handler to -[QuickJSRuntime#setInterruptHandler](QuickJSRuntime.md#setinterrupthandler). You can use [shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline) to -create a time-based deadline. - -#### Parameters - -• **code**: `string` - -• **filename**: `string`= `"eval.js"` - -• **options?**: `number` \| [`ContextEvalOptions`](../interfaces/ContextEvalOptions.md) - -If no options are passed, a heuristic will be used to detect if `code` is -an ES module. - -See [EvalFlags](../exports.md#evalflags) for number semantics. - -#### Returns - -`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -The last statement's value. If the code threw synchronously, -`result.error` will be a handle to the exception. If execution was -interrupted, the error will have name `InternalError` and message -`interrupted`. - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.evalCode`](../interfaces/LowLevelJavascriptVm.md#evalcode) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1156](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1156) - -*** - -### fail() - -> **`protected`** **fail**(`error`): [`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Parameters - -• **error**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`DisposableFail`](DisposableFail.md)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1440](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1440) - -*** - -### getArrayBuffer() - -> **getArrayBuffer**(`handle`): [`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -Coverts `handle` to a JavaScript ArrayBuffer - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`Lifetime`](Lifetime.md)\<`Uint8Array`, `never`, `never`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:690](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L690) - -*** - -### getBigInt() - -> **getBigInt**(`handle`): `bigint` - -Converts `handle` to a Javascript bigint. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`bigint` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:681](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L681) - -*** - -### getIterator() - -> **getIterator**(`iterableHandle`): `QuickJSContextResult`\<`QuickJSIterator`\> - -`handle[Symbol.iterator]()`. See [QuickJSIterator]([object Object]). -Returns a host iterator that wraps and proxies calls to a guest iterator handle. -Each step of the iteration returns a result, either an error or a handle to the next value. -Once the iterator is done, the handle is automatically disposed, and the iterator -is considered done if the handle is disposed. - -```typescript -for (using entriesHandle of context.getIterator(mapHandle).unwrap()) { - using keyHandle = context.getProp(entriesHandle, 0) - using valueHandle = context.getProp(entriesHandle, 1) - console.log(context.dump(keyHandle), '->', context.dump(valueHandle)) -} -``` - -#### Parameters - -• **iterableHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`QuickJSContextResult`\<`QuickJSIterator`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:960](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L960) - -*** - -### getLength() - -> **getLength**(`handle`): `undefined` \| `number` - -`handle.length` as a host number. - -Example use: -```typescript -const length = context.getLength(arrayHandle) ?? 0 -for (let i = 0; i < length; i++) { - using value = context.getProp(arrayHandle, i) - console.log(`array[${i}] =`, context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`undefined` \| `number` - -a number if the handle has a numeric length property, otherwise `undefined`. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:870](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L870) - -*** - -### getNumber() - -> **getNumber**(`handle`): `number` - -Converts `handle` into a Javascript number. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`number` - -`NaN` on error, otherwise a `number`. - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.getNumber`](../interfaces/LowLevelJavascriptVm.md#getnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:652](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L652) - -*** - -### getOwnPropertyNames() - -> **getOwnPropertyNames**(`handle`, `options`): `QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Object.getOwnPropertyNames(handle)`. -Similar to the [standard semantics](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames), -but with extra, non-standard options for: - -- fetching array indexes as numbers (`numbers: true`) -- including symbols (`symbols: true`) -- only iterating over enumerable properties (`onlyEnumerable: true`) - -The default behavior is to emulate the standard: -```typescript -context.getOwnPropertyNames(handle, { strings: true, numbersAsStrings: true }) -``` - -Note when passing an explicit options object, you must set at least one -option, and `strings` are not included unless specified. - -Example use: -```typescript -for (using prop of context.getOwnPropertyNames(objectHandle).unwrap()) { - using value = context.getProp(handle, prop) - console.log(context.dump(prop), '->', context.dump(value)) -} -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **options**: `GetOwnPropertyNamesOptions`= `undefined` - -#### Returns - -`QuickJSContextResult`\<[`DisposableArray`](../exports.md#disposablearrayt)\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -an an array of handles of the property names. The array itself is disposable for your convenience. - -#### Throws - -QuickJSEmptyGetOwnPropertyNames if no options are set. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:907](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L907) - -*** - -### getPromiseState() - -> **getPromiseState**(`handle`): [`JSPromiseState`](../exports.md#jspromisestate) - -Get the current state of a QuickJS promise, see [JSPromiseState](../exports.md#jspromisestate) for the possible states. -This can be used to expect a promise to be fulfilled when combined with [unwrapResult](QuickJSContext.md#unwrapresult): - -```typescript -const promiseHandle = context.evalCode(`Promise.resolve(42)`); -const resultHandle = context.unwrapResult( - context.getPromiseState(promiseHandle) -); -context.getNumber(resultHandle) === 42; // true -resultHandle.dispose(); -``` - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSPromiseState`](../exports.md#jspromisestate) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:715](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L715) - -*** - -### getProp() - -> **getProp**(`handle`, `key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -`handle[key]`. -Get a property from a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string (which will be converted automatically). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.getProp`](../interfaces/LowLevelJavascriptVm.md#getprop) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:840](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L840) - -*** - -### getString() - -> **getString**(`handle`): `string` - -Converts `handle` to a Javascript string. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.getString`](../interfaces/LowLevelJavascriptVm.md#getstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:660](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L660) - -*** - -### getSymbol() - -> **getSymbol**(`handle`): `symbol` - -Converts `handle` into a Javascript symbol. If the symbol is in the global -registry in the guest, it will be created with Symbol.for on the host. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`symbol` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:669](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L669) - -*** - -### getWellKnownSymbol() - -> **getWellKnownSymbol**(`name`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Access a well-known symbol that is a property of the global Symbol object, like `Symbol.iterator`. - -#### Parameters - -• **name**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:388](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L388) - -*** - -### newArray() - -> **newArray**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -`[]`. -Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:430](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L430) - -*** - -### newArrayBuffer() - -> **newArrayBuffer**(`buffer`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a new QuickJS [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). - -#### Parameters - -• **buffer**: `ArrayBufferLike` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:438](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L438) - -*** - -### newBigInt() - -> **newBigInt**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value. - -#### Parameters - -• **num**: `bigint` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:396](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L396) - -*** - -### newError() - -#### newError(error) - -> **newError**(`error`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **error**: `Object` - -• **error\.message**: `string` - -• **error\.name**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:607](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L607) - -#### newError(message) - -> **newError**(`message`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **message**: `string` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:608](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L608) - -#### newError(undefined) - -> **newError**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:609](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L609) - -*** - -### newFunction() - -> **newFunction**(`name`, `fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Convert a Javascript function into a QuickJS function value. -See [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) for more details. - -A [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle) should not free its arguments or its return -value. A VmFunctionImplementation should also not retain any references to -its return value. - -The function argument handles are automatically disposed when the function -returns. If you want to retain a handle beyond the end of the function, you -can call [Lifetime#dup](Lifetime.md#dup) to create a copy of the handle that you own -and must dispose manually. For example, you need to use this API and do some -extra book keeping to implement `setInterval`: - -```typescript -// This won't work because `callbackHandle` expires when the function returns, -// so when the interval fires, the callback handle is already disposed. -const WRONG_setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - const delayMs = context.getNumber(delayHandle) - const intervalId = globalThis.setInterval(() => { - // ERROR: callbackHandle is already disposed here. - context.callFunction(callbackHandle) - }, intervalId) - return context.newNumber(intervalId) -}) - -// This works since we dup the callbackHandle. -// We just need to make sure we clean it up manually when the interval is cleared -- -// so we need to keep track of those interval IDs, and make sure we clean all -// of them up when we dispose the owning context. - -const setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - // Ensure the guest can't overload us by scheduling too many intervals. - if (QuickJSInterval.INTERVALS.size > 100) { - throw new Error(`Too many intervals scheduled already`) - } - - const delayMs = context.getNumber(delayHandle) - const longLivedCallbackHandle = callbackHandle.dup() - const intervalId = globalThis.setInterval(() => { - context.callFunction(longLivedCallbackHandle) - }, intervalId) - const disposable = new QuickJSInterval(longLivedCallbackHandle, context, intervalId) - QuickJSInterval.INTERVALS.set(intervalId, disposable) - return context.newNumber(intervalId) -}) - -const clearIntervalHandle = context.newFunction("clearInterval", (intervalIdHandle) => { - const intervalId = context.getNumber(intervalIdHandle) - const disposable = QuickJSInterval.INTERVALS.get(intervalId) - disposable?.dispose() -}) - -class QuickJSInterval extends UsingDisposable { - static INTERVALS = new Map() - - static disposeContext(context: QuickJSContext) { - for (const interval of QuickJSInterval.INTERVALS.values()) { - if (interval.context === context) { - interval.dispose() - } - } - } - - constructor( - public fnHandle: QuickJSHandle, - public context: QuickJSContext, - public intervalId: number, - ) { - super() - } - - dispose() { - globalThis.clearInterval(this.intervalId) - this.fnHandle.dispose() - QuickJSInterval.INTERVALS.delete(this.fnHandle.value) - } - - get alive() { - return this.fnHandle.alive - } -} -``` - -To implement an async function, create a promise with [newPromise](QuickJSContext.md#newpromise), then -return the deferred promise handle from `deferred.handle` from your -function implementation: - -```typescript -const deferred = vm.newPromise() -someNativeAsyncFunction().then(deferred.resolve) -return deferred.handle -``` - -#### Parameters - -• **name**: `string` - -• **fn**: [`VmFunctionImplementation`](../exports.md#vmfunctionimplementationvmhandle)\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.newFunction`](../interfaces/LowLevelJavascriptVm.md#newfunction) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:601](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L601) - -*** - -### newNumber() - -> **newNumber**(`num`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Converts a Javascript number into a QuickJS value. - -#### Parameters - -• **num**: `number` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.newNumber`](../interfaces/LowLevelJavascriptVm.md#newnumber) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:347](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L347) - -*** - -### newObject() - -> **newObject**(`prototype`?): [`QuickJSHandle`](../exports.md#quickjshandle) - -`{}`. -Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer). - -#### Parameters - -• **prototype?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.newObject`](../interfaces/LowLevelJavascriptVm.md#newobject) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:416](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L416) - -*** - -### newPromise() - -#### newPromise(undefined) - -> **newPromise**(): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md). Use `deferred.resolve(handle)` and -`deferred.reject(handle)` to fulfill the promise handle available at `deferred.handle`. -Note that you are responsible for calling `deferred.dispose()` to free the underlying -resources; see the documentation on [QuickJSDeferredPromise](QuickJSDeferredPromise.md) for details. - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:451](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L451) - -#### newPromise(promise) - -> **newPromise**(`promise`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Create a new [QuickJSDeferredPromise](QuickJSDeferredPromise.md) that resolves when the -given native Promise`` resolves. Rejections will be coerced -to a QuickJS error. - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **promise**: `Promise`\<[`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:459](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L459) - -#### newPromise(newPromiseFn) - -> **newPromise**(`newPromiseFn`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Construct a new native Promise`` , and then convert it into a -[QuickJSDeferredPromise](QuickJSDeferredPromise.md). - -You can still resolve/reject the created promise "early" using its methods. - -##### Parameters - -• **newPromiseFn**: [`PromiseExecutor`](../exports.md#promiseexecutorresolvet-rejectt)\<[`QuickJSHandle`](../exports.md#quickjshandle), `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle)\> - -##### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -##### Source - -[packages/quickjs-emscripten-core/src/context.ts:466](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L466) - -*** - -### newString() - -> **newString**(`str`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value. - -#### Parameters - -• **str**: `string` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.newString`](../interfaces/LowLevelJavascriptVm.md#newstring) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:354](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L354) - -*** - -### newSymbolFor() - -> **newSymbolFor**(`key`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key. -All symbols created with the same key will be the same value. - -#### Parameters - -• **key**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:377](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L377) - -*** - -### newUniqueSymbol() - -> **newUniqueSymbol**(`description`): [`QuickJSHandle`](../exports.md#quickjshandle) - -Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value. -No two symbols created with this function will be the same value. - -#### Parameters - -• **description**: `string` \| `symbol` - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:365](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L365) - -*** - -### resolvePromise() - -> **resolvePromise**(`promiseLikeHandle`): `Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -`Promise.resolve(value)`. -Convert a handle containing a Promise-like value inside the VM into an -actual promise on the host. - -#### Parameters - -• **promiseLikeHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -A handle to a Promise-like value with a `.then(onSuccess, onError)` method. - -#### Returns - -`Promise`\<`QuickJSContextResult`\<[`QuickJSHandle`](../exports.md#quickjshandle)\>\> - -#### Remarks - -You may need to call [runtime](QuickJSContext.md#runtime).[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to ensure that the promise is resolved. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:754](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L754) - -*** - -### sameValue() - -> **sameValue**(`handle`, `other`): `boolean` - -`Object.is(a, b)` -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:819](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L819) - -*** - -### sameValueZero() - -> **sameValueZero**(`handle`, `other`): `boolean` - -SameValueZero comparison. -See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **other**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:827](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L827) - -*** - -### setProp() - -> **setProp**(`handle`, `key`, `value`): `void` - -`handle[key] = value`. -Set a property on a JSValue. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **key**: [`QuickJSPropertyKey`](../exports.md#quickjspropertykey) - -The property may be specified as a JSValue handle, or as a -Javascript string or number (which will be converted automatically to a JSValue). - -• **value**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.setProp`](../interfaces/LowLevelJavascriptVm.md#setprop) - -#### Remarks - -Note that the QuickJS authors recommend using [defineProp](QuickJSContext.md#defineprop) to define new -properties. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:985](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L985) - -*** - -### success() - -> **`protected`** **success**\<`S`\>(`value`): [`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Type parameters - -• **S** - -#### Parameters - -• **value**: `S` - -#### Returns - -[`DisposableSuccess`](DisposableSuccess.md)\<`S`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1436](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1436) - -*** - -### throw() - -> **throw**(`error`): [`JSValuePointer`](../exports.md#jsvaluepointer) - -Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes. - -#### Parameters - -• **error**: `Error` \| [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1193](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1193) - -*** - -### typeof() - -> **typeof**(`handle`): `string` - -`typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof). - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`string` - -#### Implementation of - -[`quickjs-emscripten.LowLevelJavascriptVm.typeof`](../interfaces/LowLevelJavascriptVm.md#typeof) - -#### Remarks - -Does not support BigInt values correctly. - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:643](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L643) - -*** - -### unwrapResult() - -> **unwrapResult**\<`T`\>(`result`): `T` - -Unwrap a SuccessOrFail result such as a [VmCallResult](../exports.md#vmcallresultvmhandle) or a -[ExecutePendingJobsResult](../exports.md#executependingjobsresult), where the fail branch contains a handle to a QuickJS error value. -If the result is a success, returns the value. -If the result is an error, converts the error to a native object and throws the error. - -#### Type parameters - -• **T** - -#### Parameters - -• **result**: [`SuccessOrFail`](../exports.md#successorfails-f)\<`T`, [`QuickJSHandle`](../exports.md#quickjshandle)\> - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:1277](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L1277) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/QuickJSDeferredPromise.md b/doc/quickjs-emscripten/classes/QuickJSDeferredPromise.md deleted file mode 100644 index 99bae90c0..000000000 --- a/doc/quickjs-emscripten/classes/QuickJSDeferredPromise.md +++ /dev/null @@ -1,253 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSDeferredPromise - -# Class: QuickJSDeferredPromise - -QuickJSDeferredPromise wraps a QuickJS promise [handle](QuickJSDeferredPromise.md#handle) and allows -[resolve](QuickJSDeferredPromise.md#resolve)ing or [reject](QuickJSDeferredPromise.md#reject)ing that promise. Use it to bridge asynchronous -code on the host to APIs inside a QuickJSContext. - -Managing the lifetime of promises is tricky. There are three -[QuickJSHandle](../exports.md#quickjshandle)s inside of each deferred promise object: (1) the promise -itself, (2) the `resolve` callback, and (3) the `reject` callback. - -- If the promise will be fulfilled before the end of it's [owner](QuickJSDeferredPromise.md#owner)'s lifetime, - the only cleanup necessary is `deferred.handle.dispose()`, because - calling [resolve](QuickJSDeferredPromise.md#resolve) or [reject](QuickJSDeferredPromise.md#reject) will dispose of both callbacks automatically. - -- As the return value of a [VmFunctionImplementation](../exports.md#vmfunctionimplementationvmhandle), return [handle](QuickJSDeferredPromise.md#handle), - and ensure that either [resolve](QuickJSDeferredPromise.md#resolve) or [reject](QuickJSDeferredPromise.md#reject) will be called. No other - clean-up is necessary. - -- In other cases, call [dispose](QuickJSDeferredPromise.md#dispose-1), which will dispose [handle](QuickJSDeferredPromise.md#handle) as well as the - QuickJS handles that back [resolve](QuickJSDeferredPromise.md#resolve) and [reject](QuickJSDeferredPromise.md#reject). For this object, - [dispose](QuickJSDeferredPromise.md#dispose-1) is idempotent. - -## Contents - -- [Extends](QuickJSDeferredPromise.md#extends) -- [Implements](QuickJSDeferredPromise.md#implements) -- [Constructors](QuickJSDeferredPromise.md#constructors) - - [new QuickJSDeferredPromise(args)](QuickJSDeferredPromise.md#new-quickjsdeferredpromiseargs) -- [Properties](QuickJSDeferredPromise.md#properties) - - [context](QuickJSDeferredPromise.md#context) - - [handle](QuickJSDeferredPromise.md#handle) - - [owner](QuickJSDeferredPromise.md#owner) - - [settled](QuickJSDeferredPromise.md#settled) -- [Accessors](QuickJSDeferredPromise.md#accessors) - - [alive](QuickJSDeferredPromise.md#alive) -- [Methods](QuickJSDeferredPromise.md#methods) - - [`[dispose]`()](QuickJSDeferredPromise.md#dispose) - - [dispose()](QuickJSDeferredPromise.md#dispose) - - [reject()](QuickJSDeferredPromise.md#reject) - - [resolve()](QuickJSDeferredPromise.md#resolve) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new QuickJSDeferredPromise(args) - -> **new QuickJSDeferredPromise**(`args`): [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -Use [QuickJSContext#newPromise](QuickJSContext.md#newpromise) to create a new promise instead of calling -this constructor directly. - -#### Parameters - -• **args**: `Object` - -• **args\.context**: [`QuickJSContext`](QuickJSContext.md) - -• **args\.promiseHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args\.rejectHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -• **args\.resolveHandle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -[`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:95](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L95) - -## Properties - -### context - -> **context**: [`QuickJSContext`](QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L73) - -*** - -### handle - -> **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -A handle of the Promise instance inside the QuickJSContext. -You must dispose [handle](QuickJSDeferredPromise.md#handle) or the entire QuickJSDeferredPromise once you -are finished with it. - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:80](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L80) - -*** - -### owner - -> **owner**: [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L72) - -*** - -### settled - -> **settled**: `Promise`\<`void`\> - -A native promise that will resolve once this deferred is settled. - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L85) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSDeferredPromise.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:166](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L166) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:170](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L170) - -*** - -### reject() - -> **reject**(`value`?): `void` - -Reject [handle](QuickJSDeferredPromise.md#handle) with the given value, if any. -Calling this method after calling [dispose](QuickJSDeferredPromise.md#dispose-1) is a no-op. - -Note that after rejecting a promise, you may need to call -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to propagate the result to the promise's -callbacks. - -#### Parameters - -• **value?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:147](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L147) - -*** - -### resolve() - -> **resolve**(`value`?): `void` - -Resolve [handle](QuickJSDeferredPromise.md#handle) with the given value, if any. -Calling this method after calling [dispose](QuickJSDeferredPromise.md#dispose-1) is a no-op. - -Note that after resolving a promise, you may need to call -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs) to propagate the result to the promise's -callbacks. - -#### Parameters - -• **value?**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/QuickJSRuntime.md b/doc/quickjs-emscripten/classes/QuickJSRuntime.md deleted file mode 100644 index a6c48a828..000000000 --- a/doc/quickjs-emscripten/classes/QuickJSRuntime.md +++ /dev/null @@ -1,476 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSRuntime - -# Class: QuickJSRuntime - -A runtime represents a Javascript runtime corresponding to an object heap. -Several runtimes can exist at the same time but they cannot exchange objects. -Inside a given runtime, no multi-threading is supported. - -You can think of separate runtimes like different domains in a browser, and -the contexts within a runtime like the different windows open to the same -domain. - -Create a runtime via [QuickJSWASMModule.newRuntime](QuickJSWASMModule.md#newruntime). - -You should create separate runtime instances for untrusted code from -different sources for isolation. However, stronger isolation is also -available (at the cost of memory usage), by creating separate WebAssembly -modules to further isolate untrusted code. -See [newQuickJSWASMModule](../exports.md#newquickjswasmmodule). - -Implement memory and CPU constraints with [setInterruptHandler](QuickJSRuntime.md#setinterrupthandler) -(called regularly while the interpreter runs), [setMemoryLimit](QuickJSRuntime.md#setmemorylimit), and -[setMaxStackSize](QuickJSRuntime.md#setmaxstacksize). -Use [computeMemoryUsage](QuickJSRuntime.md#computememoryusage) or [dumpMemoryUsage](QuickJSRuntime.md#dumpmemoryusage) to guide memory limit -tuning. - -Configure ES module loading with [setModuleLoader](QuickJSRuntime.md#setmoduleloader). - -## Contents - -- [Extends](QuickJSRuntime.md#extends) -- [Implements](QuickJSRuntime.md#implements) -- [Properties](QuickJSRuntime.md#properties) - - [context](QuickJSRuntime.md#context) -- [Accessors](QuickJSRuntime.md#accessors) - - [alive](QuickJSRuntime.md#alive) -- [Methods](QuickJSRuntime.md#methods) - - [`[dispose]`()](QuickJSRuntime.md#dispose) - - [assertOwned()](QuickJSRuntime.md#assertowned) - - [computeMemoryUsage()](QuickJSRuntime.md#computememoryusage) - - [debugLog()](QuickJSRuntime.md#debuglog) - - [dispose()](QuickJSRuntime.md#dispose) - - [dumpMemoryUsage()](QuickJSRuntime.md#dumpmemoryusage) - - [executePendingJobs()](QuickJSRuntime.md#executependingjobs) - - [hasPendingJob()](QuickJSRuntime.md#haspendingjob) - - [isDebugMode()](QuickJSRuntime.md#isdebugmode) - - [newContext()](QuickJSRuntime.md#newcontext) - - [removeInterruptHandler()](QuickJSRuntime.md#removeinterrupthandler) - - [removeModuleLoader()](QuickJSRuntime.md#removemoduleloader) - - [setDebugMode()](QuickJSRuntime.md#setdebugmode) - - [setInterruptHandler()](QuickJSRuntime.md#setinterrupthandler) - - [setMaxStackSize()](QuickJSRuntime.md#setmaxstacksize) - - [setMemoryLimit()](QuickJSRuntime.md#setmemorylimit) - - [setModuleLoader()](QuickJSRuntime.md#setmoduleloader) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Properties - -### context - -> **context**: `undefined` \| [`QuickJSContext`](QuickJSContext.md) - -If this runtime was created as as part of a context, points to the context -associated with the runtime. - -If this runtime was created stand-alone, this may or may not contain a context. -A context here may be allocated if one is needed by the runtime, eg for [computeMemoryUsage](QuickJSRuntime.md#computememoryusage). - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:78](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L78) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](QuickJSRuntime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:125](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L125) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### assertOwned() - -> **assertOwned**(`handle`): `void` - -Assert that `handle` is owned by this runtime. - -#### Parameters - -• **handle**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Returns - -`void` - -#### Throws - -QuickJSWrongOwner if owned by a different runtime. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:327](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L327) - -*** - -### computeMemoryUsage() - -> **computeMemoryUsage**(): [`QuickJSHandle`](../exports.md#quickjshandle) - -Compute memory usage for this runtime. Returns the result as a handle to a -JSValue object. Use [QuickJSContext#dump](QuickJSContext.md#dump) to convert to a native object. -Calling this method will allocate more memory inside the runtime. The information -is accurate as of just before the call to `computeMemoryUsage`. -For a human-digestible representation, see [dumpMemoryUsage](QuickJSRuntime.md#dumpmemoryusage). - -#### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:296](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L296) - -*** - -### debugLog() - -> **debugLog**(...`msg`): `void` - -In debug mode, log the result of calling `msg()`. - -We take a function instead of a log message to avoid expensive string -manipulation if debug logging is disabled. - -#### Parameters - -• ...**msg**: `unknown`[] - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:363](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L363) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:129](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L129) - -*** - -### dumpMemoryUsage() - -> **dumpMemoryUsage**(): `string` - -#### Returns - -`string` - -a human-readable description of memory usage in this runtime. -For programmatic access to this information, see [computeMemoryUsage](QuickJSRuntime.md#computememoryusage). - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:307](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L307) - -*** - -### executePendingJobs() - -> **executePendingJobs**(`maxJobsToExecute`): [`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -Execute pendingJobs on the runtime until `maxJobsToExecute` jobs are -executed (default all pendingJobs), the queue is exhausted, or the runtime -encounters an exception. - -In QuickJS, promises and async functions *inside the runtime* create -pendingJobs. These do not execute immediately and need to triggered to run. - -#### Parameters - -• **maxJobsToExecute**: `number` \| `void`= `-1` - -When negative, run all pending jobs. Otherwise execute -at most `maxJobsToExecute` before returning. - -#### Returns - -[`ExecutePendingJobsResult`](../exports.md#executependingjobsresult) - -On success, the number of executed jobs. On error, the exception -that stopped execution, and the context it occurred in. Note that -executePendingJobs will not normally return errors thrown inside async -functions or rejected promises. Those errors are available by calling -[QuickJSContext#resolvePromise](QuickJSContext.md#resolvepromise) on the promise handle returned by the async function. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:243](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L243) - -*** - -### hasPendingJob() - -> **hasPendingJob**(): `boolean` - -In QuickJS, promises and async functions create pendingJobs. These do not execute -immediately and need to be run by calling [executePendingJobs](QuickJSRuntime.md#executependingjobs). - -#### Returns - -`boolean` - -true if there is at least one pendingJob queued up. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:194](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L194) - -*** - -### isDebugMode() - -> **isDebugMode**(): `boolean` - -#### Returns - -`boolean` - -true if debug logging is enabled - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:353](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L353) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSContext`](QuickJSContext.md) - -Create a new context within this runtime. Contexts have isolated globals, -but you can explicitly share objects between contexts with the same -runtime. - -You should dispose a created context before disposing this runtime. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:140](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L140) - -*** - -### removeInterruptHandler() - -> **removeInterruptHandler**(): `void` - -Remove the interrupt handler, if any. -See [setInterruptHandler](QuickJSRuntime.md#setinterrupthandler). - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:219](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L219) - -*** - -### removeModuleLoader() - -> **removeModuleLoader**(): `void` - -Remove the the loader set by [setModuleLoader](QuickJSRuntime.md#setmoduleloader). This disables module loading. - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:181](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L181) - -*** - -### setDebugMode() - -> **setDebugMode**(`enabled`): `void` - -Enable or disable debug logging. - -If this module is a DEBUG variant, more logs will be printed from the C -code. - -#### Parameters - -• **enabled**: `boolean` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:343](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L343) - -*** - -### setInterruptHandler() - -> **setInterruptHandler**(`cb`): `void` - -Set a callback which is regularly called by the QuickJS engine when it is -executing code. This callback can be used to implement an execution -timeout. - -The interrupt handler can be removed with [removeInterruptHandler](QuickJSRuntime.md#removeinterrupthandler). - -#### Parameters - -• **cb**: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:207](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L207) - -*** - -### setMaxStackSize() - -> **setMaxStackSize**(`stackSize`): `void` - -Set the max stack size for this runtime, in bytes. -To remove the limit, set to `0`. - -#### Parameters - -• **stackSize**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:315](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L315) - -*** - -### setMemoryLimit() - -> **setMemoryLimit**(`limitBytes`): `void` - -Set the max memory this runtime can allocate. -To remove the limit, set to `-1`. - -#### Parameters - -• **limitBytes**: `number` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:281](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L281) - -*** - -### setModuleLoader() - -> **setModuleLoader**(`moduleLoader`, `moduleNormalizer`?): `void` - -Set the loader for EcmaScript modules requested by any context in this -runtime. - -The loader can be removed with [removeModuleLoader](QuickJSRuntime.md#removemoduleloader). - -#### Parameters - -• **moduleLoader**: [`JSModuleLoader`](../interfaces/JSModuleLoader.md) - -• **moduleNormalizer?**: [`JSModuleNormalizer`](../interfaces/JSModuleNormalizer.md) - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:172](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L172) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/QuickJSWASMModule.md b/doc/quickjs-emscripten/classes/QuickJSWASMModule.md deleted file mode 100644 index 160016779..000000000 --- a/doc/quickjs-emscripten/classes/QuickJSWASMModule.md +++ /dev/null @@ -1,152 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSWASMModule - -# Class: QuickJSWASMModule - -This class presents a Javascript interface to QuickJS, a Javascript interpreter -that supports EcmaScript 2020 (ES2020). - -It wraps a single WebAssembly module containing the QuickJS library and -associated helper C code. WebAssembly modules are completely isolated from -each other by the host's WebAssembly runtime. Separate WebAssembly modules -have the most isolation guarantees possible with this library. - -The simplest way to start running code is [evalCode](QuickJSWASMModule.md#evalcode). This shortcut -method will evaluate Javascript safely and return the result as a native -Javascript value. - -For more control over the execution environment, or to interact with values -inside QuickJS, create a context with [newContext](QuickJSWASMModule.md#newcontext) or a runtime with -[newRuntime](QuickJSWASMModule.md#newruntime). - -## Contents - -- [Extended By](QuickJSWASMModule.md#extended-by) -- [Methods](QuickJSWASMModule.md#methods) - - [evalCode()](QuickJSWASMModule.md#evalcode) - - [getWasmMemory()](QuickJSWASMModule.md#getwasmmemory) - - [newContext()](QuickJSWASMModule.md#newcontext) - - [newRuntime()](QuickJSWASMModule.md#newruntime) - -## Extended By - -- [`QuickJSAsyncWASMModule`](QuickJSAsyncWASMModule.md) - -## Methods - -### evalCode() - -> **evalCode**(`code`, `options`): `unknown` - -One-off evaluate code without needing to create a [QuickJSRuntime](QuickJSRuntime.md) or -[QuickJSContext](QuickJSContext.md) explicitly. - -To protect against infinite loops, use the `shouldInterrupt` option. The -[shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline) function will create a time-based deadline. - -If you need more control over how the code executes, create a -[QuickJSRuntime](QuickJSRuntime.md) (with [newRuntime](QuickJSWASMModule.md#newruntime)) or a [QuickJSContext](QuickJSContext.md) (with -[newContext](QuickJSWASMModule.md#newcontext) or [QuickJSRuntime#newContext](QuickJSRuntime.md#newcontext)), and use its -[QuickJSContext#evalCode](QuickJSContext.md#evalcode) method. - -Asynchronous callbacks may not run during the first call to `evalCode`. If -you need to work with async code inside QuickJS, create a runtime and use -[QuickJSRuntime#executePendingJobs](QuickJSRuntime.md#executependingjobs). - -#### Parameters - -• **code**: `string` - -• **options**: [`ModuleEvalOptions`](../interfaces/ModuleEvalOptions.md)= `{}` - -#### Returns - -`unknown` - -The result is coerced to a native Javascript value using JSON -serialization, so properties and values unsupported by JSON will be dropped. - -#### Throws - -If `code` throws during evaluation, the exception will be -converted into a native Javascript value and thrown. - -#### Throws - -if `options.shouldInterrupt` interrupted execution, will throw a Error -with name `"InternalError"` and message `"interrupted"`. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:395](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L395) - -*** - -### getWasmMemory() - -> **getWasmMemory**(): `Memory` - -Retrieve the WebAssembly memory used by this QuickJS module. -Use this access very carefully - you are responsible for safe interaction with the memory. - -To supply a custom, pre-initialized memory to QuickJS, create a new variant -and provide the [CustomizeVariantOptions#wasmMemory](../interfaces/CustomizeVariantOptions.md#wasmmemory) option. - -#### Returns - -`Memory` - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:426](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L426) - -*** - -### newContext() - -> **newContext**(`options`): [`QuickJSContext`](QuickJSContext.md) - -A simplified API to create a new [QuickJSRuntime](QuickJSRuntime.md) and a -[QuickJSContext](QuickJSContext.md) inside that runtime at the same time. The runtime will -be disposed when the context is disposed. - -#### Parameters - -• **options**: [`ContextOptions`](../interfaces/ContextOptions.md)= `{}` - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:360](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L360) - -*** - -### newRuntime() - -> **newRuntime**(`options`): [`QuickJSRuntime`](QuickJSRuntime.md) - -Create a runtime. -Use the runtime to set limits on CPU and memory usage and configure module -loading for one or more [QuickJSContext](QuickJSContext.md)s inside the runtime. - -#### Parameters - -• **options**: [`RuntimeOptions`](../interfaces/RuntimeOptions.md)= `{}` - -#### Returns - -[`QuickJSRuntime`](QuickJSRuntime.md) - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:333](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L333) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/Scope.md b/doc/quickjs-emscripten/classes/Scope.md deleted file mode 100644 index b231f37fc..000000000 --- a/doc/quickjs-emscripten/classes/Scope.md +++ /dev/null @@ -1,227 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / Scope - -# Class: Scope - -Scope helps reduce the burden of manually tracking and disposing of -Lifetimes. See [withScope](Scope.md#withscope). and [withScopeAsync](Scope.md#withscopeasync). - -## Contents - -- [Extends](Scope.md#extends) -- [Implements](Scope.md#implements) -- [Constructors](Scope.md#constructors) - - [new Scope(undefined)](Scope.md#new-scopeundefined) -- [Accessors](Scope.md#accessors) - - [alive](Scope.md#alive) -- [Methods](Scope.md#methods) - - [`[dispose]`()](Scope.md#dispose) - - [dispose()](Scope.md#dispose) - - [manage()](Scope.md#manage) - - [withScope()](Scope.md#withscope) - - [withScopeAsync()](Scope.md#withscopeasync) - - [withScopeMaybeAsync()](Scope.md#withscopemaybeasync) - -## Extends - -- [`UsingDisposable`](UsingDisposable.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new Scope(undefined) - -> **new Scope**(): [`Scope`](Scope.md) - -#### Returns - -[`Scope`](Scope.md) - -#### Inherited from - -[`quickjs-emscripten.UsingDisposable.constructor`](UsingDisposable.md#constructors) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](Scope.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:333](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L333) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Inherited from - -[`quickjs-emscripten.UsingDisposable.[dispose]`](UsingDisposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Overrides - -[`quickjs-emscripten.UsingDisposable.dispose`](UsingDisposable.md#abstract-dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:337](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L337) - -*** - -### manage() - -> **manage**\<`T`\>(`lifetime`): `T` - -Track `lifetime` so that it is disposed when this scope is disposed. - -#### Type parameters - -• **T** extends [`Disposable`](../interfaces/Disposable.md) - -#### Parameters - -• **lifetime**: `T` - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:328](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L328) - -*** - -### withScope() - -> **`static`** **withScope**\<`R`\>(`block`): `R` - -Run `block` with a new Scope instance that will be disposed after the block returns. -Inside `block`, call `scope.manage` on each lifetime you create to have the lifetime -automatically disposed after the block returns. - -#### Type parameters - -• **R** - -#### Parameters - -• **block**: (`scope`) => `R` - -#### Returns - -`R` - -#### Warning - -Do not use with async functions. Instead, use [withScopeAsync](Scope.md#withscopeasync). - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:273](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L273) - -*** - -### withScopeAsync() - -> **`static`** **withScopeAsync**\<`R`\>(`block`): `Promise`\<`R`\> - -Run `block` with a new Scope instance that will be disposed after the -block's returned promise settles. Inside `block`, call `scope.manage` on each -lifetime you create to have the lifetime automatically disposed after the -block returns. - -#### Type parameters - -• **R** - -#### Parameters - -• **block**: (`scope`) => `Promise`\<`R`\> - -#### Returns - -`Promise`\<`R`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:310](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L310) - -*** - -### withScopeMaybeAsync() - -> **`static`** **withScopeMaybeAsync**\<`Return`, `This`, `Yielded`\>(`_this`, `block`): `Return` \| `Promise`\<`Return`\> - -#### Type parameters - -• **Return** - -• **This** - -• **Yielded** - -#### Parameters - -• **\_this**: `This` - -• **block**: `MaybeAsyncBlock`\<`Return`, `This`, `Yielded`, [[`Scope`](Scope.md)]\> - -#### Returns - -`Return` \| `Promise`\<`Return`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:286](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L286) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/StaticLifetime.md b/doc/quickjs-emscripten/classes/StaticLifetime.md deleted file mode 100644 index d8ce4a699..000000000 --- a/doc/quickjs-emscripten/classes/StaticLifetime.md +++ /dev/null @@ -1,463 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / StaticLifetime - -# Class: StaticLifetime\ - -A Lifetime that lives forever. Used for constants. - -## Contents - -- [Extends](StaticLifetime.md#extends) -- [Type parameters](StaticLifetime.md#type-parameters) -- [Constructors](StaticLifetime.md#constructors) - - [new StaticLifetime(value, owner)](StaticLifetime.md#new-staticlifetimevalue-owner) -- [Properties](StaticLifetime.md#properties) - - [\_alive](StaticLifetime.md#alive) - - [\_constructorStack](StaticLifetime.md#constructorstack) - - [\_owner?](StaticLifetime.md#owner) - - [\_value](StaticLifetime.md#value) - - [copier?](StaticLifetime.md#copier) - - [disposer?](StaticLifetime.md#disposer) -- [Accessors](StaticLifetime.md#accessors) - - [alive](StaticLifetime.md#alive) - - [dupable](StaticLifetime.md#dupable) - - [owner](StaticLifetime.md#owner) - - [value](StaticLifetime.md#value) -- [Methods](StaticLifetime.md#methods) - - [`[dispose]`()](StaticLifetime.md#dispose) - - [consume()](StaticLifetime.md#consume) - - [dispose()](StaticLifetime.md#dispose) - - [dup()](StaticLifetime.md#dup) - - [map()](StaticLifetime.md#map) - - [tap()](StaticLifetime.md#tap) - -## Extends - -- [`Lifetime`](Lifetime.md)\<`T`, `T`, `Owner`\> - -## Type parameters - -• **T** - -• **Owner** = `never` - -## Constructors - -### new StaticLifetime(value, owner) - -> **new StaticLifetime**\<`T`, `Owner`\>(`value`, `owner`?): [`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -#### Parameters - -• **value**: `T` - -• **owner?**: `Owner` - -#### Returns - -[`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten.Lifetime.constructor`](Lifetime.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:198](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L198) - -## Properties - -### \_alive - -> **`protected`** **\_alive**: `boolean` = `true` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._alive`](Lifetime.md#alive) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L72) - -*** - -### \_constructorStack - -> **`protected`** **\_constructorStack**: `undefined` \| `string` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._constructorStack`](Lifetime.md#constructorstack) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L73) - -*** - -### \_owner? - -> **`protected`** **`readonly`** **\_owner**?: `Owner` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._owner`](Lifetime.md#owner) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L87) - -*** - -### \_value - -> **`protected`** **`readonly`** **\_value**: `T` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._value`](Lifetime.md#value) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L84) - -*** - -### copier? - -> **`protected`** **`readonly`** **copier**?: (`value`) => `T` - -#### Parameters - -• **value**: `T` - -#### Returns - -`T` - -#### Inherited from - -[`quickjs-emscripten.Lifetime.copier`](Lifetime.md#copier) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L85) - -*** - -### disposer? - -> **`protected`** **`readonly`** **disposer**?: (`value`) => `void` - -#### Parameters - -• **value**: `T` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.Lifetime.disposer`](Lifetime.md#disposer) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L86) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](StaticLifetime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L92) - -*** - -### dupable - -> **`get`** **dupable**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:203](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L203) - -*** - -### owner - -> **`get`** **owner**(): `undefined` \| `Owner` - -#### Returns - -`undefined` \| `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L107) - -*** - -### value - -> **`get`** **value**(): `T` - -The value this Lifetime protects. You must never retain the value - it -may become invalid, leading to memory errors. - -#### Throws - -If the lifetime has been [dispose](StaticLifetime.md#dispose-1)d already. - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:102](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L102) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.Lifetime.[dispose]`](Lifetime.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### consume() - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, then dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:135](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L135) - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:138](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L138) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of [value](StaticLifetime.md#value-1) and perform cleanup. - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten.Lifetime.dispose`](Lifetime.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:213](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L213) - -*** - -### dup() - -> **dup**(): [`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -Create a new handle pointing to the same [value](StaticLifetime.md#value-1). - -#### Returns - -[`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten.Lifetime.dup`](Lifetime.md#dup) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:208](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L208) - -*** - -### map() - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, returning the result. -Does not dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L151) - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L152) - -*** - -### tap() - -#### tap(fn) - -> **tap**(`fn`): [`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -Call `fn` with this lifetime, then return `this`. Does not dispose the -lifetime. Useful for imperative operations within an expression, like when -you're building up objects, or to add logging in the middle of a call chain. - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`StaticLifetime`](StaticLifetime.md)\<`T`, `Owner`\> - -this - -##### Inherited from - -[`quickjs-emscripten.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L164) - -#### tap(fn) - -> **tap**(`fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:165](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L165) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/TestQuickJSWASMModule.md b/doc/quickjs-emscripten/classes/TestQuickJSWASMModule.md deleted file mode 100644 index 8634c28c8..000000000 --- a/doc/quickjs-emscripten/classes/TestQuickJSWASMModule.md +++ /dev/null @@ -1,192 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / TestQuickJSWASMModule - -# Class: TestQuickJSWASMModule - -A test wrapper of [QuickJSWASMModule](QuickJSWASMModule.md) that keeps a reference to each -context or runtime created. - -Call [disposeAll](TestQuickJSWASMModule.md#disposeall) to reset these sets and calls `dispose` on any left alive -(which may throw an error). - -Call [assertNoMemoryAllocated](TestQuickJSWASMModule.md#assertnomemoryallocated) at the end of a test, when you expect that you've -freed all the memory you've ever allocated. - -## Contents - -- [Implements](TestQuickJSWASMModule.md#implements) -- [Constructors](TestQuickJSWASMModule.md#constructors) - - [new TestQuickJSWASMModule(parent)](TestQuickJSWASMModule.md#new-testquickjswasmmoduleparent) -- [Properties](TestQuickJSWASMModule.md#properties) - - [contexts](TestQuickJSWASMModule.md#contexts) - - [runtimes](TestQuickJSWASMModule.md#runtimes) -- [Methods](TestQuickJSWASMModule.md#methods) - - [assertNoMemoryAllocated()](TestQuickJSWASMModule.md#assertnomemoryallocated) - - [disposeAll()](TestQuickJSWASMModule.md#disposeall) - - [evalCode()](TestQuickJSWASMModule.md#evalcode) - - [getWasmMemory()](TestQuickJSWASMModule.md#getwasmmemory) - - [newContext()](TestQuickJSWASMModule.md#newcontext) - - [newRuntime()](TestQuickJSWASMModule.md#newruntime) - -## Implements - -- `Pick`\<[`QuickJSWASMModule`](QuickJSWASMModule.md), keyof [`QuickJSWASMModule`](QuickJSWASMModule.md)\> - -## Constructors - -### new TestQuickJSWASMModule(parent) - -> **new TestQuickJSWASMModule**(`parent`): [`TestQuickJSWASMModule`](TestQuickJSWASMModule.md) - -#### Parameters - -• **parent**: [`QuickJSWASMModule`](QuickJSWASMModule.md) - -#### Returns - -[`TestQuickJSWASMModule`](TestQuickJSWASMModule.md) - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:21](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L21) - -## Properties - -### contexts - -> **contexts**: `Set`\<[`QuickJSContext`](QuickJSContext.md)\> - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:19](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L19) - -*** - -### runtimes - -> **runtimes**: `Set`\<[`QuickJSRuntime`](QuickJSRuntime.md)\> - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:20](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L20) - -## Methods - -### assertNoMemoryAllocated() - -> **assertNoMemoryAllocated**(): `void` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:62](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L62) - -*** - -### disposeAll() - -> **disposeAll**(): `void` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:51](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L51) - -*** - -### evalCode() - -> **evalCode**(`code`, `options`?): `unknown` - -#### Parameters - -• **code**: `string` - -• **options?**: [`ModuleEvalOptions`](../interfaces/ModuleEvalOptions.md) - -#### Returns - -`unknown` - -#### Implementation of - -`Pick.evalCode` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L47) - -*** - -### getWasmMemory() - -> **getWasmMemory**(): `Memory` - -#### Returns - -`Memory` - -#### Implementation of - -`Pick.getWasmMemory` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:79](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L79) - -*** - -### newContext() - -> **newContext**(`options`?): [`QuickJSContext`](QuickJSContext.md) - -#### Parameters - -• **options?**: [`ContextOptions`](../interfaces/ContextOptions.md) - -#### Returns - -[`QuickJSContext`](QuickJSContext.md) - -#### Implementation of - -`Pick.newContext` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L35) - -*** - -### newRuntime() - -> **newRuntime**(`options`?): [`QuickJSRuntime`](QuickJSRuntime.md) - -#### Parameters - -• **options?**: [`RuntimeOptions`](../interfaces/RuntimeOptions.md) - -#### Returns - -[`QuickJSRuntime`](QuickJSRuntime.md) - -#### Implementation of - -`Pick.newRuntime` - -#### Source - -[packages/quickjs-emscripten-core/src/module-test.ts:23](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module-test.ts#L23) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/UsingDisposable.md b/doc/quickjs-emscripten/classes/UsingDisposable.md deleted file mode 100644 index 686c807be..000000000 --- a/doc/quickjs-emscripten/classes/UsingDisposable.md +++ /dev/null @@ -1,101 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / UsingDisposable - -# Class: `abstract` UsingDisposable - -Base abstract class that helps implement [Disposable](../interfaces/Disposable.md) by providing a default implementation of [Symbol.dispose]([object Object]). - -## Contents - -- [Extended By](UsingDisposable.md#extended-by) -- [Implements](UsingDisposable.md#implements) -- [Constructors](UsingDisposable.md#constructors) - - [new UsingDisposable(undefined)](UsingDisposable.md#new-usingdisposableundefined) -- [Properties](UsingDisposable.md#properties) - - [`abstract` alive](UsingDisposable.md#abstract-alive) -- [Methods](UsingDisposable.md#methods) - - [`[dispose]`()](UsingDisposable.md#dispose) - - [`abstract` dispose()](UsingDisposable.md#abstract-dispose) - -## Extended By - -- [`QuickJSContext`](QuickJSContext.md) -- [`QuickJSRuntime`](QuickJSRuntime.md) -- [`Lifetime`](Lifetime.md) -- [`Scope`](Scope.md) -- [`QuickJSDeferredPromise`](QuickJSDeferredPromise.md) - -## Implements - -- [`Disposable`](../interfaces/Disposable.md) - -## Constructors - -### new UsingDisposable(undefined) - -> **new UsingDisposable**(): [`UsingDisposable`](UsingDisposable.md) - -#### Returns - -[`UsingDisposable`](UsingDisposable.md) - -## Properties - -### `abstract` alive - -> **`abstract`** **`readonly`** **alive**: `boolean` - -#### Implementation of - -[`quickjs-emscripten.Disposable.alive`](../interfaces/Disposable.md#alive) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:39](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L39) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.[dispose]`](../interfaces/Disposable.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### `abstract` dispose() - -> **`abstract`** **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Implementation of - -[`quickjs-emscripten.Disposable.dispose`](../interfaces/Disposable.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L43) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/classes/WeakLifetime.md b/doc/quickjs-emscripten/classes/WeakLifetime.md deleted file mode 100644 index eedbf4cd7..000000000 --- a/doc/quickjs-emscripten/classes/WeakLifetime.md +++ /dev/null @@ -1,473 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / WeakLifetime - -# Class: WeakLifetime\ - -A Lifetime that does not own its `value`. A WeakLifetime never calls its -`disposer` function, but can be `dup`ed to produce regular lifetimes that -do. - -Used for function arguments. - -## Contents - -- [Extends](WeakLifetime.md#extends) -- [Type parameters](WeakLifetime.md#type-parameters) -- [Constructors](WeakLifetime.md#constructors) - - [new WeakLifetime(value, copier, disposer, owner)](WeakLifetime.md#new-weaklifetimevalue-copier-disposer-owner) -- [Properties](WeakLifetime.md#properties) - - [\_alive](WeakLifetime.md#alive) - - [\_constructorStack](WeakLifetime.md#constructorstack) - - [\_owner?](WeakLifetime.md#owner) - - [\_value](WeakLifetime.md#value) - - [copier?](WeakLifetime.md#copier) - - [disposer?](WeakLifetime.md#disposer) -- [Accessors](WeakLifetime.md#accessors) - - [alive](WeakLifetime.md#alive) - - [dupable](WeakLifetime.md#dupable) - - [owner](WeakLifetime.md#owner) - - [value](WeakLifetime.md#value) -- [Methods](WeakLifetime.md#methods) - - [`[dispose]`()](WeakLifetime.md#dispose) - - [consume()](WeakLifetime.md#consume) - - [dispose()](WeakLifetime.md#dispose) - - [dup()](WeakLifetime.md#dup) - - [map()](WeakLifetime.md#map) - - [tap()](WeakLifetime.md#tap) - -## Extends - -- [`Lifetime`](Lifetime.md)\<`T`, `TCopy`, `Owner`\> - -## Type parameters - -• **T** - -• **TCopy** = `never` - -• **Owner** = `never` - -## Constructors - -### new WeakLifetime(value, copier, disposer, owner) - -> **new WeakLifetime**\<`T`, `TCopy`, `Owner`\>(`value`, `copier`?, `disposer`?, `owner`?): [`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -#### Parameters - -• **value**: `T` - -• **copier?**: (`value`) => `TCopy` - -• **disposer?**: (`value`) => `void` - -• **owner?**: `Owner` - -#### Returns - -[`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -#### Overrides - -[`quickjs-emscripten.Lifetime.constructor`](Lifetime.md#constructors) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:224](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L224) - -## Properties - -### \_alive - -> **`protected`** **\_alive**: `boolean` = `true` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._alive`](Lifetime.md#alive) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:72](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L72) - -*** - -### \_constructorStack - -> **`protected`** **\_constructorStack**: `undefined` \| `string` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._constructorStack`](Lifetime.md#constructorstack) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:73](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L73) - -*** - -### \_owner? - -> **`protected`** **`readonly`** **\_owner**?: `Owner` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._owner`](Lifetime.md#owner) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L87) - -*** - -### \_value - -> **`protected`** **`readonly`** **\_value**: `T` - -#### Inherited from - -[`quickjs-emscripten.Lifetime._value`](Lifetime.md#value) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L84) - -*** - -### copier? - -> **`protected`** **`readonly`** **copier**?: (`value`) => `TCopy` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`TCopy` - -#### Inherited from - -[`quickjs-emscripten.Lifetime.copier`](Lifetime.md#copier) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L85) - -*** - -### disposer? - -> **`protected`** **`readonly`** **disposer**?: (`value`) => `void` - -#### Parameters - -• **value**: `T` \| `TCopy` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.Lifetime.disposer`](Lifetime.md#disposer) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L86) - -## Accessors - -### alive - -> **`get`** **alive**(): `boolean` - -#### Returns - -`boolean` - -true if the object is alive - -false after the object has been [dispose](WeakLifetime.md#dispose-1)d - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:92](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L92) - -*** - -### dupable - -> **`get`** **dupable**(): `boolean` - -#### Returns - -`boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:111](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L111) - -*** - -### owner - -> **`get`** **owner**(): `undefined` \| `Owner` - -#### Returns - -`undefined` \| `Owner` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:107](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L107) - -*** - -### value - -> **`get`** **value**(): `T` - -The value this Lifetime protects. You must never retain the value - it -may become invalid, leading to memory errors. - -#### Throws - -If the lifetime has been [dispose](WeakLifetime.md#dispose-1)d already. - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:102](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L102) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -Just calls the standard .dispose() method of this class. - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.Lifetime.[dispose]`](Lifetime.md#dispose) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L47) - -*** - -### consume() - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, then dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:135](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L135) - -#### consume(map) - -> **consume**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten.Lifetime.consume`](Lifetime.md#consume) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:138](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L138) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of [value](WeakLifetime.md#value-1) and perform cleanup. - -#### Returns - -`void` - -#### Overrides - -[`quickjs-emscripten.Lifetime.dispose`](Lifetime.md#dispose-1) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:234](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L234) - -*** - -### dup() - -> **dup**(): [`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -Create a new handle pointing to the same [value](WeakLifetime.md#value-1). - -#### Returns - -[`Lifetime`](Lifetime.md)\<`TCopy`, `TCopy`, `Owner`\> - -#### Inherited from - -[`quickjs-emscripten.Lifetime.dup`](Lifetime.md#dup) - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L118) - -*** - -### map() - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -Call `map` with this lifetime, returning the result. -Does not dispose the lifetime. - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -the result of `map(this)`. - -##### Inherited from - -[`quickjs-emscripten.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L151) - -#### map(map) - -> **map**\<`O`\>(`map`): `O` - -##### Type parameters - -• **O** - -##### Parameters - -• **map**: (`lifetime`) => `O` - -##### Returns - -`O` - -##### Inherited from - -[`quickjs-emscripten.Lifetime.map`](Lifetime.md#map) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:152](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L152) - -*** - -### tap() - -#### tap(fn) - -> **tap**(`fn`): [`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -Call `fn` with this lifetime, then return `this`. Does not dispose the -lifetime. Useful for imperative operations within an expression, like when -you're building up objects, or to add logging in the middle of a call chain. - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`WeakLifetime`](WeakLifetime.md)\<`T`, `TCopy`, `Owner`\> - -this - -##### Inherited from - -[`quickjs-emscripten.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:164](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L164) - -#### tap(fn) - -> **tap**(`fn`): [`QuickJSHandle`](../exports.md#quickjshandle) - -##### Parameters - -• **fn**: (`lifetime`) => `void` - -##### Returns - -[`QuickJSHandle`](../exports.md#quickjshandle) - -##### Inherited from - -[`quickjs-emscripten.Lifetime.tap`](Lifetime.md#tap) - -##### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:165](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L165) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/exports.md b/doc/quickjs-emscripten/exports.md deleted file mode 100644 index f1158d416..000000000 --- a/doc/quickjs-emscripten/exports.md +++ /dev/null @@ -1,1704 +0,0 @@ -[quickjs-emscripten](../packages.md) • **quickjs-emscripten** • [Readme](README.md) \| [Exports](exports.md) - -*** - -[quickjs-emscripten](../packages.md) / quickjs-emscripten - -# quickjs-emscripten - -## Contents - -- [Namespaces](exports.md#namespaces) -- [Classes](exports.md#classes) -- [Interfaces](exports.md#interfaces) -- [Type Aliases](exports.md#type-aliases) - - [AsyncFunctionImplementation](exports.md#asyncfunctionimplementation) - - [BorrowedHeapCharPointer](exports.md#borrowedheapcharpointer) - - [DisposableArray\](exports.md#disposablearrayt) - - [DisposableResult\](exports.md#disposableresults-f) - - [EitherFFI](exports.md#eitherffi) - - [EitherModule](exports.md#eithermodule) - - [ExecutePendingJobsResult](exports.md#executependingjobsresult) - - [InterruptHandler](exports.md#interrupthandler) - - [Intrinsics](exports.md#intrinsics) - - [JSBorrowedCharPointer](exports.md#jsborrowedcharpointer) - - [JSContextPointer](exports.md#jscontextpointer) - - [JSContextPointerPointer](exports.md#jscontextpointerpointer) - - [JSModuleDefPointer](exports.md#jsmoduledefpointer) - - [JSModuleLoadFailure](exports.md#jsmoduleloadfailure) - - [JSModuleLoadResult](exports.md#jsmoduleloadresult) - - [JSModuleLoadSuccess](exports.md#jsmoduleloadsuccess) - - [JSModuleNormalizeFailure](exports.md#jsmodulenormalizefailure) - - [JSModuleNormalizeResult](exports.md#jsmodulenormalizeresult) - - [JSModuleNormalizeSuccess](exports.md#jsmodulenormalizesuccess) - - [JSPromiseState](exports.md#jspromisestate) - - [JSPromiseStateEnum](exports.md#jspromisestateenum) - - [JSRuntimePointer](exports.md#jsruntimepointer) - - [JSValue](exports.md#jsvalue) - - [JSValueConst](exports.md#jsvalueconst) - - [JSValueConstPointer](exports.md#jsvalueconstpointer) - - [JSValueConstPointerPointer](exports.md#jsvalueconstpointerpointer) - - [JSValuePointer](exports.md#jsvaluepointer) - - [JSValuePointerPointer](exports.md#jsvaluepointerpointer) - - [JSValuePointerPointerPointer](exports.md#jsvaluepointerpointerpointer) - - [JSVoidPointer](exports.md#jsvoidpointer) - - [OrLoader\](exports.md#orloadert) - - [OwnedHeapCharPointer](exports.md#ownedheapcharpointer) - - [PromiseExecutor\](exports.md#promiseexecutorresolvet-rejectt) - - [PromisedDefault\](exports.md#promiseddefaultt) - - [QTS\_C\_To\_HostCallbackFuncPointer](exports.md#qts-c-to-hostcallbackfuncpointer) - - [QTS\_C\_To\_HostInterruptFuncPointer](exports.md#qts-c-to-hostinterruptfuncpointer) - - [QTS\_C\_To\_HostLoadModuleFuncPointer](exports.md#qts-c-to-hostloadmodulefuncpointer) - - [QuickJSHandle](exports.md#quickjshandle) - - [QuickJSPropertyKey](exports.md#quickjspropertykey) - - [QuickJSVariant](exports.md#quickjsvariant) - - [StaticJSValue](exports.md#staticjsvalue) - - [SuccessOrFail\](exports.md#successorfails-f) - - [UInt32Pointer](exports.md#uint32pointer) - - [VmCallResult\](exports.md#vmcallresultvmhandle) - - [VmFunctionImplementation\](exports.md#vmfunctionimplementationvmhandle) -- [Variables](exports.md#variables) - - [DEBUG\_ASYNC](exports.md#debug-async) - - [@jitl/quickjs-wasmfile-debug-asyncify](exports.md#jitlquickjs-wasmfile-debug-asyncify) - - [DEBUG\_SYNC](exports.md#debug-sync) - - [@jitl/quickjs-wasmfile-debug-sync](exports.md#jitlquickjs-wasmfile-debug-sync) - - [DefaultIntrinsics](exports.md#defaultintrinsics) - - [DisposableResult](exports.md#disposableresult) - - [EvalFlags](exports.md#evalflags) - - [GetOwnPropertyNamesFlags](exports.md#getownpropertynamesflags) - - [IntrinsicsFlags](exports.md#intrinsicsflags) - - [IsEqualOp](exports.md#isequalop) - - [JSPromiseStateEnum](exports.md#jspromisestateenum-1) - - [RELEASE\_ASYNC](exports.md#release-async) - - [@jitl/quickjs-wasmfile-release-asyncify](exports.md#jitlquickjs-wasmfile-release-asyncify) - - [RELEASE\_SYNC](exports.md#release-sync) - - [@jitl/quickjs-wasmfile-release-sync](exports.md#jitlquickjs-wasmfile-release-sync) -- [Functions](exports.md#functions) - - [assertSync()](exports.md#assertsync) - - [createDisposableArray()](exports.md#createdisposablearray) - - [getQuickJS()](exports.md#getquickjs) - - [getQuickJSSync()](exports.md#getquickjssync) - - [isFail()](exports.md#isfail) - - [isSuccess()](exports.md#issuccess) - - [memoizePromiseFactory()](exports.md#memoizepromisefactory) - - [newAsyncContext()](exports.md#newasynccontext) - - [newAsyncRuntime()](exports.md#newasyncruntime) - - [newQuickJSAsyncWASMModule()](exports.md#newquickjsasyncwasmmodule) - - [newQuickJSAsyncWASMModuleFromVariant()](exports.md#newquickjsasyncwasmmodulefromvariant) - - [newQuickJSWASMModule()](exports.md#newquickjswasmmodule) - - [newQuickJSWASMModuleFromVariant()](exports.md#newquickjswasmmodulefromvariant) - - [newVariant()](exports.md#newvariant) - - [setDebugMode()](exports.md#setdebugmode) - - [shouldInterruptAfterDeadline()](exports.md#shouldinterruptafterdeadline) - -## Namespaces - -- [errors](namespaces/errors/README.md) - -## Classes - -- [DisposableFail](classes/DisposableFail.md) -- [DisposableSuccess](classes/DisposableSuccess.md) -- [Lifetime](classes/Lifetime.md) -- [QuickJSAsyncContext](classes/QuickJSAsyncContext.md) -- [QuickJSAsyncRuntime](classes/QuickJSAsyncRuntime.md) -- [QuickJSAsyncWASMModule](classes/QuickJSAsyncWASMModule.md) -- [QuickJSContext](classes/QuickJSContext.md) -- [QuickJSDeferredPromise](classes/QuickJSDeferredPromise.md) -- [QuickJSRuntime](classes/QuickJSRuntime.md) -- [QuickJSWASMModule](classes/QuickJSWASMModule.md) -- [Scope](classes/Scope.md) -- [StaticLifetime](classes/StaticLifetime.md) -- [TestQuickJSWASMModule](classes/TestQuickJSWASMModule.md) -- [UsingDisposable](classes/UsingDisposable.md) -- [WeakLifetime](classes/WeakLifetime.md) - -## Interfaces - -- [AsyncRuntimeOptions](interfaces/AsyncRuntimeOptions.md) -- [ContextEvalOptions](interfaces/ContextEvalOptions.md) -- [ContextOptions](interfaces/ContextOptions.md) -- [CustomizeVariantOptions](interfaces/CustomizeVariantOptions.md) -- [Disposable](interfaces/Disposable.md) -- [EmscriptenModule](interfaces/EmscriptenModule.md) -- [EmscriptenModuleLoader](interfaces/EmscriptenModuleLoader.md) -- [EmscriptenModuleLoaderOptions](interfaces/EmscriptenModuleLoaderOptions.md) -- [JSModuleLoader](interfaces/JSModuleLoader.md) -- [JSModuleLoaderAsync](interfaces/JSModuleLoaderAsync.md) -- [JSModuleNormalizer](interfaces/JSModuleNormalizer.md) -- [JSModuleNormalizerAsync](interfaces/JSModuleNormalizerAsync.md) -- [JSPromiseStateFulfilled](interfaces/JSPromiseStateFulfilled.md) -- [JSPromiseStatePending](interfaces/JSPromiseStatePending.md) -- [JSPromiseStateRejected](interfaces/JSPromiseStateRejected.md) -- [LowLevelJavascriptVm](interfaces/LowLevelJavascriptVm.md) -- [ModuleEvalOptions](interfaces/ModuleEvalOptions.md) -- [QuickJSAsyncEmscriptenModule](interfaces/QuickJSAsyncEmscriptenModule.md) -- [QuickJSAsyncFFI](interfaces/QuickJSAsyncFFI.md) -- [QuickJSAsyncVariant](interfaces/QuickJSAsyncVariant.md) -- [QuickJSEmscriptenModule](interfaces/QuickJSEmscriptenModule.md) -- [QuickJSFFI](interfaces/QuickJSFFI.md) -- [QuickJSSyncVariant](interfaces/QuickJSSyncVariant.md) -- [RuntimeOptions](interfaces/RuntimeOptions.md) -- [RuntimeOptionsBase](interfaces/RuntimeOptionsBase.md) -- [SourceMapData](interfaces/SourceMapData.md) -- [VmPropertyDescriptor](interfaces/VmPropertyDescriptor.md) - -## Type Aliases - -### AsyncFunctionImplementation - -> **AsyncFunctionImplementation**: (`this`, ...`args`) => `Promise`\<[`QuickJSHandle`](exports.md#quickjshandle) \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<[`QuickJSHandle`](exports.md#quickjshandle)\> \| `void`\> - -#### Parameters - -• **this**: [`QuickJSHandle`](exports.md#quickjshandle) - -• ...**args**: [`QuickJSHandle`](exports.md#quickjshandle)[] - -#### Returns - -`Promise`\<[`QuickJSHandle`](exports.md#quickjshandle) \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<[`QuickJSHandle`](exports.md#quickjshandle)\> \| `void`\> - -#### Source - -[packages/quickjs-emscripten-core/src/context-asyncify.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context-asyncify.ts#L18) - -*** - -### BorrowedHeapCharPointer - -> **BorrowedHeapCharPointer**: `Pointer`\<`"const char"` \| `"char"` \| `"js const char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:70 - -*** - -### DisposableArray\ - -> **DisposableArray**\<`T`\>: `T`[] & [`Disposable`](interfaces/Disposable.md) - -An `Array` that also implements [Disposable](interfaces/Disposable.md): - -- Considered [Disposable#alive](interfaces/Disposable.md#alive) if any of its elements are `alive`. -- When [Disposable#dispose](interfaces/Disposable.md#dispose-1)d, it will dispose of all its elements that are `alive`. - -#### Type parameters - -• **T** - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:354](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L354) - -*** - -### DisposableResult\ - -> **DisposableResult**\<`S`, `F`\>: [`DisposableSuccess`](classes/DisposableSuccess.md)\<`S`\> \| [`DisposableFail`](classes/DisposableFail.md)\<`F`\> - -#### Type parameters - -• **S** - -• **F** - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:478](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L478) - -*** - -### EitherFFI - -> **EitherFFI**: [`QuickJSFFI`](interfaces/QuickJSFFI.md) \| [`QuickJSAsyncFFI`](interfaces/QuickJSAsyncFFI.md) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:538 - -*** - -### EitherModule - -> **EitherModule**: [`QuickJSEmscriptenModule`](interfaces/QuickJSEmscriptenModule.md) \| [`QuickJSAsyncEmscriptenModule`](interfaces/QuickJSAsyncEmscriptenModule.md) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:332 - -*** - -### ExecutePendingJobsResult - -> **ExecutePendingJobsResult**: [`DisposableResult`](exports.md#disposableresult)\<`number`, [`QuickJSHandle`](exports.md#quickjshandle) & `Object`\> - -Used as an optional for the results of executing pendingJobs. -On success, `value` contains the number of async jobs executed -by the runtime. - -#### Source - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L35) - -*** - -### InterruptHandler - -> **InterruptHandler**: (`runtime`) => `boolean` \| `undefined` \| `void` - -Callback called regularly while the VM executes code. -Determines if a VM's execution should be interrupted. - -#### Parameters - -• **runtime**: [`QuickJSRuntime`](classes/QuickJSRuntime.md) - -#### Returns - -`boolean` \| `undefined` \| `void` - -`true` to interrupt JS execution inside the VM. - -`false` or `undefined` to continue JS execution inside the VM. - -#### Source - -[packages/quickjs-emscripten-core/src/runtime.ts:27](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/runtime.ts#L27) - -*** - -### Intrinsics - -> **Intrinsics**: `Object` - -Language features that can be enabled or disabled in a QuickJSContext. - -#### See - -[ContextOptions](interfaces/ContextOptions.md) - -#### Type declaration - -##### BaseObjects? - -> **BaseObjects**?: `boolean` - -##### BigDecimal? - -> **BigDecimal**?: `boolean` - -##### BigFloat? - -> **BigFloat**?: `boolean` - -##### BigInt? - -> **BigInt**?: `boolean` - -##### BignumExt? - -> **BignumExt**?: `boolean` - -##### Date? - -> **Date**?: `boolean` - -##### Eval? - -> **Eval**?: `boolean` - -##### JSON? - -> **JSON**?: `boolean` - -##### MapSet? - -> **MapSet**?: `boolean` - -##### OperatorOverloading? - -> **OperatorOverloading**?: `boolean` - -##### Promise? - -> **Promise**?: `boolean` - -##### Proxy? - -> **Proxy**?: `boolean` - -##### RegExp? - -> **RegExp**?: `boolean` - -##### RegExpCompiler? - -> **RegExpCompiler**?: `boolean` - -##### StringNormalize? - -> **StringNormalize**?: `boolean` - -##### TypedArrays? - -> **TypedArrays**?: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:146](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L146) - -*** - -### JSBorrowedCharPointer - -> **JSBorrowedCharPointer**: `Pointer`\<`"js const char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:80 - -*** - -### JSContextPointer - -> **JSContextPointer**: `Pointer`\<`"JSContext"`\> - -`JSContext*`. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:20 - -*** - -### JSContextPointerPointer - -> **JSContextPointerPointer**: `Pointer`\<`"JSContext"`\> - -`JSContext**`. Used internally for execute pending jobs. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:24 - -*** - -### JSModuleDefPointer - -> **JSModuleDefPointer**: `Pointer`\<`"JSModuleDef"`\> - -`JSModuleDef*`. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:28 - -*** - -### JSModuleLoadFailure - -> **JSModuleLoadFailure**: `Error` \| [`QuickJSHandle`](exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:69](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L69) - -*** - -### JSModuleLoadResult - -> **JSModuleLoadResult**: [`JSModuleLoadSuccess`](exports.md#jsmoduleloadsuccess) \| [`SuccessOrFail`](exports.md#successorfails-f)\<[`JSModuleLoadSuccess`](exports.md#jsmoduleloadsuccess), [`JSModuleLoadFailure`](exports.md#jsmoduleloadfailure)\> - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L70) - -*** - -### JSModuleLoadSuccess - -> **JSModuleLoadSuccess**: `string` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:68](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L68) - -*** - -### JSModuleNormalizeFailure - -> **JSModuleNormalizeFailure**: `Error` \| [`QuickJSHandle`](exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L87) - -*** - -### JSModuleNormalizeResult - -> **JSModuleNormalizeResult**: [`JSModuleNormalizeSuccess`](exports.md#jsmodulenormalizesuccess) \| [`SuccessOrFail`](exports.md#successorfails-f)\<[`JSModuleNormalizeSuccess`](exports.md#jsmodulenormalizesuccess), [`JSModuleNormalizeFailure`](exports.md#jsmodulenormalizefailure)\> - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:88](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L88) - -*** - -### JSModuleNormalizeSuccess - -> **JSModuleNormalizeSuccess**: `string` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L86) - -*** - -### JSPromiseState - -> **JSPromiseState**: [`JSPromiseStatePending`](interfaces/JSPromiseStatePending.md) \| [`JSPromiseStateFulfilled`](interfaces/JSPromiseStateFulfilled.md) \| [`JSPromiseStateRejected`](interfaces/JSPromiseStateRejected.md) - -A promise state inside QuickJS, which can be pending, fulfilled, or rejected. -You can unwrap a JSPromiseState with [QuickJSContext#unwrapResult](classes/QuickJSContext.md#unwrapresult). - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:11](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L11) - -*** - -### JSPromiseStateEnum - -> **JSPromiseStateEnum**: `Brand`\<*typeof* [`JSPromiseStateEnum`](exports.md#jspromisestateenum-1)\[keyof *typeof* [`JSPromiseStateEnum`](exports.md#jspromisestateenum-1)\], `"JSPromiseStateEnum"`\> - -State of a promise. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:145 - -*** - -### JSRuntimePointer - -> **JSRuntimePointer**: `Pointer`\<`"JSRuntime"`\> - -`JSRuntime*`. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:16 - -*** - -### JSValue - -> **JSValue**: [`Lifetime`](classes/Lifetime.md)\<[`JSValuePointer`](exports.md#jsvaluepointer), [`JSValuePointer`](exports.md#jsvaluepointer), [`QuickJSRuntime`](classes/QuickJSRuntime.md)\> - -A owned QuickJSHandle that should be disposed or returned. - -The QuickJS interpreter passes Javascript values between functions as -`JSValue` structs that references some internal data. Because passing -structs cross the Empscripten FFI interfaces is bothersome, we use pointers -to these structs instead. - -A JSValue reference is "owned" in its scope. before exiting the scope, it -should be freed, by calling `JS_FreeValue(ctx, js_value)`) or returned from -the scope. We extend that contract - a JSValuePointer (`JSValue*`) must also -be `free`d. - -You can do so from Javascript by calling the .dispose() method. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:43](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L43) - -*** - -### JSValueConst - -> **JSValueConst**: [`Lifetime`](classes/Lifetime.md)\<[`JSValueConstPointer`](exports.md#jsvalueconstpointer), [`JSValuePointer`](exports.md#jsvaluepointer), [`QuickJSRuntime`](classes/QuickJSRuntime.md)\> - -A QuickJSHandle to a borrowed value that does not need to be disposed. - -In QuickJS, a JSValueConst is a "borrowed" reference that isn't owned by the -current scope. That means that the current scope should not `JS_FreeValue` -it, or retain a reference to it after the scope exits, because it may be -freed by its owner. - -quickjs-emscripten takes care of disposing JSValueConst references. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L26) - -*** - -### JSValueConstPointer - -> **JSValueConstPointer**: `Pointer`\<`"JSValueConst"`\> - -`JSValueConst* -See [JSValueConst](exports.md#jsvalueconst) and [StaticJSValue](exports.md#staticjsvalue). - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:38 - -*** - -### JSValueConstPointerPointer - -> **JSValueConstPointerPointer**: `Pointer`\<`"JSValueConst[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:50 - -*** - -### JSValuePointer - -> **JSValuePointer**: `Pointer`\<`"JSValue"`\> - -`JSValue*`. -See [JSValue](exports.md#jsvalue). - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:33 - -*** - -### JSValuePointerPointer - -> **JSValuePointerPointer**: `Pointer`\<`"JSValue[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:42 - -*** - -### JSValuePointerPointerPointer - -> **JSValuePointerPointerPointer**: `Pointer`\<`"*JSValue[]"`\> - -Used internally for Javascript-to-C function calls. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:46 - -*** - -### JSVoidPointer - -> **JSVoidPointer**: `Pointer`\<`any`\> - -Opaque pointer that was allocated by js_malloc. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:84 - -*** - -### OrLoader\ - -> **OrLoader**\<`T`\>: `T` \| () => `Promise`\<`T`\> - -#### Type parameters - -• **T** - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L117) - -*** - -### OwnedHeapCharPointer - -> **OwnedHeapCharPointer**: `Pointer`\<`"char"`\> - -Used internally for Javascript-to-C calls that may contain strings too large -for the Emscripten stack. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:75 - -*** - -### PromiseExecutor\ - -> **PromiseExecutor**\<`ResolveT`, `RejectT`\>: (`resolve`, `reject`) => `void` - -#### Type parameters - -• **ResolveT** - -• **RejectT** - -#### Parameters - -• **resolve**: (`value`) => `void` - -• **reject**: (`reason`) => `void` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:333](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L333) - -*** - -### PromisedDefault\ - -> **PromisedDefault**\<`T`\>: `T` \| `Promise`\<`T`\> \| `Promise`\<`Object`\> \| `Promise`\<`Object`\> - -#### Type parameters - -• **T** - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:17](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L17) - -*** - -### QTS\_C\_To\_HostCallbackFuncPointer - -> **QTS\_C\_To\_HostCallbackFuncPointer**: `Pointer`\<`"C_To_HostCallbackFunc"`\> - -Used internally for C-to-Javascript function calls. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:57 - -*** - -### QTS\_C\_To\_HostInterruptFuncPointer - -> **QTS\_C\_To\_HostInterruptFuncPointer**: `Pointer`\<`"C_To_HostInterruptFunc"`\> - -Used internally for C-to-Javascript interrupt handlers. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:61 - -*** - -### QTS\_C\_To\_HostLoadModuleFuncPointer - -> **QTS\_C\_To\_HostLoadModuleFuncPointer**: `Pointer`\<`"C_To_HostLoadModuleFunc"`\> - -Used internally for C-to-Javascript module loading. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:65 - -*** - -### QuickJSHandle - -> **QuickJSHandle**: [`StaticJSValue`](exports.md#staticjsvalue) \| [`JSValue`](exports.md#jsvalue) \| [`JSValueConst`](exports.md#jsvalueconst) - -Wraps a C pointer to a QuickJS JSValue, which represents a Javascript value inside -a QuickJS virtual machine. - -Values must not be shared between QuickJSContext instances. -You must dispose of any handles you create by calling the `.dispose()` method. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L53) - -*** - -### QuickJSPropertyKey - -> **QuickJSPropertyKey**: `number` \| `string` \| [`QuickJSHandle`](exports.md#quickjshandle) - -Property key for getting or setting a property on a handle with -[QuickJSContext#getProp](classes/QuickJSContext.md#getprop), [QuickJSContext#setProp](classes/QuickJSContext.md#setprop), or [QuickJSContext#defineProp](classes/QuickJSContext.md#defineprop). - -#### Source - -[packages/quickjs-emscripten-core/src/context.ts:68](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/context.ts#L68) - -*** - -### QuickJSVariant - -> **QuickJSVariant**: [`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md) \| [`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:537 - -*** - -### StaticJSValue - -> **StaticJSValue**: [`Lifetime`](classes/Lifetime.md)\<[`JSValueConstPointer`](exports.md#jsvalueconstpointer), [`JSValueConstPointer`](exports.md#jsvalueconstpointer), [`QuickJSRuntime`](classes/QuickJSRuntime.md)\> - -A QuickJSHandle to a constant that will never change, and does not need to -be disposed. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:14](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L14) - -*** - -### SuccessOrFail\ - -> **SuccessOrFail**\<`S`, `F`\>: `Object` \| `Object` - -Used as an optional. -`{ value: S } | { error: E }`. - -#### Type parameters - -• **S** - -• **F** - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:5](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L5) - -*** - -### UInt32Pointer - -> **UInt32Pointer**: `Pointer`\<`"uint32_t"`\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:85 - -*** - -### VmCallResult\ - -> **VmCallResult**\<`VmHandle`\>: [`SuccessOrFail`](exports.md#successorfails-f)\<`VmHandle`, `VmHandle`\> - -Used as an optional for results of a Vm call. -`{ value: VmHandle } | { error: VmHandle }`. - -#### Type parameters - -• **VmHandle** - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L26) - -*** - -### VmFunctionImplementation\ - -> **VmFunctionImplementation**\<`VmHandle`\>: (`this`, ...`args`) => `VmHandle` \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<`VmHandle`\> \| `void` - -#### Type parameters - -• **VmHandle** - -A VmFunctionImplementation takes handles as arguments. -It should return a handle, or be void. - -To indicate an exception, a VMs can throw either a handle (transferred -directly) or any other Javascript value (only the poperties `name` and -`message` will be transferred). Or, the VmFunctionImplementation may return -a VmCallResult's `{ error: handle }` error variant. - -VmFunctionImplementation should not free its arguments or its return value. -It should not retain a reference to its return value or thrown error. - -#### Parameters - -• **this**: `VmHandle` - -• ...**args**: `VmHandle`[] - -#### Returns - -`VmHandle` \| [`VmCallResult`](exports.md#vmcallresultvmhandle)\<`VmHandle`\> \| `void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:40](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L40) - -## Variables - -### DEBUG\_ASYNC - -> **`const`** **DEBUG\_ASYNC**: [`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-wasmfile-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -packages/variant-quickjs-wasmfile-debug-asyncify/dist/index.d.ts:18 - -*** - -### DEBUG\_SYNC - -> **`const`** **DEBUG\_SYNC**: [`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-wasmfile-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -packages/variant-quickjs-wasmfile-debug-sync/dist/index.d.ts:18 - -*** - -### DefaultIntrinsics - -> **`const`** **DefaultIntrinsics**: `Readonly`\<`Object`\> - -The default [Intrinsics](exports.md#intrinsics) language features enabled in a QuickJSContext. - -#### See - -[ContextOptions](interfaces/ContextOptions.md) - -#### Type declaration - -##### BaseObjects - -> **`readonly`** **BaseObjects**: `true` = `true` - -##### Date - -> **`readonly`** **Date**: `true` = `true` - -##### Eval - -> **`readonly`** **Eval**: `true` = `true` - -##### JSON - -> **`readonly`** **JSON**: `true` = `true` - -##### MapSet - -> **`readonly`** **MapSet**: `true` = `true` - -##### Promise - -> **`readonly`** **Promise**: `true` = `true` - -##### Proxy - -> **`readonly`** **Proxy**: `true` = `true` - -##### RegExp - -> **`readonly`** **RegExp**: `true` = `true` - -##### StringNormalize - -> **`readonly`** **StringNormalize**: `true` = `true` - -##### TypedArrays - -> **`readonly`** **TypedArrays**: `true` = `true` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:173](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L173) - -*** - -### DisposableResult - -> **DisposableResult**: *typeof* `AbstractDisposableResult` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:478](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L478) - -*** - -### EvalFlags - -> **EvalFlags**: `Object` - -Bitfield options for JS_Eval() C function. - -#### Type declaration - -##### JS\_EVAL\_FLAG\_BACKTRACE\_BARRIER - -> **`readonly`** **JS\_EVAL\_FLAG\_BACKTRACE\_BARRIER**: `number` - -don't include the stack frames before this eval in the Error() backtraces - -##### JS\_EVAL\_FLAG\_COMPILE\_ONLY - -> **`readonly`** **JS\_EVAL\_FLAG\_COMPILE\_ONLY**: `number` - -compile but do not run. The result is an object with a -JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed -with JS_EvalFunction(). - -##### JS\_EVAL\_FLAG\_STRICT - -> **`readonly`** **JS\_EVAL\_FLAG\_STRICT**: `number` - -force 'strict' mode - -##### JS\_EVAL\_FLAG\_STRIP - -> **`readonly`** **JS\_EVAL\_FLAG\_STRIP**: `number` - -force 'strip' mode - -##### JS\_EVAL\_TYPE\_DIRECT - -> **`readonly`** **JS\_EVAL\_TYPE\_DIRECT**: `number` - -direct call (internal use) - -##### JS\_EVAL\_TYPE\_GLOBAL - -> **`readonly`** **JS\_EVAL\_TYPE\_GLOBAL**: `number` - -global code (default) - -##### JS\_EVAL\_TYPE\_INDIRECT - -> **`readonly`** **JS\_EVAL\_TYPE\_INDIRECT**: `number` - -indirect call (internal use) - -##### JS\_EVAL\_TYPE\_MASK - -> **`readonly`** **JS\_EVAL\_TYPE\_MASK**: `number` - -##### JS\_EVAL\_TYPE\_MODULE - -> **`readonly`** **JS\_EVAL\_TYPE\_MODULE**: `number` - -module code - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:94 - -*** - -### GetOwnPropertyNamesFlags - -> **GetOwnPropertyNamesFlags**: `Object` - -Bitfield options for QTS_GetOwnPropertyNames - -#### Type declaration - -##### JS\_GPN\_ENUM\_ONLY - -> **JS\_GPN\_ENUM\_ONLY**: `number` - -##### JS\_GPN\_PRIVATE\_MASK - -> **JS\_GPN\_PRIVATE\_MASK**: `number` - -##### JS\_GPN\_SET\_ENUM - -> **JS\_GPN\_SET\_ENUM**: `number` - -##### JS\_GPN\_STRING\_MASK - -> **JS\_GPN\_STRING\_MASK**: `number` - -##### JS\_GPN\_SYMBOL\_MASK - -> **JS\_GPN\_SYMBOL\_MASK**: `number` - -##### QTS\_GPN\_NUMBER\_MASK - -> **QTS\_GPN\_NUMBER\_MASK**: `number` - -##### QTS\_STANDARD\_COMPLIANT\_NUMBER - -> **QTS\_STANDARD\_COMPLIANT\_NUMBER**: `number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:154 - -*** - -### IntrinsicsFlags - -> **IntrinsicsFlags**: `Object` - -Bitfield options for QTS_NewContext intrinsics - -#### Type declaration - -##### BaseObjects - -> **`readonly`** **BaseObjects**: `number` - -##### BigDecimal - -> **`readonly`** **BigDecimal**: `number` - -##### BigFloat - -> **`readonly`** **BigFloat**: `number` - -##### BigInt - -> **`readonly`** **BigInt**: `number` - -##### BignumExt - -> **`readonly`** **BignumExt**: `number` - -##### Date - -> **`readonly`** **Date**: `number` - -##### Eval - -> **`readonly`** **Eval**: `number` - -##### JSON - -> **`readonly`** **JSON**: `number` - -##### MapSet - -> **`readonly`** **MapSet**: `number` - -##### OperatorOverloading - -> **`readonly`** **OperatorOverloading**: `number` - -##### Promise - -> **`readonly`** **Promise**: `number` - -##### Proxy - -> **`readonly`** **Proxy**: `number` - -##### RegExp - -> **`readonly`** **RegExp**: `number` - -##### RegExpCompiler - -> **`readonly`** **RegExpCompiler**: `number` - -##### StringNormalize - -> **`readonly`** **StringNormalize**: `number` - -##### TypedArrays - -> **`readonly`** **TypedArrays**: `number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:122 - -*** - -### IsEqualOp - -> **IsEqualOp**: `Object` - -#### Type declaration - -##### IsSameValue - -> **IsSameValue**: [`IsEqualOp`](exports.md#isequalop) - -##### IsSameValueZero - -> **IsSameValueZero**: [`IsEqualOp`](exports.md#isequalop) - -##### IsStrictlyEqual - -> **IsStrictlyEqual**: [`IsEqualOp`](exports.md#isequalop) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:168 - -*** - -### JSPromiseStateEnum - -> **JSPromiseStateEnum**: `Object` - -#### Type declaration - -##### Fulfilled - -> **`readonly`** **Fulfilled**: `1` - -##### Pending - -> **`readonly`** **Pending**: `0` - -##### Rejected - -> **`readonly`** **Rejected**: `2` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:145 - -*** - -### RELEASE\_ASYNC - -> **`const`** **RELEASE\_ASYNC**: [`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md) - -### @jitl/quickjs-wasmfile-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -packages/variant-quickjs-wasmfile-release-asyncify/dist/index.d.ts:18 - -*** - -### RELEASE\_SYNC - -> **`const`** **RELEASE\_SYNC**: [`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md) - -### @jitl/quickjs-wasmfile-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| -- | -- | -- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -#### Source - -packages/variant-quickjs-wasmfile-release-sync/dist/index.d.ts:18 - -## Functions - -### assertSync() - -> **assertSync**\<`Args`, `R`\>(`fn`): (...`args`) => `R` - -#### Type parameters - -• **Args** extends `any`[] - -• **R** - -#### Parameters - -• **fn**: (...`args`) => `R` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `Args` -> -> ##### Returns -> -> `R` -> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:90 - -*** - -### createDisposableArray() - -> **createDisposableArray**\<`T`\>(`items`?): [`DisposableArray`](exports.md#disposablearrayt)\<`T`\> - -Create an array that also implements [Disposable](interfaces/Disposable.md). - -#### Type parameters - -• **T** extends [`Disposable`](interfaces/Disposable.md) - -#### Parameters - -• **items?**: `Iterable`\<`T`\> - -#### Returns - -[`DisposableArray`](exports.md#disposablearrayt)\<`T`\> - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:359](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L359) - -*** - -### getQuickJS() - -> **getQuickJS**(): `Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -Get a shared singleton [QuickJSWASMModule](classes/QuickJSWASMModule.md). Use this to evaluate code -or create Javascript environments. - -This is the top-level entrypoint for the quickjs-emscripten library. - -If you need strictest possible isolation guarantees, you may create a -separate [QuickJSWASMModule](classes/QuickJSWASMModule.md) via [newQuickJSWASMModule](exports.md#newquickjswasmmodule). - -To work with the asyncified version of this library, see these functions: - -- [newAsyncRuntime](exports.md#newasyncruntime). -- [newAsyncContext](exports.md#newasynccontext). -- [newQuickJSAsyncWASMModule](exports.md#newquickjsasyncwasmmodule). - -#### Returns - -`Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -#### Source - -[packages/quickjs-emscripten/src/mod.ts:28](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/mod.ts#L28) - -*** - -### getQuickJSSync() - -> **getQuickJSSync**(): [`QuickJSWASMModule`](classes/QuickJSWASMModule.md) - -Provides synchronous access to the shared [QuickJSWASMModule](classes/QuickJSWASMModule.md) instance returned by [getQuickJS](exports.md#getquickjs), as long as -least once. - -#### Returns - -[`QuickJSWASMModule`](classes/QuickJSWASMModule.md) - -#### Throws - -If called before `getQuickJS` resolves. - -#### Source - -[packages/quickjs-emscripten/src/mod.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/mod.ts#L41) - -*** - -### isFail() - -> **isFail**\<`S`, `F`\>(`successOrFail`): `successOrFail is Object` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **successOrFail**: [`SuccessOrFail`](exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`successOrFail is Object` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:18](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L18) - -*** - -### isSuccess() - -> **isSuccess**\<`S`, `F`\>(`successOrFail`): `successOrFail is Object` - -#### Type parameters - -• **S** - -• **F** - -#### Parameters - -• **successOrFail**: [`SuccessOrFail`](exports.md#successorfails-f)\<`S`, `F`\> - -#### Returns - -`successOrFail is Object` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:14](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L14) - -*** - -### memoizePromiseFactory() - -> **memoizePromiseFactory**\<`T`\>(`fn`): () => `Promise`\<`T`\> - -Helper intended to memoize the creation of a WebAssembly module. -```typescript -const getDebugModule = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) -``` - -#### Type parameters - -• **T** - -#### Parameters - -• **fn**: () => `Promise`\<`T`\> - -#### Returns - -`Function` - -> ##### Returns -> -> `Promise`\<`T`\> -> - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L100) - -*** - -### newAsyncContext() - -> **newAsyncContext**(`options`?): `Promise`\<[`QuickJSAsyncContext`](classes/QuickJSAsyncContext.md)\> - -Create a new [QuickJSAsyncContext](classes/QuickJSAsyncContext.md) (with an associated runtime) in an -separate WebAssembly module. - -Each context is isolated in a separate WebAssembly module, so that errors in -one runtime cannot contaminate another runtime, and each runtime can execute -an asynchronous action without conflicts. - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **options?**: [`ContextOptions`](interfaces/ContextOptions.md) - -#### Returns - -`Promise`\<[`QuickJSAsyncContext`](classes/QuickJSAsyncContext.md)\> - -#### Source - -[packages/quickjs-emscripten/src/mod.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/mod.ts#L76) - -*** - -### newAsyncRuntime() - -> **newAsyncRuntime**(`options`?): `Promise`\<[`QuickJSAsyncRuntime`](classes/QuickJSAsyncRuntime.md)\> - -Create a new [QuickJSAsyncRuntime](classes/QuickJSAsyncRuntime.md) in a separate WebAssembly module. - -Each runtime is isolated in a separate WebAssembly module, so that errors in -one runtime cannot contaminate another runtime, and each runtime can execute -an asynchronous action without conflicts. - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **options?**: [`AsyncRuntimeOptions`](interfaces/AsyncRuntimeOptions.md) - -#### Returns - -`Promise`\<[`QuickJSAsyncRuntime`](classes/QuickJSAsyncRuntime.md)\> - -#### Source - -[packages/quickjs-emscripten/src/mod.ts:59](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/mod.ts#L59) - -*** - -### newQuickJSAsyncWASMModule() - -> **newQuickJSAsyncWASMModule**(`variantOrPromise`): `Promise`\<[`QuickJSAsyncWASMModule`](classes/QuickJSAsyncWASMModule.md)\> - -Create a new, completely isolated WebAssembly module containing a version of the QuickJS library -compiled with Emscripten's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) transform. - -This version of the library offers features that enable synchronous code -inside the VM to interact with asynchronous code in the host environment. -See the documentation on [QuickJSAsyncWASMModule](classes/QuickJSAsyncWASMModule.md), [QuickJSAsyncRuntime](classes/QuickJSAsyncRuntime.md), -and [QuickJSAsyncContext](classes/QuickJSAsyncContext.md). - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **variantOrPromise**: [`PromisedDefault`](exports.md#promiseddefaultt)\<[`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md)\>= `RELEASE_ASYNC` - -Optionally, pass a [QuickJSAsyncVariant](interfaces/QuickJSAsyncVariant.md) to construct a different WebAssembly module. - -#### Returns - -`Promise`\<[`QuickJSAsyncWASMModule`](classes/QuickJSAsyncWASMModule.md)\> - -#### Source - -[packages/quickjs-emscripten/src/variants.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/variants.ts#L47) - -*** - -### newQuickJSAsyncWASMModuleFromVariant() - -> **newQuickJSAsyncWASMModuleFromVariant**(`variantOrPromise`): `Promise`\<[`QuickJSAsyncWASMModule`](classes/QuickJSAsyncWASMModule.md)\> - -Create a new, completely isolated WebAssembly module containing a version of the QuickJS library -compiled with Emscripten's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) transform. - -This version of the library offers features that enable synchronous code -inside the VM to interact with asynchronous code in the host environment. -See the documentation on [QuickJSAsyncWASMModule](classes/QuickJSAsyncWASMModule.md), [QuickJSAsyncRuntime](classes/QuickJSAsyncRuntime.md), -and [QuickJSAsyncContext](classes/QuickJSAsyncContext.md). - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **variantOrPromise**: [`PromisedDefault`](exports.md#promiseddefaultt)\<[`QuickJSAsyncVariant`](interfaces/QuickJSAsyncVariant.md)\> - -A [QuickJSAsyncVariant](interfaces/QuickJSAsyncVariant.md) to construct the WebAssembly module. - -#### Returns - -`Promise`\<[`QuickJSAsyncWASMModule`](classes/QuickJSAsyncWASMModule.md)\> - -#### Example - -```ts -const quickjs = new newQuickJSAsyncWASMModuleFromVariant( - import('@jitl/quickjs-browser-debug-asyncify-wasm') -) -``` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L76) - -*** - -### newQuickJSWASMModule() - -> **newQuickJSWASMModule**(`variantOrPromise`): `Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -Create a new, completely isolated WebAssembly module containing the QuickJS library. -See the documentation on [QuickJSWASMModule](classes/QuickJSWASMModule.md). - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **variantOrPromise**: [`PromisedDefault`](exports.md#promiseddefaultt)\<[`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md)\>= `RELEASE_SYNC` - -Optionally, pass a [QuickJSSyncVariant](interfaces/QuickJSSyncVariant.md) to construct a different WebAssembly module. - -#### Returns - -`Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -#### Source - -[packages/quickjs-emscripten/src/variants.ts:25](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten/src/variants.ts#L25) - -*** - -### newQuickJSWASMModuleFromVariant() - -> **newQuickJSWASMModuleFromVariant**(`variantOrPromise`): `Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -Create a new, completely isolated WebAssembly module containing the QuickJS library. -See the documentation on [QuickJSWASMModule](classes/QuickJSWASMModule.md). - -Note that there is a hard limit on the number of WebAssembly modules in older -versions of v8: -https://bugs.chromium.org/p/v8/issues/detail?id=12076 - -#### Parameters - -• **variantOrPromise**: [`PromisedDefault`](exports.md#promiseddefaultt)\<[`QuickJSSyncVariant`](interfaces/QuickJSSyncVariant.md)\> - -A [QuickJSSyncVariant](interfaces/QuickJSSyncVariant.md) to construct the WebAssembly module. - -#### Returns - -`Promise`\<[`QuickJSWASMModule`](classes/QuickJSWASMModule.md)\> - -#### Example - -```ts -const quickjs = new newQuickJSWASMModuleFromVariant( - import('@jitl/quickjs-browser-release-sync-wasm') -) -``` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:38](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L38) - -*** - -### newVariant() - -> **newVariant**\<`T`\>(`baseVariant`, `options`): `T` - -Create a new variant by overriding how Emscripten obtains the WebAssembly module. -This may be necessary in Cloudflare Workers, which can't compile WebAssembly modules from binary data. - -#### Type parameters - -• **T** extends [`QuickJSVariant`](exports.md#quickjsvariant) - -#### Parameters - -• **baseVariant**: `T` - -• **options**: [`CustomizeVariantOptions`](interfaces/CustomizeVariantOptions.md) - -#### Returns - -`T` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:162](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L162) - -*** - -### setDebugMode() - -> **setDebugMode**(`enabled`): `void` - -Enable (or disable) debug logging and object creation tracking globally. -This setting is inherited by newly created QuickJSRuntime instances. -To get debug logging in the WebAssembly module, you need to use a debug build variant. -See [the quickjs-emscripten-core README](https://github.com/justjake/quickjs-emscripten/tree/main/doc/quickjs-emscripten-core) for more about build variants. - -#### Parameters - -• **enabled**: `boolean`= `true` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/debug.ts:13](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/debug.ts#L13) - -*** - -### shouldInterruptAfterDeadline() - -> **shouldInterruptAfterDeadline**(`deadline`): [`InterruptHandler`](exports.md#interrupthandler) - -Returns an interrupt handler that interrupts Javascript execution after a deadline time. - -#### Parameters - -• **deadline**: `number` \| `Date` - -Interrupt execution if it's still running after this time. - Number values are compared against `Date.now()` - -#### Returns - -[`InterruptHandler`](exports.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/interrupt-helpers.ts:9](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/interrupt-helpers.ts#L9) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/AsyncRuntimeOptions.md b/doc/quickjs-emscripten/interfaces/AsyncRuntimeOptions.md deleted file mode 100644 index b070271ae..000000000 --- a/doc/quickjs-emscripten/interfaces/AsyncRuntimeOptions.md +++ /dev/null @@ -1,136 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / AsyncRuntimeOptions - -# Interface: AsyncRuntimeOptions - -## Contents - -- [Extends](AsyncRuntimeOptions.md#extends) -- [Properties](AsyncRuntimeOptions.md#properties) - - [gcThreshold?](AsyncRuntimeOptions.md#gcthreshold) - - [interruptHandler?](AsyncRuntimeOptions.md#interrupthandler) - - [maxStackSizeBytes?](AsyncRuntimeOptions.md#maxstacksizebytes) - - [memoryLimitBytes?](AsyncRuntimeOptions.md#memorylimitbytes) - - [moduleLoader?](AsyncRuntimeOptions.md#moduleloader) - - [promiseRejectionHandler?](AsyncRuntimeOptions.md#promiserejectionhandler) - - [runtimeInfo?](AsyncRuntimeOptions.md#runtimeinfo) - - [sharedArrayBufferFunctions?](AsyncRuntimeOptions.md#sharedarraybufferfunctions) - -## Extends - -- [`RuntimeOptionsBase`](RuntimeOptionsBase.md) - -## Properties - -### gcThreshold? - -> **gcThreshold**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.gcThreshold`](RuntimeOptionsBase.md#gcthreshold) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:119](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L119) - -*** - -### interruptHandler? - -> **interruptHandler**?: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.interruptHandler`](RuntimeOptionsBase.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L113) - -*** - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.maxStackSizeBytes`](RuntimeOptionsBase.md#maxstacksizebytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:114](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L114) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.memoryLimitBytes`](RuntimeOptionsBase.md#memorylimitbytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:115](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L115) - -*** - -### moduleLoader? - -> **moduleLoader**?: [`JSModuleLoader`](JSModuleLoader.md) \| [`JSModuleLoaderAsync`](JSModuleLoaderAsync.md) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:137](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L137) - -*** - -### promiseRejectionHandler? - -> **promiseRejectionHandler**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.promiseRejectionHandler`](RuntimeOptionsBase.md#promiserejectionhandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L117) - -*** - -### runtimeInfo? - -> **runtimeInfo**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.runtimeInfo`](RuntimeOptionsBase.md#runtimeinfo) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L118) - -*** - -### sharedArrayBufferFunctions? - -> **sharedArrayBufferFunctions**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.sharedArrayBufferFunctions`](RuntimeOptionsBase.md#sharedarraybufferfunctions) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/ContextEvalOptions.md b/doc/quickjs-emscripten/interfaces/ContextEvalOptions.md deleted file mode 100644 index af30ce717..000000000 --- a/doc/quickjs-emscripten/interfaces/ContextEvalOptions.md +++ /dev/null @@ -1,85 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / ContextEvalOptions - -# Interface: ContextEvalOptions - -## Contents - -- [Properties](ContextEvalOptions.md#properties) - - [backtraceBarrier?](ContextEvalOptions.md#backtracebarrier) - - [compileOnly?](ContextEvalOptions.md#compileonly) - - [strict?](ContextEvalOptions.md#strict) - - [strip?](ContextEvalOptions.md#strip) - - [type?](ContextEvalOptions.md#type) - -## Properties - -### backtraceBarrier? - -> **backtraceBarrier**?: `boolean` - -don't include the stack frames before this eval in the Error() backtraces - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:263](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L263) - -*** - -### compileOnly? - -> **compileOnly**?: `boolean` - -compile but do not run. The result is an object with a -JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed -with JS_EvalFunction(). - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:261](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L261) - -*** - -### strict? - -> **strict**?: `boolean` - -Force "strict" mode - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:253](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L253) - -*** - -### strip? - -> **strip**?: `boolean` - -Force "strip" mode - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:255](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L255) - -*** - -### type? - -> **type**?: `"global"` \| `"module"` - -Global code (default), or "module" code? - -- When type is `"global"`, the code is evaluated in the global scope of the QuickJSContext, and the return value is the result of the last expression. -- When type is `"module"`, the code is evaluated is a module scope, may use `import`, `export`, and top-level `await`. The return value is the module's exports, or a promise for the module's exports. - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:251](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L251) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/ContextOptions.md b/doc/quickjs-emscripten/interfaces/ContextOptions.md deleted file mode 100644 index 6b005b9ff..000000000 --- a/doc/quickjs-emscripten/interfaces/ContextOptions.md +++ /dev/null @@ -1,44 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / ContextOptions - -# Interface: ContextOptions - -Options for creating a [QuickJSContext](../classes/QuickJSContext.md) or [QuickJSAsyncContext](../classes/QuickJSAsyncContext.md) -Pass to [QuickJSRuntime#newContext](../classes/QuickJSRuntime.md#newcontext). - -## Contents - -- [Properties](ContextOptions.md#properties) - - [intrinsics?](ContextOptions.md#intrinsics) - -## Properties - -### intrinsics? - -> **intrinsics**?: [`Intrinsics`](../exports.md#intrinsics) - -What built-in objects and language features to enable? -If unset, the default intrinsics will be used. -To omit all intrinsics, pass an empty array. - -To remove a specific intrinsic, but retain the other defaults, -override it from [DefaultIntrinsics](../exports.md#defaultintrinsics) -```ts -const contextWithoutDateOrEval = runtime.newContext({ - intrinsics: { - ...DefaultIntrinsics, - Date: false, - } -}) -``` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:229](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L229) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/CustomizeVariantOptions.md b/doc/quickjs-emscripten/interfaces/CustomizeVariantOptions.md deleted file mode 100644 index 4a6e775af..000000000 --- a/doc/quickjs-emscripten/interfaces/CustomizeVariantOptions.md +++ /dev/null @@ -1,180 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / CustomizeVariantOptions - -# Interface: CustomizeVariantOptions - -## Contents - -- [Properties](CustomizeVariantOptions.md#properties) - - [emscriptenModule?](CustomizeVariantOptions.md#emscriptenmodule) - - [locateFile?](CustomizeVariantOptions.md#locatefile) - - [log?](CustomizeVariantOptions.md#log) - - [wasmBinary?](CustomizeVariantOptions.md#wasmbinary) - - [wasmLocation?](CustomizeVariantOptions.md#wasmlocation) - - [wasmMemory?](CustomizeVariantOptions.md#wasmmemory) - - [wasmModule?](CustomizeVariantOptions.md#wasmmodule) - - [wasmSourceMapData?](CustomizeVariantOptions.md#wasmsourcemapdata) - - [wasmSourceMapLocation?](CustomizeVariantOptions.md#wasmsourcemaplocation) - -## Properties - -### emscriptenModule? - -> **emscriptenModule**?: [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -The enumerable properties of this object will be passed verbatim, although they may be overwritten if you pass other options. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:153](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L153) - -*** - -### locateFile? - -> **locateFile**?: (`fileName`, `prefix`) => `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:151](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L151) - -*** - -### log? - -> **log**?: (...`data`) => `void`(`message`?, ...`optionalParams`) => `void` - -Debug logger - -#### Parameters - -• ...**data**: `any`[] - -#### Returns - -`void` - -Debug logger - -#### Parameters - -• **message?**: `any` - -• ...**optionalParams?**: `any`[] - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:155](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L155) - -*** - -### wasmBinary? - -> **wasmBinary**?: [`OrLoader`](../exports.md#orloadert)\<`ArrayBuffer`\> - -If given, Emscripten will compile the WebAssembly.Module from these bytes. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:123](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L123) - -*** - -### wasmLocation? - -> **wasmLocation**?: `string` - -If given, Emscripten will try to load the WebAssembly module data from this location (path or URI) as appropriate for the current platform. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:121](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L121) - -*** - -### wasmMemory? - -> **wasmMemory**?: [`OrLoader`](../exports.md#orloadert)\<`Memory`\> - -If given, use the Memory when instantiating the WebAssembly.Instance. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:127](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L127) - -*** - -### wasmModule? - -> **wasmModule**?: [`OrLoader`](../exports.md#orloadert)\<`Module`\> - -If given, Emscripten will instantiate the WebAssembly.Instance from this existing WebAssembly.Module - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:125](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L125) - -*** - -### wasmSourceMapData? - -> **wasmSourceMapData**?: [`OrLoader`](../exports.md#orloadert)\<`string` \| [`SourceMapData`](SourceMapData.md)\> - -If given, we will provide the source map to Emscripten directly. This may only be respected if wasmModule is also provided. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:131](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L131) - -*** - -### wasmSourceMapLocation? - -> **wasmSourceMapLocation**?: `string` - -If given, Emscripten will try to load the source map for the WebAssembly module from this location (path or URI) as appropriate for the current platform. - -#### Source - -[packages/quickjs-emscripten-core/src/from-variant.ts:129](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/from-variant.ts#L129) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/Disposable.md b/doc/quickjs-emscripten/interfaces/Disposable.md deleted file mode 100644 index fd265106e..000000000 --- a/doc/quickjs-emscripten/interfaces/Disposable.md +++ /dev/null @@ -1,65 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / Disposable - -# Interface: Disposable - -An object that can be disposed. -[Lifetime](../classes/Lifetime.md) is the canonical implementation of Disposable. -Use [Scope](../classes/Scope.md) to manage cleaning up multiple disposables. - -## Contents - -- [Properties](Disposable.md#properties) - - [alive](Disposable.md#alive) -- [Methods](Disposable.md#methods) - - [`[dispose]`()](Disposable.md#dispose) - - [dispose()](Disposable.md#dispose) - -## Properties - -### alive - -> **alive**: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:23](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L23) - -## Methods - -### `[dispose]`() - -> **[dispose]**(): `void` - -A method that is used to release resources held by an object. Called by the semantics of the `using` statement. - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:28](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L28) - -*** - -### dispose() - -> **dispose**(): `void` - -Dispose of the underlying resources used by this object. - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/lifetime.ts:17](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/lifetime.ts#L17) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/EmscriptenModule.md b/doc/quickjs-emscripten/interfaces/EmscriptenModule.md deleted file mode 100644 index 3ae98434e..000000000 --- a/doc/quickjs-emscripten/interfaces/EmscriptenModule.md +++ /dev/null @@ -1,417 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / EmscriptenModule - -# Interface: EmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](EmscriptenModule.md#extends) -- [Properties](EmscriptenModule.md#properties) - - [FAST\_MEMORY](EmscriptenModule.md#fast-memory) - - [HEAP16](EmscriptenModule.md#heap16) - - [HEAP32](EmscriptenModule.md#heap32) - - [HEAP8](EmscriptenModule.md#heap8) - - [HEAPF32](EmscriptenModule.md#heapf32) - - [HEAPF64](EmscriptenModule.md#heapf64) - - [HEAPU16](EmscriptenModule.md#heapu16) - - [HEAPU32](EmscriptenModule.md#heapu32) - - [HEAPU8](EmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](EmscriptenModule.md#total-memory) - - [TOTAL\_STACK](EmscriptenModule.md#total-stack) - - [wasmBinary?](EmscriptenModule.md#wasmbinary) - - [wasmMemory?](EmscriptenModule.md#wasmmemory) -- [Methods](EmscriptenModule.md#methods) - - [UTF8ToString()](EmscriptenModule.md#utf8tostring) - - [\_free()](EmscriptenModule.md#free) - - [\_malloc()](EmscriptenModule.md#malloc) - - [cwrap()](EmscriptenModule.md#cwrap) - - [instantiateWasm()?](EmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](EmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](EmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](EmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](EmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:289 - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:280 - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:281 - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:279 - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:285 - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:286 - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:283 - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:284 - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:282 - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:288 - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:287 - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModuleLoaderOptions.wasmBinary`](EmscriptenModuleLoaderOptions.md#wasmbinary) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:246 - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModuleLoaderOptions.wasmMemory`](EmscriptenModuleLoaderOptions.md#wasmmemory) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:248 - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:274 - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:277 - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:276 - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:278 - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModuleLoaderOptions.instantiateWasm`](EmscriptenModuleLoaderOptions.md#instantiatewasm) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:250 - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:275 - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModuleLoaderOptions.locateFile`](EmscriptenModuleLoaderOptions.md#locatefile) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:242 - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModuleLoaderOptions.monitorRunDependencies`](EmscriptenModuleLoaderOptions.md#monitorrundependencies) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:252 - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:269 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/EmscriptenModuleLoader.md b/doc/quickjs-emscripten/interfaces/EmscriptenModuleLoader.md deleted file mode 100644 index 5a7ed44d7..000000000 --- a/doc/quickjs-emscripten/interfaces/EmscriptenModuleLoader.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / EmscriptenModuleLoader - -# Interface: EmscriptenModuleLoader()\ - -## Type parameters - -• **T** extends [`EmscriptenModule`](EmscriptenModule.md) - -> **EmscriptenModuleLoader**(`options`?): `Promise`\<`T`\> - -## Parameters - -• **options?**: [`EmscriptenModuleLoaderOptions`](EmscriptenModuleLoaderOptions.md) - -## Returns - -`Promise`\<`T`\> - -## Source - -packages/quickjs-ffi-types/dist/index.d.ts:334 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/EmscriptenModuleLoaderOptions.md b/doc/quickjs-emscripten/interfaces/EmscriptenModuleLoaderOptions.md deleted file mode 100644 index a13ee856e..000000000 --- a/doc/quickjs-emscripten/interfaces/EmscriptenModuleLoaderOptions.md +++ /dev/null @@ -1,136 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / EmscriptenModuleLoaderOptions - -# Interface: EmscriptenModuleLoaderOptions - -This structure is defined by Emscripten. -It's possible to provide these parameters to an emscripten module loader. -See [the Emscripten Module API reference](https://emscripten.org/docs/api_reference/module.html). - -## Contents - -- [Extended By](EmscriptenModuleLoaderOptions.md#extended-by) -- [Properties](EmscriptenModuleLoaderOptions.md#properties) - - [wasmBinary?](EmscriptenModuleLoaderOptions.md#wasmbinary) - - [wasmMemory?](EmscriptenModuleLoaderOptions.md#wasmmemory) -- [Methods](EmscriptenModuleLoaderOptions.md#methods) - - [instantiateWasm()?](EmscriptenModuleLoaderOptions.md#instantiatewasm) - - [locateFile()?](EmscriptenModuleLoaderOptions.md#locatefile) - - [monitorRunDependencies()?](EmscriptenModuleLoaderOptions.md#monitorrundependencies) - -## Extended By - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:246 - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:248 - -## Methods - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:250 - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:242 - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:252 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/JSModuleLoader.md b/doc/quickjs-emscripten/interfaces/JSModuleLoader.md deleted file mode 100644 index 080c0be90..000000000 --- a/doc/quickjs-emscripten/interfaces/JSModuleLoader.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / JSModuleLoader - -# Interface: JSModuleLoader() - -> **JSModuleLoader**(`moduleName`, `context`): [`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) - -Load module (sync) - -## Parameters - -• **moduleName**: `string` - -• **context**: [`QuickJSContext`](../classes/QuickJSContext.md) - -## Returns - -[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:83](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L83) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/JSModuleLoaderAsync.md b/doc/quickjs-emscripten/interfaces/JSModuleLoaderAsync.md deleted file mode 100644 index fc9b7b85d..000000000 --- a/doc/quickjs-emscripten/interfaces/JSModuleLoaderAsync.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / JSModuleLoaderAsync - -# Interface: JSModuleLoaderAsync() - -> **JSModuleLoaderAsync**(`moduleName`, `context`): [`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) \| `Promise`\<[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult)\> - -Load module (async) - -## Parameters - -• **moduleName**: `string` - -• **context**: [`QuickJSAsyncContext`](../classes/QuickJSAsyncContext.md) - -## Returns - -[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult) \| `Promise`\<[`JSModuleLoadResult`](../exports.md#jsmoduleloadresult)\> - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L76) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/JSModuleNormalizer.md b/doc/quickjs-emscripten/interfaces/JSModuleNormalizer.md deleted file mode 100644 index c7b69275f..000000000 --- a/doc/quickjs-emscripten/interfaces/JSModuleNormalizer.md +++ /dev/null @@ -1,51 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / JSModuleNormalizer - -# Interface: JSModuleNormalizer() - -## Extends - -- [`JSModuleNormalizerAsync`](JSModuleNormalizerAsync.md) - -> **JSModuleNormalizer**(`baseModuleName`, `requestedName`, `vm`): [`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) - -## Parameters - -• **baseModuleName**: `string` - -• **requestedName**: `string` - -• **vm**: [`QuickJSContext`](../classes/QuickJSContext.md) - -## Returns - -[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:100](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L100) - -> **JSModuleNormalizer**(`baseModuleName`, `requestedName`, `vm`): [`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Parameters - -• **baseModuleName**: `string` - -• **requestedName**: `string` - -• **vm**: [`QuickJSAsyncContext`](../classes/QuickJSAsyncContext.md) - -## Returns - -[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:93](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L93) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/JSModuleNormalizerAsync.md b/doc/quickjs-emscripten/interfaces/JSModuleNormalizerAsync.md deleted file mode 100644 index 6a9d505b9..000000000 --- a/doc/quickjs-emscripten/interfaces/JSModuleNormalizerAsync.md +++ /dev/null @@ -1,33 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / JSModuleNormalizerAsync - -# Interface: JSModuleNormalizerAsync() - -## Extended By - -- [`JSModuleNormalizer`](JSModuleNormalizer.md) - -> **JSModuleNormalizerAsync**(`baseModuleName`, `requestedName`, `vm`): [`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Parameters - -• **baseModuleName**: `string` - -• **requestedName**: `string` - -• **vm**: [`QuickJSAsyncContext`](../classes/QuickJSAsyncContext.md) - -## Returns - -[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult) \| `Promise`\<[`JSModuleNormalizeResult`](../exports.md#jsmodulenormalizeresult)\> - -## Source - -[packages/quickjs-emscripten-core/src/types.ts:93](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L93) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/JSPromiseStateFulfilled.md b/doc/quickjs-emscripten/interfaces/JSPromiseStateFulfilled.md deleted file mode 100644 index e05aeeb57..000000000 --- a/doc/quickjs-emscripten/interfaces/JSPromiseStateFulfilled.md +++ /dev/null @@ -1,64 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / JSPromiseStateFulfilled - -# Interface: JSPromiseStateFulfilled - -Fulfilled promise state. -See [JSPromiseState](../exports.md#jspromisestate). - -## Contents - -- [Properties](JSPromiseStateFulfilled.md#properties) - - [error?](JSPromiseStateFulfilled.md#error) - - [notAPromise?](JSPromiseStateFulfilled.md#notapromise) - - [type](JSPromiseStateFulfilled.md#type) - - [value](JSPromiseStateFulfilled.md#value) - -## Properties - -### error? - -> **error**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:36](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L36) - -*** - -### notAPromise? - -> **notAPromise**?: `boolean` - -Trying to get the promise state of a non-Promise value returns a fulfilled state with the original value, and `notAPromise: true`. - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:38](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L38) - -*** - -### type - -> **type**: `"fulfilled"` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:34](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L34) - -*** - -### value - -> **value**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:35](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L35) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/JSPromiseStatePending.md b/doc/quickjs-emscripten/interfaces/JSPromiseStatePending.md deleted file mode 100644 index b0cfb9b1b..000000000 --- a/doc/quickjs-emscripten/interfaces/JSPromiseStatePending.md +++ /dev/null @@ -1,48 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / JSPromiseStatePending - -# Interface: JSPromiseStatePending - -Pending promise state. -See [JSPromiseState](../exports.md#jspromisestate). - -## Contents - -- [Properties](JSPromiseStatePending.md#properties) - - [type](JSPromiseStatePending.md#type) -- [Accessors](JSPromiseStatePending.md#accessors) - - [error](JSPromiseStatePending.md#error) - -## Properties - -### type - -> **type**: `"pending"` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:21](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L21) - -## Accessors - -### error - -> **`get`** **error**(): `Error` - -The error property here allows unwrapping a JSPromiseState with [QuickJSContext#unwrapResult](../classes/QuickJSContext.md#unwrapresult). -Unwrapping a pending promise will throw a QuickJSPromisePending error. - -#### Returns - -`Error` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:26](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L26) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/JSPromiseStateRejected.md b/doc/quickjs-emscripten/interfaces/JSPromiseStateRejected.md deleted file mode 100644 index 50d6b6d93..000000000 --- a/doc/quickjs-emscripten/interfaces/JSPromiseStateRejected.md +++ /dev/null @@ -1,40 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / JSPromiseStateRejected - -# Interface: JSPromiseStateRejected - -Rejected promise state. -See [JSPromiseState](../exports.md#jspromisestate). - -## Contents - -- [Properties](JSPromiseStateRejected.md#properties) - - [error](JSPromiseStateRejected.md#error) - - [type](JSPromiseStateRejected.md#type) - -## Properties - -### error - -> **error**: [`QuickJSHandle`](../exports.md#quickjshandle) - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:47](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L47) - -*** - -### type - -> **type**: `"rejected"` - -#### Source - -[packages/quickjs-emscripten-core/src/deferred-promise.ts:46](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/deferred-promise.ts#L46) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/LowLevelJavascriptVm.md b/doc/quickjs-emscripten/interfaces/LowLevelJavascriptVm.md deleted file mode 100644 index 030a430e0..000000000 --- a/doc/quickjs-emscripten/interfaces/LowLevelJavascriptVm.md +++ /dev/null @@ -1,296 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / LowLevelJavascriptVm - -# Interface: LowLevelJavascriptVm\ - -A minimal interface to a Javascript execution environment. - -Higher-level tools should build over the LowLevelJavascriptVm interface to -share as much as possible between executors. - -From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/ - -## Contents - -- [Type parameters](LowLevelJavascriptVm.md#type-parameters) -- [Properties](LowLevelJavascriptVm.md#properties) - - [global](LowLevelJavascriptVm.md#global) - - [undefined](LowLevelJavascriptVm.md#undefined) -- [Methods](LowLevelJavascriptVm.md#methods) - - [callFunction()](LowLevelJavascriptVm.md#callfunction) - - [defineProp()](LowLevelJavascriptVm.md#defineprop) - - [evalCode()](LowLevelJavascriptVm.md#evalcode) - - [getNumber()](LowLevelJavascriptVm.md#getnumber) - - [getProp()](LowLevelJavascriptVm.md#getprop) - - [getString()](LowLevelJavascriptVm.md#getstring) - - [newFunction()](LowLevelJavascriptVm.md#newfunction) - - [newNumber()](LowLevelJavascriptVm.md#newnumber) - - [newObject()](LowLevelJavascriptVm.md#newobject) - - [newString()](LowLevelJavascriptVm.md#newstring) - - [setProp()](LowLevelJavascriptVm.md#setprop) - - [typeof()](LowLevelJavascriptVm.md#typeof) - -## Type parameters - -• **VmHandle** - -## Properties - -### global - -> **global**: `VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:54](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L54) - -*** - -### undefined - -> **undefined**: `VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:55](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L55) - -## Methods - -### callFunction() - -> **callFunction**(`func`, `thisVal`, ...`args`): [`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Parameters - -• **func**: `VmHandle` - -• **thisVal**: `VmHandle` - -• ...**args**: `VmHandle`[] - -#### Returns - -[`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L76) - -*** - -### defineProp() - -> **defineProp**(`handle`, `key`, `descriptor`): `void` - -#### Parameters - -• **handle**: `VmHandle` - -• **key**: `string` \| `VmHandle` - -• **descriptor**: [`VmPropertyDescriptor`](VmPropertyDescriptor.md)\<`VmHandle`\> - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:70](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L70) - -*** - -### evalCode() - -> **evalCode**(`code`, `filename`?): [`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Parameters - -• **code**: `string` - -• **filename?**: `string` - -#### Returns - -[`VmCallResult`](../exports.md#vmcallresultvmhandle)\<`VmHandle`\> - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:77](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L77) - -*** - -### getNumber() - -> **getNumber**(`handle`): `number` - -#### Parameters - -• **handle**: `VmHandle` - -#### Returns - -`number` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:59](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L59) - -*** - -### getProp() - -> **getProp**(`handle`, `key`): `VmHandle` - -#### Parameters - -• **handle**: `VmHandle` - -• **key**: `string` \| `VmHandle` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:68](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L68) - -*** - -### getString() - -> **getString**(`handle`): `string` - -#### Parameters - -• **handle**: `VmHandle` - -#### Returns - -`string` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:60](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L60) - -*** - -### newFunction() - -> **newFunction**(`name`, `value`): `VmHandle` - -#### Parameters - -• **name**: `string` - -• **value**: [`VmFunctionImplementation`](../exports.md#vmfunctionimplementationvmhandle)\<`VmHandle`\> - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:65](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L65) - -*** - -### newNumber() - -> **newNumber**(`value`): `VmHandle` - -#### Parameters - -• **value**: `number` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:62](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L62) - -*** - -### newObject() - -> **newObject**(`prototype`?): `VmHandle` - -#### Parameters - -• **prototype?**: `VmHandle` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:64](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L64) - -*** - -### newString() - -> **newString**(`value`): `VmHandle` - -#### Parameters - -• **value**: `string` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:63](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L63) - -*** - -### setProp() - -> **setProp**(`handle`, `key`, `value`): `void` - -#### Parameters - -• **handle**: `VmHandle` - -• **key**: `string` \| `VmHandle` - -• **value**: `VmHandle` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:69](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L69) - -*** - -### typeof() - -> **typeof**(`handle`): `string` - -#### Parameters - -• **handle**: `VmHandle` - -#### Returns - -`string` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L57) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/ModuleEvalOptions.md b/doc/quickjs-emscripten/interfaces/ModuleEvalOptions.md deleted file mode 100644 index ad467e4ff..000000000 --- a/doc/quickjs-emscripten/interfaces/ModuleEvalOptions.md +++ /dev/null @@ -1,71 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / ModuleEvalOptions - -# Interface: ModuleEvalOptions - -Options for [QuickJSWASMModule#evalCode](../classes/QuickJSWASMModule.md#evalcode). - -## Contents - -- [Properties](ModuleEvalOptions.md#properties) - - [maxStackSizeBytes?](ModuleEvalOptions.md#maxstacksizebytes) - - [memoryLimitBytes?](ModuleEvalOptions.md#memorylimitbytes) - - [moduleLoader?](ModuleEvalOptions.md#moduleloader) - - [shouldInterrupt?](ModuleEvalOptions.md#shouldinterrupt) - -## Properties - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -Stack size limit for this vm, in bytes -To remove the limit, set to `0`. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:82](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L82) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -Memory limit, in bytes, of WebAssembly heap memory used by the QuickJS VM. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:76](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L76) - -*** - -### moduleLoader? - -> **moduleLoader**?: [`JSModuleLoader`](JSModuleLoader.md) - -Module loader for any `import` statements or expressions. - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L87) - -*** - -### shouldInterrupt? - -> **shouldInterrupt**?: [`InterruptHandler`](../exports.md#interrupthandler) - -Interrupt evaluation if `shouldInterrupt` returns `true`. -See [shouldInterruptAfterDeadline](../exports.md#shouldinterruptafterdeadline). - -#### Source - -[packages/quickjs-emscripten-core/src/module.ts:71](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/module.ts#L71) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/QuickJSAsyncEmscriptenModule.md b/doc/quickjs-emscripten/interfaces/QuickJSAsyncEmscriptenModule.md deleted file mode 100644 index 3818ee385..000000000 --- a/doc/quickjs-emscripten/interfaces/QuickJSAsyncEmscriptenModule.md +++ /dev/null @@ -1,511 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSAsyncEmscriptenModule - -# Interface: QuickJSAsyncEmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](QuickJSAsyncEmscriptenModule.md#extends) -- [Properties](QuickJSAsyncEmscriptenModule.md#properties) - - [FAST\_MEMORY](QuickJSAsyncEmscriptenModule.md#fast-memory) - - [HEAP16](QuickJSAsyncEmscriptenModule.md#heap16) - - [HEAP32](QuickJSAsyncEmscriptenModule.md#heap32) - - [HEAP8](QuickJSAsyncEmscriptenModule.md#heap8) - - [HEAPF32](QuickJSAsyncEmscriptenModule.md#heapf32) - - [HEAPF64](QuickJSAsyncEmscriptenModule.md#heapf64) - - [HEAPU16](QuickJSAsyncEmscriptenModule.md#heapu16) - - [HEAPU32](QuickJSAsyncEmscriptenModule.md#heapu32) - - [HEAPU8](QuickJSAsyncEmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](QuickJSAsyncEmscriptenModule.md#total-memory) - - [TOTAL\_STACK](QuickJSAsyncEmscriptenModule.md#total-stack) - - [callbacks](QuickJSAsyncEmscriptenModule.md#callbacks) - - [type](QuickJSAsyncEmscriptenModule.md#type) - - [wasmBinary?](QuickJSAsyncEmscriptenModule.md#wasmbinary) - - [wasmMemory?](QuickJSAsyncEmscriptenModule.md#wasmmemory) -- [Methods](QuickJSAsyncEmscriptenModule.md#methods) - - [UTF8ToString()](QuickJSAsyncEmscriptenModule.md#utf8tostring) - - [\_free()](QuickJSAsyncEmscriptenModule.md#free) - - [\_malloc()](QuickJSAsyncEmscriptenModule.md#malloc) - - [cwrap()](QuickJSAsyncEmscriptenModule.md#cwrap) - - [instantiateWasm()?](QuickJSAsyncEmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](QuickJSAsyncEmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](QuickJSAsyncEmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](QuickJSAsyncEmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](QuickJSAsyncEmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.FAST_MEMORY`](EmscriptenModule.md#fast-memory) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:289 - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAP16`](EmscriptenModule.md#heap16) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:280 - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAP32`](EmscriptenModule.md#heap32) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:281 - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAP8`](EmscriptenModule.md#heap8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:279 - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPF32`](EmscriptenModule.md#heapf32) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:285 - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPF64`](EmscriptenModule.md#heapf64) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:286 - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPU16`](EmscriptenModule.md#heapu16) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:283 - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPU32`](EmscriptenModule.md#heapu32) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:284 - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPU8`](EmscriptenModule.md#heapu8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:282 - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.TOTAL_MEMORY`](EmscriptenModule.md#total-memory) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:288 - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.TOTAL_STACK`](EmscriptenModule.md#total-stack) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:287 - -*** - -### callbacks - -> **callbacks**: `EmscriptenModuleCallbacks` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:330 - -*** - -### type - -> **type**: `"async"` - -#### Todo - -Implement this field - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:329 - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.wasmBinary`](EmscriptenModule.md#wasmbinary) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:246 - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.wasmMemory`](EmscriptenModule.md#wasmmemory) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:248 - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.UTF8ToString`](EmscriptenModule.md#utf8tostring) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:274 - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule._free`](EmscriptenModule.md#free) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:277 - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule._malloc`](EmscriptenModule.md#malloc) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:276 - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.cwrap`](EmscriptenModule.md#cwrap) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:278 - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.instantiateWasm`](EmscriptenModule.md#instantiatewasm) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:250 - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.lengthBytesUTF8`](EmscriptenModule.md#lengthbytesutf8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:275 - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.locateFile`](EmscriptenModule.md#locatefile) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:242 - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.monitorRunDependencies`](EmscriptenModule.md#monitorrundependencies) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:252 - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.stringToUTF8`](EmscriptenModule.md#stringtoutf8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:269 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/QuickJSAsyncFFI.md b/doc/quickjs-emscripten/interfaces/QuickJSAsyncFFI.md deleted file mode 100644 index 0d45618c4..000000000 --- a/doc/quickjs-emscripten/interfaces/QuickJSAsyncFFI.md +++ /dev/null @@ -1,1618 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSAsyncFFI - -# Interface: QuickJSAsyncFFI - -Low-level FFI bindings to QuickJS's Emscripten module. -See instead [QuickJSContext](../classes/QuickJSContext.md), the public Javascript interface exposed by this -library. - -## Contents - -- [Unstable](QuickJSAsyncFFI.md#unstable) -- [Properties](QuickJSAsyncFFI.md#properties) - - [DEBUG](QuickJSAsyncFFI.md#debug) - - [QTS\_ArgvGetJSValueConstPointer](QuickJSAsyncFFI.md#qts-argvgetjsvalueconstpointer) - - [QTS\_BuildIsAsyncify](QuickJSAsyncFFI.md#qts-buildisasyncify) - - [QTS\_BuildIsDebug](QuickJSAsyncFFI.md#qts-buildisdebug) - - [QTS\_BuildIsSanitizeLeak](QuickJSAsyncFFI.md#qts-buildissanitizeleak) - - [QTS\_Call](QuickJSAsyncFFI.md#qts-call) - - [QTS\_Call\_MaybeAsync](QuickJSAsyncFFI.md#qts-call-maybeasync) - - [QTS\_DefineProp](QuickJSAsyncFFI.md#qts-defineprop) - - [QTS\_Dump](QuickJSAsyncFFI.md#qts-dump) - - [QTS\_Dump\_MaybeAsync](QuickJSAsyncFFI.md#qts-dump-maybeasync) - - [QTS\_DupValuePointer](QuickJSAsyncFFI.md#qts-dupvaluepointer) - - [QTS\_Eval](QuickJSAsyncFFI.md#qts-eval) - - [QTS\_Eval\_MaybeAsync](QuickJSAsyncFFI.md#qts-eval-maybeasync) - - [QTS\_ExecutePendingJob](QuickJSAsyncFFI.md#qts-executependingjob) - - [QTS\_ExecutePendingJob\_MaybeAsync](QuickJSAsyncFFI.md#qts-executependingjob-maybeasync) - - [QTS\_FreeCString](QuickJSAsyncFFI.md#qts-freecstring) - - [QTS\_FreeContext](QuickJSAsyncFFI.md#qts-freecontext) - - [QTS\_FreeRuntime](QuickJSAsyncFFI.md#qts-freeruntime) - - [QTS\_FreeValuePointer](QuickJSAsyncFFI.md#qts-freevaluepointer) - - [QTS\_FreeValuePointerRuntime](QuickJSAsyncFFI.md#qts-freevaluepointerruntime) - - [QTS\_FreeVoidPointer](QuickJSAsyncFFI.md#qts-freevoidpointer) - - [QTS\_GetArrayBuffer](QuickJSAsyncFFI.md#qts-getarraybuffer) - - [QTS\_GetArrayBufferLength](QuickJSAsyncFFI.md#qts-getarraybufferlength) - - [QTS\_GetDebugLogEnabled](QuickJSAsyncFFI.md#qts-getdebuglogenabled) - - [QTS\_GetFalse](QuickJSAsyncFFI.md#qts-getfalse) - - [QTS\_GetFloat64](QuickJSAsyncFFI.md#qts-getfloat64) - - [QTS\_GetGlobalObject](QuickJSAsyncFFI.md#qts-getglobalobject) - - [QTS\_GetLength](QuickJSAsyncFFI.md#qts-getlength) - - [QTS\_GetModuleNamespace](QuickJSAsyncFFI.md#qts-getmodulenamespace) - - [QTS\_GetNull](QuickJSAsyncFFI.md#qts-getnull) - - [QTS\_GetOwnPropertyNames](QuickJSAsyncFFI.md#qts-getownpropertynames) - - [QTS\_GetOwnPropertyNames\_MaybeAsync](QuickJSAsyncFFI.md#qts-getownpropertynames-maybeasync) - - [QTS\_GetProp](QuickJSAsyncFFI.md#qts-getprop) - - [QTS\_GetPropNumber](QuickJSAsyncFFI.md#qts-getpropnumber) - - [QTS\_GetPropNumber\_MaybeAsync](QuickJSAsyncFFI.md#qts-getpropnumber-maybeasync) - - [QTS\_GetProp\_MaybeAsync](QuickJSAsyncFFI.md#qts-getprop-maybeasync) - - [QTS\_GetString](QuickJSAsyncFFI.md#qts-getstring) - - [QTS\_GetSymbolDescriptionOrKey](QuickJSAsyncFFI.md#qts-getsymboldescriptionorkey) - - [QTS\_GetSymbolDescriptionOrKey\_MaybeAsync](QuickJSAsyncFFI.md#qts-getsymboldescriptionorkey-maybeasync) - - [QTS\_GetTrue](QuickJSAsyncFFI.md#qts-gettrue) - - [QTS\_GetUndefined](QuickJSAsyncFFI.md#qts-getundefined) - - [QTS\_IsEqual](QuickJSAsyncFFI.md#qts-isequal) - - [QTS\_IsGlobalSymbol](QuickJSAsyncFFI.md#qts-isglobalsymbol) - - [QTS\_IsJobPending](QuickJSAsyncFFI.md#qts-isjobpending) - - [QTS\_NewArray](QuickJSAsyncFFI.md#qts-newarray) - - [QTS\_NewArrayBuffer](QuickJSAsyncFFI.md#qts-newarraybuffer) - - [QTS\_NewContext](QuickJSAsyncFFI.md#qts-newcontext) - - [QTS\_NewError](QuickJSAsyncFFI.md#qts-newerror) - - [QTS\_NewFloat64](QuickJSAsyncFFI.md#qts-newfloat64) - - [QTS\_NewFunction](QuickJSAsyncFFI.md#qts-newfunction) - - [QTS\_NewObject](QuickJSAsyncFFI.md#qts-newobject) - - [QTS\_NewObjectProto](QuickJSAsyncFFI.md#qts-newobjectproto) - - [QTS\_NewPromiseCapability](QuickJSAsyncFFI.md#qts-newpromisecapability) - - [QTS\_NewRuntime](QuickJSAsyncFFI.md#qts-newruntime) - - [QTS\_NewString](QuickJSAsyncFFI.md#qts-newstring) - - [QTS\_NewSymbol](QuickJSAsyncFFI.md#qts-newsymbol) - - [QTS\_PromiseResult](QuickJSAsyncFFI.md#qts-promiseresult) - - [QTS\_PromiseState](QuickJSAsyncFFI.md#qts-promisestate) - - [QTS\_RecoverableLeakCheck](QuickJSAsyncFFI.md#qts-recoverableleakcheck) - - [QTS\_ResolveException](QuickJSAsyncFFI.md#qts-resolveexception) - - [QTS\_RuntimeComputeMemoryUsage](QuickJSAsyncFFI.md#qts-runtimecomputememoryusage) - - [QTS\_RuntimeDisableInterruptHandler](QuickJSAsyncFFI.md#qts-runtimedisableinterrupthandler) - - [QTS\_RuntimeDisableModuleLoader](QuickJSAsyncFFI.md#qts-runtimedisablemoduleloader) - - [QTS\_RuntimeDumpMemoryUsage](QuickJSAsyncFFI.md#qts-runtimedumpmemoryusage) - - [QTS\_RuntimeEnableInterruptHandler](QuickJSAsyncFFI.md#qts-runtimeenableinterrupthandler) - - [QTS\_RuntimeEnableModuleLoader](QuickJSAsyncFFI.md#qts-runtimeenablemoduleloader) - - [QTS\_RuntimeSetMaxStackSize](QuickJSAsyncFFI.md#qts-runtimesetmaxstacksize) - - [QTS\_RuntimeSetMemoryLimit](QuickJSAsyncFFI.md#qts-runtimesetmemorylimit) - - [QTS\_SetDebugLogEnabled](QuickJSAsyncFFI.md#qts-setdebuglogenabled) - - [QTS\_SetProp](QuickJSAsyncFFI.md#qts-setprop) - - [QTS\_SetProp\_MaybeAsync](QuickJSAsyncFFI.md#qts-setprop-maybeasync) - - [QTS\_TestStringArg](QuickJSAsyncFFI.md#qts-teststringarg) - - [QTS\_Throw](QuickJSAsyncFFI.md#qts-throw) - - [QTS\_Typeof](QuickJSAsyncFFI.md#qts-typeof) - - [QTS\_bjson\_decode](QuickJSAsyncFFI.md#qts-bjson-decode) - - [QTS\_bjson\_encode](QuickJSAsyncFFI.md#qts-bjson-encode) - -## Unstable - -The FFI interface is considered private and may change. - -## Properties - -### DEBUG - -> **`readonly`** **DEBUG**: `boolean` - -Set at compile time. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:424 - -*** - -### QTS\_ArgvGetJSValueConstPointer - -> **QTS\_ArgvGetJSValueConstPointer**: (`argv`, `index`) => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Parameters - -• **argv**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **index**: `number` - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:493 - -*** - -### QTS\_BuildIsAsyncify - -> **QTS\_BuildIsAsyncify**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:491 - -*** - -### QTS\_BuildIsDebug - -> **QTS\_BuildIsDebug**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:490 - -*** - -### QTS\_BuildIsSanitizeLeak - -> **QTS\_BuildIsSanitizeLeak**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:431 - -*** - -### QTS\_Call - -> **QTS\_Call**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **this\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:472 - -*** - -### QTS\_Call\_MaybeAsync - -> **QTS\_Call\_MaybeAsync**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **this\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:473 - -*** - -### QTS\_DefineProp - -> **QTS\_DefineProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`, `get`, `set`, `configurable`, `enumerable`, `has_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **get**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **set**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **configurable**: `boolean` - -• **enumerable**: `boolean` - -• **has\_value**: `boolean` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:469 - -*** - -### QTS\_Dump - -> **QTS\_Dump**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:475 - -*** - -### QTS\_Dump\_MaybeAsync - -> **QTS\_Dump\_MaybeAsync**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:476 - -*** - -### QTS\_DupValuePointer - -> **QTS\_DupValuePointer**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:445 - -*** - -### QTS\_Eval - -> **QTS\_Eval**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:477 - -*** - -### QTS\_Eval\_MaybeAsync - -> **QTS\_Eval\_MaybeAsync**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:478 - -*** - -### QTS\_ExecutePendingJob - -> **QTS\_ExecutePendingJob**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:461 - -*** - -### QTS\_ExecutePendingJob\_MaybeAsync - -> **QTS\_ExecutePendingJob\_MaybeAsync**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:462 - -*** - -### QTS\_FreeCString - -> **QTS\_FreeCString**: (`ctx`, `str`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **str**: [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:444 - -*** - -### QTS\_FreeContext - -> **QTS\_FreeContext**: (`ctx`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:440 - -*** - -### QTS\_FreeRuntime - -> **QTS\_FreeRuntime**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:438 - -*** - -### QTS\_FreeValuePointer - -> **QTS\_FreeValuePointer**: (`ctx`, `value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:441 - -*** - -### QTS\_FreeValuePointerRuntime - -> **QTS\_FreeValuePointerRuntime**: (`rt`, `value`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:442 - -*** - -### QTS\_FreeVoidPointer - -> **QTS\_FreeVoidPointer**: (`ctx`, `ptr`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **ptr**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:443 - -*** - -### QTS\_GetArrayBuffer - -> **QTS\_GetArrayBuffer**: (`ctx`, `data`) => [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:454 - -*** - -### QTS\_GetArrayBufferLength - -> **QTS\_GetArrayBufferLength**: (`ctx`, `data`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:455 - -*** - -### QTS\_GetDebugLogEnabled - -> **QTS\_GetDebugLogEnabled**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:488 - -*** - -### QTS\_GetFalse - -> **QTS\_GetFalse**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:435 - -*** - -### QTS\_GetFloat64 - -> **QTS\_GetFloat64**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:451 - -*** - -### QTS\_GetGlobalObject - -> **QTS\_GetGlobalObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:483 - -*** - -### QTS\_GetLength - -> **QTS\_GetLength**: (`ctx`, `out_len`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:481 - -*** - -### QTS\_GetModuleNamespace - -> **QTS\_GetModuleNamespace**: (`ctx`, `module_func_obj`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **module\_func\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:479 - -*** - -### QTS\_GetNull - -> **QTS\_GetNull**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:434 - -*** - -### QTS\_GetOwnPropertyNames - -> **QTS\_GetOwnPropertyNames**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:470 - -*** - -### QTS\_GetOwnPropertyNames\_MaybeAsync - -> **QTS\_GetOwnPropertyNames\_MaybeAsync**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:471 - -*** - -### QTS\_GetProp - -> **QTS\_GetProp**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:463 - -*** - -### QTS\_GetPropNumber - -> **QTS\_GetPropNumber**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:465 - -*** - -### QTS\_GetPropNumber\_MaybeAsync - -> **QTS\_GetPropNumber\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:466 - -*** - -### QTS\_GetProp\_MaybeAsync - -> **QTS\_GetProp\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) \| `Promise`\<[`JSValuePointer`](../exports.md#jsvaluepointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:464 - -*** - -### QTS\_GetString - -> **QTS\_GetString**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:453 - -*** - -### QTS\_GetSymbolDescriptionOrKey - -> **QTS\_GetSymbolDescriptionOrKey**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:457 - -*** - -### QTS\_GetSymbolDescriptionOrKey\_MaybeAsync - -> **QTS\_GetSymbolDescriptionOrKey\_MaybeAsync**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) \| `Promise`\<[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer)\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:458 - -*** - -### QTS\_GetTrue - -> **QTS\_GetTrue**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:436 - -*** - -### QTS\_GetUndefined - -> **QTS\_GetUndefined**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:433 - -*** - -### QTS\_IsEqual - -> **QTS\_IsEqual**: (`ctx`, `a`, `b`, `op`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **a**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **b**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **op**: [`IsEqualOp`](../exports.md#isequalop) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:482 - -*** - -### QTS\_IsGlobalSymbol - -> **QTS\_IsGlobalSymbol**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:459 - -*** - -### QTS\_IsJobPending - -> **QTS\_IsJobPending**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:460 - -*** - -### QTS\_NewArray - -> **QTS\_NewArray**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:448 - -*** - -### QTS\_NewArrayBuffer - -> **QTS\_NewArrayBuffer**: (`ctx`, `buffer`, `length`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **buffer**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -• **length**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:449 - -*** - -### QTS\_NewContext - -> **QTS\_NewContext**: (`rt`, `intrinsics`) => [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **intrinsics**: [`IntrinsicsFlags`](../exports.md#intrinsicsflags) - -#### Returns - -[`JSContextPointer`](../exports.md#jscontextpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:439 - -*** - -### QTS\_NewError - -> **QTS\_NewError**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:426 - -*** - -### QTS\_NewFloat64 - -> **QTS\_NewFloat64**: (`ctx`, `num`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **num**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:450 - -*** - -### QTS\_NewFunction - -> **QTS\_NewFunction**: (`ctx`, `func_id`, `name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_id**: `number` - -• **name**: `string` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:492 - -*** - -### QTS\_NewObject - -> **QTS\_NewObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:446 - -*** - -### QTS\_NewObjectProto - -> **QTS\_NewObjectProto**: (`ctx`, `proto`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **proto**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:447 - -*** - -### QTS\_NewPromiseCapability - -> **QTS\_NewPromiseCapability**: (`ctx`, `resolve_funcs_out`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **resolve\_funcs\_out**: [`JSValuePointerPointer`](../exports.md#jsvaluepointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:484 - -*** - -### QTS\_NewRuntime - -> **QTS\_NewRuntime**: () => [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:437 - -*** - -### QTS\_NewString - -> **QTS\_NewString**: (`ctx`, `string`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **string**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:452 - -*** - -### QTS\_NewSymbol - -> **QTS\_NewSymbol**: (`ctx`, `description`, `isGlobal`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **description**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **isGlobal**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:456 - -*** - -### QTS\_PromiseResult - -> **QTS\_PromiseResult**: (`ctx`, `promise`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:486 - -*** - -### QTS\_PromiseState - -> **QTS\_PromiseState**: (`ctx`, `promise`) => [`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:485 - -*** - -### QTS\_RecoverableLeakCheck - -> **QTS\_RecoverableLeakCheck**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:430 - -*** - -### QTS\_ResolveException - -> **QTS\_ResolveException**: (`ctx`, `maybe_exception`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **maybe\_exception**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:474 - -*** - -### QTS\_RuntimeComputeMemoryUsage - -> **QTS\_RuntimeComputeMemoryUsage**: (`rt`, `ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:428 - -*** - -### QTS\_RuntimeDisableInterruptHandler - -> **QTS\_RuntimeDisableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:495 - -*** - -### QTS\_RuntimeDisableModuleLoader - -> **QTS\_RuntimeDisableModuleLoader**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:497 - -*** - -### QTS\_RuntimeDumpMemoryUsage - -> **QTS\_RuntimeDumpMemoryUsage**: (`rt`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:429 - -*** - -### QTS\_RuntimeEnableInterruptHandler - -> **QTS\_RuntimeEnableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:494 - -*** - -### QTS\_RuntimeEnableModuleLoader - -> **QTS\_RuntimeEnableModuleLoader**: (`rt`, `use_custom_normalize`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **use\_custom\_normalize**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:496 - -*** - -### QTS\_RuntimeSetMaxStackSize - -> **QTS\_RuntimeSetMaxStackSize**: (`rt`, `stack_size`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **stack\_size**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:432 - -*** - -### QTS\_RuntimeSetMemoryLimit - -> **QTS\_RuntimeSetMemoryLimit**: (`rt`, `limit`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **limit**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:427 - -*** - -### QTS\_SetDebugLogEnabled - -> **QTS\_SetDebugLogEnabled**: (`rt`, `is_enabled`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **is\_enabled**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:489 - -*** - -### QTS\_SetProp - -> **QTS\_SetProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:467 - -*** - -### QTS\_SetProp\_MaybeAsync - -> **QTS\_SetProp\_MaybeAsync**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` \| `Promise`\<`void`\> - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` \| `Promise`\<`void`\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:468 - -*** - -### QTS\_TestStringArg - -> **QTS\_TestStringArg**: (`string`) => `void` - -#### Parameters - -• **string**: `string` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:487 - -*** - -### QTS\_Throw - -> **QTS\_Throw**: (`ctx`, `error`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **error**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:425 - -*** - -### QTS\_Typeof - -> **QTS\_Typeof**: (`ctx`, `value`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:480 - -*** - -### QTS\_bjson\_decode - -> **QTS\_bjson\_decode**: (`ctx`, `data`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:499 - -*** - -### QTS\_bjson\_encode - -> **QTS\_bjson\_encode**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:498 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/QuickJSAsyncVariant.md b/doc/quickjs-emscripten/interfaces/QuickJSAsyncVariant.md deleted file mode 100644 index 20da37113..000000000 --- a/doc/quickjs-emscripten/interfaces/QuickJSAsyncVariant.md +++ /dev/null @@ -1,67 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSAsyncVariant - -# Interface: QuickJSAsyncVariant - -An ASYNCIFY build variant. - -quickjs-emscripten provides multiple build variants of the core WebAssembly -module. These variants are each intended for a different use case. - -To create an instance of the library using a specific build variant, pass the -build variant to [newQuickJSWASMModule](../exports.md#newquickjswasmmodule) or [newQuickJSAsyncWASMModule](../exports.md#newquickjsasyncwasmmodule). - -## Contents - -- [Properties](QuickJSAsyncVariant.md#properties) - - [importFFI](QuickJSAsyncVariant.md#importffi) - - [importModuleLoader](QuickJSAsyncVariant.md#importmoduleloader) - - [type](QuickJSAsyncVariant.md#type) - -## Properties - -### importFFI - -> **`readonly`** **importFFI**: () => `Promise`\<(`module`) => [`QuickJSAsyncFFI`](QuickJSAsyncFFI.md)\> - -#### Returns - -`Promise`\<(`module`) => [`QuickJSAsyncFFI`](QuickJSAsyncFFI.md)\> - -> -> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:534 - -*** - -### importModuleLoader - -> **`readonly`** **importModuleLoader**: () => `Promise`\<`EmscriptenImport`\<[`QuickJSAsyncEmscriptenModule`](QuickJSAsyncEmscriptenModule.md)\>\> - -#### Returns - -`Promise`\<`EmscriptenImport`\<[`QuickJSAsyncEmscriptenModule`](QuickJSAsyncEmscriptenModule.md)\>\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:535 - -*** - -### type - -> **`readonly`** **type**: `"async"` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:533 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/QuickJSEmscriptenModule.md b/doc/quickjs-emscripten/interfaces/QuickJSEmscriptenModule.md deleted file mode 100644 index 8220ecd3f..000000000 --- a/doc/quickjs-emscripten/interfaces/QuickJSEmscriptenModule.md +++ /dev/null @@ -1,507 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSEmscriptenModule - -# Interface: QuickJSEmscriptenModule - -Typings for the features we use to interface with our Emscripten build of -QuickJS. - -## Contents - -- [Extends](QuickJSEmscriptenModule.md#extends) -- [Properties](QuickJSEmscriptenModule.md#properties) - - [FAST\_MEMORY](QuickJSEmscriptenModule.md#fast-memory) - - [HEAP16](QuickJSEmscriptenModule.md#heap16) - - [HEAP32](QuickJSEmscriptenModule.md#heap32) - - [HEAP8](QuickJSEmscriptenModule.md#heap8) - - [HEAPF32](QuickJSEmscriptenModule.md#heapf32) - - [HEAPF64](QuickJSEmscriptenModule.md#heapf64) - - [HEAPU16](QuickJSEmscriptenModule.md#heapu16) - - [HEAPU32](QuickJSEmscriptenModule.md#heapu32) - - [HEAPU8](QuickJSEmscriptenModule.md#heapu8) - - [TOTAL\_MEMORY](QuickJSEmscriptenModule.md#total-memory) - - [TOTAL\_STACK](QuickJSEmscriptenModule.md#total-stack) - - [callbacks](QuickJSEmscriptenModule.md#callbacks) - - [type](QuickJSEmscriptenModule.md#type) - - [wasmBinary?](QuickJSEmscriptenModule.md#wasmbinary) - - [wasmMemory?](QuickJSEmscriptenModule.md#wasmmemory) -- [Methods](QuickJSEmscriptenModule.md#methods) - - [UTF8ToString()](QuickJSEmscriptenModule.md#utf8tostring) - - [\_free()](QuickJSEmscriptenModule.md#free) - - [\_malloc()](QuickJSEmscriptenModule.md#malloc) - - [cwrap()](QuickJSEmscriptenModule.md#cwrap) - - [instantiateWasm()?](QuickJSEmscriptenModule.md#instantiatewasm) - - [lengthBytesUTF8()](QuickJSEmscriptenModule.md#lengthbytesutf8) - - [locateFile()?](QuickJSEmscriptenModule.md#locatefile) - - [monitorRunDependencies()?](QuickJSEmscriptenModule.md#monitorrundependencies) - - [stringToUTF8()](QuickJSEmscriptenModule.md#stringtoutf8) - -## Extends - -- [`EmscriptenModule`](EmscriptenModule.md) - -## Properties - -### FAST\_MEMORY - -> **FAST\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.FAST_MEMORY`](EmscriptenModule.md#fast-memory) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:289 - -*** - -### HEAP16 - -> **HEAP16**: `Int16Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAP16`](EmscriptenModule.md#heap16) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:280 - -*** - -### HEAP32 - -> **HEAP32**: `Int32Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAP32`](EmscriptenModule.md#heap32) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:281 - -*** - -### HEAP8 - -> **HEAP8**: `Int8Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAP8`](EmscriptenModule.md#heap8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:279 - -*** - -### HEAPF32 - -> **HEAPF32**: `Float32Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPF32`](EmscriptenModule.md#heapf32) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:285 - -*** - -### HEAPF64 - -> **HEAPF64**: `Float64Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPF64`](EmscriptenModule.md#heapf64) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:286 - -*** - -### HEAPU16 - -> **HEAPU16**: `Uint16Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPU16`](EmscriptenModule.md#heapu16) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:283 - -*** - -### HEAPU32 - -> **HEAPU32**: `Uint32Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPU32`](EmscriptenModule.md#heapu32) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:284 - -*** - -### HEAPU8 - -> **HEAPU8**: `Uint8Array` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.HEAPU8`](EmscriptenModule.md#heapu8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:282 - -*** - -### TOTAL\_MEMORY - -> **TOTAL\_MEMORY**: `number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.TOTAL_MEMORY`](EmscriptenModule.md#total-memory) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:288 - -*** - -### TOTAL\_STACK - -> **TOTAL\_STACK**: `number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.TOTAL_STACK`](EmscriptenModule.md#total-stack) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:287 - -*** - -### callbacks - -> **callbacks**: `EmscriptenModuleCallbacks` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:325 - -*** - -### type - -> **type**: `"sync"` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:324 - -*** - -### wasmBinary? - -> **wasmBinary**?: `ArrayBuffer` - -Compile this to WebAssembly.Module - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.wasmBinary`](EmscriptenModule.md#wasmbinary) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:246 - -*** - -### wasmMemory? - -> **wasmMemory**?: `Memory` - -If provided, use this WebAssembly.Memory instead of an automatically created one. - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.wasmMemory`](EmscriptenModule.md#wasmmemory) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:248 - -## Methods - -### UTF8ToString() - -> **UTF8ToString**(`ptr`, `maxBytesToRead`?): `string` - -HeapChar to JS string. -https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - -#### Parameters - -• **ptr**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.UTF8ToString`](EmscriptenModule.md#utf8tostring) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:274 - -*** - -### \_free() - -> **\_free**(`ptr`): `void` - -#### Parameters - -• **ptr**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule._free`](EmscriptenModule.md#free) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:277 - -*** - -### \_malloc() - -> **\_malloc**(`size`): `number` - -#### Parameters - -• **size**: `number` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule._malloc`](EmscriptenModule.md#malloc) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:276 - -*** - -### cwrap() - -> **cwrap**(`ident`, `returnType`, `argTypes`, `opts`?): (...`args`) => `any` - -#### Parameters - -• **ident**: `string` - -• **returnType**: `null` \| `ValueType` - -• **argTypes**: `ValueType`[] - -• **opts?**: `CCallOpts` - -#### Returns - -`Function` - -> ##### Parameters -> -> • ...**args**: `any`[] -> -> ##### Returns -> -> `any` -> - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.cwrap`](EmscriptenModule.md#cwrap) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:278 - -*** - -### instantiateWasm()? - -> **`optional`** **instantiateWasm**(`imports`, `onSuccess`): `Exports` \| `Promise`\<`Exports`\> - -Create an instance of the WASM module, call onSuccess(instance), then return instance.exports - -#### Parameters - -• **imports**: `Imports` - -• **onSuccess**: (`instance`) => `void` - -#### Returns - -`Exports` \| `Promise`\<`Exports`\> - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.instantiateWasm`](EmscriptenModule.md#instantiatewasm) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:250 - -*** - -### lengthBytesUTF8() - -> **lengthBytesUTF8**(`str`): `number` - -#### Parameters - -• **str**: `string` - -#### Returns - -`number` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.lengthBytesUTF8`](EmscriptenModule.md#lengthbytesutf8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:275 - -*** - -### locateFile()? - -> **`optional`** **locateFile**(`fileName`, `prefix`): `string` - -If set, this method will be called when the runtime needs to load a file, -such as a .wasm WebAssembly file, .mem memory init file, or a file -generated by the file packager. - -The function receives two parameters: - -- `fileName`, the relative path to the file as configured in build -process, eg `"emscripten-module.wasm"`. -- `prefix` (path to the main JavaScript file’s directory). This may be `''` -(empty string) in some cases if the Emscripten Javascript code can't locate -itself. Try logging it in your environment. - -It should return the actual URI or path to the requested file. - -This lets you host file packages on a different location than the directory -of the JavaScript file (which is the default expectation), for example if -you want to host them on a CDN. - -#### Parameters - -• **fileName**: `string` - -• **prefix**: `string` - -Often `''` (empty string) - -#### Returns - -`string` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.locateFile`](EmscriptenModule.md#locatefile) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:242 - -*** - -### monitorRunDependencies()? - -> **`optional`** **monitorRunDependencies**(`left`): `void` - -Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. - -#### Parameters - -• **left**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.monitorRunDependencies`](EmscriptenModule.md#monitorrundependencies) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:252 - -*** - -### stringToUTF8() - -> **stringToUTF8**(`str`, `outPtr`, `maxBytesToRead`?): `void` - -Write JS `str` to HeapChar pointer. -https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - -#### Parameters - -• **str**: `string` - -• **outPtr**: [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -• **maxBytesToRead?**: `number` - -#### Returns - -`void` - -#### Inherited from - -[`quickjs-emscripten.EmscriptenModule.stringToUTF8`](EmscriptenModule.md#stringtoutf8) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:269 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/QuickJSFFI.md b/doc/quickjs-emscripten/interfaces/QuickJSFFI.md deleted file mode 100644 index 0239d3df2..000000000 --- a/doc/quickjs-emscripten/interfaces/QuickJSFFI.md +++ /dev/null @@ -1,1399 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSFFI - -# Interface: QuickJSFFI - -Low-level FFI bindings to QuickJS's Emscripten module. -See instead [QuickJSContext](../classes/QuickJSContext.md), the public Javascript interface exposed by this -library. - -## Contents - -- [Unstable](QuickJSFFI.md#unstable) -- [Properties](QuickJSFFI.md#properties) - - [DEBUG](QuickJSFFI.md#debug) - - [QTS\_ArgvGetJSValueConstPointer](QuickJSFFI.md#qts-argvgetjsvalueconstpointer) - - [QTS\_BuildIsAsyncify](QuickJSFFI.md#qts-buildisasyncify) - - [QTS\_BuildIsDebug](QuickJSFFI.md#qts-buildisdebug) - - [QTS\_BuildIsSanitizeLeak](QuickJSFFI.md#qts-buildissanitizeleak) - - [QTS\_Call](QuickJSFFI.md#qts-call) - - [QTS\_DefineProp](QuickJSFFI.md#qts-defineprop) - - [QTS\_Dump](QuickJSFFI.md#qts-dump) - - [QTS\_DupValuePointer](QuickJSFFI.md#qts-dupvaluepointer) - - [QTS\_Eval](QuickJSFFI.md#qts-eval) - - [QTS\_ExecutePendingJob](QuickJSFFI.md#qts-executependingjob) - - [QTS\_FreeCString](QuickJSFFI.md#qts-freecstring) - - [QTS\_FreeContext](QuickJSFFI.md#qts-freecontext) - - [QTS\_FreeRuntime](QuickJSFFI.md#qts-freeruntime) - - [QTS\_FreeValuePointer](QuickJSFFI.md#qts-freevaluepointer) - - [QTS\_FreeValuePointerRuntime](QuickJSFFI.md#qts-freevaluepointerruntime) - - [QTS\_FreeVoidPointer](QuickJSFFI.md#qts-freevoidpointer) - - [QTS\_GetArrayBuffer](QuickJSFFI.md#qts-getarraybuffer) - - [QTS\_GetArrayBufferLength](QuickJSFFI.md#qts-getarraybufferlength) - - [QTS\_GetDebugLogEnabled](QuickJSFFI.md#qts-getdebuglogenabled) - - [QTS\_GetFalse](QuickJSFFI.md#qts-getfalse) - - [QTS\_GetFloat64](QuickJSFFI.md#qts-getfloat64) - - [QTS\_GetGlobalObject](QuickJSFFI.md#qts-getglobalobject) - - [QTS\_GetLength](QuickJSFFI.md#qts-getlength) - - [QTS\_GetModuleNamespace](QuickJSFFI.md#qts-getmodulenamespace) - - [QTS\_GetNull](QuickJSFFI.md#qts-getnull) - - [QTS\_GetOwnPropertyNames](QuickJSFFI.md#qts-getownpropertynames) - - [QTS\_GetProp](QuickJSFFI.md#qts-getprop) - - [QTS\_GetPropNumber](QuickJSFFI.md#qts-getpropnumber) - - [QTS\_GetString](QuickJSFFI.md#qts-getstring) - - [QTS\_GetSymbolDescriptionOrKey](QuickJSFFI.md#qts-getsymboldescriptionorkey) - - [QTS\_GetTrue](QuickJSFFI.md#qts-gettrue) - - [QTS\_GetUndefined](QuickJSFFI.md#qts-getundefined) - - [QTS\_IsEqual](QuickJSFFI.md#qts-isequal) - - [QTS\_IsGlobalSymbol](QuickJSFFI.md#qts-isglobalsymbol) - - [QTS\_IsJobPending](QuickJSFFI.md#qts-isjobpending) - - [QTS\_NewArray](QuickJSFFI.md#qts-newarray) - - [QTS\_NewArrayBuffer](QuickJSFFI.md#qts-newarraybuffer) - - [QTS\_NewContext](QuickJSFFI.md#qts-newcontext) - - [QTS\_NewError](QuickJSFFI.md#qts-newerror) - - [QTS\_NewFloat64](QuickJSFFI.md#qts-newfloat64) - - [QTS\_NewFunction](QuickJSFFI.md#qts-newfunction) - - [QTS\_NewObject](QuickJSFFI.md#qts-newobject) - - [QTS\_NewObjectProto](QuickJSFFI.md#qts-newobjectproto) - - [QTS\_NewPromiseCapability](QuickJSFFI.md#qts-newpromisecapability) - - [QTS\_NewRuntime](QuickJSFFI.md#qts-newruntime) - - [QTS\_NewString](QuickJSFFI.md#qts-newstring) - - [QTS\_NewSymbol](QuickJSFFI.md#qts-newsymbol) - - [QTS\_PromiseResult](QuickJSFFI.md#qts-promiseresult) - - [QTS\_PromiseState](QuickJSFFI.md#qts-promisestate) - - [QTS\_RecoverableLeakCheck](QuickJSFFI.md#qts-recoverableleakcheck) - - [QTS\_ResolveException](QuickJSFFI.md#qts-resolveexception) - - [QTS\_RuntimeComputeMemoryUsage](QuickJSFFI.md#qts-runtimecomputememoryusage) - - [QTS\_RuntimeDisableInterruptHandler](QuickJSFFI.md#qts-runtimedisableinterrupthandler) - - [QTS\_RuntimeDisableModuleLoader](QuickJSFFI.md#qts-runtimedisablemoduleloader) - - [QTS\_RuntimeDumpMemoryUsage](QuickJSFFI.md#qts-runtimedumpmemoryusage) - - [QTS\_RuntimeEnableInterruptHandler](QuickJSFFI.md#qts-runtimeenableinterrupthandler) - - [QTS\_RuntimeEnableModuleLoader](QuickJSFFI.md#qts-runtimeenablemoduleloader) - - [QTS\_RuntimeSetMaxStackSize](QuickJSFFI.md#qts-runtimesetmaxstacksize) - - [QTS\_RuntimeSetMemoryLimit](QuickJSFFI.md#qts-runtimesetmemorylimit) - - [QTS\_SetDebugLogEnabled](QuickJSFFI.md#qts-setdebuglogenabled) - - [QTS\_SetProp](QuickJSFFI.md#qts-setprop) - - [QTS\_TestStringArg](QuickJSFFI.md#qts-teststringarg) - - [QTS\_Throw](QuickJSFFI.md#qts-throw) - - [QTS\_Typeof](QuickJSFFI.md#qts-typeof) - - [QTS\_bjson\_decode](QuickJSFFI.md#qts-bjson-decode) - - [QTS\_bjson\_encode](QuickJSFFI.md#qts-bjson-encode) - -## Unstable - -The FFI interface is considered private and may change. - -## Properties - -### DEBUG - -> **`readonly`** **DEBUG**: `boolean` - -Set at compile time. - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:346 - -*** - -### QTS\_ArgvGetJSValueConstPointer - -> **QTS\_ArgvGetJSValueConstPointer**: (`argv`, `index`) => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Parameters - -• **argv**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **index**: `number` - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:406 - -*** - -### QTS\_BuildIsAsyncify - -> **QTS\_BuildIsAsyncify**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:404 - -*** - -### QTS\_BuildIsDebug - -> **QTS\_BuildIsDebug**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:403 - -*** - -### QTS\_BuildIsSanitizeLeak - -> **QTS\_BuildIsSanitizeLeak**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:353 - -*** - -### QTS\_Call - -> **QTS\_Call**: (`ctx`, `func_obj`, `this_obj`, `argc`, `argv_ptrs`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **this\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **argc**: `number` - -• **argv\_ptrs**: [`JSValueConstPointerPointer`](../exports.md#jsvalueconstpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:388 - -*** - -### QTS\_DefineProp - -> **QTS\_DefineProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`, `get`, `set`, `configurable`, `enumerable`, `has_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **get**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **set**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **configurable**: `boolean` - -• **enumerable**: `boolean` - -• **has\_value**: `boolean` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:386 - -*** - -### QTS\_Dump - -> **QTS\_Dump**: (`ctx`, `obj`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:390 - -*** - -### QTS\_DupValuePointer - -> **QTS\_DupValuePointer**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:367 - -*** - -### QTS\_Eval - -> **QTS\_Eval**: (`ctx`, `js_code`, `js_code_length`, `filename`, `detectModule`, `evalFlags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **js\_code**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **js\_code\_length**: `number` - -• **filename**: `string` - -• **detectModule**: `EvalDetectModule` - -• **evalFlags**: [`EvalFlags`](../exports.md#evalflags) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:391 - -*** - -### QTS\_ExecutePendingJob - -> **QTS\_ExecutePendingJob**: (`rt`, `maxJobsToExecute`, `lastJobContext`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **maxJobsToExecute**: `number` - -• **lastJobContext**: [`JSContextPointerPointer`](../exports.md#jscontextpointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:382 - -*** - -### QTS\_FreeCString - -> **QTS\_FreeCString**: (`ctx`, `str`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **str**: [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:366 - -*** - -### QTS\_FreeContext - -> **QTS\_FreeContext**: (`ctx`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:362 - -*** - -### QTS\_FreeRuntime - -> **QTS\_FreeRuntime**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:360 - -*** - -### QTS\_FreeValuePointer - -> **QTS\_FreeValuePointer**: (`ctx`, `value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:363 - -*** - -### QTS\_FreeValuePointerRuntime - -> **QTS\_FreeValuePointerRuntime**: (`rt`, `value`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **value**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:364 - -*** - -### QTS\_FreeVoidPointer - -> **QTS\_FreeVoidPointer**: (`ctx`, `ptr`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **ptr**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:365 - -*** - -### QTS\_GetArrayBuffer - -> **QTS\_GetArrayBuffer**: (`ctx`, `data`) => [`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSVoidPointer`](../exports.md#jsvoidpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:376 - -*** - -### QTS\_GetArrayBufferLength - -> **QTS\_GetArrayBufferLength**: (`ctx`, `data`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:377 - -*** - -### QTS\_GetDebugLogEnabled - -> **QTS\_GetDebugLogEnabled**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:401 - -*** - -### QTS\_GetFalse - -> **QTS\_GetFalse**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:357 - -*** - -### QTS\_GetFloat64 - -> **QTS\_GetFloat64**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:373 - -*** - -### QTS\_GetGlobalObject - -> **QTS\_GetGlobalObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:396 - -*** - -### QTS\_GetLength - -> **QTS\_GetLength**: (`ctx`, `out_len`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:394 - -*** - -### QTS\_GetModuleNamespace - -> **QTS\_GetModuleNamespace**: (`ctx`, `module_func_obj`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **module\_func\_obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:392 - -*** - -### QTS\_GetNull - -> **QTS\_GetNull**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:356 - -*** - -### QTS\_GetOwnPropertyNames - -> **QTS\_GetOwnPropertyNames**: (`ctx`, `out_ptrs`, `out_len`, `obj`, `flags`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **out\_ptrs**: [`JSValuePointerPointerPointer`](../exports.md#jsvaluepointerpointerpointer) - -• **out\_len**: [`UInt32Pointer`](../exports.md#uint32pointer) - -• **obj**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **flags**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:387 - -*** - -### QTS\_GetProp - -> **QTS\_GetProp**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:383 - -*** - -### QTS\_GetPropNumber - -> **QTS\_GetPropNumber**: (`ctx`, `this_val`, `prop_name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:384 - -*** - -### QTS\_GetString - -> **QTS\_GetString**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:375 - -*** - -### QTS\_GetSymbolDescriptionOrKey - -> **QTS\_GetSymbolDescriptionOrKey**: (`ctx`, `value`) => [`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSBorrowedCharPointer`](../exports.md#jsborrowedcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:379 - -*** - -### QTS\_GetTrue - -> **QTS\_GetTrue**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:358 - -*** - -### QTS\_GetUndefined - -> **QTS\_GetUndefined**: () => [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Returns - -[`JSValueConstPointer`](../exports.md#jsvalueconstpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:355 - -*** - -### QTS\_IsEqual - -> **QTS\_IsEqual**: (`ctx`, `a`, `b`, `op`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **a**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **b**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **op**: [`IsEqualOp`](../exports.md#isequalop) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:395 - -*** - -### QTS\_IsGlobalSymbol - -> **QTS\_IsGlobalSymbol**: (`ctx`, `value`) => `number` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:380 - -*** - -### QTS\_IsJobPending - -> **QTS\_IsJobPending**: (`rt`) => `number` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:381 - -*** - -### QTS\_NewArray - -> **QTS\_NewArray**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:370 - -*** - -### QTS\_NewArrayBuffer - -> **QTS\_NewArrayBuffer**: (`ctx`, `buffer`, `length`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **buffer**: [`JSVoidPointer`](../exports.md#jsvoidpointer) - -• **length**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:371 - -*** - -### QTS\_NewContext - -> **QTS\_NewContext**: (`rt`, `intrinsics`) => [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **intrinsics**: [`IntrinsicsFlags`](../exports.md#intrinsicsflags) - -#### Returns - -[`JSContextPointer`](../exports.md#jscontextpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:361 - -*** - -### QTS\_NewError - -> **QTS\_NewError**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:348 - -*** - -### QTS\_NewFloat64 - -> **QTS\_NewFloat64**: (`ctx`, `num`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **num**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:372 - -*** - -### QTS\_NewFunction - -> **QTS\_NewFunction**: (`ctx`, `func_id`, `name`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **func\_id**: `number` - -• **name**: `string` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:405 - -*** - -### QTS\_NewObject - -> **QTS\_NewObject**: (`ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:368 - -*** - -### QTS\_NewObjectProto - -> **QTS\_NewObjectProto**: (`ctx`, `proto`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **proto**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:369 - -*** - -### QTS\_NewPromiseCapability - -> **QTS\_NewPromiseCapability**: (`ctx`, `resolve_funcs_out`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **resolve\_funcs\_out**: [`JSValuePointerPointer`](../exports.md#jsvaluepointerpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:397 - -*** - -### QTS\_NewRuntime - -> **QTS\_NewRuntime**: () => [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:359 - -*** - -### QTS\_NewString - -> **QTS\_NewString**: (`ctx`, `string`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **string**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:374 - -*** - -### QTS\_NewSymbol - -> **QTS\_NewSymbol**: (`ctx`, `description`, `isGlobal`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **description**: [`BorrowedHeapCharPointer`](../exports.md#borrowedheapcharpointer) - -• **isGlobal**: `number` - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:378 - -*** - -### QTS\_PromiseResult - -> **QTS\_PromiseResult**: (`ctx`, `promise`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:399 - -*** - -### QTS\_PromiseState - -> **QTS\_PromiseState**: (`ctx`, `promise`) => [`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **promise**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSPromiseStateEnum`](../exports.md#jspromisestateenum-1) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:398 - -*** - -### QTS\_RecoverableLeakCheck - -> **QTS\_RecoverableLeakCheck**: () => `number` - -#### Returns - -`number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:352 - -*** - -### QTS\_ResolveException - -> **QTS\_ResolveException**: (`ctx`, `maybe_exception`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **maybe\_exception**: [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:389 - -*** - -### QTS\_RuntimeComputeMemoryUsage - -> **QTS\_RuntimeComputeMemoryUsage**: (`rt`, `ctx`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:350 - -*** - -### QTS\_RuntimeDisableInterruptHandler - -> **QTS\_RuntimeDisableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:408 - -*** - -### QTS\_RuntimeDisableModuleLoader - -> **QTS\_RuntimeDisableModuleLoader**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:410 - -*** - -### QTS\_RuntimeDumpMemoryUsage - -> **QTS\_RuntimeDumpMemoryUsage**: (`rt`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:351 - -*** - -### QTS\_RuntimeEnableInterruptHandler - -> **QTS\_RuntimeEnableInterruptHandler**: (`rt`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:407 - -*** - -### QTS\_RuntimeEnableModuleLoader - -> **QTS\_RuntimeEnableModuleLoader**: (`rt`, `use_custom_normalize`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **use\_custom\_normalize**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:409 - -*** - -### QTS\_RuntimeSetMaxStackSize - -> **QTS\_RuntimeSetMaxStackSize**: (`rt`, `stack_size`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **stack\_size**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:354 - -*** - -### QTS\_RuntimeSetMemoryLimit - -> **QTS\_RuntimeSetMemoryLimit**: (`rt`, `limit`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **limit**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:349 - -*** - -### QTS\_SetDebugLogEnabled - -> **QTS\_SetDebugLogEnabled**: (`rt`, `is_enabled`) => `void` - -#### Parameters - -• **rt**: [`JSRuntimePointer`](../exports.md#jsruntimepointer) - -• **is\_enabled**: `number` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:402 - -*** - -### QTS\_SetProp - -> **QTS\_SetProp**: (`ctx`, `this_val`, `prop_name`, `prop_value`) => `void` - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **this\_val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_name**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -• **prop\_value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:385 - -*** - -### QTS\_TestStringArg - -> **QTS\_TestStringArg**: (`string`) => `void` - -#### Parameters - -• **string**: `string` - -#### Returns - -`void` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:400 - -*** - -### QTS\_Throw - -> **QTS\_Throw**: (`ctx`, `error`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **error**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:347 - -*** - -### QTS\_Typeof - -> **QTS\_Typeof**: (`ctx`, `value`) => [`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **value**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`OwnedHeapCharPointer`](../exports.md#ownedheapcharpointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:393 - -*** - -### QTS\_bjson\_decode - -> **QTS\_bjson\_decode**: (`ctx`, `data`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **data**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:412 - -*** - -### QTS\_bjson\_encode - -> **QTS\_bjson\_encode**: (`ctx`, `val`) => [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Parameters - -• **ctx**: [`JSContextPointer`](../exports.md#jscontextpointer) - -• **val**: [`JSValueConstPointer`](../exports.md#jsvalueconstpointer) \| [`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Returns - -[`JSValuePointer`](../exports.md#jsvaluepointer) - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:411 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/QuickJSSyncVariant.md b/doc/quickjs-emscripten/interfaces/QuickJSSyncVariant.md deleted file mode 100644 index 5f0cc9566..000000000 --- a/doc/quickjs-emscripten/interfaces/QuickJSSyncVariant.md +++ /dev/null @@ -1,67 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / QuickJSSyncVariant - -# Interface: QuickJSSyncVariant - -A standard (sync) build variant. - -quickjs-emscripten provides multiple build variants of the core WebAssembly -module. These variants are each intended for a different use case. - -To create an instance of the library using a specific build variant, pass the -build variant to [newQuickJSWASMModule](../exports.md#newquickjswasmmodule) or [newQuickJSAsyncWASMModule](../exports.md#newquickjsasyncwasmmodule). - -## Contents - -- [Properties](QuickJSSyncVariant.md#properties) - - [importFFI](QuickJSSyncVariant.md#importffi) - - [importModuleLoader](QuickJSSyncVariant.md#importmoduleloader) - - [type](QuickJSSyncVariant.md#type) - -## Properties - -### importFFI - -> **`readonly`** **importFFI**: () => `Promise`\<(`module`) => [`QuickJSFFI`](QuickJSFFI.md)\> - -#### Returns - -`Promise`\<(`module`) => [`QuickJSFFI`](QuickJSFFI.md)\> - -> -> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:520 - -*** - -### importModuleLoader - -> **`readonly`** **importModuleLoader**: () => `Promise`\<`EmscriptenImport`\<[`QuickJSEmscriptenModule`](QuickJSEmscriptenModule.md)\>\> - -#### Returns - -`Promise`\<`EmscriptenImport`\<[`QuickJSEmscriptenModule`](QuickJSEmscriptenModule.md)\>\> - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:521 - -*** - -### type - -> **`readonly`** **type**: `"sync"` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:519 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/RuntimeOptions.md b/doc/quickjs-emscripten/interfaces/RuntimeOptions.md deleted file mode 100644 index 91d9af44e..000000000 --- a/doc/quickjs-emscripten/interfaces/RuntimeOptions.md +++ /dev/null @@ -1,136 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / RuntimeOptions - -# Interface: RuntimeOptions - -## Contents - -- [Extends](RuntimeOptions.md#extends) -- [Properties](RuntimeOptions.md#properties) - - [gcThreshold?](RuntimeOptions.md#gcthreshold) - - [interruptHandler?](RuntimeOptions.md#interrupthandler) - - [maxStackSizeBytes?](RuntimeOptions.md#maxstacksizebytes) - - [memoryLimitBytes?](RuntimeOptions.md#memorylimitbytes) - - [moduleLoader?](RuntimeOptions.md#moduleloader) - - [promiseRejectionHandler?](RuntimeOptions.md#promiserejectionhandler) - - [runtimeInfo?](RuntimeOptions.md#runtimeinfo) - - [sharedArrayBufferFunctions?](RuntimeOptions.md#sharedarraybufferfunctions) - -## Extends - -- [`RuntimeOptionsBase`](RuntimeOptionsBase.md) - -## Properties - -### gcThreshold? - -> **gcThreshold**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.gcThreshold`](RuntimeOptionsBase.md#gcthreshold) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:119](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L119) - -*** - -### interruptHandler? - -> **interruptHandler**?: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.interruptHandler`](RuntimeOptionsBase.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L113) - -*** - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.maxStackSizeBytes`](RuntimeOptionsBase.md#maxstacksizebytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:114](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L114) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.memoryLimitBytes`](RuntimeOptionsBase.md#memorylimitbytes) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:115](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L115) - -*** - -### moduleLoader? - -> **moduleLoader**?: [`JSModuleLoader`](JSModuleLoader.md) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:133](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L133) - -*** - -### promiseRejectionHandler? - -> **promiseRejectionHandler**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.promiseRejectionHandler`](RuntimeOptionsBase.md#promiserejectionhandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L117) - -*** - -### runtimeInfo? - -> **runtimeInfo**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.runtimeInfo`](RuntimeOptionsBase.md#runtimeinfo) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L118) - -*** - -### sharedArrayBufferFunctions? - -> **sharedArrayBufferFunctions**?: `undefined` - -#### Inherited from - -[`quickjs-emscripten.RuntimeOptionsBase.sharedArrayBufferFunctions`](RuntimeOptionsBase.md#sharedarraybufferfunctions) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/RuntimeOptionsBase.md b/doc/quickjs-emscripten/interfaces/RuntimeOptionsBase.md deleted file mode 100644 index 9b35030b2..000000000 --- a/doc/quickjs-emscripten/interfaces/RuntimeOptionsBase.md +++ /dev/null @@ -1,98 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / RuntimeOptionsBase - -# Interface: RuntimeOptionsBase - -## Contents - -- [Extended By](RuntimeOptionsBase.md#extended-by) -- [Properties](RuntimeOptionsBase.md#properties) - - [gcThreshold?](RuntimeOptionsBase.md#gcthreshold) - - [interruptHandler?](RuntimeOptionsBase.md#interrupthandler) - - [maxStackSizeBytes?](RuntimeOptionsBase.md#maxstacksizebytes) - - [memoryLimitBytes?](RuntimeOptionsBase.md#memorylimitbytes) - - [promiseRejectionHandler?](RuntimeOptionsBase.md#promiserejectionhandler) - - [runtimeInfo?](RuntimeOptionsBase.md#runtimeinfo) - - [sharedArrayBufferFunctions?](RuntimeOptionsBase.md#sharedarraybufferfunctions) - -## Extended By - -- [`RuntimeOptions`](RuntimeOptions.md) -- [`AsyncRuntimeOptions`](AsyncRuntimeOptions.md) - -## Properties - -### gcThreshold? - -> **gcThreshold**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:119](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L119) - -*** - -### interruptHandler? - -> **interruptHandler**?: [`InterruptHandler`](../exports.md#interrupthandler) - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:113](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L113) - -*** - -### maxStackSizeBytes? - -> **maxStackSizeBytes**?: `number` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:114](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L114) - -*** - -### memoryLimitBytes? - -> **memoryLimitBytes**?: `number` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:115](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L115) - -*** - -### promiseRejectionHandler? - -> **promiseRejectionHandler**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:117](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L117) - -*** - -### runtimeInfo? - -> **runtimeInfo**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:118](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L118) - -*** - -### sharedArrayBufferFunctions? - -> **sharedArrayBufferFunctions**?: `undefined` - -#### Source - -[packages/quickjs-emscripten-core/src/types.ts:120](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/types.ts#L120) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/SourceMapData.md b/doc/quickjs-emscripten/interfaces/SourceMapData.md deleted file mode 100644 index f4318f17a..000000000 --- a/doc/quickjs-emscripten/interfaces/SourceMapData.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / SourceMapData - -# Interface: SourceMapData - -## Contents - -- [Properties](SourceMapData.md#properties) - - [mappings](SourceMapData.md#mappings) - - [names](SourceMapData.md#names) - - [sources](SourceMapData.md#sources) - - [version](SourceMapData.md#version) - -## Properties - -### mappings - -> **mappings**: `string` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:205 - -*** - -### names - -> **names**: `string`[] - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:204 - -*** - -### sources - -> **sources**: `string`[] - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:203 - -*** - -### version - -> **version**: `number` - -#### Source - -packages/quickjs-ffi-types/dist/index.d.ts:202 - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/interfaces/VmPropertyDescriptor.md b/doc/quickjs-emscripten/interfaces/VmPropertyDescriptor.md deleted file mode 100644 index 3dbf98d65..000000000 --- a/doc/quickjs-emscripten/interfaces/VmPropertyDescriptor.md +++ /dev/null @@ -1,95 +0,0 @@ -[quickjs-emscripten](../../packages.md) • **quickjs-emscripten** • [Readme](../README.md) \| [Exports](../exports.md) - -*** - -[quickjs-emscripten](../../packages.md) / [quickjs-emscripten](../exports.md) / VmPropertyDescriptor - -# Interface: VmPropertyDescriptor\ - -From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/ - -## Contents - -- [Type parameters](VmPropertyDescriptor.md#type-parameters) -- [Properties](VmPropertyDescriptor.md#properties) - - [configurable?](VmPropertyDescriptor.md#configurable) - - [enumerable?](VmPropertyDescriptor.md#enumerable) - - [get?](VmPropertyDescriptor.md#get) - - [set?](VmPropertyDescriptor.md#set) - - [value?](VmPropertyDescriptor.md#value) - -## Type parameters - -• **VmHandle** - -## Properties - -### configurable? - -> **configurable**?: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:85](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L85) - -*** - -### enumerable? - -> **enumerable**?: `boolean` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:86](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L86) - -*** - -### get? - -> **get**?: (`this`) => `VmHandle` - -#### Parameters - -• **this**: `VmHandle` - -#### Returns - -`VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:87](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L87) - -*** - -### set? - -> **set**?: (`this`, `value`) => `void` - -#### Parameters - -• **this**: `VmHandle` - -• **value**: `VmHandle` - -#### Returns - -`void` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:88](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L88) - -*** - -### value? - -> **value**?: `VmHandle` - -#### Source - -[packages/quickjs-emscripten-core/src/vm-interface.ts:84](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/vm-interface.ts#L84) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/README.md b/doc/quickjs-emscripten/namespaces/errors/README.md deleted file mode 100644 index 9b6039da0..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/README.md +++ /dev/null @@ -1,29 +0,0 @@ -[quickjs-emscripten](../../../packages.md) • **quickjs-emscripten** • [Readme](../../README.md) \| [Exports](../../exports.md) - -*** - -[quickjs-emscripten](../../../packages.md) / [quickjs-emscripten](../../exports.md) / errors - -# Namespace: errors - -Collects the informative errors this library may throw. - -## Index - -### Classes - -- [QuickJSAsyncifyError](classes/QuickJSAsyncifyError.md) -- [QuickJSAsyncifySuspended](classes/QuickJSAsyncifySuspended.md) -- [QuickJSEmptyGetOwnPropertyNames](classes/QuickJSEmptyGetOwnPropertyNames.md) -- [QuickJSEmscriptenModuleError](classes/QuickJSEmscriptenModuleError.md) -- [QuickJSMemoryLeakDetected](classes/QuickJSMemoryLeakDetected.md) -- [QuickJSNotImplemented](classes/QuickJSNotImplemented.md) -- [QuickJSPromisePending](classes/QuickJSPromisePending.md) -- [QuickJSUnknownIntrinsic](classes/QuickJSUnknownIntrinsic.md) -- [QuickJSUnwrapError](classes/QuickJSUnwrapError.md) -- [QuickJSUseAfterFree](classes/QuickJSUseAfterFree.md) -- [QuickJSWrongOwner](classes/QuickJSWrongOwner.md) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifyError.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifyError.md deleted file mode 100644 index 7645b7f0b..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifyError.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSAsyncifyError - -# Class: QuickJSAsyncifyError - -## Contents - -- [Extends](QuickJSAsyncifyError.md#extends) -- [Constructors](QuickJSAsyncifyError.md#constructors) - - [new QuickJSAsyncifyError(message)](QuickJSAsyncifyError.md#new-quickjsasyncifyerrormessage) -- [Properties](QuickJSAsyncifyError.md#properties) - - [name](QuickJSAsyncifyError.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSAsyncifyError(message) - -> **new QuickJSAsyncifyError**(`message`?): [`QuickJSAsyncifyError`](QuickJSAsyncifyError.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSAsyncifyError`](QuickJSAsyncifyError.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSAsyncifyError"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:33](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L33) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifySuspended.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifySuspended.md deleted file mode 100644 index 1eb66f9ac..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSAsyncifySuspended.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSAsyncifySuspended - -# Class: QuickJSAsyncifySuspended - -## Contents - -- [Extends](QuickJSAsyncifySuspended.md#extends) -- [Constructors](QuickJSAsyncifySuspended.md#constructors) - - [new QuickJSAsyncifySuspended(message)](QuickJSAsyncifySuspended.md#new-quickjsasyncifysuspendedmessage) -- [Properties](QuickJSAsyncifySuspended.md#properties) - - [name](QuickJSAsyncifySuspended.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSAsyncifySuspended(message) - -> **new QuickJSAsyncifySuspended**(`message`?): [`QuickJSAsyncifySuspended`](QuickJSAsyncifySuspended.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSAsyncifySuspended`](QuickJSAsyncifySuspended.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSAsyncifySuspended"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:37](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L37) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md deleted file mode 100644 index 1f7a442c3..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmptyGetOwnPropertyNames.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSEmptyGetOwnPropertyNames - -# Class: QuickJSEmptyGetOwnPropertyNames - -## Contents - -- [Extends](QuickJSEmptyGetOwnPropertyNames.md#extends) -- [Constructors](QuickJSEmptyGetOwnPropertyNames.md#constructors) - - [new QuickJSEmptyGetOwnPropertyNames(message)](QuickJSEmptyGetOwnPropertyNames.md#new-quickjsemptygetownpropertynamesmessage) -- [Properties](QuickJSEmptyGetOwnPropertyNames.md#properties) - - [name](QuickJSEmptyGetOwnPropertyNames.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSEmptyGetOwnPropertyNames(message) - -> **new QuickJSEmptyGetOwnPropertyNames**(`message`?): [`QuickJSEmptyGetOwnPropertyNames`](QuickJSEmptyGetOwnPropertyNames.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSEmptyGetOwnPropertyNames`](QuickJSEmptyGetOwnPropertyNames.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSEmptyGetOwnPropertyNames"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:57](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L57) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmscriptenModuleError.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmscriptenModuleError.md deleted file mode 100644 index 92f4ea544..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSEmscriptenModuleError.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSEmscriptenModuleError - -# Class: QuickJSEmscriptenModuleError - -## Contents - -- [Extends](QuickJSEmscriptenModuleError.md#extends) -- [Constructors](QuickJSEmscriptenModuleError.md#constructors) - - [new QuickJSEmscriptenModuleError(message)](QuickJSEmscriptenModuleError.md#new-quickjsemscriptenmoduleerrormessage) -- [Properties](QuickJSEmscriptenModuleError.md#properties) - - [name](QuickJSEmscriptenModuleError.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSEmscriptenModuleError(message) - -> **new QuickJSEmscriptenModuleError**(`message`?): [`QuickJSEmscriptenModuleError`](QuickJSEmscriptenModuleError.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSEmscriptenModuleError`](QuickJSEmscriptenModuleError.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSEmscriptenModuleError"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:45](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L45) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSMemoryLeakDetected.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSMemoryLeakDetected.md deleted file mode 100644 index 631e1e49a..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSMemoryLeakDetected.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSMemoryLeakDetected - -# Class: QuickJSMemoryLeakDetected - -## Contents - -- [Extends](QuickJSMemoryLeakDetected.md#extends) -- [Constructors](QuickJSMemoryLeakDetected.md#constructors) - - [new QuickJSMemoryLeakDetected(message)](QuickJSMemoryLeakDetected.md#new-quickjsmemoryleakdetectedmessage) -- [Properties](QuickJSMemoryLeakDetected.md#properties) - - [name](QuickJSMemoryLeakDetected.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSMemoryLeakDetected(message) - -> **new QuickJSMemoryLeakDetected**(`message`?): [`QuickJSMemoryLeakDetected`](QuickJSMemoryLeakDetected.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSMemoryLeakDetected`](QuickJSMemoryLeakDetected.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSMemoryLeakDetected"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:41](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L41) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSNotImplemented.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSNotImplemented.md deleted file mode 100644 index f450c81bb..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSNotImplemented.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSNotImplemented - -# Class: QuickJSNotImplemented - -## Contents - -- [Extends](QuickJSNotImplemented.md#extends) -- [Constructors](QuickJSNotImplemented.md#constructors) - - [new QuickJSNotImplemented(message)](QuickJSNotImplemented.md#new-quickjsnotimplementedmessage) -- [Properties](QuickJSNotImplemented.md#properties) - - [name](QuickJSNotImplemented.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSNotImplemented(message) - -> **new QuickJSNotImplemented**(`message`?): [`QuickJSNotImplemented`](QuickJSNotImplemented.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSNotImplemented`](QuickJSNotImplemented.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSNotImplemented"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:29](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L29) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSPromisePending.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSPromisePending.md deleted file mode 100644 index b23993edf..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSPromisePending.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSPromisePending - -# Class: QuickJSPromisePending - -## Contents - -- [Extends](QuickJSPromisePending.md#extends) -- [Constructors](QuickJSPromisePending.md#constructors) - - [new QuickJSPromisePending(message)](QuickJSPromisePending.md#new-quickjspromisependingmessage) -- [Properties](QuickJSPromisePending.md#properties) - - [name](QuickJSPromisePending.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSPromisePending(message) - -> **new QuickJSPromisePending**(`message`?): [`QuickJSPromisePending`](QuickJSPromisePending.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSPromisePending`](QuickJSPromisePending.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSPromisePending"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:53](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L53) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnknownIntrinsic.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnknownIntrinsic.md deleted file mode 100644 index 42959ad28..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnknownIntrinsic.md +++ /dev/null @@ -1,80 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSUnknownIntrinsic - -# Class: QuickJSUnknownIntrinsic - -## Contents - -- [Extends](QuickJSUnknownIntrinsic.md#extends) -- [Constructors](QuickJSUnknownIntrinsic.md#constructors) - - [new QuickJSUnknownIntrinsic(message)](QuickJSUnknownIntrinsic.md#new-quickjsunknownintrinsicmessage) - - [new QuickJSUnknownIntrinsic(message)](QuickJSUnknownIntrinsic.md#new-quickjsunknownintrinsicmessage-1) -- [Properties](QuickJSUnknownIntrinsic.md#properties) - - [name](QuickJSUnknownIntrinsic.md#name) - -## Extends - -- `TypeError` - -## Constructors - -### new QuickJSUnknownIntrinsic(message) - -> **new QuickJSUnknownIntrinsic**(`message`?): [`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Inherited from - -`TypeError.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1136 - -### new QuickJSUnknownIntrinsic(message) - -> **new QuickJSUnknownIntrinsic**(`message`?): [`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSUnknownIntrinsic`](QuickJSUnknownIntrinsic.md) - -#### Inherited from - -`TypeError.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSUnknownIntrinsic"` - -#### Overrides - -`TypeError.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:49](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L49) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnwrapError.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnwrapError.md deleted file mode 100644 index 2b7e83e17..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUnwrapError.md +++ /dev/null @@ -1,85 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSUnwrapError - -# Class: QuickJSUnwrapError - -Error thrown if [QuickJSContext#unwrapResult](../../../classes/QuickJSContext.md#unwrapresult) unwraps an error value that isn't an object. - -## Contents - -- [Extends](QuickJSUnwrapError.md#extends) -- [Constructors](QuickJSUnwrapError.md#constructors) - - [new QuickJSUnwrapError(cause, context)](QuickJSUnwrapError.md#new-quickjsunwraperrorcause-context) -- [Properties](QuickJSUnwrapError.md#properties) - - [cause](QuickJSUnwrapError.md#cause) - - [context?](QuickJSUnwrapError.md#context) - - [name](QuickJSUnwrapError.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSUnwrapError(cause, context) - -> **new QuickJSUnwrapError**(`cause`, `context`?): [`QuickJSUnwrapError`](QuickJSUnwrapError.md) - -#### Parameters - -• **cause**: `unknown` - -• **context?**: [`QuickJSContext`](../../../classes/QuickJSContext.md) - -#### Returns - -[`QuickJSUnwrapError`](QuickJSUnwrapError.md) - -#### Overrides - -`Error.constructor` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:8](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L8) - -## Properties - -### cause - -> **cause**: `unknown` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:9](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L9) - -*** - -### context? - -> **context**?: [`QuickJSContext`](../../../classes/QuickJSContext.md) - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:10](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L10) - -*** - -### name - -> **name**: `string` = `"QuickJSUnwrapError"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:7](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L7) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUseAfterFree.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUseAfterFree.md deleted file mode 100644 index cf73087c2..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSUseAfterFree.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSUseAfterFree - -# Class: QuickJSUseAfterFree - -## Contents - -- [Extends](QuickJSUseAfterFree.md#extends) -- [Constructors](QuickJSUseAfterFree.md#constructors) - - [new QuickJSUseAfterFree(message)](QuickJSUseAfterFree.md#new-quickjsuseafterfreemessage) -- [Properties](QuickJSUseAfterFree.md#properties) - - [name](QuickJSUseAfterFree.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSUseAfterFree(message) - -> **new QuickJSUseAfterFree**(`message`?): [`QuickJSUseAfterFree`](QuickJSUseAfterFree.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSUseAfterFree`](QuickJSUseAfterFree.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSUseAfterFree"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:25](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L25) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSWrongOwner.md b/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSWrongOwner.md deleted file mode 100644 index acc3b09ee..000000000 --- a/doc/quickjs-emscripten/namespaces/errors/classes/QuickJSWrongOwner.md +++ /dev/null @@ -1,59 +0,0 @@ -[quickjs-emscripten](../../../../packages.md) • **quickjs-emscripten** • [Readme](../../../README.md) \| [Exports](../../../exports.md) - -*** - -[quickjs-emscripten](../../../../packages.md) / [quickjs-emscripten](../../../exports.md) / [errors](../README.md) / QuickJSWrongOwner - -# Class: QuickJSWrongOwner - -## Contents - -- [Extends](QuickJSWrongOwner.md#extends) -- [Constructors](QuickJSWrongOwner.md#constructors) - - [new QuickJSWrongOwner(message)](QuickJSWrongOwner.md#new-quickjswrongownermessage) -- [Properties](QuickJSWrongOwner.md#properties) - - [name](QuickJSWrongOwner.md#name) - -## Extends - -- `Error` - -## Constructors - -### new QuickJSWrongOwner(message) - -> **new QuickJSWrongOwner**(`message`?): [`QuickJSWrongOwner`](QuickJSWrongOwner.md) - -#### Parameters - -• **message?**: `string` - -#### Returns - -[`QuickJSWrongOwner`](QuickJSWrongOwner.md) - -#### Inherited from - -`Error.constructor` - -#### Source - -node\_modules/typescript/lib/lib.es5.d.ts:1081 - -## Properties - -### name - -> **name**: `string` = `"QuickJSWrongOwner"` - -#### Overrides - -`Error.name` - -#### Source - -[packages/quickjs-emscripten-core/src/errors.ts:21](https://github.com/justjake/quickjs-emscripten/blob/main/packages/quickjs-emscripten-core/src/errors.ts#L21) - -*** - -Generated using [typedoc-plugin-markdown](https://www.npmjs.com/package/typedoc-plugin-markdown) and [TypeDoc](https://typedoc.org/) diff --git a/vendor/quickjs/doc/quickjs.texi b/doc/quickjs.texi similarity index 97% rename from vendor/quickjs/doc/quickjs.texi rename to doc/quickjs.texi index 0b8c744ec..79807e821 100644 --- a/vendor/quickjs/doc/quickjs.texi +++ b/doc/quickjs.texi @@ -23,9 +23,8 @@ @chapter Introduction QuickJS (version @value{VERSION}) is a small and embeddable Javascript -engine. It supports most of the ES2024 specification -@footnote{@url{https://tc39.es/ecma262/2024 }} including modules, -asynchronous generators, proxies and BigInt. +engine. It supports most of the ES2025 specification +@footnote{@url{https://tc39.es/ecma262/2025 }}. @section Main Features @@ -33,14 +32,11 @@ asynchronous generators, proxies and BigInt. @item Small and easily embeddable: just a few C files, no external dependency, 210 KiB of x86 code for a simple ``hello world'' program. -@item Fast interpreter with very low startup time: runs the 77000 tests of the ECMAScript Test Suite@footnote{@url{https://github.com/tc39/test262}} in less than 2 minutes on a single core of a desktop PC. The complete life cycle of a runtime instance completes in less than 300 microseconds. +@item Fast interpreter with very low startup time: runs the tests of the ECMAScript Test Suite@footnote{@url{https://github.com/tc39/test262}} in less than 2 minutes on a single core of a desktop PC. The complete life cycle of a runtime instance completes in less than 300 microseconds. -@item Almost complete ES2024 support including modules, asynchronous -generators and full Annex B support (legacy web compatibility). Some -features from the upcoming ES2024 specification -@footnote{@url{https://tc39.es/ecma262/}} are also supported. +@item Almost complete ES2025 support. -@item Passes nearly 100% of the ECMAScript Test Suite tests when selecting the ES2024 features. +@item Passes nearly 100% of the ECMAScript Test Suite tests when selecting the ES2025 features. @item Compile Javascript sources to executables with no external dependency. @@ -250,9 +246,9 @@ about 100 seconds). @section Language support -@subsection ES2024 support +@subsection ES2025 support -The ES2024 specification is almost fully supported including the Annex +The ES2025 specification is almost fully supported including the Annex B (legacy web compatibility) and the Unicode related features. The following features are not supported yet: @@ -1033,7 +1029,7 @@ stack holds the Javascript parameters and local variables. @section RegExp A specific regular expression engine was developed. It is both small -and efficient and supports all the ES2024 features including the +and efficient and supports all the ES2025 features including the Unicode properties. As the Javascript compiler, it directly generates bytecode without a parse tree. diff --git a/vendor/quickjs/dtoa.c b/dtoa.c similarity index 100% rename from vendor/quickjs/dtoa.c rename to dtoa.c diff --git a/vendor/quickjs/dtoa.h b/dtoa.h similarity index 100% rename from vendor/quickjs/dtoa.h rename to dtoa.h diff --git a/examples/bun-typescript/.gitignore b/examples/bun-typescript/.gitignore deleted file mode 100644 index 6736aa1eb..000000000 --- a/examples/bun-typescript/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -index.js diff --git a/examples/bun-typescript/.npmrc b/examples/bun-typescript/.npmrc deleted file mode 100644 index 09b35cdd0..000000000 --- a/examples/bun-typescript/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -audit=false -fund=false diff --git a/examples/bun-typescript/bun.lockb b/examples/bun-typescript/bun.lockb deleted file mode 100755 index 2c03ba518ccbbb1f175ce782d282e1039672035c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcmY#Z)GsYA(of3F(@)JSQ%EY!;{sycoc!eMw9K4T-L(9o+{6;yG6OCq1_p-k54)DF z+jTwLvvrBA_#=-8yPFq&@-h=Ckl))qonQFI`E4vfML+;j3j!Pv3Qjjb`Bg9lV7?3k zLjw>qZ~^HihT0|D8YURcS8dSIZcR;Mgz6xdf>~q)G{6REJ}Z!BhGJsP1i1m(9jN?& z{Qr<8i8YjfIz|SFxyVMdEG?b0c8$-aHxAyfeJ?QXXNjGBYGu2%Z$-M_m!Ly+OQLV= z6j}9Q;UB)#m2 zQAu$!*xUoZMV1y#nIHnn*dQ_fdy8$}$rkP^DK1Ve0-6|mS)nl~&HINMP&E%QU$j`5 zo?)!u`{w|4#X7iaK>jksK7(#+)StYY2N+~VY-%z~2CJl*2l{Or_{)Z&to%7Rpg zD8v;In=?vE3W}}t^@~!|GmA@#D)sUTa=16.0.0" - } - }, - "node_modules/quickjs-emscripten-core": { - "version": "0.26.0", - "resolved": "file:../../build/tar/quickjs-emscripten-core.tgz", - "integrity": "sha512-RFglP182/9sTYirChNUsQOIbH70goOMe4rVr0G4aJykIk0m9ogglUvhXP7iANOeA9CFCKB93ORp6DJ5KJctbKg==", - "license": "MIT", - "dependencies": { - "@jitl/quickjs-ffi-types": "0.26.0" - } - }, - "node_modules/typescript": { - "version": "5.3.3", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - } - } -} diff --git a/examples/bun-typescript/package.json b/examples/bun-typescript/package.json deleted file mode 100644 index 80f0be6a5..000000000 --- a/examples/bun-typescript/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "quickjs-emscripten-smoketest", - "version": "1.0.0", - "type": "commonjs", - "main": "index.js", - "license": "MIT", - "dependencies": { - "@jitl/quickjs-ffi-types": "file:../../build/tar/@jitl-quickjs-ffi-types.tgz", - "@jitl/quickjs-wasmfile-debug-asyncify": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-asyncify.tgz", - "@jitl/quickjs-wasmfile-debug-sync": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-sync.tgz", - "@jitl/quickjs-wasmfile-release-asyncify": "file:../../build/tar/@jitl-quickjs-wasmfile-release-asyncify.tgz", - "@jitl/quickjs-wasmfile-release-sync": "file:../../build/tar/@jitl-quickjs-wasmfile-release-sync.tgz", - "quickjs-emscripten": "file:../../build/tar/quickjs-emscripten.tgz", - "quickjs-emscripten-core": "file:../../build/tar/quickjs-emscripten-core.tgz", - "typescript": "5" - }, - "workspaces": [] -} diff --git a/examples/bun-typescript/tsconfig.json b/examples/bun-typescript/tsconfig.json deleted file mode 100644 index 8b4876fc6..000000000 --- a/examples/bun-typescript/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "lib": ["ES2015", "DOM"], - "module": "Node16", - "strict": true - }, - "include": ["*.ts"], - "exclude": ["../../node_modules/**/*"] -} diff --git a/examples/cloudflare-workers/.editorconfig b/examples/cloudflare-workers/.editorconfig deleted file mode 100644 index 64ab2601f..000000000 --- a/examples/cloudflare-workers/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -indent_style = tab -tab_width = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.yml] -indent_style = space diff --git a/examples/cloudflare-workers/.gitignore b/examples/cloudflare-workers/.gitignore deleted file mode 100644 index 5fbbae70c..000000000 --- a/examples/cloudflare-workers/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -src/*.wasm -src/*.wasm.* -node_modules -.wrangler diff --git a/examples/cloudflare-workers/.prettierrc b/examples/cloudflare-workers/.prettierrc deleted file mode 100644 index 5c7b5d3c7..000000000 --- a/examples/cloudflare-workers/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "printWidth": 140, - "singleQuote": true, - "semi": true, - "useTabs": true -} diff --git a/examples/cloudflare-workers/README.md b/examples/cloudflare-workers/README.md deleted file mode 100644 index 037b74cee..000000000 --- a/examples/cloudflare-workers/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# quickjs-emscripten + cloudflare workers - -Cloudflare Workers need some extra setup steps because of the unusual environment and limitations with the bundling defaults, because Cloudflare refuses to let us read these files and compile them from bytes. - -1. We need to copy the WASM files for the QuickJS variants in use into the `src` directory, so we can import them directly. The script [copy-wasm-file-into-src.sh](./copy-wasm-file-into-src.sh) does this. You should copy it to your project, and run it whenever you update `quickjs-emscripten` to a new version. It will copy the WASM and SourceMap files from `node_modules` into the src directory every time you run it. - - This creates the files `src/DEBUG_SYNC.wasm` and `src/DEBUG_SYNC.wasm.map.txt`. Add them to your .gitignore. -2. We need to override the normal loading behavior to use the special imported WebAssembly.Module. See [src/index.mts](./src/index.mts). Copy and paste the code in index.mts into your project, or do something similar: - - import the quickjs-emscripten WASM files directly, like `import wasmModule from './DEBUG_SYNC.wasm'`. - - import the quickjs-emscripten SourceMap.txt files directly as well, like `import wasmSourceMapData from './DEBUG_SYNC.wasm.map.txt'`. - - create a new variant using those files: `const cloudflareVariant = newVariant(DEBUG_SYNC, { wasmModule, wasmSourceMapData })`. - - Instead of using `await getQuickJS()`, use `newQuickJSWASMModule(cloudflareVariant)`. diff --git a/examples/cloudflare-workers/copy-wasm-file-into-src.sh b/examples/cloudflare-workers/copy-wasm-file-into-src.sh deleted file mode 100755 index 7cfab0daf..000000000 --- a/examples/cloudflare-workers/copy-wasm-file-into-src.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# -# quickjs-emscripten exposes an export for the .wasm file, but Cloudflare refuses to accept it. -# Cloudflare's build system only allows importing .wasm files using a relative path. -# Github issue: https://github.com/cloudflare/workers-sdk/issues/1672 -# -# Instead the easy way out is to just copy the .wasm files we need into the build directory. -# Once there, we can import them and use them to make a new quickjs variant. -# - -set -eo pipefail - -VARIANTS=( - DEBUG_SYNC - RELEASE_SYNC -) - -for VARIANT in "${VARIANTS[@]}"; do - kebab="$(echo "$VARIANT" | tr '[:upper:]' '[:lower:]' | tr '_' '-')" - WASM_FILE="$(node -p 'require.resolve("@jitl/quickjs-wasmfile-'$kebab'/wasm")')" - cp -v "$WASM_FILE" src/$VARIANT.wasm - if [[ -f "$WASM_FILE.map" ]]; then - cp -v "$WASM_FILE.map" src/$VARIANT.wasm.map.txt - fi -done diff --git a/examples/cloudflare-workers/package-lock.json b/examples/cloudflare-workers/package-lock.json deleted file mode 100644 index ce8f6a974..000000000 --- a/examples/cloudflare-workers/package-lock.json +++ /dev/null @@ -1,1238 +0,0 @@ -{ - "name": "raspy-glade-9e89", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "raspy-glade-9e89", - "version": "0.0.0", - "devDependencies": { - "@cloudflare/workers-types": "^4.20231218.0", - "typescript": "^5.0.4", - "wrangler": "^3.0.0" - } - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", - "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", - "dev": true, - "dependencies": { - "mime": "^3.0.0" - } - }, - "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231030.0.tgz", - "integrity": "sha512-J4PQ9utPxLya9yHdMMx3AZeC5M/6FxcoYw6jo9jbDDFTy+a4Gslqf4Im9We3aeOEdPXa3tgQHVQOSelJSZLhIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231030.0.tgz", - "integrity": "sha512-WSJJjm11Del4hSneiNB7wTXGtBXI4QMCH9l5qf4iT5PAW8cESGcCmdHtWDWDtGAAGcvmLT04KNvmum92vRKKQQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231030.0.tgz", - "integrity": "sha512-2HUeRTvoCC17fxE0qdBeR7J9dO8j4A8ZbdcvY8pZxdk+zERU6+N03RTbk/dQMU488PwiDvcC3zZqS4gwLfVT8g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231030.0.tgz", - "integrity": "sha512-4/GK5zHh+9JbUI6Z5xTCM0ZmpKKHk7vu9thmHjUxtz+o8Ne9DoD7DlDvXQWgMF6XGaTubDWyp3ttn+Qv8jDFuQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231030.0.tgz", - "integrity": "sha512-fb/Jgj8Yqy3PO1jLhk7mTrHMkR8jklpbQFud6rL/aMAn5d6MQbaSrYOCjzkKGp0Zng8D2LIzSl+Fc0C9Sggxjg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workers-types": { - "version": "4.20231218.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20231218.0.tgz", - "integrity": "sha512-Vs1FKjfUjXYGbCsXzkl+ITp0Iyb6QiW6+vTERTNThC+v96T0IvPVAioH4tT20rXwoxAfxh380mAaxYtTrJUNVg==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", - "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", - "dev": true, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", - "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/as-table": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", - "dev": true, - "dependencies": { - "printable-characters": "^1.0.42" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/capnp-ts": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", - "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", - "dev": true, - "dependencies": { - "debug": "^4.3.1", - "tslib": "^2.2.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-source": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/miniflare": { - "version": "3.20231030.4", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231030.4.tgz", - "integrity": "sha512-7MBz0ArLuDop1WJGZC6tFgN6c5MRyDOIlxbm3yp0TRBpvDS/KsTuWCQcCjsxN4QQ5zvL3JTkuIZbQzRRw/j6ow==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-walk": "^8.2.0", - "capnp-ts": "^0.7.0", - "exit-hook": "^2.2.1", - "glob-to-regexp": "^0.4.1", - "source-map-support": "0.5.21", - "stoppable": "^1.1.0", - "undici": "^5.22.1", - "workerd": "1.20231030.0", - "ws": "^8.11.0", - "youch": "^3.2.2", - "zod": "^3.20.6" - }, - "bin": { - "miniflare": "bootstrap.js" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/printable-characters": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "dependencies": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/stacktracey": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", - "dev": true, - "dependencies": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/workerd": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231030.0.tgz", - "integrity": "sha512-+FSW+d31f8RrjHanFf/R9A+Z0csf3OtsvzdPmAKuwuZm/5HrBv83cvG9fFeTxl7/nI6irUUXIRF9xcj/NomQzQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "workerd": "bin/workerd" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20231030.0", - "@cloudflare/workerd-darwin-arm64": "1.20231030.0", - "@cloudflare/workerd-linux-64": "1.20231030.0", - "@cloudflare/workerd-linux-arm64": "1.20231030.0", - "@cloudflare/workerd-windows-64": "1.20231030.0" - } - }, - "node_modules/wrangler": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.22.1.tgz", - "integrity": "sha512-fN7WOF6Ono/TV5V90PuJQNf0azS7B+5C/N/KRjqhlAIQBz+c0yLOGkF6kC/akxjr1yIAC9AzcPk9+OuTSq0C+g==", - "dev": true, - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@cspotcode/source-map-support": "0.8.1", - "@esbuild-plugins/node-globals-polyfill": "^0.2.3", - "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "blake3-wasm": "^2.1.5", - "chokidar": "^3.5.3", - "esbuild": "0.17.19", - "miniflare": "3.20231030.4", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "resolve.exports": "^2.0.2", - "selfsigned": "^2.0.1", - "source-map": "0.6.1", - "xxhash-wasm": "^1.0.1" - }, - "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" - }, - "engines": { - "node": ">=16.17.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhash-wasm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", - "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", - "dev": true - }, - "node_modules/youch": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", - "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", - "dev": true, - "dependencies": { - "cookie": "^0.5.0", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/examples/cloudflare-workers/package.json b/examples/cloudflare-workers/package.json deleted file mode 100644 index 527ddf346..000000000 --- a/examples/cloudflare-workers/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "raspy-glade-9e89", - "version": "0.0.0", - "private": true, - "scripts": { - "deploy": "./copy-wasm-file-into-src.sh && wrangler deploy", - "dev": "./copy-wasm-file-into-src.sh && wrangler dev", - "start": "wrangler dev" - }, - "devDependencies": { - "@cloudflare/workers-types": "^4.20231218.0", - "typescript": "^5.0.4", - "wrangler": "^3.0.0" - } -} diff --git a/examples/cloudflare-workers/src/DEBUG_SYNC.wasm.map b/examples/cloudflare-workers/src/DEBUG_SYNC.wasm.map deleted file mode 100644 index d408b75d3..000000000 --- a/examples/cloudflare-workers/src/DEBUG_SYNC.wasm.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/errno/__errno_location.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__fpclassifyl.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__signbitl.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/__stdio_close.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/__stdio_seek.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/__stdio_write.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/acos.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/acosh.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/asin.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/asinh.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/atan.c","../../../../../../../.emscripten_cache/sysroot/include/math.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/atan2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/atanh.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/exit/atexit.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdlib/atoi.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/cbrt.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/ceil.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/__lockfile.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__cos.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__rem_pio2_large.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__rem_pio2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__sin.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/cos.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__expo2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/cosh.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/emscripten_memcpy.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/memmove.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/memset.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/emscripten_time.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__math_xflow.c","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/internal/libm.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__math_uflow.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__math_oflow.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/exp.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/expm1.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/fabs.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/fclose.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/fenv/fenv.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/fenv/fesetround.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/fflush.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/__toread.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/__uflow.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/floor.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/fmax.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/fmemopen.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/fmin.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/fmod.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/fprintf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/__towrite.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/fputs.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/fwrite.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/hypot.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/ctype/isdigit.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/ctype/isspace.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/unistd/getpid.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/pthread/library_pthread_stub.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__math_divzero.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__math_invalid.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/log.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/log10.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/log1p.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/log2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/lrint.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/unistd/lseek.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/memchr.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/memcmp.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stat/mkdir.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/mktime.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/time/clock_nanosleep.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/time/nanosleep.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/ofl.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/ofl_add.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/pow.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/printf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/pthread/pthread_self_stub.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/rint.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/round.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/scalbn.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/sigaction.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/sin.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/sinh.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/snprintf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/sprintf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/sqrt.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/stdout.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strcat.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strchr.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strchrnul.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strcmp.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/stpcpy.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strcpy.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strdup.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strlen.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strnlen.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/memrchr.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/string/strrchr.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/internal/shgetc.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/copysignl.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/scalbnl.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/fmodl.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/fabsl.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/internal/floatscan.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdlib/strtod.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/internal/syscall_ret.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/conf/sysconf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/__tan.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/tan.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/tanh.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/trunc.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/tzset.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/math/frexp.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/vfprintf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/vsnprintf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/stdio/vsprintf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/wasi-helpers.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/multibyte/wcrtomb.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/multibyte/wctomb.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/emscripten_get_heap_size.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/sbrk.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/dlmalloc.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/addtf3.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_add_impl.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_lib.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/ashlti3.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/comparetf2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_compare_impl.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/divtf3.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_div_impl.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/extenddftf2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_extend_impl.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_extend.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/extendsftf2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/floatsitf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/floatunsitf.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_mode.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/lshrti3.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/multf3.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_mul_impl.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/multi3.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/subtf3.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/trunctfdf2.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_trunc_impl.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/builtins/fp_trunc.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_thread.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flags.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang_other.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_allocator.cpp","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_libc.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_common.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_secondary.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_local_cache.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_mutex.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_stats.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flat_map.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_combined.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_size_class_map.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_secondary.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_common.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_mutex.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_stats.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang_other.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_checks.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_common.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_list.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_interceptors.cpp","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_dlsym.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_combined.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flat_map.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_size_class_map.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_linux.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libcxxabi/src/stdlib_typeinfo.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libcxxabi/src/private_typeinfo.cpp","../../../../../../../.emscripten_cache/sysroot/include/c++/v1/typeinfo","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_posix.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_posix.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_thread.cpp","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_dense_map.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_thread_arg_retval.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_flags.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_common.cpp","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flag_parser.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_libc.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_dense_map_info.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_array_ref.h","../../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_report_decorator.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_file.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flag_parser.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/lsan/lsan_common_emscripten.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_local_cache.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_list.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_checks.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_allocator_report.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_report_decorator.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/emscripten_mmap.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/mman/mmap.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/mman/munmap.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/stack_limits.S","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_emscripten.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flag_parser.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flags.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_libc.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/unistd/usleep.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/libc/musl/src/thread/pthread_self.c","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_mutex.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_printf.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_range.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stack_store.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stack_store.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_leb128.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_lzw.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_dense_map_info.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_dense_map.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stackdepotbase.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_hash.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_emscripten.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_suppressions.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_emscripten.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_internal.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_termination.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/emscripten_tempret.s","../../../../../../../../opt/homebrew/Cellar/emscripten/3.1.50/libexec/system/lib/compiler-rt/stack_ops.S"],"names":[],"mappings":"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GvC,6CC8FkB,CAAe,CD9FjC,2B+BUP,iBrCtCE,sCOuHuB,CAAmC,CACpD,SAGkB,CAAX,gBAIO,CAAmB,CAA1B,IP/Hb,YOqHqC,oBAaf,CDtGjB,0CCkGkB,CAAqB,CDlGvC,6CC8FkB,CAAe,CD9FjC,2B+BWT,M9B8EyC,MA0BxB,YP/Ib,wBOqHqC,QDzFhC,ICyFgC,MA0BxB,YP/Ib,wBOqHqC,e8B3EvC,ErC1CE,QqC0CF,4B9B2IsB,sBACG,GAAuC,CAK5C,sCAGZ,iBAHA,oBAAsB,CAAmB,CAAzC,CAGA,MDlKD,+BCyKH,CAAc,GAAL,iBAbL,YD5JD,oCCuKH,GAAS,I8BxJb,ErC3CE,QqC2CF,4B9B0IsB,sBACG,GAAuC,CAK5C,sCAGZ,iBAHA,oBAAsB,CAAmB,CAAzC,CAGA,MDlKD,+BCyKH,CAAc,GAAL,G8BzJf,a9B4IU,YD5JD,oCCuKH,GAAS,I8BvJf,EAEA,C,IrC9CI,gBOwQA,8B8BxNK,MAAP,EAqBF,C,IrCrEI,gBOwQA,8B8BxNK,MAsBP,MvB8TA,wBAHgE,EAI5D,OA/B0B,GAkC9B,kBAlC4B,CAmC5B,SACO,MACT,IAPE,sBAIA,sBACA,wB0BhZF,cAFA,YAhBA,OAPA,OAFA,GC4CA,MtCogCe,UuClhCgB,OAAM,eAoJ3B,iBvC83BK,gBqC9iCf,CE4B+B,GAAM,eAoJ3B,iBvC83BK,gBqC1iCf,CEwB+B,GAAM,OAoJ3B,iBvC83BK,gBqCviCf,CEqB+B,GAAM,OAoJ3B,iBvC83BK,gBqCriCf,CEmB+B,GAAM,OAoJ3B,iBvC83BK,gBqCpiCf,CEkB+B,GAAM,OAoJ3B,iBvC83BK,gBqCniCf,CEiB+B,GAAM,OAoJ3B,iBvC83BK,gBqCjiCf,CEe+B,GAAM,OAoJ3B,iBvC83BK,gBqC/hCf,CEa+B,GAAM,OAoJ3B,iBvC83BK,gBqC1hCf,CEQ+B,GAAM,OAoJ3B,iBvC83BK,gBqCzhCf,CEO+B,GAAM,OAoJ3B,iBvC83BK,gBqCvhCf,CEK+B,GAAM,OAoJ3B,iBvC83BK,gBqCthCf,CEI+B,GAAM,OAoJ3B,iBvC83BK,gBqCrhCf,CEG+B,GAAM,aAoJ3B,iBD/HV,GA4iCE,QA79BF,G,aACe,GAGa,SEvBZ,GAER,yBFwBF,CExBE,YFsBF,UAEQ,aAAR,EAIsB,KAAyB,KACnD,iBAC8B,SAAhB,QAAgD,SAChC,SAAhB,QADR,EAD8C,KAApD,MAMQ,aAEV,YAqEA,G,gBApGO,OAAD,MACK,OACP,CAA+B,UAAvB,GAEQ,KAAN,GACF,UAHuB,KAIlB,GAAQ,kBACD,KAAF,IA+FD,OAnET,mBAAK,CAAX,EACW,KAAN,GAwCL,KAMI,KAAgB,KAAoB,OAqBhB,EAhBD,QAA3B,eAEiD,eAAN,OlBxHjC,CkBuHS,GAEb,QAH4B,CAAP,OAAR,CAAnB,UAIc,anCnLP,kBmCiMkB,UtCwRnB,WAwByB,MAAgB,CAxBzC,KACF,iBAC8C,CAA1B,GACpB,GAE0B,sBAAX,WDneZ,YuCyMT,WtCsRM,+BA6DF,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,MAyI6B,CAxIhB,KAAW,GAAO,GAAF,CAyIR,YACO,OAAO,OAAM,CDjiBlC,ICkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,kBsCrMoB,YAAhB,GA1HJ,gBA/CK,WAcC,eAZD,UtCsaG,UACA,QsCzaH,KAgDW,MA6Hd,IAEJ,EAhIE,yBA+KF,G,kBACE,UrBjIS,kBqBmIT,0CAWA,eARI,WAAG,IAAH,YAWM,CAAiB,GAA3B,SACY,eApDN,CAwDA,EAES,OAAR,KACD,YAKS,WACP,OAAM,CAAc,EAAK,OAAM,CAAjC,SAIU,GAAa,EAAG,KAA1B,QACF,0EASE,OAAY,KAAM,mBACpB,2CAMA,cACF,iFAGI,KtCgKA,OAwByB,SAAgB,CAxBzC,KACF,aAC8C,CAA1B,GACpB,GAE0B,kBAAX,WDneZ,auCuR+B,SAA5B,CAAiB,GAA3B,IA0CF,UA1DE,sBtCwNI,+BW6DF,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,MAyI6B,CAxIhB,KAAW,GAAO,GAAF,CAyIR,YACO,OAAO,OAAM,C8BjiBlC,I9BkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,e2BlFF,K,aACO,OAAqB,GAC1B,aACa,eAAH,KAAmB,yBAC3B,iBACA,OACU,OAAN,EACF,gBAEE,QAAc,KAAd,oBAKR,SAVI,uBACA,yBAwMJ,K,UACgB,cAAV,GzC1gBF,IGwcM,GHxcN,cGycM,eIjMN,YkCyPG,MAAD,EHUK,2BGTC,SHuG2B,EAEG,MArbtC,uBACiB,oBOuC+B,MPtCV,QOjE3B,CPiEL,UGuVY,ctCzDd,OAwByB,SAAgB,CAxBzC,KACF,OAEA,SAD8C,CAA1B,GACpB,GAE0B,kBAAX,WDneZ,gBoC8LsD,CAAN,KAArD,QnCkRM,OACA,GA6BC,OAGA,cAHA,S2Cnf6B,EAT4B,GAAf,sBASb,EAT4B,GL0iBlE,sCtCxCS,OANA,OsCgDY,wBACnB,2BAEuB,KAAS,cAAhC,OAHmB,StC1EO,QAAO,OAAlB,GAAW,KAAO,KAAlB,IsC+EnB,UlCnRI,sBJ+ME,+BW6DF,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,MAyI6B,CAxIhB,KAAW,GAAO,GAAF,CAyIR,YACO,OAAO,OAAM,C8BjiBlC,I9BkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,e2BuQF,G,iBtC7MU,OACA,OsC8MR,CAAQ,QtCjLC,OsCkLL,GAGJ,uBACA,UACA,UtCvLS,OsCwLT,GtC/MS,asCiNuC,GzClrBrC,OyCmrBU,OAAoB,OAFvC,kCADoC,CtCxL7B,OsCwLU,CAAnB,WAKA,ctCvN4B,KAAO,KAAlB,GsCwNnB,ezCpqBI,wCOuHuB,CAAmC,CACpD,SAGkB,CAAX,gBAIO,CAAmB,CAA1B,IP/Hb,YOqHqC,oBAaf,GDtGjB,8CCkGkB,CAAqB,GDlGvC,iDC8FkB,CAAe,GD9FjC,+BmCuwBH,gBAES,QACQ,GAAF,QACf,KACF,MzCxyBA,0BOqLoB,sBACG,GAAuC,CAK5C,sCAGZ,iBAHA,oBAAsB,CAAmB,CAAzC,CAGA,QDlKD,oCCyKW,GAAL,GkComBf,alCjnBU,cD5JD,2CCuKM,IkCsmBf,MlCprByC,WA0BxB,UP/Ib,wBOqHqC,UkConBzC,K,czC3vBa,IyC4vBkB,KzC5vBlB,UyC4vBP,aACF,sBAGF,6BAKE,StC3SM,OACA,OADA,OiBtQH,OjBuQG,GsCgTa,KACH,OADC,UAEjB,QACW,KAAP,OtCrTY,OiB1Rd,OjB2RI,OACA,GsC8TM,UAGK,YAAb,MACK,sBA2LX,8BACiB,OAAc,EAAc,SAAvC,SAD+B,CAAlB,KAAnB,GAxLM,SACK,mBAEH,CAAF,aACF,GACO,mBzCryBA,MyC0yBT,KAplBF,eAjJO,MAAD,MACuB,WACZ,CAAb,QtCibK,MsCkTP,ctC5U0B,KAAO,KAAlB,GAAW,KAAO,KAAlB,GAAW,KAAO,KAAlB,GAAW,KAAO,KAAlB,OsCsSA,SAyCnB,eA9BM,UACA,UAGA,UAGA,KAhkBJ,uBAo3BF,C,EACE,GApXF,K,SAEE,aACA,SApgBA,oBAsgBF,WAvpBS,MAAD,MACuB,WACZ,CAAb,QtCibK,MsCkIL,GACF,QAljBO,CAkjBP,IAGF,QACA,KACA,WA/Ec,UAAiB,GzC/hB7B,kBOwQA,UkCyPG,MAAD,EHUK,2BGTC,WH+F8B,MGlEpC,OtCvFI,OACA,OsC0FiB,GAAI,KAAJ,GtC1ErB,UAE0B,eAAX,WDneZ,WuCmjBP,UtC/F4B,KAAO,KAAlB,IA0BR,OsCyET,KtChFS,gBsCiFqB,WtC7EvB,IsC+EQ,cACmC,GAAJ,UAA5C,GtC7EO,KsCyET,MAsEA,wBACA,KtChJS,OsCyET,KtChFS,gBsCiFqB,WtC7EvB,IsC+EQ,cACmC,GAAJ,UAA5C,GtC7EO,KsCyET,MA4EA,wBACA,QAgFA,OAAqC,CAArC,GAGA,YACe,GACjB,SAVE,sBACA,0BApgBA,sBlCoEE,wBkCmjBJ,G,StCrVW,asCsVoB,kCAIP,mBACpB,+BAE8B,GAAtB,KACa,cAEF,eADM,OtClapB,UsCkaQ,GACM,kBALnB,YAUA,gCACgB,OAAe,GAAkB,EACjC,KAAmB,GAD7B,EAEiB,aACE,oBAJO,CAAlB,KAAd,UAVA,sBAkBM,aACc,CAAd,EAEiB,mBAAT,sCtCxWe,WAAgB,CAxBzC,KACF,aAC8C,CAA1B,GACpB,GAE0B,kBAAX,WDneZ,gBuCm2BQ,MAAT,GtC7YJ,YACO,asC6YyB,GAAX,GAAe,OAAf,ctCtYjB,OAwByB,SAAgB,CAxBzC,KACF,aAC8C,CAA1B,GACpB,GAE0B,kBAAX,WDneZ,gBuCo0BsB,UAoC/B,StCzYM,wBATF,wBASE,6BsCnRJ,8BtCkSS,GsC4cT,atCneS,asCoe8B,SAA0B,KAC1B,KADnB,KtC7cX,OsC6cH,OtCreJ,OACO,KsCseK,KAAc,OACxB,QAJiC,CAAlB,KAAnB,OA9uBA,sBtC0QE,wBsC2eF,KAtOF,G,qBA2OE,oCACiB,OAAX,QAD+B,CAAlB,KAAnB,GAzOI,aMhvB+B,KNkvBjC,UMzuBmC,eN6uBnC,gBACA,UMrvBmC,OAOA,KAPA,GNsvBnC,GAFA,KAEA,KAC+B,UAAxB,QAEW,aAAhB,GA5hBJ,aA6hB2B,MACvB,OACK,MAIX,WAniBE,2BtCwSS,KANA,KA0LT,GA1LS,WA4LA,CAAL,iBApNF,2BACO,EAqI8C,WArI9C,EAqIkD,GAAF,SAmFrD,OACS,OA1NX,aACO,EA0NK,YArF2C,KAuFrD,OANuB,CAAR,KAAnB,OAvNE,gDA6NE,8BAGU,CAzLC,GAAT,EAPyB,SAAgB,CAGhC,GAAT,EACF,OAKuB,QAAN,aAAuC,OAAZ,CDxfzC,KC0fC,QAsLV,QIlW6C,KP7UzC,yBOqLoB,sBACG,GAAuC,CAK5C,sCAGZ,iBAHA,oBAAsB,CAAmB,CAAzC,CAGA,MDlKD,+BCyKH,CAAc,GAAL,GAwI6C,eArJlD,YD5JD,oCCuKH,GAAS,IA0I6C,UP7UxD,wCOuHuB,CAAmC,CACpD,SAGkB,CAAX,gBAIO,CAAmB,CAA1B,IP/Hb,YOqHqC,oBAaf,GDtGjB,8CCkGkB,CAAqB,GDlGvC,iDC8FkB,CAAe,GD9FjC,+BmCixBW,KzC7yBhB,4BOqLoB,sBACG,GAAuC,CAK5C,sCAGZ,iBAHA,oBAAsB,CAAmB,CAAzC,CAGA,QDlKD,oCCyKW,GAAL,GkC0mBf,elCvnBU,cD5JD,2CCuKM,IkC4mBf,QlC1rByC,WA0BxB,UP/Ib,wBOqHqC,cJ+ZrC,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,MAyI6B,CAxIhB,KAAW,GAAO,GAAF,CAyIR,YACO,OAAO,OAAM,CDjiBlC,ICkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,oBAsIE,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,MAyI6B,CAxIhB,KAAW,GAAO,GAAF,CAyIR,YACO,OAAO,OAAM,CDjiBlC,ICkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,esC2dF,G,gBtCnYW,OsCoYT,OACA,UtCrYS,YsCsYS,CAAd,OACF,wBAiFF,4BACiB,OAAX,QAD+B,CAAlB,KAAnB,GA3E4B,cAC1B,oBtC9YO,OAMA,cA8GA,CAAL,oBsCyQkC,StCnQ3B,KAAK,KsCmQN,EAAN,KAAkC,KAAlC,MAAM,SAAN,CAAkC,OAAT,CAAzB,GtClQI,GAnLA,8DACN,kCACA,kCA+Kc,CAAd,QAF0B,CAAT,KAAnB,OAYF,GA3LU,kEA4LK,MA3LX,kCACA,4CA6LgB,KACK,SADD,CAGT,KAAI,YsCmPP,EAAN,WAAkC,EAAlC,MAAM,SAAN,CAAkC,OAAT,CAAzB,CtCnPI,IAEM,OAAI,YsCiPR,EAAN,WAAkC,EAAlC,MAAM,SAAN,CAAkC,OAAT,CAAzB,CtCjPI,IAEQ,OAAR,UACG,MAvMH,0CAuMS,MAtMf,kCACA,kCA4Lc,KAAd,QAHJ,CAAE,KAnIS,YsCiZT,WtCxaS,asCyaO,KAAV,EAEJ,aACc,CACK,KAAf,StCtZG,YsCiZ4B,CAAlB,KAAnB,IAQmB,KAAf,EACkC,OACpC,cAEJ,UAzBE,wBA2BF,G,UMp5BuC,YAZF,GAYE,GNs5BrC,4BtCzbE,WACO,SsC0bY,WAC0B,UAF/C,GACO,eADP,gBMj6BqC,eNo6BrC,gBtC7bE,YACO,KsC8bT,WACA,UAA4C,QAE/B,UAAT,GACF,UtCncA,mBAwBO,GsCmbT,yBtC1cS,esC2cgB,KAAQ,GAA3B,EACoD,OAAtD,atCrbK,YsCmbqC,CAA3B,KAAnB,IANE,WAEJ,UtCvcI,gDsC+bF,sBtC/bE,0BsCkdJ,G,etC1bW,SsC2bT,WAEA,oCACgB,SAGW,KAAb,KADO,KAAb,UAH6B,CAAlB,KAAnB,QtC3dQ,OACA,GAyCJ,UAGa,OAAX,MAPyB,OAGzB,EACF,UAKuB,QAAN,YAAuC,GDxfrD,SC0fC,GA1CC,OAoHwC,GsCuWzC,6BtC9bC,OsCgcT,GtChe4B,KAAO,KAAlB,GsCienB,SAZE,6B3B7YE,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,EACa,OAAW,GAAO,GAAF,CAyIR,YACO,OAAO,K8BjiB5B,I9BkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,KkCja0B,GlCia1B,O2BkmBF,K3BlmBE,SdhaW,UyCogCX,4BAEW,OACX,OzCr/BE,wCOuHuB,CAAmC,CACpD,SAGkB,CAAX,gBAIO,CAAmB,CAA1B,IP/Hb,YOqHqC,oBAaf,GDtGjB,8CCkGkB,CAAqB,GDlGvC,iDC8FkB,CAAe,GD9FjC,+BN5BL,oBOwQA,UkCyPG,MAAD,IHUK,kCGTC,OIxgBJ,OADA,OP+ckD,iBAElB,OApShC,SGk1BN,aHhqBc,mBAEU,WACtB,GADsB,YG8pBxB,OzCx/BE,4BOqLoB,sBACG,GAAuC,CAK5C,sCAGZ,iBAHA,oBAAsB,CAAmB,CAAzC,CAGA,QDlKD,oCCyKW,GAAL,iBAbL,cD5JD,2CCuKM,IkCuzBf,SlClvBI,0BAnJqC,WA0BxB,UP/Ib,wBOqHqC,QkCg4BvC,+BH1YwC,OAlNlC,aA0CN,SOrOkD,OAvGzC,eAAI,CP2SX,gBO3SW,CP4SX,gBAEoD,OOnT9B,CAjJT,GAAE,KAiJO,CAjJM,CAAP,OACV,GAAN,CAAH,KACQ,CAAR,SACS,GAAN,CAAH,KACQ,CAAR,KACA,KACQ,CAAR,SACS,GAAN,CAAH,KACQ,CAAR,GACa,CP2buB,KAGG,EO1MO,eAvGlC,WAAH,GPmTL,sBOnTK,CP0TL,SAGY,cAepB,EATgE,aO5Nd,CP4Nc,OOnUnD,CPmUmD,OAMnD,OACA,OAzB8B,EO1MO,WPkO1B,KOzUR,OAAH,GPmTL,sBAyBR,IAjCE,sBACA,wBAvDJ,G,SAqP0C,aAzOlC,IAmPkC,SAnPlC,UACoB,CAtCmC,GAqHL,aAElB,iBA9EzB,CAyO8B,KAzO9B,SAzCgD,OAqHL,aAElB,QAzEpC,OAgOsC,SA9SmB,CAgTb,GO5erC,WAAI,CPkRP,EAAR,OAAQ,IA4NqC,SApSyB,CAsShB,IA3NlD,WAXA,wBG4nBJ,K,SAGa,OACX,OzCnhCW,UyCohCX,+BlCzrBkE,YPzUhE,sCOuHuB,CAAmC,CACpD,SAGkB,CAAX,gBAIO,CAAmB,CAA1B,IP/Hb,YOqHqC,oBAaf,GDtGjB,8CCkGkB,CAAqB,GDlGvC,iDC8FkB,CAAe,GD9FjC,+BN5BL,sBOwQA,UkCyPG,MAAD,IHUK,kCGTC,OIxgBJ,OADA,OP+ckD,qBG8jB5C,GAAd,KAAc,KACJ,qBzCvgCN,kBOwQA,UkCyPG,MAAD,IHUK,kCGTC,eH7Wc,GA4cgB,SA5SmB,CA8Sb,GAEH,SAtSyB,CAwShB,I/B1RT,KP7UzC,qBOqLoB,sBACG,GAAuC,CAK5C,sCAGZ,iBAHA,oBAAsB,CAAmB,CAAzC,CAGA,MDlKD,+BCyKH,CAAc,GAAL,iBAbL,YD5JD,gCmC++BP,SACA,wBAIA,SlC70BI,GAAS,IkC+0Bf,SlC1wBI,gDAnJqC,WA0BxB,UP/Ib,wBOqHqC,QkC44BvC,0BA4CoB,UAAhB,IAIN,EAHW,GAGX,GAGE,QAjfF,G,SACE,WAEa,OADL,KACK,KACN,KAAY,GAAK,OAAM,CAA1B,EAKwC,OtCtGnC,SA6JT,0BACoB,WAAQ,CAlL1B,eACO,EAiI8C,GAAE,GAiDnD,eAFM,GAAZ,IsCtDQ,KAAqB,EAAK,OtC3HhC,YACO,asC0H6C,GAAH,CAA/C,EAGJ,8DAEE,IACJ,SAfE,sBtClHE,kDsCqIJ,G,SACE,SACQ,OAAF,KACO,YACP,KAAY,GAAK,OAAM,CAAzB,EACF,0DtCtII,OAwByB,SAAgB,CAxBzC,KACF,aAC8C,CAA1B,GACpB,GAE0B,kBAAX,WDneZ,YuCwmBT,SARE,sBtCjII,yBsCmGN,G,SAEe,OADL,KACK,KACP,KAAY,GAAK,OAAM,CAAzB,EACoC,OAAJ,KAAlC,WAGJ,UAyEA,G,SACE,SAGa,OADL,KACK,KACN,KAAH,GAEE,OAAyB,GAAK,OAAM,CAAtC,GACe,OAAU,OAAV,GAA8B,OAA9B,GAAkD,OAAlD,GtC5Lb,OAwByB,SAAgB,CAxBzC,KACF,aAC8C,CAA1B,GACpB,GAE0B,kBAAX,WDneZ,YuC2pBT,SARE,sBtCpLI,yBsCyKN,G,SAGe,OADL,KACK,GACP,KAAY,GAAK,OAAM,CAAzB,MACA,IACN,etClHI,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,MAyI6B,CAxIhB,KAAW,GAAO,GAAF,CAyIR,YACO,OAAO,OAAM,CDjiBlC,ICkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,eA2MF,G,MACW,CAAL,gBANuD,mBAYhD,KAAK,KACH,EAb0C,KAAE,aAatC,EAlLjB,KACA,eA+Kc,SAFY,CAAT,KAAnB,OAYF,CAAE,KA3LQ,iBA4LK,EA3LT,KAAF,KACA,qBA6LgB,KACK,SADD,CAGT,KAAI,cAAoB,EA5BsB,GAAF,CA4BjD,IAEM,OAAI,YAAQ,EA9B6B,SA8BjB,EA9BqB,GAAF,CA8BjD,IAEQ,OAAR,QACG,QAAM,EAtMb,KAAF,GACA,WA4Lc,KAAd,QAHJ,CAAE,MAiBF,G8CxmBA,G,SACuB,WAjBjB,gBAAiC,GACjC,UAAkC,GAClC,UAFA,OAMA,UAAiC,GACjC,UAAmC,GACnC,UAFA,iBAYJ,sBAEF,WAGA,G,SACoC,YAAC,KAAD,IAxC5B,mBAwCN,OAvCkC,KAuClC,EAqCF,K,SAEQ,cAAL,KAAG,KACO,OAAD,GACN,KAAK,kBACT,OAFqB,GAErB,EAIF,G,SACyE,OAAD,GAAtC,mBAChC,OAAgC,KAAhC,GArBC,KAAG,OACJ,EAIF,G,SACqC,OAAD,GAzE5B,mBAyEN,OAxEkC,KAwElC,QXshBwB,OADG,6BnCzKpB,QAtCyD,EAI5D,OA/B0B,GAkC9B,qBAlC4B,CAmC5B,SACO,MmCyML,QACA,UACI,YAcwC,GAQN,SAjZtC,QAEA,qBACyB,OADqC,CAAN,KAAxD,OAyXI,UAK4C,IAA1C,GnCrkBH,UAAD,MACe,GAAF,eA2W+C,EAahE,EACa,SAAW,GAAO,GAAF,CmCuP3B,IAxCF,EnCtNA,sBACA,sBmC2ME,sBA1XA,uBnCoLF,kBmCgOa,WACP,mBAMK,GnChmBN,UAAD,MACe,GAAF,gBmC+lBF,OAAT,EnChmBF,MACa,EAAE,GAAF,SA0UjB,OmCyRe,OAFoD,KnCjRrC,GAAF,CmCmRb,QADN,WAEL,UACA,GnCtmBA,MACa,EAAE,GAAF,SmCqmBb,QnCtmBA,MACa,EAAE,GAAF,eA2W+C,EAahE,EACa,OAAW,GAAO,GAAF,CmCmPpB,wBAnBQ,CAgBjB,EnC/RA,sBmC0RI,wBACA,wBnC7OJ,emCnKF,G,aAwXgD,GAQN,aAjZtC,QAEA,4BACyB,OADqC,CAAN,KAAxD,IAqByD,OAAzD,EOnBgD,SAvGzC,aAAI,CP2HuC,gBO3HvC,CP2HL,UAsNgD,YAhNlD,OACuB,UAEZ,OADX,GAuWkC,SA9SmB,CAgTb,QAlXmB,CAAN,KAAzD,IAkBF,SAzCE,uBA8BI,wBY9P6B,UAAgB,CAAvB,EAS9B,G,SlDrBa,IGu0BO,G+ChzBV,KlDvBG,UkDyCT,c/C+cO,OA+VW,qBAAmB,YAAnB,U+C1yBtB,UASgB,UAAV,GACJ,gBACF,EAEA,C,EAA4B,GAEiC,GAMvC,WAAhB,GAA0B,KAChC,GAME,GACA,GACA,OACA,GACA,GACF,GAqEE,GAA2B,QAE7B,GA7DA,K,cACY,SAAO,CAAb,EAIgB,OAIA,4CAGhB,EACF,kCAIW,UAAT,UACF,wCAIU,OpDvFiB,OACtB,WAAW,QoDmGkB,OAAb,OAbP,OAAV,EAEK,SAAc,UAInB,qBAO8B,OAAb,UAJL,YAIhB,sBAGW,GAAQ,aACnB,wCAKuB,eAFnB,SAAe,OAAH,GAAa,iBAE3B,mBAEc,OAAV,EACF,gBAEY,OAAV,QAAQ,KAAR,EACF,iBAGR,chCpIa,UiCNP,IpC6BA,kBCrCE,OAEJ,SEGS,UiCKL,WPYC,mD9BsBF,MAAD,IACa,EAAE,GAAF,gBDEP,QADG,YKLO,OAChB,IADgB,OiCzBpB,OAwCF,C,IAnCM,KACA,QpCeA,oBCrCE,OAEJ,SmCsBO,IAAsB,uBjCiBX,MAChB,GiCfG,IAAsB,iBA+BzB,MACF,OACF,K1B9CF,G,yBAEQ,MAEiB,IAAjB,EACF,cAEO,cAFP,0BAUY,CAAV,QX2X0D,EAahE,EACa,OAAW,GAAO,GAAF,cY5SW,CDpFlC,kBG6FK,CAAL,UACsB,GAAK,CH7FhB,QXsVa,WcpPL,SAHQ,GAAN,KAAY,CAGpB,KAF0B,MAAnB,GAEsB,CAAjB,GAAQ,CHlGtB,aAEP,OAAqB,CAAV,cAZL,CAaV,MACF,SAEJ,WXwXA,aW1XI,wB0BMN,G,SjCXsB,UiCapB,OjCboB,IiCcI,MADxB,aAEA,UAXI,MpCLA,oBCrCE,OAEJ,SmC0CO,I1BgBH,aCyMiB,CCrPd,MD6JgC,GDhHnC,KACK,8BAEI,MPvBK,UiCwDtB,EAnDE,I1BcM,aCyMiB,CCrPd,MD6JgC,GDhHnC,YACK,O0BmCb,Y1BjCiB,M0BiCjB,QCgDI,kBACA,WAGe,EAsCX,iC1BtGa,CAAV,QEoCM,CAAT,MACc,aACT,GACsB,CAAb,KACJ,KAAkB,CAAZ,CAAX,YwBqEJ,EACW,axB9CiB,adqS5B,UAIA,UAJA,MsCxPc,CAAJ,W1B/H4B,GAAjB,CEkFO,GwBsDT,CAAF,OAba,KAAhB,CAAnB,GAvCI,sBACF,WACe,wBAAjB,aAAqB,WnCrJH,CFwBb,OqC8HiC,KrC9HjC,IqC+HP,EAVE,sBACA,2BD9BqB,oBrCoSyC,EAahE,EqChTI,OAAiB,OAAF,GrCiTN,OAAW,GAAO,GAAF,CqCjTW,GAApC,ErCzEC,UAAD,MACe,GAAF,eA2W+C,EAahE,EACa,SAAW,CqC7SlB,ErC6SyB,GAAF,CqC/SE,OAEzB,EAFyB,GAAV,KACiB,OAArB,KACX,aACF,SAGJ,yBAEmB,UACnB,IrCqSA,0BqCxSA,wBjCvFoB,UiCiHtB,GjClJa,UiCqJJ,CAAP,GjCpHoB,UiC0HtB,GAGE,UAEF,GjChKa,UiCqKJ,CAAP,QCxCE,kBACA,WACe,EACX,SACE,iBAQR,EAJuB,0BAAT,gBnC1IM,CFoBb,OqCwHiC,KrCxHjC,IqC0HP,IAZE,sBACA,2BAwDI,0B1BtGa,CAAV,QEoCM,CAAT,MACc,aACT,GACsB,CAAb,KACJ,KAAkB,CAAZ,CAAX,YwBqEJ,EACW,axB9CiB,adqS5B,UAIA,UAJA,MsCxPc,CAAJ,W1B/H4B,GAAjB,CEkFO,GwBsDT,CAAF,OAba,KAAhB,CAAnB,gBAwB6C,CAAf,OAC1B,K1BjKwB,K0BmK5B,SACkB,e1B5JA,CAAd,GAAc,WAAF,OADwB,CAAN,KAAhC,G0B8JO,aApGsC,KAAtC,KACP,gBA+FE,CAON,EALE,wB1B9EJ,G,MAgJY,QXtPN,cCrCE,OAEJ,iBU6IS,C2BzIiB,K3ByItB,IACE,wB2B1IoB,KA6B1B,YAkBqB,eAjBJ,KAAV,KACH,WACF,GAAM,UACH,SnCEa,GQ8GpB,I2BpHE,wB3BqRJ,G,UAzCkC,4BADU,GAEpC,SThRc,CFoBb,sBD0ZG,CY1JR,QAfqB,CC1Pd,CD0QgC,kBAhMtB,CAAV,UEoCM,CAAT,MACc,aACT,GACsB,CAAb,KACJ,KAAkB,CAAZ,CAAX,MAiBL,mBAO6B,adqS5B,UAIA,0BYtHmB,KAAxB,2CACE,EAAuB,eAAJ,KACT,CAAN,iBAnCA,SA9OS,U0BsDgC,SAAtC,WACgB,Y1ByLjB,qBAlPc,UAEP,YAAb,KAAiB,KAqPF,OAAX,E2BxSoB,cAItB,QAEK,cAIP,KAAY,SAEP,2B3BoRsB,KAAV,CAAnB,QAkCsD,KAA9B,KAAxB,GASI,uCA1CE,SA9OS,U0BsDgC,SAAtC,WACgB,Y1ByLjB,qBAlPc,UAEP,YAAb,KAAiB,KAqPF,OAAX,E2BxSoB,cAItB,QAEK,cAIP,KAAY,SAEP,2B3BoRsB,CAAV,KAAnB,IA2CI,IAKA,KAhSwB,KAiS1B,G2BjVwB,cAItB,YAEF,CAAO,YAIP,KAAY,SAEP,mB3ByUT,YAvEE,sBAmEE,wB0BtHN,G,SACgD,OAAlB,SAAU,CtCwN/B,UsCvNoC,KAEC,iBAtHK,KAAtC,cACgB,YAwHrB,O1BtLK,OACP,mBACc,CAAZ,MAAY,QAAF,OADiB,CAAV,KAAnB,I0B2LO,qBACmB,CAAjB,OACb,SANgC,UAD5B,aAEA,U1BrL0B,OAsG5B,SA+HQ,QXtPN,cCrCE,OAEJ,eU6JK,C2BzJqB,KAiBtB,QACM,SACC,OAAT,CAAO,UAAE,CAAM,oBAGL,WAAF,GACD,WACF,enCWW,GQuHpB,EAJE,wB4BvKF,KAAM,GACR,ECMA,G,SzC6NsD,GyC7N9C,OADA,OCC6B,KAAN,KASQ,eDRnC,aACF,WACF,G,SCDuC,kBDEnC,aACA,KAAO,GACP,GACmB,KAAe,OAAlC,GzCuNmD,GyCtNrD,WA2CF,G,SAE+B,iBAC3B,OACyB,UADzB,aAEF,MACA,MAoCF,G,SAE+B,iBAC3B,cACoC,UADpC,aAEF,MACA,MAGF,G,SAE+B,iBAC3B,8BACF,MACA,MAGF,G,SAE+B,iBAC6B,UAAxD,aACF,MACA,OErGF,G,SAEiB,uBAGb,QACA,KAEa,UACX,gDADW,+BAWf,GAEA,uBAIF,G,SAEiB,uBAGb,QACA,KAEa,cACf,2BADe,IAIX,MAHJ,aAKA,GAEA,0BAQI,QAQN,EAPM,OAEkB,SAAN,KACF,OAAF,IACR,OAAO,CAAO,EAAG,YAAjB,KAGN,OAGM,QAYN,MAJ8B,OAAZ,MAIlB,GAEA,G,SACuB,UAAjB,O3C0YI,OACA,GAyCJ,UAGa,OAAX,MAPyB,OAGzB,EACF,UAKuB,QAAN,YAAuC,G8BxfrD,S9B0fC,GA1CC,OAoHwC,G2ClgB5C,aACO,SADP,kB3C2aI,K2CzaT,G3CyY4B,KAAO,KAAlB,I2CxYnB,SAgRA,G,SACE,iBACF,aA9QM,SAMG,SAAP,qBACE,gBAEO,IAAU,EAAG,QAAS,CAAzB,OACE,GACA,YAGH,GARE,KAAP,SAcQ,OAAF,EACC,YAIJ,OADA,GAlBI,KAAP,MAKQ,IAkBL,IACL,EAvBI,6BAiDW,OAAb,OAGW,OADE,OAGG,KbtIT,QauIO,GJvJc,OIwJ5B,KJzGuB,SAjBJ,KAAV,KACH,UACI,UACH,QI0HL,GJ3J0B,KIwJ5B,MA7Ba,OACC,OADH,OAEb,KAoBe,OAAb,OAGW,OADE,OAGG,KbtIT,QauIO,GJvJc,OIwJ5B,KJzGuB,SAjBJ,KAAV,KACH,UACI,UACH,QI0HL,GJ3J0B,KIwJ5B,MAKF,GAGA,G,MACc,G3C+oBJ,OADA,OADA,OADA,WADA,OAKmB,CAAO,YAA9B,IuCjzBwB,cAItB,YAEF,CAAO,YAIP,KAAY,SAEP,kBIyJU,O3CmRZ,U2CnRM,GACf,EAEA,C,IJjDqD,GIkDxB,cACnB,KAAI,GAAW,kBJlEH,CIsEtB,GAKuB,UAAjB,G1CrKG,yB0C0KP,yBACF,GAGuB,UAAjB,G1CtKG,oB0CwKT,GAEA,G,IACa,OAAG,KAAV,GAGM,mBAAG,UAAS,WAAlB,UAKS,kBAAG,kBAAhB,gBAQW,OAAO,CAAK,MACjB,oBAEgB,SACC,KACT,gBAAU,eAElB,uBAbG,YAaH,QACM,IAES,SACN,OAET,YACa,KAAL,CAAF,IACN,+CAvBO,IA+Bf,IAME,UAoBI,YAEJ,YAlBA,mBA1K4B,OAAZ,CA0KhB,QAEW,OAFX,OAGM,CAAF,ObzOG,ea2OL,GAAS,IAeb,MAJM,gBAEJ,YAlBA,mBA1K4B,OAAZ,CA0KhB,QAEW,OAFX,OAGM,CAAF,ObzOG,ea2OL,GAAS,IAmBK,UAEZ,oBAD2B,CAApB,QblQJ,MasQP,OAAc,IAEhB,KAGE,YApNI,WAQwB,OAAZ,aA+MF,GADgB,KAE9B,KAwBA,mBAEc,OAAW,GACnB,KAEJ,aAJwC,KAAxB,CAAlB,IAMF,GAoEA,KAjEE,iBAEyB,UACnB,KAEJ,WAJwC,KAAxB,CAAlB,IAMF,GA8DA,GA3CuB,OAAe,CAApC,GACF,GCvKM,cAEa,QACjB,UACA,KACF,GAvES,UAAY,oB5CiZV,QANA,M4C1YP,IAgGJ,GArBA,G,SAhKM,cAEiC,YACE,SACU,OAAlB,GdnBxB,UcsBP,iCAOkB,OACZ,aAEC,KAAD,EACF,oBAGsB,SAAF,CAEN,KAAa,WACvB,cAC2C,EACvB,KADtB,WAOF,wBAnBsB,CAAP,KAAnB,SAuBI,cAC2C,EACrB,KADxB,QAIF,OACA,OACA,IAsHA,UA3KF,G,UACiC,OAR/B,KAEkC,WAAoB,KADtD,wDAVU,YACH,CAAH,EACF,OACa,OADb,iBAiBF,yBACyB,KAAzB,IACA,KACA,wBACF,UAdE,uBCSF,G,SACE,YACY,GACM,YACT,qBACP,UAKO,OAAO,GAAZ,EACF,eAKE,0BAKJ,QAEW,WAAM,CAAb,EACsC,SAAuB,OAAS,KAA9D,QAOH,OAAL,GAC2B,KAA7B,QAGe,QAAb,EACF,MAKJ,WAvDA,G,UAEE,KACW,SAAK,GAAV,IASR,EANQ,OACI,aALV,QAUF,GA0DA,G,IACM,UAKG,aAMG,CAAN,WACiB,QAE+C,CAAtD,GACR,MA8BR,gBArBc,OAEyC,CAAjD,SACM,CAAJ,EAIQ,UAHV,KAiBN,QA3BI,MACmC,KACrB,eAEK,IAeP,OADE,OADD,OADC,OAKhB,QACgB,UAAF,GAAE,EACP,QAFT,KAGA,GAEsB,QACxB,KClJ0B,EAO1B,G,YAES,EAAJ,EACH,KAAM,KAmBR,YAhBS,CAAJ,EACH,KAAM,KAeR,YAZW,CAAN,GACH,sBAGK,gBAKY,MAAV,CAAU,IAEH,GAChB,GC5BC,GACO,UAAP,ECyCD,C,KAEA,EAMA,EAGA,EACA,CACA,EACA,CACA,EAEA,EAYA,C,EACA,EACA,CACA,EAnDA,C,EACA,EAIA,C,EACA,GCLA,G,cjD4dU,OACA,OAyCJ,GiDlgBJ,gBjD4wBM,QADA,OAFA,OAFA,GAMY,a8B9vBX,ISpBI,YAAM,OACT,IUOI,iBAQA,uBjD2dN,WAwByB,UAAgB,CAxBzC,KACF,aAC8C,CAA1B,GACpB,GAE0B,kBAAX,Y8BneZ,iB9BowBD,OADA,OAFA,OAFA,GAMY,Y8B9vBX,ISpBI,WAAM,OACT,GUsBE,mBACA,sBjDmdJ,OAwByB,UAAgB,CAxBzC,KACF,aAC8C,CAA1B,GACpB,GAE0B,kBAAX,Y8BneZ,YmBcT,UjDidM,uDA6DF,gBACA,YAhgBG,UAAD,MACe,GAAF,eA2W+C,EAahE,OAyI6B,CAxIhB,KAAW,GAAO,GAAF,CAyIR,YACO,OAAO,QAAM,C8BjiBlC,I9BkiBM,KAAO,KAAlB,GAEgB,OADV,OAER,EATE,sBACA,uBAvIF,iBAwFS,OA+VW,qBAAmB,YAAnB,cAzUC,GiDpfuB,GAGrC,SAAP,EAKF,C,OjDuY+B,EiDtY7B,sCAC2E,CAA9D,GAAb,GAIO,OAAP,GAwBkB,KAnBL,KACG,KAAF,KAwBM,OAAV,OAKY,OAAZ,GAEZ,EAIA,G,SAFM,aAKJ,YACF,UAEqD,EAErD,K,WAEE,MACe,OAAsC,OAArD,iBAAsB,CAA0B,CAAhD,GC1FE,uBAGiC,uBACW,sBhBfhD,C,UACE,IACF,GAMc,KAAc,OAAd,GACd,GAEA,K,UACE,S9BHW,QFST,EgCLE,SAAgB,MAET,KAEA,oBAAH,CAAJ,GAEA,WAAG,CAAH,EAIE,MAAO,GAAP,EAGF,qBAGmB,OACU,oBAC/B,2CAGA,kCAEkB,UAAhB,UACe,MAAjB,YAGY,KAAT,SAAF,SACI,CAAH,EASG,SACT,UhCjCI,uBgCyBuC,iBAAvC,MACkC,WAAlC,IAE2D,QAA3D,wBACA,KAA+B,YAA/B,IACA,OAuBJ,G,SACM,WACS,QACH,CAAJ,GAOU,KjCxCZ,cCrCE,OAEJ,MgC4EE,aAAgB,gBAClB,UACC,OACO,WAAG,UAAT,GAEO,2BAGT,WAAkB,MAAlB,WApCE,+BAIG,UAAD,OAEI,GACH,OAAgB,EAAI,KAArB,IAMI,cAXuB,CAAjB,QAAhB,U9BXoB,G8BgDtB,SAlB+D,OAAS,OAC3D,OAAS,OAAS,OAAS,OAAS,WAD3C,CACoD,KADpD,0EAEA,OAduC,iBAAvC,MAC6B,WAA7B,IACA,OAqCN,G,aACQ,OACK,OACD,GACN,mBlC1DC,MAAD,IACa,EAAE,GAAF,SA6YV,YkC7UM,SAAO,KAAlB,cACe,GAAT,GACK,aACD,SACH,CAAH,EACS,KAAO,KAAlB,cAGQ,GAGV,OAEwB,WAAM,GAAkB,KAAzC,UAAD,EAES,KAAO,KAAlB,GACA,QAGQ,OAAG,KAAH,QACS,iBAKrB,YAdiB,KAAjB,IAcA,SA1B6C,ClC8UxC,sBkC/ST,YAqEc,UACd,GiBjMA,G,SAVS,UAAD,KACJ,+BACoB,KAAF,CAAlB,eACqB,KAAnB,iBADoC,QAAlB,GAAF,CAAlB,IAEiB,WAQrB,UAUA,K,UAGsC,QADT,IACS,UAApC,gBACoB,SADgB,EAClB,CAAlB,EACqB,WAAU,OAAS,uBACtC,YAEiD,QAAU,iBAD9B,GAC7B,kCAJ4B,CAAV,OAAF,CAAlB,IAOF,UALI,uBAYJ,C,IACkB,qBAAhB,GAQF,G,iBACoB,SACX,wBAAgB,UAAyB,QAAhD,QAAsE,UAAtE,UAEM,IAjBN,2BACA,KArBwB,KA6CK,KAAmB,OA9CrC,OAC0B,CAAb,GrBPjB,UqBSP,OAAQ,GA6CW,qBAEf,6BAAmB,iBACC,MACf,QAAW,KAAK,+BAAwB,MAAxC,QAAW,KAAK,cACnB,IApDkB,SAqDgB,CAAwB,UAtDrD,OAC0B,CAAb,GrBPjB,UqBSP,OAAQ,GAoDN,oBALqB,MAOM,UAA3B,QAAiD,MAA1C,QAAgB,MAxDD,KA2DsB,OA5DnC,OAC0B,CAAb,GrBPjB,UqBSP,OAAQ,IAmHY,aAAF,CAAlB,MAC4B,eAAU,GAAhC,UADwB,CAAV,OAAF,CAAlB,IA1IE,wBAC+B,aAA/B,EAAmC,QA2I1B,SAAU,KAAS,eAxD1B,IACN,UA1BM,2BAEA,KApBJ,UAA0B,UAA1B,gBACA,KA1CE,sBAyCF,UAA0B,UAA1B,gBACA,UAgEI,OAGY,eAEX,GAHkB,OAElB,OA3DW,WAAT,QAAP,WAA6B,MAAb,OAAT,QAAP,IAuCM,OACJ,yBAIwB,YAAoB,CAA1C,SACwC,IAoBvC,OADA,QAEP,GAEA,G,SnD5EO,UAAD,MACe,GAAF,SmDiFZ,iCnDgUE,EmDhUF,QAAD,MAEE,IAEJ,OAA6D,OAA7D,oBAGU,SA1BR,WAGY,eAEX,GAHkB,OAElB,OA3DW,WAAT,QAAP,WAA6B,MAAb,OAAT,QAAP,IAuCM,OACJ,yBAIwB,YAAoB,CAA1C,SACwC,IAoBvC,OADA,OAkBM,QAAM,OAAjB,QAEF,cAcE,uCACA,WAEyB,OADH,OADA,aAGtB,IACF,EAEA,C,IAAuD,OAA5B,GACF,aAAhB,GACT,KCpKA,C,KC4OA,IADA,oBAZA,QAHA,gBAvBA,gBAtBA,QAFA,IAJA,eALA,QAHA,SAHA,WAbA,IAvIA,OAqIA,IArIA,OAmIA,IAHA,eAPA,QANA,OADA,OAZA,OARA,OADA,OAJA,GAFA,gBAJA,OAFA,QALA,WALA,OAJA,WAJA,OALA,OAJA,QANA,eAfA,OAJA,OAFA,OAJA,OAJA,WAjBA,GAFA,cALA,OAJA,OAJA,GDOA,EAEA,C,OtBcS,IsBZT,GAMA,G,SACsB,UACV,OAAH,OAAP,gCACW,IAAL,EACK,UAGD,kBAAR,oBAEuB,GACnB,KACO,OAAP,YACS,aAAH,GADC,KAAP,yBAEE,MAIQ,mBAIP,CAAU,SACP,SADS,CAAF,OAEJ,YAAT,SACe,CAAf,SAAe,SACJ,GAAF,OAAH,OADS,CAAf,sBAEE,UAMA,GAFoC,SAA3B,GACP,UAKG,MA1BP,iCARI,OAAH,KAAP,yBAuCK,GACP,SAFE,2BpDo/Ba,UmClhCgB,OAAM,eAoJ3B,iBnC83BK,gBqDziCf,ClBuB+B,GAAM,eAoJ3B,iBnC83BK,gBqDriCf,ClBmB+B,GAAM,OAoJ3B,iBnC83BK,gBqDhiCf,ClBc+B,GAAM,OAoJ3B,iBnC83BK,gBqD9hCf,ClBY+B,GAAM,OAoJ3B,iBnC83BK,gBqD3hCf,ClBS+B,GAAM,OAoJ3B,iBnC83BK,gBqDphCf,ClBE+B,GAAM,OAoJ3B,iBnC83BK,gBqDhhCf,ClBF+B,GAAM,OAoJ3B,iBnC83BK,gBqD/gCf,ClBH+B,GAAM,eAoJ3B,iBnC83BK,gBqD7gCf,ClBL+B,GAAM,OAoJ3B,iBnC83BK,gBqDzgCf,ClBT+B,GAAM,OAoJ3B,iBnC83BK,gBqDrgCf,ClBb+B,GAAM,OAoJ3B,iBnC83BK,gBqDngCf,ClBf+B,GAAM,OAoJ3B,iBnC83BK,gBqD//Bf,ClBnB+B,GAAM,OAoJ3B,iBnC83BK,gBqD5/Bf,ClBtB+B,GAAM,OAoJ3B,iBnC83BK,gBqDz/Bf,ClBzB+B,GAAM,OAoJ3B,iBnC83BK,gBqDt/Bf,ClB5B+B,GAAM,OAoJ3B,iBnC83BK,gBqDr/Bf,ClB7B+B,GAAM,OAoJ3B,iBnC83BK,gBqDh/Bf,ClBlC+B,GAAM,OAoJ3B,iBnC83BK,gBqD7+Bf,ClBrC+B,GAAM,OAoJ3B,iBnC83BK,gBqD1+Bf,ClBxC+B,GAAM,OAoJ3B,iBnC83BK,gBqDt+Bf,ClB5C+B,GAAM,OAoJ3B,iBnC83BK,gBqDj+Bf,ClBjD+B,GAAM,eAoJ3B,iBnC83BK,iBqD/9Bf,ClBnD+B,GAAM,OAoJ3B,iBnC83BK,iBqD79Bf,ClBrD+B,GAAM,OAoJ3B,iBnC83BK,iBqD39Bf,ClBvD+B,GAAM,OAoJ3B,iBnC83BK,iBqDz9Bf,ClBzD+B,GAAM,OAoJ3B,iBnC83BK,iBqDv9Bf,ClB3D+B,GAAM,OAoJ3B,iBnC83BK,iBqDp9Bf,ClB9D+B,GAAM,OAoJ3B,iBnC83BK,iBqDj9Bf,ClBjE+B,GAAM,OAoJ3B,iBnC83BK,iBqD/8Bf,ClBnE+B,GAAM,OAoJ3B,iBnC83BK,iBqD78Bf,ClBrE+B,GAAM,eAoJ3B,iBnC83BK,iBqDz8Bf,ClBzE+B,GAAM,OAoJ3B,iBnC83BK,iBqDv8Bf,ClB3E+B,GAAM,OAoJ3B,iBnC83BK,iBqDp8Bf,ClB9E+B,GAAM,OAoJ3B,iBnC83BK,iBqDn8Bf,ClB/E+B,GAAM,OAoJ3B,iBnC83BK,iBqDl8Bf,ClBhF+B,GAAM,OAoJ3B,iBnC83BK,iBqD/7Bf,ClBnF+B,GAAM,OAoJ3B,iBnC83BK,iBqD17Bf,ClBxF+B,GAAM,OAoJ3B,iBnC83BK,iBqDj7Bf,ClBjG+B,GAAM,OAoJ3B,iBnC83BK,iBqD96Bf,ClBpG+B,GAAM,OAoJ3B,iBnC83BK,iBqD76Bf,ClBrG+B,GAAM,OAoJ3B,iBnC83BK,iBqDv6Bf,ClB3G+B,GAAM,OAoJ3B,iBnC83BK,iBqDp6Bf,ClB9G+B,GAAM,OAoJ3B,iBnC83BK,iBqDh6Bf,ClBlH+B,GAAM,OAoJ3B,iBnC83BK,iBqD75Bf,ClBrH+B,GAAM,OAoJ3B,iBnC83BK,iBqD35Bf,ClBvH+B,GAAM,OAoJ3B,iBnC83BK,iBqDz5Bf,ClBzH+B,GAAM,OAoJ3B,iBnC83BK,iBqDt5Bf,ClB5H+B,GAAM,OAoJ3B,iBnC83BK,iBqDp5Bf,ClB9H+B,GAAM,OAoJ3B,iBnC83BK,iBqD/4Bf,ClBnI+B,GAAM,OAoJ3B,iBnC83BK,iBqD54Bf,ClBtI+B,GAAM,OAoJ3B,iBnC83BK,iBqD14Bf,ClBxI+B,GAAM,OAoJ3B,iBnC83BK,iBqDz4Bf,ClBzI+B,GAAM,OAoJ3B,iBnC83BK,iBqDt4Bf,ClB5I+B,GAAM,OAoJ3B,iBnC83BK,iBqDj4Bf,ClBjJ+B,GAAM,OAoJ3B,iBnC83BK,iBqD73Bf,ClBrJ+B,GAAM,OAoJ3B,iBnC83BK,iBqD33Bf,ClBvJ+B,GAAM,OAoJ3B,iBnC83BK,iBqDz3Bf,ClBzJ+B,GAAM,OAoJ3B,iBnC83BK,iBqDv3Bf,ClB3J+B,GAAM,OAoJ3B,iBnC83BK,iBqDp3Bf,ClB9J+B,GAAM,OAoJ3B,iBnC83BK,iBqDj3Bf,ClBjK+B,GAAM,OAoJ3B,iBnC83BK,iBqD92Bf,ClBpK+B,GAAM,OAoJ3B,iBnC83BK,iBqD32Bf,ClBvK+B,GAAM,OAoJ3B,iBnC83BK,iBqDx2Bf,ClB1K+B,GAAM,OAoJ3B,iBnC83BK,iBqDr2Bf,ClB7K+B,GAAM,OAoJ3B,i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"} \ No newline at end of file diff --git a/examples/cloudflare-workers/src/cloudflare.d.ts b/examples/cloudflare-workers/src/cloudflare.d.ts deleted file mode 100644 index d54ebdc1f..000000000 --- a/examples/cloudflare-workers/src/cloudflare.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module '*.wasm' { - export default WebAssembly.Module; -} - -declare module '*.txt' { - export default string; -} diff --git a/examples/cloudflare-workers/src/index.mts b/examples/cloudflare-workers/src/index.mts deleted file mode 100644 index e6cfd463b..000000000 --- a/examples/cloudflare-workers/src/index.mts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Welcome to Cloudflare Workers! This is your first worker. - * - * - Run `npm run dev` in your terminal to start a development server - * - Open a browser tab at http://localhost:8787/ to see your worker in action - * - Run `npm run deploy` to publish your worker - * - * Learn more at https://developers.cloudflare.com/workers/ - */ - -import type { QuickJSWASMModule } from 'quickjs-emscripten'; -import { newQuickJSWASMModule, DEBUG_SYNC as baseVariant, newVariant } from 'quickjs-emscripten'; -import cloudflareWasmModule from './DEBUG_SYNC.wasm'; -import cloudflareWasmModuleSourceMap from './DEBUG_SYNC.wasm.map.txt'; - -/** - * We need to make a new variant that directly passes the imported WebAssembly.Module - * to Emscripten. Normally we'd load the wasm file as bytes from a URL, but - * that's forbidden in Cloudflare workers. - */ -const cloudflareVariant = newVariant(baseVariant, { - wasmModule: cloudflareWasmModule, - wasmSourceMapData: cloudflareWasmModuleSourceMap, -}); - -export interface Env { - // Example binding to KV. Learn more at https://developers.cloudflare.com/workers/runtime-apis/kv/ - // MY_KV_NAMESPACE: KVNamespace; -} - -let QuickJS: QuickJSWASMModule | undefined; - -export default { - async fetch(_request: Request, _env: Env, _ctx: ExecutionContext): Promise { - QuickJS ??= await newQuickJSWASMModule(cloudflareVariant); - const url = new URL(_request.url); - const code = url.searchParams.get('code') ?? '"Set ?code= to a JS expression to eval"'; - const result = QuickJS.evalCode(code); - return new Response(JSON.stringify({ code, result })); - }, -}; diff --git a/examples/cloudflare-workers/tsconfig.json b/examples/cloudflare-workers/tsconfig.json deleted file mode 100644 index b08cfd928..000000000 --- a/examples/cloudflare-workers/tsconfig.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - "lib": ["es2021"] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, - "jsx": "react" /* Specify what JSX code is generated. */, - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ - "module": "es2022" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - "types": [ - "@cloudflare/workers-types/2023-07-01" - ] /* Specify type package names to be included without being referenced in a source file. */, - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - "resolveJsonModule": true /* Enable importing .json files */, - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, - "checkJs": false /* Enable error reporting in type-checked JavaScript files. */, - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - "noEmit": true /* Disable emitting files from a compilation. */, - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - "isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */, - "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */, - // "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/examples/cloudflare-workers/wrangler.toml b/examples/cloudflare-workers/wrangler.toml deleted file mode 100644 index 6c353f0e8..000000000 --- a/examples/cloudflare-workers/wrangler.toml +++ /dev/null @@ -1,4 +0,0 @@ -name = "cloudflare-workers-example" -main = "src/index.mts" -compatibility_date = "2023-12-18" - diff --git a/examples/create-react-app/.gitignore b/examples/create-react-app/.gitignore deleted file mode 100644 index 4d29575de..000000000 --- a/examples/create-react-app/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/examples/create-react-app/.npmrc b/examples/create-react-app/.npmrc deleted file mode 100644 index 09b35cdd0..000000000 --- a/examples/create-react-app/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -audit=false -fund=false diff --git a/examples/create-react-app/README.md b/examples/create-react-app/README.md deleted file mode 100644 index 64e343e18..000000000 --- a/examples/create-react-app/README.md +++ /dev/null @@ -1,44 +0,0 @@ -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `yarn start` - -Runs the app in the development mode.
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.
-You will also see any lint errors in the console. - -### `yarn test` - -Launches the test runner in the interactive watch mode.
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `yarn build` - -Builds the app for production to the `build` folder.
-It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.
-Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `yarn eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/examples/create-react-app/package-lock.json b/examples/create-react-app/package-lock.json deleted file mode 100644 index 2a4521d78..000000000 --- a/examples/create-react-app/package-lock.json +++ /dev/null @@ -1,30065 +0,0 @@ -{ - "name": "website", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "website", - "version": "0.1.0", - "dependencies": { - "@jitl/quickjs-ffi-types": "file:../../build/tar/@jitl-quickjs-ffi-types.tgz", - "@jitl/quickjs-wasmfile-debug-asyncify": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-asyncify.tgz", - "@jitl/quickjs-wasmfile-debug-sync": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-sync.tgz", - "@jitl/quickjs-wasmfile-release-asyncify": "file:../../build/tar/@jitl-quickjs-wasmfile-release-asyncify.tgz", - "@jitl/quickjs-wasmfile-release-sync": "file:../../build/tar/@jitl-quickjs-wasmfile-release-sync.tgz", - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/react": "^9.3.2", - "@testing-library/user-event": "^7.1.2", - "@types/jest": "^24.0.0", - "@types/node": "^16.0.0", - "@types/react": "^16.9.0", - "@types/react-dom": "^16.9.0", - "quickjs-emscripten": "file:../../build/tar/quickjs-emscripten.tgz", - "quickjs-emscripten-core": "file:../../build/tar/quickjs-emscripten-core.tgz", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "react-scripts": "^5.0", - "typescript": "4.5" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", - "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", - "dependencies": { - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.13.tgz", - "integrity": "sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz", - "integrity": "sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", - "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "node_modules/@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.13.tgz", - "integrity": "sha512-p39/6rmY9uvlzRiLZBIB3G9/EBr66LBMcYm7fIDeSBNdRjF2AGD3rFZucUyAgGHC2N+7DdLvVi33uTjSE44FIw==", - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "node_modules/@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jitl/quickjs-ffi-types": { - "version": "0.27.0", - "resolved": "file:../../build/tar/@jitl-quickjs-ffi-types.tgz", - "integrity": "sha512-MWO0SgqjdisTkhm4h/dT2roTXqNdoJvi6THgizPP1tpzOxEmhI9qbQX7C26MDZFoj4rG/9Scqnt82ZWmB/GY3g==" - }, - "node_modules/@jitl/quickjs-wasmfile-debug-asyncify": { - "version": "0.27.0", - "resolved": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-asyncify.tgz", - "integrity": "sha512-btcmw95wTdHiLTNdys2v50ooZXJ4iRvjntmbEwXFJgCydno+hBOK6C5YD5kmNi9Ya7pQbV0oj3MNA0BHCC3YEA==", - "dependencies": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "node_modules/@jitl/quickjs-wasmfile-debug-sync": { - "version": "0.27.0", - "resolved": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-sync.tgz", - "integrity": "sha512-EDLx4l2yBxW/TuYeJl1jNhUUg0NarBRqk8XZr47u55oqAYf7Xm47MTDBwRkPGFOv9V8oNQWe0bsDNwEmXOKxaw==", - "dependencies": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "node_modules/@jitl/quickjs-wasmfile-release-asyncify": { - "version": "0.27.0", - "resolved": "file:../../build/tar/@jitl-quickjs-wasmfile-release-asyncify.tgz", - "integrity": "sha512-q0EOPDegItxm7Yb/LN1W7pg7jdB5gQzdXNgWu9T3zaV/qgdCj2AFaOSvu9TUimTw0GakNe61Kb0hjxwcb2vPsQ==", - "dependencies": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "node_modules/@jitl/quickjs-wasmfile-release-sync": { - "version": "0.27.0", - "resolved": "file:../../build/tar/@jitl-quickjs-wasmfile-release-sync.tgz", - "integrity": "sha512-8YxCA85he2ZXE83W2r7sHGgNr/A6bA58xhwltpv94EvD060UbQJz6WzKeFrHj+nwyTDsQ/eJNUT1wflneiUFHw==", - "dependencies": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", - "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", - "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==" - }, - "node_modules/@sheerun/mutationobserver-shim": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", - "integrity": "sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@testing-library/dom": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.0.0.tgz", - "integrity": "sha512-+/TLgKNFsYUshOY/zXsQOk+PlFQK+eyJ9T13IDVNJEi+M+Un7xlJK+FZKkbGSnf0+7E1G6PlDhkSYQ/GFiruBQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz", - "integrity": "sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==", - "dependencies": { - "@babel/runtime": "^7.5.1", - "chalk": "^2.4.1", - "css": "^2.2.3", - "css.escape": "^1.5.1", - "jest-diff": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "lodash": "^4.17.11", - "pretty-format": "^24.0.0", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@testing-library/react": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.5.0.tgz", - "integrity": "sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg==", - "dependencies": { - "@babel/runtime": "^7.8.4", - "@testing-library/dom": "^6.15.0", - "@types/testing-library__react": "^9.1.2" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@testing-library/react/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.16.0.tgz", - "integrity": "sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA==", - "dependencies": { - "@babel/runtime": "^7.8.4", - "@sheerun/mutationobserver-shim": "^0.3.2", - "@types/testing-library__dom": "^6.12.1", - "aria-query": "^4.0.2", - "dom-accessibility-api": "^0.3.0", - "pretty-format": "^25.1.0", - "wait-for-expect": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react/node_modules/@types/testing-library__dom": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.14.0.tgz", - "integrity": "sha512-sMl7OSv0AvMOqn1UJ6j1unPMIHRXen0Ita1ujnMX912rrOcawe4f7wu0Zt9GIQhBhJvH2BaibqFgQ3lP+Pj2hA==", - "dependencies": { - "pretty-format": "^24.3.0" - } - }, - "node_modules/@testing-library/react/node_modules/@types/testing-library__dom/node_modules/@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@testing-library/react/node_modules/@types/testing-library__dom/node_modules/@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@testing-library/react/node_modules/@types/testing-library__dom/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@testing-library/react/node_modules/@types/testing-library__dom/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@testing-library/react/node_modules/@types/testing-library__dom/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@testing-library/react/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@testing-library/react/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@testing-library/react/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@testing-library/react/node_modules/dom-accessibility-api": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.3.0.tgz", - "integrity": "sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA==" - }, - "node_modules/@testing-library/react/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@testing-library/react/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/@testing-library/user-event": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz", - "integrity": "sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA==", - "peerDependencies": { - "@testing-library/dom": ">=5" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "dependencies": { - "jest-diff": "^24.3.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/node": { - "version": "16.18.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.68.tgz", - "integrity": "sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==" - }, - "node_modules/@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/react": { - "version": "16.14.35", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.35.tgz", - "integrity": "sha512-NUEiwmSS1XXtmBcsm1NyRRPYjoZF2YTE89/5QiLt5mlGffYK9FQqOKuOLuXNrjPQV04oQgaZG+Yq02ZfHoFyyg==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "16.9.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.18.tgz", - "integrity": "sha512-lmNARUX3+rNF/nmoAFqasG0jAA7q6MeGZK/fdeLwY3kAA4NPgHHrG5bNQe2B5xmD4B+x6Z6h0rEJQ7MEEgQxsw==", - "dependencies": { - "@types/react": "^16" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, - "node_modules/@types/testing-library__dom": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-7.5.0.tgz", - "integrity": "sha512-mj1aH4cj3XUpMEgVpognma5kHVtbm6U6cHZmEFzCRiXPvKkuHrFr3+yXdGLXvfFRBaQIVshPGHI+hGTOJlhS/g==", - "deprecated": "This is a stub types definition. testing-library__dom provides its own type definitions, so you do not need this installed.", - "dependencies": { - "@testing-library/dom": "*" - } - }, - "node_modules/@types/testing-library__react": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.3.tgz", - "integrity": "sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w==", - "dependencies": { - "@types/react-dom": "*", - "@types/testing-library__dom": "*", - "pretty-format": "^25.1.0" - } - }, - "node_modules/@types/testing-library__react/node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/testing-library__react/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/testing-library__react/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/testing-library__react/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@types/testing-library__react/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-jest/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "dependencies": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001571", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", - "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/check-types": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", - "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-js": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", - "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", - "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", - "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "node_modules/cssdb": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.9.1.tgz", - "integrity": "sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ] - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "node_modules/diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.616", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", - "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/expect/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dependencies": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-diff/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dependencies": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-util/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "browserslist": ">=4", - "postcss": ">=8" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "peerDependencies": { - "postcss": "^8.1.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", - "engines": { - "node": ">=14" - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz", - "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dependencies": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "browserslist": ">= 4", - "postcss": ">= 8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quickjs-emscripten": { - "version": "0.27.0", - "resolved": "file:../../build/tar/quickjs-emscripten.tgz", - "integrity": "sha512-0jGQ9Ht4lpk1q3rclBEAPRpLy9QB1IwFj27JmKU9k2NR9tjshcW/icCH+XYWqSnb44Ugh6Fy8H8Z0lAF05+t7w==", - "license": "MIT", - "dependencies": { - "@jitl/quickjs-wasmfile-debug-asyncify": "0.27.0", - "@jitl/quickjs-wasmfile-debug-sync": "0.27.0", - "@jitl/quickjs-wasmfile-release-asyncify": "0.27.0", - "@jitl/quickjs-wasmfile-release-sync": "0.27.0", - "quickjs-emscripten-core": "0.27.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/quickjs-emscripten-core": { - "version": "0.27.0", - "resolved": "file:../../build/tar/quickjs-emscripten-core.tgz", - "integrity": "sha512-rjxkeWBcwAVav8vR0o+ome+LDI8+v5pY93PZpBXS+1vf5Z8mN0mOR7t2YHDDxhc5b/albeF9FpDZDytoXh0RJQ==", - "license": "MIT", - "dependencies": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dependencies": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" - }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/tailwindcss": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", - "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", - "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/wait-for-expect": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", - "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==" - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", - "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", - "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-build": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", - "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.6.0", - "workbox-broadcast-update": "6.6.0", - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-google-analytics": "6.6.0", - "workbox-navigation-preload": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-range-requests": "6.6.0", - "workbox-recipes": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0", - "workbox-streams": "6.6.0", - "workbox-sw": "6.6.0", - "workbox-window": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", - "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "deprecated": "workbox-background-sync@6.6.0", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", - "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" - }, - "node_modules/workbox-expiration": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", - "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", - "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "dependencies": { - "workbox-background-sync": "6.6.0", - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", - "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-precaching": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", - "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", - "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-recipes": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", - "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "dependencies": { - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-routing": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", - "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-strategies": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", - "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-streams": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", - "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0" - } - }, - "node_modules/workbox-sw": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", - "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", - "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/workbox-window": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", - "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.6.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" - }, - "@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" - }, - "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "requires": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", - "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - } - }, - "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.13.tgz", - "integrity": "sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz", - "integrity": "sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", - "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", - "requires": { - "regenerator-runtime": "^0.14.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - } - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.13.tgz", - "integrity": "sha512-p39/6rmY9uvlzRiLZBIB3G9/EBr66LBMcYm7fIDeSBNdRjF2AGD3rFZucUyAgGHC2N+7DdLvVi33uTjSE44FIw==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" - }, - "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "requires": {} - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==" - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } - } - }, - "@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==" - }, - "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@jitl/quickjs-ffi-types": { - "version": "file:../../build/tar/@jitl-quickjs-ffi-types.tgz", - "integrity": "sha512-MWO0SgqjdisTkhm4h/dT2roTXqNdoJvi6THgizPP1tpzOxEmhI9qbQX7C26MDZFoj4rG/9Scqnt82ZWmB/GY3g==" - }, - "@jitl/quickjs-wasmfile-debug-asyncify": { - "version": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-asyncify.tgz", - "integrity": "sha512-btcmw95wTdHiLTNdys2v50ooZXJ4iRvjntmbEwXFJgCydno+hBOK6C5YD5kmNi9Ya7pQbV0oj3MNA0BHCC3YEA==", - "requires": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "@jitl/quickjs-wasmfile-debug-sync": { - "version": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-sync.tgz", - "integrity": "sha512-EDLx4l2yBxW/TuYeJl1jNhUUg0NarBRqk8XZr47u55oqAYf7Xm47MTDBwRkPGFOv9V8oNQWe0bsDNwEmXOKxaw==", - "requires": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "@jitl/quickjs-wasmfile-release-asyncify": { - "version": "file:../../build/tar/@jitl-quickjs-wasmfile-release-asyncify.tgz", - "integrity": "sha512-q0EOPDegItxm7Yb/LN1W7pg7jdB5gQzdXNgWu9T3zaV/qgdCj2AFaOSvu9TUimTw0GakNe61Kb0hjxwcb2vPsQ==", - "requires": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "@jitl/quickjs-wasmfile-release-sync": { - "version": "file:../../build/tar/@jitl-quickjs-wasmfile-release-sync.tgz", - "integrity": "sha512-8YxCA85he2ZXE83W2r7sHGgNr/A6bA58xhwltpv94EvD060UbQJz6WzKeFrHj+nwyTDsQ/eJNUT1wflneiUFHw==", - "requires": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "requires": { - "eslint-scope": "5.1.1" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", - "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==" - }, - "@sheerun/mutationobserver-shim": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", - "integrity": "sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw==" - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - } - }, - "@testing-library/dom": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.0.0.tgz", - "integrity": "sha512-+/TLgKNFsYUshOY/zXsQOk+PlFQK+eyJ9T13IDVNJEi+M+Un7xlJK+FZKkbGSnf0+7E1G6PlDhkSYQ/GFiruBQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - } - }, - "@testing-library/jest-dom": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz", - "integrity": "sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==", - "requires": { - "@babel/runtime": "^7.5.1", - "chalk": "^2.4.1", - "css": "^2.2.3", - "css.escape": "^1.5.1", - "jest-diff": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "lodash": "^4.17.11", - "pretty-format": "^24.0.0", - "redent": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@testing-library/react": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.5.0.tgz", - "integrity": "sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg==", - "requires": { - "@babel/runtime": "^7.8.4", - "@testing-library/dom": "^6.15.0", - "@types/testing-library__react": "^9.1.2" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@testing-library/dom": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.16.0.tgz", - "integrity": "sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA==", - "requires": { - "@babel/runtime": "^7.8.4", - "@sheerun/mutationobserver-shim": "^0.3.2", - "@types/testing-library__dom": "^6.12.1", - "aria-query": "^4.0.2", - "dom-accessibility-api": "^0.3.0", - "pretty-format": "^25.1.0", - "wait-for-expect": "^3.0.2" - } - }, - "@types/testing-library__dom": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.14.0.tgz", - "integrity": "sha512-sMl7OSv0AvMOqn1UJ6j1unPMIHRXen0Ita1ujnMX912rrOcawe4f7wu0Zt9GIQhBhJvH2BaibqFgQ3lP+Pj2hA==", - "requires": { - "pretty-format": "^24.3.0" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - } - } - }, - "@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "dom-accessibility-api": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.3.0.tgz", - "integrity": "sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA==" - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "@testing-library/user-event": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz", - "integrity": "sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA==", - "requires": {} - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" - }, - "@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "requires": { - "jest-diff": "^24.3.0" - } - }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "@types/node": { - "version": "16.18.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.68.tgz", - "integrity": "sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==" - }, - "@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", - "requires": { - "@types/node": "*" - } - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" - }, - "@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "@types/react": { - "version": "16.14.35", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.35.tgz", - "integrity": "sha512-NUEiwmSS1XXtmBcsm1NyRRPYjoZF2YTE89/5QiLt5mlGffYK9FQqOKuOLuXNrjPQV04oQgaZG+Yq02ZfHoFyyg==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "16.9.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.18.tgz", - "integrity": "sha512-lmNARUX3+rNF/nmoAFqasG0jAA7q6MeGZK/fdeLwY3kAA4NPgHHrG5bNQe2B5xmD4B+x6Z6h0rEJQ7MEEgQxsw==", - "requires": { - "@types/react": "^16" - } - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "requires": { - "@types/node": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" - }, - "@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "requires": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, - "@types/testing-library__dom": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-7.5.0.tgz", - "integrity": "sha512-mj1aH4cj3XUpMEgVpognma5kHVtbm6U6cHZmEFzCRiXPvKkuHrFr3+yXdGLXvfFRBaQIVshPGHI+hGTOJlhS/g==", - "requires": { - "@testing-library/dom": "*" - } - }, - "@types/testing-library__react": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.3.tgz", - "integrity": "sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w==", - "requires": { - "@types/react-dom": "*", - "@types/testing-library__dom": "*", - "pretty-format": "^25.1.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" - }, - "@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "requires": { - "@typescript-eslint/utils": "5.62.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==" - }, - "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "requires": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "requires": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "requires": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "requires": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "requires": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "requires": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } - }, - "acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==" - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "requires": { - "dequal": "^2.0.3" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" - }, - "async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "requires": { - "has-symbols": "^1.0.3" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==" - }, - "axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "requires": { - "dequal": "^2.0.3" - } - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "requires": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "requires": { - "fill-range": "^7.1.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", - "requires": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "requires": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001571", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", - "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==" - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - }, - "check-types": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", - "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" - }, - "cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" - }, - "clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "requires": { - "source-map": "~0.6.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "core-js": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", - "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==" - }, - "core-js-compat": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", - "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-js-pure": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", - "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "requires": {} - }, - "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "requires": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "requires": {} - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "cssdb": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.9.1.tgz", - "integrity": "sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "requires": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - } - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - } - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - } - }, - "define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.616", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", - "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==" - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", - "requires": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" - } - }, - "es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "requires": { - "hasown": "^2.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - } - }, - "eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } - } - }, - "eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "requires": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", - "requires": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" - } - }, - "eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "requires": {} - }, - "eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", - "requires": { - "@typescript-eslint/utils": "^5.58.0" - } - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" - }, - "eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "requires": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - } - } - }, - "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" - }, - "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" - } - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "requires": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==" - }, - "immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "requires": { - "hasown": "^2.0.0" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "requires": { - "which-typed-array": "^1.1.11" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==" - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "requires": { - "semver": "^7.5.3" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "requires": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - } - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - } - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - } - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - } - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - } - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - } - } - }, - "jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "dependencies": { - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - }, - "string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "requires": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==" - } - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - } - } - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" - }, - "jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==" - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "requires": { - "language-subtag-registry": "^0.3.20" - } - }, - "launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", - "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "requires": { - "tmpl": "1.0.5" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - }, - "mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" - }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "requires": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==" - } - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - }, - "pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } - } - }, - "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "requires": {} - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} - }, - "postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "requires": {} - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "requires": {} - }, - "postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "requires": {} - }, - "postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "requires": {} - }, - "postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "requires": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "dependencies": { - "lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==" - }, - "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==" - } - } - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - } - }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz", - "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "requires": { - "postcss-selector-parser": "^6.0.11" - } - }, - "postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "requires": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "requires": {} - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "requires": {} - }, - "postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "requires": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "requires": {} - }, - "postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - } - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "requires": { - "asap": "~2.0.6" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quickjs-emscripten": { - "version": "file:../../build/tar/quickjs-emscripten.tgz", - "integrity": "sha512-0jGQ9Ht4lpk1q3rclBEAPRpLy9QB1IwFj27JmKU9k2NR9tjshcW/icCH+XYWqSnb44Ugh6Fy8H8Z0lAF05+t7w==", - "requires": { - "@jitl/quickjs-wasmfile-debug-asyncify": "0.27.0", - "@jitl/quickjs-wasmfile-debug-sync": "0.27.0", - "@jitl/quickjs-wasmfile-release-asyncify": "0.27.0", - "@jitl/quickjs-wasmfile-release-sync": "0.27.0", - "quickjs-emscripten-core": "0.27.0" - } - }, - "quickjs-emscripten-core": { - "version": "file:../../build/tar/quickjs-emscripten-core.tgz", - "integrity": "sha512-rjxkeWBcwAVav8vR0o+ome+LDI8+v5pY93PZpBXS+1vf5Z8mN0mOR7t2YHDDxhc5b/albeF9FpDZDytoXh0RJQ==", - "requires": { - "@jitl/quickjs-ffi-types": "0.27.0" - } - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "requires": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - } - } - }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" - }, - "react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "requires": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "fsevents": "^2.3.2", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "requires": { - "pify": "^2.3.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - } - }, - "regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==" - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" - }, - "sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "requires": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "requires": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, - "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "requires": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - } - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - } - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - } - } - }, - "string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "requires": {} - }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "tailwindcss": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", - "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", - "requires": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" - }, - "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", - "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - } - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { - "punycode": "^2.1.1" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - } - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "wait-for-expect": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", - "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==" - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", - "requires": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - }, - "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", - "requires": {} - } - } - }, - "webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "requires": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "dependencies": { - "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - } - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "requires": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "workbox-background-sync": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", - "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "workbox-broadcast-update": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", - "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "requires": { - "workbox-core": "6.6.0" - } - }, - "workbox-build": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", - "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.6.0", - "workbox-broadcast-update": "6.6.0", - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-google-analytics": "6.6.0", - "workbox-navigation-preload": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-range-requests": "6.6.0", - "workbox-recipes": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0", - "workbox-streams": "6.6.0", - "workbox-sw": "6.6.0", - "workbox-window": "6.6.0" - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", - "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "requires": { - "workbox-core": "6.6.0" - } - }, - "workbox-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", - "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" - }, - "workbox-expiration": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", - "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "workbox-google-analytics": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", - "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "requires": { - "workbox-background-sync": "6.6.0", - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "workbox-navigation-preload": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", - "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "requires": { - "workbox-core": "6.6.0" - } - }, - "workbox-precaching": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", - "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "requires": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "workbox-range-requests": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", - "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "requires": { - "workbox-core": "6.6.0" - } - }, - "workbox-recipes": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", - "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "requires": { - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "workbox-routing": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", - "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "requires": { - "workbox-core": "6.6.0" - } - }, - "workbox-strategies": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", - "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "requires": { - "workbox-core": "6.6.0" - } - }, - "workbox-streams": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", - "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "requires": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0" - } - }, - "workbox-sw": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", - "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" - }, - "workbox-webpack-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", - "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "requires": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.6.0" - }, - "dependencies": { - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "workbox-window": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", - "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.6.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - } - } -} diff --git a/examples/create-react-app/package.json b/examples/create-react-app/package.json deleted file mode 100644 index 752ece8bd..000000000 --- a/examples/create-react-app/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "website", - "version": "0.1.0", - "private": true, - "dependencies": { - "@jitl/quickjs-ffi-types": "file:../../build/tar/@jitl-quickjs-ffi-types.tgz", - "@jitl/quickjs-wasmfile-debug-asyncify": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-asyncify.tgz", - "@jitl/quickjs-wasmfile-debug-sync": "file:../../build/tar/@jitl-quickjs-wasmfile-debug-sync.tgz", - "@jitl/quickjs-wasmfile-release-asyncify": "file:../../build/tar/@jitl-quickjs-wasmfile-release-asyncify.tgz", - "@jitl/quickjs-wasmfile-release-sync": "file:../../build/tar/@jitl-quickjs-wasmfile-release-sync.tgz", - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/react": "^9.3.2", - "@testing-library/user-event": "^7.1.2", - "@types/jest": "^24.0.0", - "@types/node": "^16.0.0", - "@types/react": "^16.9.0", - "@types/react-dom": "^16.9.0", - "quickjs-emscripten": "file:../../build/tar/quickjs-emscripten.tgz", - "quickjs-emscripten-core": "file:../../build/tar/quickjs-emscripten-core.tgz", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "react-scripts": "^5.0", - "typescript": "4.5" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/examples/create-react-app/public/favicon.ico b/examples/create-react-app/public/favicon.ico deleted file mode 100644 index bcd5dfd67cd0361b78123e95c2dd96031f27f743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3150 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 MDeX2GIKR{Qf5okjU;qFB diff --git a/examples/create-react-app/public/index.html b/examples/create-react-app/public/index.html deleted file mode 100644 index d79d7a78c..000000000 --- a/examples/create-react-app/public/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - React App - - - -
- - - diff --git a/examples/create-react-app/public/logo192.png b/examples/create-react-app/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/examples/create-react-app/public/manifest.json b/examples/create-react-app/public/manifest.json deleted file mode 100644 index 080d6c77a..000000000 --- a/examples/create-react-app/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/examples/create-react-app/public/robots.txt b/examples/create-react-app/public/robots.txt deleted file mode 100644 index e9e57dc4d..000000000 --- a/examples/create-react-app/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/examples/create-react-app/src/App.css b/examples/create-react-app/src/App.css deleted file mode 100644 index 5e5e68d7d..000000000 --- a/examples/create-react-app/src/App.css +++ /dev/null @@ -1,17 +0,0 @@ -.App { - max-width: 756px; - margin: 1em auto; - padding: 1em; -} - -textarea, -input, -pre { - border: 1px solid #aaa; - border-radius: 2px; - padding: 0.75em; - min-width: 100%; - min-height: 5em; - margin-top: 1em; - box-shadow: 0px 0.25em 1.5em rgba(0, 0, 0, 0.07); -} diff --git a/examples/create-react-app/src/App.test.tsx b/examples/create-react-app/src/App.test.tsx deleted file mode 100644 index 7cee61a98..000000000 --- a/examples/create-react-app/src/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react" -import { render } from "@testing-library/react" -import App from "./App" - -test("renders something", () => { - const { getByText } = render() - const linkElement = getByText(/QuickJS/) - expect(linkElement).toBeInTheDocument() -}) diff --git a/examples/create-react-app/src/App.tsx b/examples/create-react-app/src/App.tsx deleted file mode 100644 index 920793aa5..000000000 --- a/examples/create-react-app/src/App.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useEffect } from "react" -import "./App.css" -import { getQuickJS } from "quickjs-emscripten" - -function stringify(val: unknown) { - if (typeof val === "undefined") { - return "undefined" - } - - return JSON.stringify(val, undefined, 2) -} - -const initialCode = ` -let cow = 1; -[cow, ++cow]; -`.trim() - -function App() { - const [js, setJs] = React.useState(initialCode) - const [evalResult, setEvalResult] = React.useState(undefined) - const handleEval = React.useCallback(async () => { - const QuickJS = await getQuickJS() - try { - const result = QuickJS.evalCode(js) - console.log("eval result:", result) - setEvalResult(result) - } catch (err) { - console.log("eval error:", err) - setEvalResult(err) - } - }, [js, setEvalResult]) - useEffect(() => { - handleEval() - }, [handleEval, js, setEvalResult]) - return ( -
-
-

quickjs-emscripten

-

- Javascript/Typescript bindings for QuickJS, a - modern Javascript interpreter written in C by Fabrice Bellard and Charlie Gordon. -

-
    -
  • Safely evaluate untrusted Javascript (up to ES2020).
  • -
  • Create and manipulate values inside the QuickJS runtime.
  • -
  • Expose host functions to the QuickJS runtime.
  • -
-

- Github -{" "} - - Documentation - {" "} - - NPM -

-

Eval JS code safely

- -
- -
Results: {{ evaluate() }}
-
- - - diff --git a/examples/vite-vue/src/main.js b/examples/vite-vue/src/main.js deleted file mode 100644 index 8a1724e0a..000000000 --- a/examples/vite-vue/src/main.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createApp } from "vue" -import "./style.css" -import App from "./App.vue" - -createApp(App).mount("#app") diff --git a/examples/vite-vue/src/quickjs.ts b/examples/vite-vue/src/quickjs.ts deleted file mode 100644 index ff0801ea1..000000000 --- a/examples/vite-vue/src/quickjs.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { newQuickJSWASMModuleFromVariant, newVariant, RELEASE_SYNC } from "quickjs-emscripten" -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-expect-error - ?url returns a URL resolving to the given asset. -import wasmLocation from "@jitl/quickjs-wasmfile-release-sync/wasm?url" - -const variant = newVariant(RELEASE_SYNC, { - wasmLocation, -}) - -export async function load() { - return await newQuickJSWASMModuleFromVariant(variant) -} diff --git a/examples/vite-vue/src/style.css b/examples/vite-vue/src/style.css deleted file mode 100644 index bb131d6b8..000000000 --- a/examples/vite-vue/src/style.css +++ /dev/null @@ -1,79 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -.card { - padding: 2em; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/examples/vite-vue/vite.config.js b/examples/vite-vue/vite.config.js deleted file mode 100644 index ac9d14166..000000000 --- a/examples/vite-vue/vite.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from "vite" -import vue from "@vitejs/plugin-vue" - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [vue()], -}) diff --git a/exportedRuntimeMethods.asyncify.json b/exportedRuntimeMethods.asyncify.json deleted file mode 100644 index fe6fc3e13..000000000 --- a/exportedRuntimeMethods.asyncify.json +++ /dev/null @@ -1 +0,0 @@ -["cwrap", "stringToUTF8", "lengthBytesUTF8", "UTF8ToString", "HEAPU8", "HEAP8", "Asyncify"] diff --git a/exportedRuntimeMethods.json b/exportedRuntimeMethods.json deleted file mode 100644 index 2a549561c..000000000 --- a/exportedRuntimeMethods.json +++ /dev/null @@ -1 +0,0 @@ -["cwrap", "stringToUTF8", "lengthBytesUTF8", "UTF8ToString", "HEAPU8", "HEAP8"] diff --git a/vendor/quickjs/fuzz/README b/fuzz/README similarity index 100% rename from vendor/quickjs/fuzz/README rename to fuzz/README diff --git a/vendor/quickjs/fuzz/fuzz.dict b/fuzz/fuzz.dict similarity index 100% rename from vendor/quickjs/fuzz/fuzz.dict rename to fuzz/fuzz.dict diff --git a/fuzz/fuzz_bytecode.c b/fuzz/fuzz_bytecode.c new file mode 100644 index 000000000..bb616a7bd --- /dev/null +++ b/fuzz/fuzz_bytecode.c @@ -0,0 +1,142 @@ +// Copyright 2025 Google LLC +// Fuzz target for QuickJS bytecode execution + +#include "quickjs.h" +#include "quickjs-libc.h" +#include +#include +#include +#include + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size < 8) return 0; // Need at least minimal bytecode header + + JSRuntime* rt = JS_NewRuntime(); + if (!rt) return 0; + + JSContext* ctx = JS_NewContext(rt); + if (!ctx) { + JS_FreeRuntime(rt); + return 0; + } + + char load_script[256]; + snprintf(load_script, sizeof(load_script), + "(function() { " + " var buf = new Uint8Array(%zu); " + " for (var i = 0; i < %zu; i++) buf[i] = 0; " + " return evalBinary(buf); " + "})()", size, size); + + JSValue eval_result = JS_Eval(ctx, load_script, strlen(load_script), + "", 0); + + if (!JS_IsException(eval_result)) { + JS_FreeValue(ctx, eval_result); + } else { + JS_GetException(ctx); + } + + const char* simple_script = "({ a: 1, b: 'test', c: function() { return 42; } })"; + + JSValue bytecode = JS_Eval(ctx, simple_script, strlen(simple_script), + "", JS_EVAL_FLAG_COMPILE_ONLY); + + if (!JS_IsException(bytecode)) { + size_t bytecode_len; + uint8_t* bytecode_buf = JS_WriteObject(ctx, &bytecode_len, bytecode, + JS_WRITE_OBJ_BYTECODE); + + if (bytecode_buf) { + JSValue loaded = JS_ReadObject(ctx, bytecode_buf, bytecode_len, + JS_READ_OBJ_BYTECODE); + + if (!JS_IsException(loaded)) { + JSValue result = JS_EvalFunction(ctx, loaded); + if (!JS_IsException(result)) { + JS_FreeValue(ctx, result); + } else { + JS_GetException(ctx); + } + } else { + JS_GetException(ctx); + } + + js_free(ctx, bytecode_buf); + } + + JS_FreeValue(ctx, bytecode); + } else { + JS_GetException(ctx); + } + + if (size >= 8) { + uint8_t* fake_bytecode = malloc(size); + if (fake_bytecode) { + memcpy(fake_bytecode, data, size); + + if (data[0] % 2 == 0) { + fake_bytecode[0] = 'Q'; + fake_bytecode[1] = 'C'; + fake_bytecode[2] = 'A'; + fake_bytecode[3] = 'M'; + } + + JSValue malformed = JS_ReadObject(ctx, fake_bytecode, size, + JS_READ_OBJ_BYTECODE); + if (!JS_IsException(malformed)) { + JS_FreeValue(ctx, malformed); + } else { + JS_GetException(ctx); + } + + free(fake_bytecode); + } + } + + const char* eval_script_test = "typeof std !== 'undefined' ? std.evalScript : null"; + JSValue std_check = JS_Eval(ctx, eval_script_test, strlen(eval_script_test), + "", 0); + if (!JS_IsException(std_check)) { + JS_FreeValue(ctx, std_check); + } else { + JS_GetException(ctx); + } + + const char* module_script = "export default 42; export const x = 123;"; + JSValue module_bytecode = JS_Eval(ctx, module_script, strlen(module_script), + "", + JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); + + if (!JS_IsException(module_bytecode)) { + size_t mod_bc_len; + uint8_t* mod_bc_buf = JS_WriteObject(ctx, &mod_bc_len, module_bytecode, + JS_WRITE_OBJ_BYTECODE); + + if (mod_bc_buf) { + JSValue mod_loaded = JS_ReadObject(ctx, mod_bc_buf, mod_bc_len, + JS_READ_OBJ_BYTECODE); + if (!JS_IsException(mod_loaded)) { + JSValue mod_result = JS_EvalFunction(ctx, mod_loaded); + if (!JS_IsException(mod_result)) { + JS_FreeValue(ctx, mod_result); + } else { + JS_GetException(ctx); + } + } else { + JS_GetException(ctx); + } + + js_free(ctx, mod_bc_buf); + } + + JS_FreeValue(ctx, module_bytecode); + } else { + JS_GetException(ctx); + } + + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + + return 0; +} diff --git a/vendor/quickjs/fuzz/fuzz_common.c b/fuzz/fuzz_common.c similarity index 100% rename from vendor/quickjs/fuzz/fuzz_common.c rename to fuzz/fuzz_common.c diff --git a/vendor/quickjs/fuzz/fuzz_common.h b/fuzz/fuzz_common.h similarity index 100% rename from vendor/quickjs/fuzz/fuzz_common.h rename to fuzz/fuzz_common.h diff --git a/vendor/quickjs/fuzz/fuzz_compile.c b/fuzz/fuzz_compile.c similarity index 100% rename from vendor/quickjs/fuzz/fuzz_compile.c rename to fuzz/fuzz_compile.c diff --git a/vendor/quickjs/fuzz/fuzz_eval.c b/fuzz/fuzz_eval.c similarity index 100% rename from vendor/quickjs/fuzz/fuzz_eval.c rename to fuzz/fuzz_eval.c diff --git a/fuzz/fuzz_json.c b/fuzz/fuzz_json.c new file mode 100644 index 000000000..a9c331d2c --- /dev/null +++ b/fuzz/fuzz_json.c @@ -0,0 +1,131 @@ +// Copyright 2025 Google LLC +// Fuzz target for QuickJS JSON operations + +#include "quickjs.h" +#include "quickjs-libc.h" +#include +#include +#include +#include + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size < 1) return 0; + + JSRuntime* rt = JS_NewRuntime(); + if (!rt) return 0; + + JSContext* ctx = JS_NewContext(rt); + if (!ctx) { + JS_FreeRuntime(rt); + return 0; + } + + char* input = malloc(size + 1); + if (!input) { + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + return 0; + } + memcpy(input, data, size); + input[size] = '\0'; + + char parse_script[8192]; + snprintf(parse_script, sizeof(parse_script), + "JSON.parse(JSON.stringify(%s))", input); + + JSValue parse_result = JS_Eval(ctx, parse_script, strlen(parse_script), + "", 0); + + if (JS_IsException(parse_result)) { + JS_GetException(ctx); + } else { + JS_FreeValue(ctx, parse_result); + } + + char direct_parse[16384]; + snprintf(direct_parse, sizeof(direct_parse), "JSON.parse('"); + + size_t script_len = strlen(direct_parse); + for (size_t i = 0; i < size && script_len < sizeof(direct_parse) - 20; i++) { + char c = input[i]; + if (c == '\\' || c == '\'') { + direct_parse[script_len++] = '\\'; + } + if (c >= 32 && c < 127) { + direct_parse[script_len++] = c; + } + } + strcat(direct_parse + script_len, "');"); + + JSValue direct_result = JS_Eval(ctx, direct_parse, strlen(direct_parse), + "", 0); + if (JS_IsException(direct_result)) { + JS_GetException(ctx); + } else { + JS_FreeValue(ctx, direct_result); + } + + char stringify_script[8192]; + snprintf(stringify_script, sizeof(stringify_script), + "var obj = { data: %s, num: 123, str: 'test', bool: true, nullv: null, " + "arr: [1,2,3], nested: { a: 1 } }; JSON.stringify(obj);", + input); + + JSValue stringify_result = JS_Eval(ctx, stringify_script, + strlen(stringify_script), "", 0); + if (JS_IsException(stringify_result)) { + JS_GetException(ctx); + } else { + const char* str = JS_ToCString(ctx, stringify_result); + if (str) { + JS_FreeCString(ctx, str); + } + JS_FreeValue(ctx, stringify_result); + } + + const char* spacing_tests[] = { + "JSON.stringify({a:1,b:2})", + "JSON.stringify({a:1,b:2}, null, 2)", + "JSON.stringify({a:1,b:2}, null, ' ')", + "JSON.stringify([1,2,3])", + "JSON.stringify(null)", + "JSON.stringify(undefined)", + "JSON.stringify(123)", + "JSON.stringify('string')", + "JSON.stringify(true)", + }; + + for (size_t i = 0; i < sizeof(spacing_tests) / sizeof(spacing_tests[0]); i++) { + JSValue r = JS_Eval(ctx, spacing_tests[i], strlen(spacing_tests[i]), + "", 0); + if (!JS_IsException(r)) { + JS_FreeValue(ctx, r); + } else { + JS_GetException(ctx); + } + } + + const char* reviver_test = "JSON.parse('{\"a\":1,\"b\":2}', function(k,v) { return v; })"; + JSValue reviver_result = JS_Eval(ctx, reviver_test, strlen(reviver_test), + "", 0); + if (!JS_IsException(reviver_result)) { + JS_FreeValue(ctx, reviver_result); + } else { + JS_GetException(ctx); + } + + const char* replacer_test = "JSON.stringify({a:1,b:2}, function(k,v) { return v; })"; + JSValue replacer_result = JS_Eval(ctx, replacer_test, strlen(replacer_test), + "", 0); + if (!JS_IsException(replacer_result)) { + JS_FreeValue(ctx, replacer_result); + } else { + JS_GetException(ctx); + } + + free(input); + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + + return 0; +} diff --git a/fuzz/fuzz_module_export.c b/fuzz/fuzz_module_export.c new file mode 100644 index 000000000..ece24f613 --- /dev/null +++ b/fuzz/fuzz_module_export.c @@ -0,0 +1,105 @@ +// Copyright 2025 Google LLC +// Fuzz target for QuickJS ES6 module parsing + +#include "quickjs.h" +#include +#include +#include +#include + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size < 1) return 0; + + JSRuntime* rt = JS_NewRuntime(); + if (!rt) return 0; + + JSContext* ctx = JS_NewContext(rt); + if (!ctx) { + JS_FreeRuntime(rt); + return 0; + } + + char* input = malloc(size + 1); + if (!input) { + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + return 0; + } + memcpy(input, data, size); + input[size] = '\0'; + + const char* export_patterns[] = { + "export default %s;", + "export const x = %s;", + "export let x = %s;", + "export var x = %s;", + "export function f() { %s }", + "export class C { %s }", + "export { %s };", + "export * from '%s';", + "export { %s } from 'module';", + "export { default as x } from '%s';", + }; + + int pattern_idx = data[0] % (sizeof(export_patterns) / sizeof(export_patterns[0])); + + char script[8192]; + snprintf(script, sizeof(script), export_patterns[pattern_idx], input); + + JSValue result = JS_Eval(ctx, script, strlen(script), "", + JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); + + if (!JS_IsException(result)) { + JS_FreeValue(ctx, result); + } else { + JS_GetException(ctx); + } + + JSValue result2 = JS_Eval(ctx, input, size, "", JS_EVAL_FLAG_COMPILE_ONLY); + if (!JS_IsException(result2)) { + JS_FreeValue(ctx, result2); + } else { + JS_GetException(ctx); + } + + const char* import_patterns[] = { + "import '%s';", + "import x from '%s';", + "import * as x from '%s';", + "import { x } from '%s';", + "import { x as y } from '%s';", + "import x, { y } from '%s';", + "import x, * as y from '%s';", + }; + + int import_idx = (data[0] >> 4) % (sizeof(import_patterns) / sizeof(import_patterns[0])); + char import_script[8192]; + char* sanitized = malloc(size + 1); + if (sanitized) { + size_t j = 0; + for (size_t i = 0; i < size && j < size; i++) { + if (data[i] != '\'' && data[i] != '"' && data[i] != '\n' && data[i] != '\r') { + sanitized[j++] = data[i]; + } + } + sanitized[j] = '\0'; + + snprintf(import_script, sizeof(import_script), import_patterns[import_idx], sanitized); + + JSValue import_result = JS_Eval(ctx, import_script, strlen(import_script), "", + JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); + if (!JS_IsException(import_result)) { + JS_FreeValue(ctx, import_result); + } else { + JS_GetException(ctx); + } + + free(sanitized); + } + + free(input); + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + + return 0; +} diff --git a/vendor/quickjs/fuzz/fuzz_regexp.c b/fuzz/fuzz_regexp.c similarity index 100% rename from vendor/quickjs/fuzz/fuzz_regexp.c rename to fuzz/fuzz_regexp.c diff --git a/fuzz/fuzz_regexp_compile.c b/fuzz/fuzz_regexp_compile.c new file mode 100644 index 000000000..c501fc5de --- /dev/null +++ b/fuzz/fuzz_regexp_compile.c @@ -0,0 +1,177 @@ +// Copyright 2025 Google LLC +// Fuzz target for QuickJS RegExp compilation + +#include "quickjs.h" +#include "quickjs-libc.h" +#include +#include +#include +#include + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size < 2) return 0; + + JSRuntime* rt = JS_NewRuntime(); + if (!rt) return 0; + + JSContext* ctx = JS_NewContext(rt); + if (!ctx) { + JS_FreeRuntime(rt); + return 0; + } + + size_t pattern_len = size / 2; + size_t flags_len = size - pattern_len; + + if (pattern_len == 0 || flags_len == 0) { + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + return 0; + } + + char* pattern = malloc(pattern_len + 1); + char* flags = malloc(flags_len + 1); + + if (!pattern || !flags) { + free(pattern); + free(flags); + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + return 0; + } + + memcpy(pattern, data, pattern_len); + pattern[pattern_len] = '\0'; + + memcpy(flags, data + pattern_len, flags_len); + flags[flags_len] = '\0'; + + char valid_flags[16]; + size_t valid_idx = 0; + const char* valid = "gimsuy"; + for (size_t i = 0; i < flags_len && valid_idx < sizeof(valid_flags) - 1; i++) { + if (strchr(valid, flags[i]) && !strchr(valid_flags, flags[i])) { + valid_flags[valid_idx++] = flags[i]; + } + } + valid_flags[valid_idx] = '\0'; + + char script[8192]; + char escaped_pattern[4096]; + size_t esc_idx = 0; + for (size_t i = 0; i < pattern_len && esc_idx < sizeof(escaped_pattern) - 2; i++) { + if (pattern[i] == '\\' || pattern[i] == '"' || pattern[i] == '\n' || + pattern[i] == '\r' || pattern[i] == '\t') { + escaped_pattern[esc_idx++] = '\\'; + } + escaped_pattern[esc_idx++] = pattern[i]; + } + escaped_pattern[esc_idx] = '\0'; + + snprintf(script, sizeof(script), "new RegExp(\"%s\", \"%s\")", + escaped_pattern, valid_flags); + + JSValue regexp_result = JS_Eval(ctx, script, strlen(script), "", 0); + + if (!JS_IsException(regexp_result)) { + const char* test_strings[] = { + "'test string'", + "''", + "'aaaaaaaaaa'", + "'1234567890'", + "'!@#$%^&*()'", + }; + + for (size_t i = 0; i < sizeof(test_strings) / sizeof(test_strings[0]); i++) { + char match_script[4096]; + snprintf(match_script, sizeof(match_script), + "var re = %s; re.test(%s); re.exec(%s); %s.match(re);", + script, test_strings[i], test_strings[i], test_strings[i]); + + JSValue match_result = JS_Eval(ctx, match_script, strlen(match_script), + "", 0); + if (!JS_IsException(match_result)) { + JS_FreeValue(ctx, match_result); + } else { + JS_GetException(ctx); + } + } + + const char* split_test = "'a,b,c,d'.split(/,/)"; + JSValue split_result = JS_Eval(ctx, split_test, strlen(split_test), + "", 0); + if (!JS_IsException(split_result)) { + JS_FreeValue(ctx, split_result); + } else { + JS_GetException(ctx); + } + + const char* replace_test = "'hello world'.replace(/world/, 'universe')"; + JSValue replace_result = JS_Eval(ctx, replace_test, strlen(replace_test), + "", 0); + if (!JS_IsException(replace_result)) { + JS_FreeValue(ctx, replace_result); + } else { + JS_GetException(ctx); + } + + const char* search_test = "'abc123def'.search(/[0-9]+/)"; + JSValue search_result = JS_Eval(ctx, search_test, strlen(search_test), + "", 0); + if (!JS_IsException(search_result)) { + JS_FreeValue(ctx, search_result); + } else { + JS_GetException(ctx); + } + + JS_FreeValue(ctx, regexp_result); + } else { + JS_GetException(ctx); + } + + char literal_script[4096]; + char slash_escaped[2048]; + size_t slash_idx = 0; + for (size_t i = 0; i < pattern_len && slash_idx < sizeof(slash_escaped) - 2; i++) { + if (pattern[i] == '/') { + slash_escaped[slash_idx++] = '\\'; + } + slash_escaped[slash_idx++] = pattern[i]; + } + slash_escaped[slash_idx] = '\0'; + + snprintf(literal_script, sizeof(literal_script), "/%s/%s.test('test')", slash_escaped, valid_flags); + + JSValue literal_result = JS_Eval(ctx, literal_script, strlen(literal_script), + "", 0); + if (!JS_IsException(literal_result)) { + JS_FreeValue(ctx, literal_result); + } else { + JS_GetException(ctx); + } + + const char* builtin_tests[] = { + "RegExp.prototype.compile", + "/a/g[Symbol.match]('a')", + "/a/g[Symbol.replace]('a', 'b')", + "/a/g[Symbol.search]('a')", + "/a/g[Symbol.split]('a,b,a')", + }; + + for (size_t i = 0; i < sizeof(builtin_tests) / sizeof(builtin_tests[0]); i++) { + JSValue r = JS_Eval(ctx, builtin_tests[i], strlen(builtin_tests[i]), + "", 0); + if (!JS_IsException(r)) { + JS_FreeValue(ctx, r); + } else { + JS_GetException(ctx); + } + } + + free(pattern); + free(flags); + JS_FreeContext(ctx); + JS_FreeRuntime(rt); + + return 0; +} diff --git a/vendor/quickjs/fuzz/generate_dict.js b/fuzz/generate_dict.js similarity index 100% rename from vendor/quickjs/fuzz/generate_dict.js rename to fuzz/generate_dict.js diff --git a/vendor/quickjs/libregexp-opcode.h b/libregexp-opcode.h similarity index 100% rename from vendor/quickjs/libregexp-opcode.h rename to libregexp-opcode.h diff --git a/vendor/quickjs/libregexp.c b/libregexp.c similarity index 100% rename from vendor/quickjs/libregexp.c rename to libregexp.c diff --git a/vendor/quickjs/libregexp.h b/libregexp.h similarity index 100% rename from vendor/quickjs/libregexp.h rename to libregexp.h diff --git a/vendor/quickjs/libunicode-table.h b/libunicode-table.h similarity index 100% rename from vendor/quickjs/libunicode-table.h rename to libunicode-table.h diff --git a/vendor/quickjs/libunicode.c b/libunicode.c similarity index 99% rename from vendor/quickjs/libunicode.c rename to libunicode.c index 0c510ccb1..0b7b6d0b1 100644 --- a/vendor/quickjs/libunicode.c +++ b/libunicode.c @@ -1189,7 +1189,8 @@ int unicode_normalize(uint32_t **pdst, const uint32_t *src, int src_len, goto not_latin1; } buf = (int *)dbuf->buf; - memcpy(buf, src, src_len * sizeof(int)); + if (src_len != 0) + memcpy(buf, src, src_len * sizeof(int)); *pdst = (uint32_t *)buf; return src_len; not_latin1: ; diff --git a/vendor/quickjs/libunicode.h b/libunicode.h similarity index 97% rename from vendor/quickjs/libunicode.h rename to libunicode.h index 5b02c82b4..c2fdeac89 100644 --- a/vendor/quickjs/libunicode.h +++ b/libunicode.h @@ -26,6 +26,11 @@ #include +/* unicode standard version */ +#define LIBUNICODE_UNICODE_VERSION_MAJOR 17 +#define LIBUNICODE_UNICODE_VERSION_MINOR 0 +#define LIBUNICODE_UNICODE_VERSION_PATCH 0 + /* define it to include all the unicode tables (40KB larger) */ #define CONFIG_ALL_UNICODE diff --git a/vendor/quickjs-ng/list.h b/list.h similarity index 100% rename from vendor/quickjs-ng/list.h rename to list.h diff --git a/package.json b/package.json deleted file mode 100644 index c19bb460f..000000000 --- a/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "quickjs-emscripten-repo", - "private": true, - "version": "0.31.0", - "sideEffects": false, - "license": "MIT", - "type": "commonjs", - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "scripts": { - "prepack": "yarn build && yarn check:package", - "tarball": "yarn check:packages && rm -rf $PWD/build/tar && mkdir -p $PWD/build/tar && yarn for-each-package-cmd pack --out $PWD/build/tar/%s.tgz", - "prepare": "yarn check", - "clean": "git clean -dfx ./build && yarn for-each-package clean", - "prettier": "prettier --write .", - "vendor:quickjs:subtree": "git subtree $ACTION --prefix=vendor/quickjs --squash git@github.com:bellard/quickjs.git master", - "vendor:quickjs:pull": "ACTION=pull yarn vendor:quickjs:subtree && yarn vendor:quickjs:patch", - "vendor:quickjs:add": "ACTION=add yarn vendor:quickjs:subtree", - "vendor:quickjs:patch": "git apply vendor/quickjs-patches/*", - "vendor:ng:subtree": "git subtree $ACTION --prefix=vendor/quickjs-ng --squash git@github.com:quickjs-ng/quickjs.git master", - "vendor:ng:pull": "ACTION=pull yarn vendor:ng:subtree", - "vendor:ng:add": "ACTION=add yarn vendor:ng:subtree", - "vendor:update": "yarn vendor:quickjs:pull && yarn vendor:ng:pull", - "smoketest-node": "yarn tarball && ./scripts/smoketest-node-minimal.ts && ./scripts/smoketest-node.ts", - "smoketest-cra": "yarn tarball && ./scripts/smoketest-create-react-app.ts", - "smoketest-vite": "yarn tarball && ./scripts/smoketest-vite.ts", - "check": "yarn build && yarn check:packages && yarn check:format && yarn check:types && yarn test && yarn lint", - "test": "yarn for-each-package test", - "test:fast": "TEST_FAST=true TEST_NO_ASYNC=true yarn test", - "test:slow": "TEST_LEAK=1 yarn test", - "check:types": "yarn for-each-package tsc", - "check:format": "prettier --check .", - "check:packages": "./scripts/check-packages-built.ts", - "check:smoketest": "yarn tarball && ./scripts/smoketest-node-minimal.ts && ./scripts/smoketest-node.ts && ./scripts/smoketest-create-react-app.ts && ./scripts/smoketest-vite.ts", - "lint": "npx eslint .", - "fix": "yarn lint --fix ; yarn prettier > /dev/null", - "build": "yarn build:codegen && yarn build:packages && yarn doc", - "build:codegen": "cp -v README.md packages/quickjs-emscripten && ./scripts/prepareVariants.ts && yarn workspace @jitl/tsconfig build", - "build:packages": "yarn for-each-package build", - "doc": "typedoc", - "doc:serve": "cd doc && npx hads", - "all:publish:stable": "yarn run check:packages && yarn for-each-publishable-package npm publish --access public", - "all:publish:next": "yarn run check:packages && yarn for-each-publishable-package npm publish --access public --tag next", - "all:version": "./scripts/set-version.ts", - "for-each-package-cmd": "yarn workspaces foreach --from 'packages/*' --topological-dev -Rpti", - "for-each-publishable-package": "yarn for-each-package-cmd --exclude 'packages/internal-*'", - "for-each-package": "yarn for-each-package-cmd run" - }, - "workspaces": [ - "packages/*" - ], - "devDependencies": { - "@types/emscripten": "^1.38.0", - "@types/eslint": "^8", - "@types/fs-extra": "^9.0.13", - "@types/node": "^20.10.5", - "@typescript-eslint/eslint-plugin": "^6.16.0", - "@typescript-eslint/parser": "^6.16.0", - "eslint": "^8.56.0", - "eslint-plugin-import": "^2.29.1", - "fs-extra": "^10.0.1", - "glob": "^10.3.10", - "hads": "^3.0.3", - "node-fetch-commonjs": "^3.1.1", - "prettier": "^3.1.1", - "source-map-support": "^0.5.21", - "tsup": "^8.0.1", - "tsx": "^4.6.2", - "typedoc": "^0.25.4", - "typedoc-plugin-inline-sources": "^1.0.1", - "typedoc-plugin-markdown": "4.0.0-next.38", - "typescript": "^5.3.3", - "vite-tsconfig-paths": "^4.2.2", - "vitest": "2.0.5" - }, - "packageManager": "yarn@4.0.2" -} diff --git a/packages/internal-tsconfig/.gitignore b/packages/internal-tsconfig/.gitignore deleted file mode 100644 index fcdda6d6c..000000000 --- a/packages/internal-tsconfig/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.*js -*.d.*ts -*.map diff --git a/packages/internal-tsconfig/package.json b/packages/internal-tsconfig/package.json deleted file mode 100644 index 7e3aede55..000000000 --- a/packages/internal-tsconfig/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@jitl/tsconfig", - "private": true, - "version": "0.31.0", - "scripts": { - "build": "yarn build:tsc && echo built $npm_package_json && ls -l", - "build:tsc": "npx tsc --project tsconfig.tsup.json", - "clean": "git clean -fx ." - } -} diff --git a/packages/internal-tsconfig/tsconfig.json b/packages/internal-tsconfig/tsconfig.json deleted file mode 100644 index 6b65072fd..000000000 --- a/packages/internal-tsconfig/tsconfig.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - // "exclude": ["node_modules", "examples"], - "compilerOptions": { - /* Basic Options */ - // "incremental": true /* Enable incremental compilation */, - // "tsBuildInfoFile": "build/tsbuildinfo", - - "target": "ES2020" /* Node 14+ per https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping */, - "module": "nodenext" /* Some imports are really imports: https://www.typescriptlang.org/docs/handbook/esm-node.html */, - "useDefineForClassFields": false, - "moduleResolution": "nodenext" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - "resolveJsonModule": true, - - /* Specify library files to be included in the compilation. */ - "lib": [ - "ES2020", - // Need DOM for WebAssembty.XYZ namespace - "DOM", - // Symbol.dispose - // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management - "esnext.disposable" - ], - // "allowJs": true /* Allow javascript files to be compiled. */, - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "./dist" /* Redirect output structure to the directory. */, - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./build/tsbuildinfo", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - "noEmitOnError": true, - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - "isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */, - // "emitDeclarationOnly": true, - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "skipLibCheck": true, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true /* TODO: enable. Currently we codegen a lot of unused imports */, - // "noUnusedParameters": true /* TODO: enable. */, - "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, - "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, - - /* Module Resolution Options */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [ ] /* List of folders to include type definitions from. */, - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - "inlineSources": true /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */, - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } -} diff --git a/packages/internal-tsconfig/tsconfig.tsup.json b/packages/internal-tsconfig/tsconfig.tsup.json deleted file mode 100644 index 4a1674150..000000000 --- a/packages/internal-tsconfig/tsconfig.tsup.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "include": ["*.*ts"] -} diff --git a/packages/internal-tsconfig/tsup.base.config.ts b/packages/internal-tsconfig/tsup.base.config.ts deleted file mode 100644 index 7ded78f65..000000000 --- a/packages/internal-tsconfig/tsup.base.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Options } from "tsup" -import { defineConfig } from "tsup" - -const baseConfig = defineConfig((_options) => ({ - entry: ["src/index.ts"], - sourcemap: true, - dts: true, - clean: true, - format: ["cjs", "esm"], - minifySyntax: true, - minifyWhitespace: true, -})) as (options: Options) => Options - -export function extendConfig(options: Options = {}) { - return defineConfig((config) => { - const base = baseConfig(config) - return { - ...base, - ...options, - } - }) as (options: Options) => Options -} diff --git a/packages/internal-tsconfig/vite.base.config.mts b/packages/internal-tsconfig/vite.base.config.mts deleted file mode 100644 index 01d7a1164..000000000 --- a/packages/internal-tsconfig/vite.base.config.mts +++ /dev/null @@ -1,15 +0,0 @@ -import { defineConfig } from "vitest/config" -import tsconfigPaths from "vite-tsconfig-paths" - -export default defineConfig({ - // Incantation needed for vite to not barf on "using" statement - esbuild: { - target: "es2020", - }, - plugins: [tsconfigPaths()], - test: { - onStackTrace(_error, _frame) { - return true - }, - }, -}) diff --git a/packages/quickjs-emscripten-core/.gitignore b/packages/quickjs-emscripten-core/.gitignore deleted file mode 100644 index 1521c8b76..000000000 --- a/packages/quickjs-emscripten-core/.gitignore +++ /dev/null @@ -1 +0,0 @@ -dist diff --git a/packages/quickjs-emscripten-core/LICENSE b/packages/quickjs-emscripten-core/LICENSE deleted file mode 100644 index 22f51c713..000000000 --- a/packages/quickjs-emscripten-core/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/quickjs-emscripten-core/README.md b/packages/quickjs-emscripten-core/README.md deleted file mode 100644 index fb298d63c..000000000 --- a/packages/quickjs-emscripten-core/README.md +++ /dev/null @@ -1,341 +0,0 @@ - - -# quickjs-emscripten-core - -This package is part of [quickjs-emscripten](https://github.com/justjakel/quickjs-emscripten), a Javascript interface for QuickJS compiled to WebAssembly via Emscripten. - -This package (`quickjs-emscripten-core`) contains only Javascript code - no WebAssembly. To use this package, you'll need to install one or more _variants_ of the QuickJS WebAssembly build, see [available variants](#Available-variants) below. - -```typescript -// 1. Import a QuickJS module constructor function from quickjs-emscripten-core -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" - -// 2. Import a variant suitable for your use case. For example, if you only care to -// target with the fastest execution speed, import the release build variant -import releaseVariant from "@jitl/quickjs-singlefile-cjs-release-sync" - -// 3. Create the "QuickJS" module that presents the quickjs-emscripten API. -// Export and use in other files, or consume directly. -const QuickJS = await newQuickJSWASMModuleFromVariant(releaseVariant) -``` - -## What's a variant? - -A variant describes how to load a QuickJS WebAssembly build and how to call the low-level C API functions used by the higher-level abstractions in `quickjs-emscripten-core`. A variant is an object with the following properties: - -```typescript -const variant = { - // This should be `async` if the variant is built with ASYNCIFY - // so that the WebAssembly module execution can be suspended. - // - // Otherwise, this should be `sync`. - type: "sync", - // This should be a function that resolves to a QuickJSFFI class. - importFFI: () => import("something/ffi.ts").then((mod) => mod.QuickJSFFI), - // This should be a function that resolves to a Emscripten-shaped WASM module factory. - importModuleLoader: () => import("something/emscripten-module.ts"), -} -``` - -You can provide your own variant to control exactly how the large WebAssembly object is loaded. `quickjs-emscripten-core` will call your variant's importXYZ methods during `newQuickJSWASMModuleFromVariant` or `newQuickJSAsyncWASMModuleFromVariant`. - -## Environment-specific variants - -You can use [subpath imports in package.json](https://nodejs.org/api/packages.html#subpath-imports) to select the appropriate variant for a runtime. This is how the main `quickjs-emscripten` package picks between browser, Node ESM and Node CommonJS variants. - -```json -// in your package.json -{ - "imports": { - "#my-quickjs-variant": { - "types": "@jitl/quickjs-wasmfile-release-sync", - // In the browser, use the singlefile variant that doesn't need an external file - "browser": "@jitl/quickjs-singlefile-browser-release-sync", - // Otherwise, use the wasmfile variant, compatible with all environments - "default": "@jitl/quickjs-wasmfile-release-sync" - } - } -} -``` - -```typescript -// In your code -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import variant from "#my-quickjs-variant" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -## Available variants - -### @jitl/quickjs-wasmfile-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-wasmfile-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-wasmfile-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-wasmfile-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-ng-wasmfile-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md) | -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -| Variable | Setting | Description | -| ------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | -| exports | require import browser workerd | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-cjs-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md) | -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | require | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-mjs-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md) | -Variant with the WASM data embedded into a NodeJS ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | import | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-debug-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-debug-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-sync/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-singlefile-browser-release-asyncify - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md) | -Variant with the WASM data embedded into a browser ESModule. - -| Variable | Setting | Description | -| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | -| emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | -| exports | browser | Has these package.json export conditions | - -### @jitl/quickjs-asmjs-mjs-release-sync - -[Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md) | -Compiled to pure Javascript, no WebAssembly required. - -| Variable | Setting | Description | -| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | -| releaseMode | release | Optimized for performance; use when building/deploying your application. | -| syncMode | sync | The default, normal build. Note that both variants support regular async functions. | -| emscriptenInclusion | asmjs | The C library code is compiled to Javascript, no WebAssembly used. Sometimes called "asmjs". This is the slowest possible option, and is intended for constrained environments that do not support WebAssembly, like quickjs-for-quickjs. | -| exports | import | Has these package.json export conditions | diff --git a/packages/quickjs-emscripten-core/README.template.md b/packages/quickjs-emscripten-core/README.template.md deleted file mode 100644 index 076443826..000000000 --- a/packages/quickjs-emscripten-core/README.template.md +++ /dev/null @@ -1,70 +0,0 @@ - - -# quickjs-emscripten-core - -This package is part of [quickjs-emscripten](https://github.com/justjakel/quickjs-emscripten), a Javascript interface for QuickJS compiled to WebAssembly via Emscripten. - -This package (`quickjs-emscripten-core`) contains only Javascript code - no WebAssembly. To use this package, you'll need to install one or more _variants_ of the QuickJS WebAssembly build, see [available variants](#Available-variants) below. - -```typescript -// 1. Import a QuickJS module constructor function from quickjs-emscripten-core -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" - -// 2. Import a variant suitable for your use case. For example, if you only care to -// target with the fastest execution speed, import the release build variant -import releaseVariant from "@jitl/quickjs-singlefile-cjs-release-sync" - -// 3. Create the "QuickJS" module that presents the quickjs-emscripten API. -// Export and use in other files, or consume directly. -const QuickJS = await newQuickJSWASMModuleFromVariant(releaseVariant) -``` - -## What's a variant? - -A variant describes how to load a QuickJS WebAssembly build and how to call the low-level C API functions used by the higher-level abstractions in `quickjs-emscripten-core`. A variant is an object with the following properties: - -```typescript -const variant = { - // This should be `async` if the variant is built with ASYNCIFY - // so that the WebAssembly module execution can be suspended. - // - // Otherwise, this should be `sync`. - type: "sync", - // This should be a function that resolves to a QuickJSFFI class. - importFFI: () => import("something/ffi.ts").then((mod) => mod.QuickJSFFI), - // This should be a function that resolves to a Emscripten-shaped WASM module factory. - importModuleLoader: () => import("something/emscripten-module.ts"), -} -``` - -You can provide your own variant to control exactly how the large WebAssembly object is loaded. `quickjs-emscripten-core` will call your variant's importXYZ methods during `newQuickJSWASMModuleFromVariant` or `newQuickJSAsyncWASMModuleFromVariant`. - -## Environment-specific variants - -You can use [subpath imports in package.json](https://nodejs.org/api/packages.html#subpath-imports) to select the appropriate variant for a runtime. This is how the main `quickjs-emscripten` package picks between browser, Node ESM and Node CommonJS variants. - -```json -// in your package.json -{ - "imports": { - "#my-quickjs-variant": { - "types": "@jitl/quickjs-wasmfile-release-sync", - // In the browser, use the singlefile variant that doesn't need an external file - "browser": "@jitl/quickjs-singlefile-browser-release-sync", - // Otherwise, use the wasmfile variant, compatible with all environments - "default": "@jitl/quickjs-wasmfile-release-sync" - } - } -} -``` - -```typescript -// In your code -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import variant from "#my-quickjs-variant" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -## Available variants - - diff --git a/packages/quickjs-emscripten-core/package.json b/packages/quickjs-emscripten-core/package.json deleted file mode 100644 index 71989561a..000000000 --- a/packages/quickjs-emscripten-core/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "quickjs-emscripten-core", - "version": "0.31.0", - "sideEffects": false, - "license": "MIT", - "type": "commonjs", - "keywords": [ - "eval", - "quickjs", - "vm", - "interpreter", - "runtime", - "safe", - "emscripten", - "wasm" - ], - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "files": [ - "LICENSE", - "dist/**/*", - "!dist/*.test.js", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - } - }, - "scripts": { - "tsc": "npx tsc -p . --noEmit", - "test": "npx vitest run", - "build": "npx tsup" - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/quickjs-emscripten-core/src/QuickJSIterator.ts b/packages/quickjs-emscripten-core/src/QuickJSIterator.ts deleted file mode 100644 index 9ffc1d20c..000000000 --- a/packages/quickjs-emscripten-core/src/QuickJSIterator.ts +++ /dev/null @@ -1,144 +0,0 @@ -import type { QuickJSContextResult, QuickJSContext } from "./context" -import { DisposableResult, Lifetime, UsingDisposable } from "./lifetime" -import type { QuickJSRuntime } from "./runtime" -import type { QuickJSHandle } from "./types" - -/** - * Proxies the iteration protocol from the host to a guest iterator. - * The guest iterator is a QuickJS object with a `next` method. - * See [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols). - * - * If calling the `next` method or any other method of the iteration protocol throws an error, - * the iterator is disposed after returning the exception as the final value. - * - * When the iterator is done, the handle is disposed automatically. - * The caller is responsible for disposing each successive value. - * - * ```typescript - * for (const nextResult of context.unwrapResult(context.getIterator(arrayHandle)) { - * const nextHandle = context.unwrapResult(nextResult) - * try { - * // Do something with nextHandle - * console.log(context.dump(nextHandle)) - * } finally { - * nextHandle.dispose() - * } - * } - * ``` - */ -export class QuickJSIterator - extends UsingDisposable - implements Disposable, IterableIterator> -{ - public owner: QuickJSRuntime - private _next: QuickJSHandle | undefined - private _isDone = false - - constructor( - public handle: QuickJSHandle, - public context: QuickJSContext, - ) { - super() - this.owner = context.runtime - } - - [Symbol.iterator]() { - return this - } - - next(value?: QuickJSHandle): IteratorResult, any> { - if (!this.alive || this._isDone) { - return { - done: true, - value: undefined, - } - } - - const nextMethod = (this._next ??= this.context.getProp(this.handle, "next")) - return this.callIteratorMethod(nextMethod, value) - } - - return(value?: QuickJSHandle): IteratorResult, any> { - if (!this.alive) { - return { - done: true, - value: undefined, - } - } - - const returnMethod = this.context.getProp(this.handle, "return") - if (returnMethod === this.context.undefined && value === undefined) { - // This may be an automatic call by the host Javascript engine, - // but the guest iterator doesn't have a `return` method. - // Don't call it then. - this.dispose() - return { - done: true, - value: undefined, - } - } - - const result = this.callIteratorMethod(returnMethod, value) - returnMethod.dispose() - this.dispose() - return result - } - - throw(e?: any): IteratorResult, any> { - if (!this.alive) { - return { - done: true, - value: undefined, - } - } - - const errorHandle = e instanceof Lifetime ? e : this.context.newError(e) - const throwMethod = this.context.getProp(this.handle, "throw") - const result = this.callIteratorMethod(throwMethod, e) - if (errorHandle.alive) { - errorHandle.dispose() - } - throwMethod.dispose() - this.dispose() - return result - } - - get alive() { - return this.handle.alive - } - - dispose() { - this._isDone = true - this.handle.dispose() - this._next?.dispose() - } - - private callIteratorMethod( - method: QuickJSHandle, - input?: QuickJSHandle, - ): IteratorResult, any> { - const callResult = input - ? this.context.callFunction(method, this.handle, input) - : this.context.callFunction(method, this.handle) - if (callResult.error) { - this.dispose() - return { - value: callResult, - } - } - - const done = this.context.getProp(callResult.value, "done").consume((v) => this.context.dump(v)) - const value = this.context.getProp(callResult.value, "value") - - callResult.value.dispose() - - if (done) { - this.dispose() - } - - return { - value: DisposableResult.success(value), - done: done as boolean, - } - } -} diff --git a/packages/quickjs-emscripten-core/src/asyncify-helpers.test.ts b/packages/quickjs-emscripten-core/src/asyncify-helpers.test.ts deleted file mode 100644 index f3ab3ba07..000000000 --- a/packages/quickjs-emscripten-core/src/asyncify-helpers.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import assert from "assert" -import { describe, it } from "vitest" -import { maybeAsyncFn } from "./asyncify-helpers" - -describe("maybeAsync", () => { - const addPromises = maybeAsyncFn( - undefined, - function* (awaited, a: number | Promise, b: number | Promise) { - return (yield* awaited(a)) + (yield* awaited(b)) - }, - ) - - it("has sync output for sync inputs", () => { - const sum2 = addPromises(5, 6) - assert.strictEqual(sum2, 11) - }) - - it("has async output for async inputs", async () => { - const result = addPromises(Promise.resolve(1), 2) - assert(result instanceof Promise, "is promise") - const sum = await result - assert.strictEqual(sum, 3, "sums correctly") - }) - - it("throws any sync errors", () => { - // eslint-disable-next-line require-yield - const fn = maybeAsyncFn(undefined, function* () { - throw new Error("sync error") - }) - - assert.throws(() => fn(), /sync error/) - }) - - it("it throws async errors", () => { - const fn = maybeAsyncFn(undefined, function* (awaited) { - yield* awaited(new Promise((resolve) => setTimeout(resolve, 50))) - throw new Error("async error") - }) - - assert.rejects(() => fn(), /async error/) - }) -}) diff --git a/packages/quickjs-emscripten-core/src/asyncify-helpers.ts b/packages/quickjs-emscripten-core/src/asyncify-helpers.ts deleted file mode 100644 index 50001cbca..000000000 --- a/packages/quickjs-emscripten-core/src/asyncify-helpers.ts +++ /dev/null @@ -1,93 +0,0 @@ -function* awaitYield(value: T | Promise) { - return (yield value) as T -} - -function awaitYieldOf( - generator: Generator, T, Yielded>, -): Generator, T, T> { - return awaitYield(awaitEachYieldedPromise(generator)) -} - -export type AwaitYield = typeof awaitYield & { - of: typeof awaitYieldOf -} - -const AwaitYield: AwaitYield = awaitYield as AwaitYield -AwaitYield.of = awaitYieldOf - -/** - * Create a function that may or may not be async, using a generator - * - * Within the generator, call `yield* awaited(maybePromise)` to await a value - * that may or may not be a promise. - * - * If the inner function never yields a promise, it will return synchronously. - */ -export function maybeAsyncFn< - /** Function arguments */ - Args extends any[], - This, - /** Function return type */ - Return, - /** Yields to unwrap */ - Yielded, ->( - that: This, - fn: ( - this: This, - awaited: AwaitYield, - ...args: Args - ) => Generator, Return, Yielded>, -): (...args: Args) => Return | Promise { - return (...args: Args) => { - const generator = fn.call(that, AwaitYield, ...args) - return awaitEachYieldedPromise(generator) - } -} - -// class Example { -// private maybeAsyncMethod = maybeAsyncFn(this, function* (awaited, a: number) { -// yield* awaited(new Promise((resolve) => setTimeout(resolve, a))) -// return 5 -// }) -// } - -export type MaybeAsyncBlock = ( - this: This, - awaited: AwaitYield, - ...args: Args -) => Generator, Return, Yielded> - -export function maybeAsync( - that: This, - startGenerator: ( - this: This, - await: AwaitYield, - ) => Generator, Return, Yielded>, -): Return | Promise { - const generator = startGenerator.call(that, AwaitYield) - return awaitEachYieldedPromise(generator) -} - -export function awaitEachYieldedPromise( - gen: Generator, Returned, Yielded>, -): Returned | Promise { - type NextResult = ReturnType - - function handleNextStep(step: NextResult): Returned | Promise { - if (step.done) { - return step.value - } - - if (step.value instanceof Promise) { - return step.value.then( - (value) => handleNextStep(gen.next(value)), - (error) => handleNextStep(gen.throw(error)), - ) - } - - return handleNextStep(gen.next(step.value)) - } - - return handleNextStep(gen.next()) -} diff --git a/packages/quickjs-emscripten-core/src/context-asyncify.ts b/packages/quickjs-emscripten-core/src/context-asyncify.ts deleted file mode 100644 index 02db51de1..000000000 --- a/packages/quickjs-emscripten-core/src/context-asyncify.ts +++ /dev/null @@ -1,94 +0,0 @@ -import type { - QuickJSAsyncEmscriptenModule, - QuickJSAsyncFFI, - EvalDetectModule, - EvalFlags, - JSRuntimePointer, - JSValuePointer, -} from "@jitl/quickjs-ffi-types" -import type { QuickJSContextResult } from "./context" -import { QuickJSContext } from "./context" -import type { Lifetime } from "./lifetime" -import type { QuickJSModuleCallbacks } from "./module" -import type { QuickJSAsyncRuntime } from "./runtime-asyncify" -import type { ContextEvalOptions, QuickJSHandle } from "./types" -import { evalOptionsToFlags } from "./types" -import type { VmCallResult } from "./vm-interface" - -export type AsyncFunctionImplementation = ( - this: QuickJSHandle, - ...args: QuickJSHandle[] -) => Promise | void> - -/** - * Asyncified version of {@link QuickJSContext}. - * - * *Asyncify* allows normally synchronous code to wait for asynchronous Promises - * or callbacks. The asyncified version of QuickJSContext can wait for async - * host functions as though they were synchronous. - */ -export class QuickJSAsyncContext extends QuickJSContext { - public declare runtime: QuickJSAsyncRuntime - /** @private */ - protected declare module: QuickJSAsyncEmscriptenModule - /** @private */ - protected declare ffi: QuickJSAsyncFFI - /** @private */ - protected declare rt: Lifetime - /** @private */ - protected declare callbacks: QuickJSModuleCallbacks - - /** - * Asyncified version of {@link evalCode}. - */ - async evalCodeAsync( - code: string, - filename: string = "eval.js", - /** See {@link EvalFlags} for number semantics */ - options?: number | ContextEvalOptions, - ): Promise> { - const detectModule = (options === undefined ? 1 : 0) as EvalDetectModule - const flags = evalOptionsToFlags(options) as EvalFlags - let resultPtr = 0 as JSValuePointer - try { - resultPtr = await this.memory - .newHeapCharPointer(code) - .consume((charHandle) => - this.ffi.QTS_Eval_MaybeAsync( - this.ctx.value, - charHandle.value.ptr, - charHandle.value.strlen, - filename, - detectModule, - flags, - ), - ) - } catch (error) { - this.runtime.debugLog("QTS_Eval_MaybeAsync threw", error) - throw error - } - const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr) - if (errorPtr) { - this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr) - return this.fail(this.memory.heapValueHandle(errorPtr)) - } - return this.success(this.memory.heapValueHandle(resultPtr)) - } - - /** - * Similar to {@link newFunction}. - * Convert an async host Javascript function into a synchronous QuickJS function value. - * - * Whenever QuickJS calls this function, the VM's stack will be unwound while - * waiting the async function to complete, and then restored when the returned - * promise resolves. - * - * Asyncified functions must never call other asyncified functions or - * `import`, even indirectly, because the stack cannot be unwound twice. - * - * See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html). - */ - newAsyncifiedFunction(name: string, fn: AsyncFunctionImplementation): QuickJSHandle { - return this.newFunction(name, fn as any) - } -} diff --git a/packages/quickjs-emscripten-core/src/context.ts b/packages/quickjs-emscripten-core/src/context.ts deleted file mode 100644 index d2a19bdb0..000000000 --- a/packages/quickjs-emscripten-core/src/context.ts +++ /dev/null @@ -1,1443 +0,0 @@ -import { IsEqualOp, JSPromiseStateEnum } from "@jitl/quickjs-ffi-types" -import type { - EvalFlags, - EitherModule, - EvalDetectModule, - JSBorrowedCharPointer, - JSContextPointer, - JSRuntimePointer, - JSValueConstPointer, - JSValuePointer, - JSValuePointerPointer, - EitherFFI, - UInt32Pointer, - JSValuePointerPointerPointer, - JSVoidPointer, -} from "@jitl/quickjs-ffi-types" -import type { JSPromiseState } from "./deferred-promise" -import { QuickJSDeferredPromise } from "./deferred-promise" -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import type { shouldInterruptAfterDeadline } from "./interrupt-helpers" -import { - QuickJSEmptyGetOwnPropertyNames, - QuickJSNotImplemented, - QuickJSPromisePending, - QuickJSUnwrapError, -} from "./errors" -import type { Disposable, DisposableArray, DisposableFail, DisposableSuccess } from "./lifetime" -import { - DisposableResult, - Lifetime, - Scope, - StaticLifetime, - UsingDisposable, - WeakLifetime, - createDisposableArray, -} from "./lifetime" -import type { HeapTypedArray } from "./memory" -import { ModuleMemory } from "./memory" -import type { ContextCallbacks, QuickJSModuleCallbacks } from "./module" -import type { - QuickJSRuntime, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ExecutePendingJobsResult, -} from "./runtime" -import type { - ContextEvalOptions, - GetOwnPropertyNamesOptions, - JSValue, - PromiseExecutor, - QuickJSHandle, - StaticJSValue, -} from "./types" -import { evalOptionsToFlags, getOwnPropertyNamesOptionsToFlags } from "./types" -import type { - LowLevelJavascriptVm, - SuccessOrFail, - VmFunctionImplementation, - VmPropertyDescriptor, -} from "./vm-interface" -import { QuickJSIterator } from "./QuickJSIterator" - -export type QuickJSContextResult = DisposableResult - -/** - * Property key for getting or setting a property on a handle with - * {@link QuickJSContext#getProp}, {@link QuickJSContext#setProp}, or {@link QuickJSContext#defineProp}. - */ -export type QuickJSPropertyKey = number | string | QuickJSHandle - -/** - * @private - */ -class ContextMemory extends ModuleMemory implements Disposable { - readonly owner: QuickJSRuntime - readonly ctx: Lifetime - readonly rt: Lifetime - readonly module: EitherModule - readonly ffi: EitherFFI - readonly scope = new Scope() - - /** @private */ - constructor(args: { - owner: QuickJSRuntime - module: EitherModule - ffi: EitherFFI - ctx: Lifetime - rt: Lifetime - ownedLifetimes?: Disposable[] - }) { - super(args.module) - args.ownedLifetimes?.forEach((lifetime) => this.scope.manage(lifetime)) - this.owner = args.owner - this.module = args.module - this.ffi = args.ffi - this.rt = args.rt - this.ctx = this.scope.manage(args.ctx) - } - - get alive() { - return this.scope.alive - } - - dispose() { - return this.scope.dispose() - } - - [Symbol.dispose]() { - return this.dispose() - } - - /** - * Track `lifetime` so that it is disposed when this scope is disposed. - */ - manage(lifetime: T): T { - return this.scope.manage(lifetime) - } - - copyJSValue = (ptr: JSValuePointer | JSValueConstPointer) => { - return this.ffi.QTS_DupValuePointer(this.ctx.value, ptr) - } - - freeJSValue = (ptr: JSValuePointer) => { - this.ffi.QTS_FreeValuePointer(this.ctx.value, ptr) - } - - consumeJSCharPointer(ptr: JSBorrowedCharPointer): string { - const str = this.module.UTF8ToString(ptr) - this.ffi.QTS_FreeCString(this.ctx.value, ptr) - return str - } - - heapValueHandle(ptr: JSValuePointer): JSValue { - return new Lifetime(ptr, this.copyJSValue, this.freeJSValue, this.owner) - } - - /** Manage a heap pointer with the lifetime of the context */ - staticHeapValueHandle(ptr: JSValuePointer | JSValueConstPointer): StaticJSValue { - this.manage(this.heapValueHandle(ptr as JSValuePointer)) - // This isn't technically a static lifetime, but since it has the same - // lifetime as the VM, it's okay to fake one since when the VM is - // disposed, no other functions will accept the value. - return new StaticLifetime(ptr as JSValueConstPointer, this.owner) as StaticJSValue - } -} - -/** - * QuickJSContext wraps a QuickJS Javascript context (JSContext*) within a - * runtime. The contexts within the same runtime may exchange objects freely. - * You can think of separate runtimes like different domains in a browser, and - * the contexts within a runtime like the different windows open to the same - * domain. The {@link runtime} references the context's runtime. - * - * This class's methods return {@link QuickJSHandle}, which wrap C pointers (JSValue*). - * It's the caller's responsibility to call `.dispose()` on any - * handles you create to free memory once you're done with the handle. - * - * Use {@link QuickJSRuntime#newContext} or {@link QuickJSWASMModule#newContext} - * to create a new QuickJSContext. - * - * Create QuickJS values inside the interpreter with methods like - * {@link newNumber}, {@link newString}, {@link newArray}, {@link newObject}, - * {@link newFunction}, and {@link newPromise}. - * - * Call {@link setProp} or {@link defineProp} to customize objects. Use those methods - * with {@link global} to expose the values you create to the interior of the - * interpreter, so they can be used in {@link evalCode}. - * - * Use {@link evalCode} or {@link callFunction} to execute Javascript inside the VM. If - * you're using asynchronous code inside the QuickJSContext, you may need to also - * call {@link QuickJSRuntime#executePendingJobs}. Executing code inside the runtime returns a - * result object representing successful execution or an error. You must dispose - * of any such results to avoid leaking memory inside the VM. - * - * Implement memory and CPU constraints at the runtime level, using {@link runtime}. - * See {@link QuickJSRuntime} for more information. - * - */ -// TODO: Manage own callback registration -export class QuickJSContext - extends UsingDisposable - implements LowLevelJavascriptVm, Disposable -{ - /** - * The runtime that created this context. - */ - public readonly runtime: QuickJSRuntime - - /** @private */ - protected readonly ctx: Lifetime - /** @private */ - protected readonly rt: Lifetime - /** @private */ - protected readonly module: EitherModule - /** @private */ - protected readonly ffi: EitherFFI - /** @private */ - protected memory: ContextMemory - - /** @private */ - protected _undefined: QuickJSHandle | undefined = undefined - /** @private */ - protected _null: QuickJSHandle | undefined = undefined - /** @private */ - protected _false: QuickJSHandle | undefined = undefined - /** @private */ - protected _true: QuickJSHandle | undefined = undefined - /** @private */ - protected _global: QuickJSHandle | undefined = undefined - /** @private */ - protected _BigInt: QuickJSHandle | undefined = undefined - /** @private */ - protected uint32Out: HeapTypedArray - /** @private */ - protected _Symbol: QuickJSHandle | undefined = undefined - /** @private */ - protected _SymbolIterator: QuickJSHandle | undefined = undefined - /** @private */ - protected _SymbolAsyncIterator: QuickJSHandle | undefined = undefined - - /** - * Use {@link QuickJSRuntime#newContext} or {@link QuickJSWASMModule#newContext} - * to create a new QuickJSContext. - */ - constructor(args: { - module: EitherModule - ffi: EitherFFI - ctx: Lifetime - rt: Lifetime - runtime: QuickJSRuntime - ownedLifetimes?: Disposable[] - callbacks: QuickJSModuleCallbacks - }) { - super() - this.runtime = args.runtime - this.module = args.module - this.ffi = args.ffi - this.rt = args.rt - this.ctx = args.ctx - this.memory = new ContextMemory({ - ...args, - owner: this.runtime, - }) - args.callbacks.setContextCallbacks(this.ctx.value, this.cToHostCallbacks) - this.dump = this.dump.bind(this) - this.getString = this.getString.bind(this) - this.getNumber = this.getNumber.bind(this) - this.resolvePromise = this.resolvePromise.bind(this) - this.uint32Out = this.memory.manage( - this.memory.newTypedArray(Uint32Array, 1), - ) - } - - // @implement Disposable ---------------------------------------------------- - - get alive() { - return this.memory.alive - } - - /** - * Dispose of this VM's underlying resources. - * - * @throws Calling this method without disposing of all created handles - * will result in an error. - */ - dispose() { - this.memory.dispose() - } - - // Globals ------------------------------------------------------------------ - - /** - * [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined). - */ - get undefined(): QuickJSHandle { - if (this._undefined) { - return this._undefined - } - - // Undefined is a constant, immutable value in QuickJS. - const ptr = this.ffi.QTS_GetUndefined() - return (this._undefined = new StaticLifetime(ptr)) - } - - /** - * [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null). - */ - get null(): QuickJSHandle { - if (this._null) { - return this._null - } - - // Null is a constant, immutable value in QuickJS. - const ptr = this.ffi.QTS_GetNull() - return (this._null = new StaticLifetime(ptr)) - } - - /** - * [`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true). - */ - get true(): QuickJSHandle { - if (this._true) { - return this._true - } - - // True is a constant, immutable value in QuickJS. - const ptr = this.ffi.QTS_GetTrue() - return (this._true = new StaticLifetime(ptr)) - } - - /** - * [`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false). - */ - get false(): QuickJSHandle { - if (this._false) { - return this._false - } - - // False is a constant, immutable value in QuickJS. - const ptr = this.ffi.QTS_GetFalse() - return (this._false = new StaticLifetime(ptr)) - } - - /** - * [`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects). - * A handle to the global object inside the interpreter. - * You can set properties to create global variables. - */ - get global(): QuickJSHandle { - if (this._global) { - return this._global - } - - // The global is a JSValue, but since it's lifetime is as long as the VM's, - // we should manage it. - const ptr = this.ffi.QTS_GetGlobalObject(this.ctx.value) - - // Automatically clean up this reference when we dispose - this._global = this.memory.staticHeapValueHandle(ptr) - return this._global - } - - // New values --------------------------------------------------------------- - - /** - * Converts a Javascript number into a QuickJS value. - */ - newNumber(num: number): QuickJSHandle { - return this.memory.heapValueHandle(this.ffi.QTS_NewFloat64(this.ctx.value, num)) - } - - /** - * Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value. - */ - newString(str: string): QuickJSHandle { - const ptr = this.memory - .newHeapCharPointer(str) - .consume((charHandle) => this.ffi.QTS_NewString(this.ctx.value, charHandle.value.ptr)) - return this.memory.heapValueHandle(ptr) - } - - /** - * Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value. - * No two symbols created with this function will be the same value. - */ - newUniqueSymbol(description: string | symbol): QuickJSHandle { - const key = (typeof description === "symbol" ? description.description : description) ?? "" - const ptr = this.memory - .newHeapCharPointer(key) - .consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value.ptr, 0)) - return this.memory.heapValueHandle(ptr) - } - - /** - * Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key. - * All symbols created with the same key will be the same value. - */ - newSymbolFor(key: string | symbol): QuickJSHandle { - const description = (typeof key === "symbol" ? key.description : key) ?? "" - const ptr = this.memory - .newHeapCharPointer(description) - .consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value.ptr, 1)) - return this.memory.heapValueHandle(ptr) - } - - /** - * Access a well-known symbol that is a property of the global Symbol object, like `Symbol.iterator`. - */ - getWellKnownSymbol(name: string): QuickJSHandle { - this._Symbol ??= this.memory.manage(this.getProp(this.global, "Symbol")) - return this.getProp(this._Symbol, name) - } - - /** - * Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value. - */ - newBigInt(num: bigint): QuickJSHandle { - if (!this._BigInt) { - const bigIntHandle = this.getProp(this.global, "BigInt") - this.memory.manage(bigIntHandle) - this._BigInt = new StaticLifetime(bigIntHandle.value as JSValueConstPointer, this.runtime) - } - - const bigIntHandle = this._BigInt - const asString = String(num) - return this.newString(asString).consume((handle) => - this.unwrapResult(this.callFunction(bigIntHandle, this.undefined, handle)), - ) - } - - /** - * `{}`. - * Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer). - * - * @param prototype - Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create). - */ - newObject(prototype?: QuickJSHandle): QuickJSHandle { - if (prototype) { - this.runtime.assertOwned(prototype) - } - const ptr = prototype - ? this.ffi.QTS_NewObjectProto(this.ctx.value, prototype.value) - : this.ffi.QTS_NewObject(this.ctx.value) - return this.memory.heapValueHandle(ptr) - } - - /** - * `[]`. - * Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). - */ - newArray(): QuickJSHandle { - const ptr = this.ffi.QTS_NewArray(this.ctx.value) - return this.memory.heapValueHandle(ptr) - } - - /** - * Create a new QuickJS [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). - */ - newArrayBuffer(buffer: ArrayBufferLike): QuickJSHandle { - const array = new Uint8Array(buffer) - const handle = this.memory.newHeapBufferPointer(array) - const ptr = this.ffi.QTS_NewArrayBuffer(this.ctx.value, handle.value.pointer, array.length) - return this.memory.heapValueHandle(ptr) - } - - /** - * Create a new {@link QuickJSDeferredPromise}. Use `deferred.resolve(handle)` and - * `deferred.reject(handle)` to fulfill the promise handle available at `deferred.handle`. - * Note that you are responsible for calling `deferred.dispose()` to free the underlying - * resources; see the documentation on {@link QuickJSDeferredPromise} for details. - */ - newPromise(): QuickJSDeferredPromise - /** - * Create a new {@link QuickJSDeferredPromise} that resolves when the - * given native Promise resolves. Rejections will be coerced - * to a QuickJS error. - * - * You can still resolve/reject the created promise "early" using its methods. - */ - newPromise(promise: Promise): QuickJSDeferredPromise - /** - * Construct a new native Promise, and then convert it into a - * {@link QuickJSDeferredPromise}. - * - * You can still resolve/reject the created promise "early" using its methods. - */ - newPromise( - newPromiseFn: PromiseExecutor, - ): QuickJSDeferredPromise - newPromise( - value?: PromiseExecutor | Promise, - ): QuickJSDeferredPromise { - const deferredPromise = Scope.withScope((scope) => { - const mutablePointerArray = scope.manage( - this.memory.newMutablePointerArray(2), - ) - const promisePtr = this.ffi.QTS_NewPromiseCapability( - this.ctx.value, - mutablePointerArray.value.ptr, - ) - const promiseHandle = this.memory.heapValueHandle(promisePtr) - const [resolveHandle, rejectHandle] = Array.from(mutablePointerArray.value.typedArray).map( - (jsvaluePtr) => this.memory.heapValueHandle(jsvaluePtr as any), - ) - return new QuickJSDeferredPromise({ - context: this, - promiseHandle, - resolveHandle, - rejectHandle, - }) - }) - - if (value && typeof value === "function") { - value = new Promise(value) - } - - if (value) { - Promise.resolve(value).then(deferredPromise.resolve, (error) => - error instanceof Lifetime - ? deferredPromise.reject(error) - : this.newError(error).consume(deferredPromise.reject), - ) - } - - return deferredPromise - } - - /** - * Convert a Javascript function into a QuickJS function value. - * See {@link VmFunctionImplementation} for more details. - * - * A {@link VmFunctionImplementation} should not free its arguments or its return - * value. A VmFunctionImplementation should also not retain any references to - * its return value. - * - * The function argument handles are automatically disposed when the function - * returns. If you want to retain a handle beyond the end of the function, you - * can call {@link Lifetime#dup} to create a copy of the handle that you own - * and must dispose manually. For example, you need to use this API and do some - * extra book keeping to implement `setInterval`: - * - * ```typescript - * // This won't work because `callbackHandle` expires when the function returns, - * // so when the interval fires, the callback handle is already disposed. - * const WRONG_setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - * const delayMs = context.getNumber(delayHandle) - * const intervalId = globalThis.setInterval(() => { - * // ERROR: callbackHandle is already disposed here. - * context.callFunction(callbackHandle) - * }, intervalId) - * return context.newNumber(intervalId) - * }) - * - * // This works since we dup the callbackHandle. - * // We just need to make sure we clean it up manually when the interval is cleared -- - * // so we need to keep track of those interval IDs, and make sure we clean all - * // of them up when we dispose the owning context. - * - * const setIntervalHandle = context.newFunction("setInterval", (callbackHandle, delayHandle) => { - * // Ensure the guest can't overload us by scheduling too many intervals. - * if (QuickJSInterval.INTERVALS.size > 100) { - * throw new Error(`Too many intervals scheduled already`) - * } - * - * const delayMs = context.getNumber(delayHandle) - * const longLivedCallbackHandle = callbackHandle.dup() - * const intervalId = globalThis.setInterval(() => { - * context.callFunction(longLivedCallbackHandle) - * }, intervalId) - * const disposable = new QuickJSInterval(longLivedCallbackHandle, context, intervalId) - * QuickJSInterval.INTERVALS.set(intervalId, disposable) - * return context.newNumber(intervalId) - * }) - * - * const clearIntervalHandle = context.newFunction("clearInterval", (intervalIdHandle) => { - * const intervalId = context.getNumber(intervalIdHandle) - * const disposable = QuickJSInterval.INTERVALS.get(intervalId) - * disposable?.dispose() - * }) - * - * class QuickJSInterval extends UsingDisposable { - * static INTERVALS = new Map() - * - * static disposeContext(context: QuickJSContext) { - * for (const interval of QuickJSInterval.INTERVALS.values()) { - * if (interval.context === context) { - * interval.dispose() - * } - * } - * } - * - * constructor( - * public fnHandle: QuickJSHandle, - * public context: QuickJSContext, - * public intervalId: number, - * ) { - * super() - * } - * - * dispose() { - * globalThis.clearInterval(this.intervalId) - * this.fnHandle.dispose() - * QuickJSInterval.INTERVALS.delete(this.fnHandle.value) - * } - * - * get alive() { - * return this.fnHandle.alive - * } - * } - * ``` - * - * To implement an async function, create a promise with {@link newPromise}, then - * return the deferred promise handle from `deferred.handle` from your - * function implementation: - * - * ```typescript - * const deferred = vm.newPromise() - * someNativeAsyncFunction().then(deferred.resolve) - * return deferred.handle - * ``` - */ - newFunction(name: string, fn: VmFunctionImplementation): QuickJSHandle { - const fnId = ++this.fnNextId - this.setFunction(fnId, fn) - return this.memory.heapValueHandle(this.ffi.QTS_NewFunction(this.ctx.value, fnId, name)) - } - - newError(error: { name: string; message: string }): QuickJSHandle - newError(message: string): QuickJSHandle - newError(): QuickJSHandle - newError(error?: string | { name: string; message: string }): QuickJSHandle { - const errorHandle = this.memory.heapValueHandle(this.ffi.QTS_NewError(this.ctx.value)) - - if (error && typeof error === "object") { - if (error.name !== undefined) { - this.newString(error.name).consume((handle) => this.setProp(errorHandle, "name", handle)) - } - - if (error.message !== undefined) { - this.newString(error.message).consume((handle) => - this.setProp(errorHandle, "message", handle), - ) - } - } else if (typeof error === "string") { - this.newString(error).consume((handle) => this.setProp(errorHandle, "message", handle)) - } else if (error !== undefined) { - // This isn't supported in the type signature but maybe it will make life easier. - this.newString(String(error)).consume((handle) => - this.setProp(errorHandle, "message", handle), - ) - } - - return errorHandle - } - - // Read values -------------------------------------------------------------- - - /** - * `typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof). - * - * @remarks - * Does not support BigInt values correctly. - */ - typeof(handle: QuickJSHandle) { - this.runtime.assertOwned(handle) - return this.memory.consumeHeapCharPointer(this.ffi.QTS_Typeof(this.ctx.value, handle.value)) - } - - /** - * Converts `handle` into a Javascript number. - * @returns `NaN` on error, otherwise a `number`. - */ - getNumber(handle: QuickJSHandle): number { - this.runtime.assertOwned(handle) - return this.ffi.QTS_GetFloat64(this.ctx.value, handle.value) - } - - /** - * Converts `handle` to a Javascript string. - */ - getString(handle: QuickJSHandle): string { - this.runtime.assertOwned(handle) - return this.memory.consumeJSCharPointer(this.ffi.QTS_GetString(this.ctx.value, handle.value)) - } - - /** - * Converts `handle` into a Javascript symbol. If the symbol is in the global - * registry in the guest, it will be created with Symbol.for on the host. - */ - getSymbol(handle: QuickJSHandle): symbol { - this.runtime.assertOwned(handle) - const key = this.memory.consumeJSCharPointer( - this.ffi.QTS_GetSymbolDescriptionOrKey(this.ctx.value, handle.value), - ) - const isGlobal = this.ffi.QTS_IsGlobalSymbol(this.ctx.value, handle.value) - return isGlobal ? Symbol.for(key) : Symbol(key) - } - - /** - * Converts `handle` to a Javascript bigint. - */ - getBigInt(handle: QuickJSHandle): bigint { - this.runtime.assertOwned(handle) - const asString = this.getString(handle) - return BigInt(asString) - } - - /** - * Coverts `handle` to a JavaScript ArrayBuffer - */ - getArrayBuffer(handle: QuickJSHandle): Lifetime { - this.runtime.assertOwned(handle) - const len = this.ffi.QTS_GetArrayBufferLength(this.ctx.value, handle.value) - const ptr = this.ffi.QTS_GetArrayBuffer(this.ctx.value, handle.value) - if (!ptr) { - throw new Error("Couldn't allocate memory to get ArrayBuffer") - } - return new Lifetime(this.module.HEAPU8.subarray(ptr, ptr + len), undefined, () => - this.module._free(ptr), - ) - } - - /** - * Get the current state of a QuickJS promise, see {@link JSPromiseState} for the possible states. - * This can be used to expect a promise to be fulfilled when combined with {@link unwrapResult}: - * - * ```typescript - * const promiseHandle = context.evalCode(`Promise.resolve(42)`); - * const resultHandle = context.unwrapResult( - * context.getPromiseState(promiseHandle) - * ); - * context.getNumber(resultHandle) === 42; // true - * resultHandle.dispose(); - * ``` - */ - getPromiseState(handle: QuickJSHandle): JSPromiseState { - this.runtime.assertOwned(handle) - const state = this.ffi.QTS_PromiseState(this.ctx.value, handle.value) - if (state < 0) { - // Not a promise, but act like `await` would with non-promise, and just return the value. - return { type: "fulfilled", value: handle, notAPromise: true } - } - - if (state === JSPromiseStateEnum.Pending) { - return { - type: "pending", - get error() { - return new QuickJSPromisePending(`Cannot unwrap a pending promise`) - }, - } - } - - const ptr = this.ffi.QTS_PromiseResult(this.ctx.value, handle.value) - const result = this.memory.heapValueHandle(ptr) - if (state === JSPromiseStateEnum.Fulfilled) { - return { type: "fulfilled", value: result } - } - if (state === JSPromiseStateEnum.Rejected) { - return { type: "rejected", error: result } - } - result.dispose() - throw new Error(`Unknown JSPromiseStateEnum: ${state}`) - } - - /** - * `Promise.resolve(value)`. - * Convert a handle containing a Promise-like value inside the VM into an - * actual promise on the host. - * - * @remarks - * You may need to call {@link runtime}.{@link QuickJSRuntime#executePendingJobs} to ensure that the promise is resolved. - * - * @param promiseLikeHandle - A handle to a Promise-like value with a `.then(onSuccess, onError)` method. - */ - resolvePromise(promiseLikeHandle: QuickJSHandle): Promise> { - this.runtime.assertOwned(promiseLikeHandle) - const vmResolveResult = Scope.withScope((scope) => { - const vmPromise = scope.manage(this.getProp(this.global, "Promise")) - const vmPromiseResolve = scope.manage(this.getProp(vmPromise, "resolve")) - return this.callFunction(vmPromiseResolve, vmPromise, promiseLikeHandle) - }) - if (vmResolveResult.error) { - return Promise.resolve(vmResolveResult) - } - - return new Promise>((resolve) => { - Scope.withScope((scope) => { - const resolveHandle = scope.manage( - this.newFunction("resolve", (value) => { - resolve(this.success(value && value.dup())) - }), - ) - - const rejectHandle = scope.manage( - this.newFunction("reject", (error) => { - resolve(this.fail(error && error.dup())) - }), - ) - - const promiseHandle = scope.manage(vmResolveResult.value) - const promiseThenHandle = scope.manage(this.getProp(promiseHandle, "then")) - this.callFunction(promiseThenHandle, promiseHandle, resolveHandle, rejectHandle) - .unwrap() - .dispose() - }) - }) - } - - // Compare ----------------------------------------------------------- - - private isEqual( - a: QuickJSHandle, - b: QuickJSHandle, - equalityType: IsEqualOp = IsEqualOp.IsStrictlyEqual, - ): boolean { - if (a === b) { - return true - } - this.runtime.assertOwned(a) - this.runtime.assertOwned(b) - const result = this.ffi.QTS_IsEqual(this.ctx.value, a.value, b.value, equalityType) - if (result === -1) { - throw new QuickJSNotImplemented("WASM variant does not expose equality") - } - return Boolean(result) - } - - /** - * `handle === other` - IsStrictlyEqual. - * See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - */ - eq(handle: QuickJSHandle, other: QuickJSHandle): boolean { - return this.isEqual(handle, other, IsEqualOp.IsStrictlyEqual) - } - - /** - * `Object.is(a, b)` - * See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - */ - sameValue(handle: QuickJSHandle, other: QuickJSHandle): boolean { - return this.isEqual(handle, other, IsEqualOp.IsSameValue) - } - - /** - * SameValueZero comparison. - * See [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness). - */ - sameValueZero(handle: QuickJSHandle, other: QuickJSHandle): boolean { - return this.isEqual(handle, other, IsEqualOp.IsSameValueZero) - } - - // Properties --------------------------------------------------------------- - - /** - * `handle[key]`. - * Get a property from a JSValue. - * - * @param key - The property may be specified as a JSValue handle, or as a - * Javascript string (which will be converted automatically). - */ - getProp(handle: QuickJSHandle, key: QuickJSPropertyKey): QuickJSHandle { - this.runtime.assertOwned(handle) - let ptr: JSValuePointer - if (typeof key === "number" && key >= 0) { - // Index access fast path - ptr = this.ffi.QTS_GetPropNumber(this.ctx.value, handle.value, key) - } else { - ptr = this.borrowPropertyKey(key).consume((quickJSKey) => - this.ffi.QTS_GetProp(this.ctx.value, handle.value, quickJSKey.value), - ) - } - const result = this.memory.heapValueHandle(ptr) - - return result - } - - /** - * `handle.length` as a host number. - * - * Example use: - * ```typescript - * const length = context.getLength(arrayHandle) ?? 0 - * for (let i = 0; i < length; i++) { - * using value = context.getProp(arrayHandle, i) - * console.log(`array[${i}] =`, context.dump(value)) - * } - * ``` - * - * @returns a number if the handle has a numeric length property, otherwise `undefined`. - */ - getLength(handle: QuickJSHandle): number | undefined { - this.runtime.assertOwned(handle) - const status = this.ffi.QTS_GetLength(this.ctx.value, this.uint32Out.value.ptr, handle.value) - if (status < 0) { - return undefined - } - return this.uint32Out.value.typedArray[0] - } - - /** - * `Object.getOwnPropertyNames(handle)`. - * Similar to the [standard semantics](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames), - * but with extra, non-standard options for: - * - * - fetching array indexes as numbers (`numbers: true`) - * - including symbols (`symbols: true`) - * - only iterating over enumerable properties (`onlyEnumerable: true`) - * - * The default behavior is to emulate the standard: - * ```typescript - * context.getOwnPropertyNames(handle, { strings: true, numbersAsStrings: true }) - * ``` - * - * Note when passing an explicit options object, you must set at least one - * option, and `strings` are not included unless specified. - * - * Example use: - * ```typescript - * for (using prop of context.getOwnPropertyNames(objectHandle).unwrap()) { - * using value = context.getProp(handle, prop) - * console.log(context.dump(prop), '->', context.dump(value)) - * } - * ``` - * - * @returns an an array of handles of the property names. The array itself is disposable for your convenience. - * @throws QuickJSEmptyGetOwnPropertyNames if no options are set. - */ - getOwnPropertyNames( - handle: QuickJSHandle, - options: GetOwnPropertyNamesOptions = { - strings: true, - numbersAsStrings: true, - }, - ): QuickJSContextResult> { - this.runtime.assertOwned(handle) - handle.value // assert alive - const flags = getOwnPropertyNamesOptionsToFlags(options) - if (flags === 0) { - throw new QuickJSEmptyGetOwnPropertyNames("No options set, will return an empty array") - } - return Scope.withScope((scope) => { - const outPtr = scope.manage( - this.memory.newMutablePointerArray(1), - ) - const errorPtr = this.ffi.QTS_GetOwnPropertyNames( - this.ctx.value, - outPtr.value.ptr, - this.uint32Out.value.ptr, - handle.value, - flags, - ) - if (errorPtr) { - return this.fail(this.memory.heapValueHandle(errorPtr)) - } - const len = this.uint32Out.value.typedArray[0] - const ptr = outPtr.value.typedArray[0] - const pointerArray = new Uint32Array(this.module.HEAP8.buffer, ptr, len) - const handles = Array.from(pointerArray).map((ptr) => - this.memory.heapValueHandle(ptr as JSValuePointer), - ) - this.ffi.QTS_FreeVoidPointer(this.ctx.value, ptr as JSVoidPointer) - return this.success(createDisposableArray(handles)) - }) - } - - /** - * `handle[Symbol.iterator]()`. See {@link QuickJSIterator}. - * Returns a host iterator that wraps and proxies calls to a guest iterator handle. - * Each step of the iteration returns a result, either an error or a handle to the next value. - * Once the iterator is done, the handle is automatically disposed, and the iterator - * is considered done if the handle is disposed. - * - * ```typescript - * for (using entriesHandle of context.getIterator(mapHandle).unwrap()) { - * using keyHandle = context.getProp(entriesHandle, 0) - * using valueHandle = context.getProp(entriesHandle, 1) - * console.log(context.dump(keyHandle), '->', context.dump(valueHandle)) - * } - * ``` - */ - getIterator(iterableHandle: QuickJSHandle): QuickJSContextResult { - const SymbolIterator = (this._SymbolIterator ??= this.memory.manage( - this.getWellKnownSymbol("iterator"), - )) - return Scope.withScope((scope) => { - const methodHandle = scope.manage(this.getProp(iterableHandle, SymbolIterator)) - const iteratorCallResult = this.callFunction(methodHandle, iterableHandle) - if (iteratorCallResult.error) { - return iteratorCallResult - } - return this.success(new QuickJSIterator(iteratorCallResult.value, this)) - }) - } - - /** - * `handle[key] = value`. - * Set a property on a JSValue. - * - * @remarks - * Note that the QuickJS authors recommend using {@link defineProp} to define new - * properties. - * - * @param key - The property may be specified as a JSValue handle, or as a - * Javascript string or number (which will be converted automatically to a JSValue). - */ - setProp(handle: QuickJSHandle, key: QuickJSPropertyKey, value: QuickJSHandle) { - this.runtime.assertOwned(handle) - // free newly allocated value if key was a string or number. No-op if string was already - // a QuickJS handle. - this.borrowPropertyKey(key).consume((quickJSKey) => - this.ffi.QTS_SetProp(this.ctx.value, handle.value, quickJSKey.value, value.value), - ) - } - - /** - * [`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). - * - * @param key - The property may be specified as a JSValue handle, or as a - * Javascript string or number (which will be converted automatically to a JSValue). - */ - defineProp( - handle: QuickJSHandle, - key: QuickJSPropertyKey, - descriptor: VmPropertyDescriptor, - ): void { - this.runtime.assertOwned(handle) - Scope.withScope((scope) => { - const quickJSKey = scope.manage(this.borrowPropertyKey(key)) - - const value = descriptor.value || this.undefined - const configurable = Boolean(descriptor.configurable) - const enumerable = Boolean(descriptor.enumerable) - const hasValue = Boolean(descriptor.value) - const get = descriptor.get - ? scope.manage(this.newFunction(descriptor.get.name, descriptor.get)) - : this.undefined - const set = descriptor.set - ? scope.manage(this.newFunction(descriptor.set.name, descriptor.set)) - : this.undefined - - this.ffi.QTS_DefineProp( - this.ctx.value, - handle.value, - quickJSKey.value, - value.value, - get.value, - set.value, - configurable, - enumerable, - hasValue, - ) - }) - } - - // Evaluation --------------------------------------------------------------- - - /** - * [`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) or - * [`func.apply(thisVal, args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply). - * Call a JSValue as a function. - * - * See {@link unwrapResult}, which will throw if the function returned an error, or - * return the result handle directly. If evaluation returned a handle containing - * a promise, use {@link resolvePromise} to convert it to a native promise and - * {@link runtime}.{@link QuickJSRuntime#executePendingJobs} to finish evaluating the promise. - * - * @returns A result. If the function threw synchronously, `result.error` be a - * handle to the exception. Otherwise `result.value` will be a handle to the - * value. - * - * Example: - * - * ```typescript - * using parseIntHandle = context.getProp(global, "parseInt") - * using stringHandle = context.newString("42") - * using resultHandle = context.callFunction(parseIntHandle, context.undefined, stringHandle).unwrap() - * console.log(context.dump(resultHandle)) // 42 - * ``` - */ - callFunction( - func: QuickJSHandle, - thisVal: QuickJSHandle, - args?: QuickJSHandle[], - ): QuickJSContextResult - callFunction( - func: QuickJSHandle, - thisVal: QuickJSHandle, - ...args: QuickJSHandle[] - ): QuickJSContextResult - callFunction( - func: QuickJSHandle, - thisVal: QuickJSHandle, - ...restArgs: Array - ): QuickJSContextResult { - this.runtime.assertOwned(func) - let args - const firstArg = restArgs[0] - if (firstArg === undefined || Array.isArray(firstArg)) { - args = firstArg ?? [] - } else { - args = restArgs as QuickJSHandle[] - } - - const resultPtr = this.memory - .toPointerArray(args) - .consume((argsArrayPtr) => - this.ffi.QTS_Call( - this.ctx.value, - func.value, - thisVal.value, - args.length, - argsArrayPtr.value, - ), - ) - - const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr) - if (errorPtr) { - this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr) - return this.fail(this.memory.heapValueHandle(errorPtr)) - } - - return this.success(this.memory.heapValueHandle(resultPtr)) - } - - /** - * `handle[key](...args)` - * - * Call a method on a JSValue. This is a convenience method that calls {@link getProp} and {@link callFunction}. - * - * @returns A result. If the function threw synchronously, `result.error` be a - * handle to the exception. Otherwise `result.value` will be a handle to the - * value. - */ - callMethod( - thisHandle: QuickJSHandle, - key: QuickJSPropertyKey, - args: QuickJSHandle[] = [], - ): QuickJSContextResult { - return this.getProp(thisHandle, key).consume((func) => - this.callFunction(func, thisHandle, args), - ) - } - - /** - * Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description). - * - * Evaluates `code`, as though it's in a file named `filename`, with options `options`. - * - * - When `options.type` is `"global"`, the code is evaluated in the global - * scope of the QuickJSContext, and the return value is the result of the last - * expression. - * - When `options.type` is `"module"`, the code is evaluated is a module scope. - * It may use `import` and `export` if {@link runtime}.{@link QuickJSRuntime#setModuleLoader} was called. - * It may use top-level await if supported by the underlying QuickJS library. - * The return value is the module's exports, or a promise for the module's exports. - * - When `options.type` is unset, the code is evaluated as a module if it - * contains an `import` or `export` statement, otherwise it is evaluated in - * the global scope. - * - * When working with async code, you many need to call {@link runtime}.{@link QuickJSRuntime#executePendingJobs} - * to execute callbacks pending after synchronous evaluation returns. - * - * See {@link unwrapResult}, which will throw if the function returned an error, or - * return the result handle directly. If evaluation returned a handle containing - * a promise, use {@link resolvePromise} to convert it to a native promise and - * {@link QuickJSRuntime#executePendingJobs} to finish evaluating the promise. - * - * *Note*: to protect against infinite loops, provide an interrupt handler to - * {@link QuickJSRuntime#setInterruptHandler}. You can use {@link shouldInterruptAfterDeadline} to - * create a time-based deadline. - * - * @returns The last statement's value. If the code threw synchronously, - * `result.error` will be a handle to the exception. If execution was - * interrupted, the error will have name `InternalError` and message - * `interrupted`. - */ - evalCode( - code: string, - filename: string = "eval.js", - /** - * If no options are passed, a heuristic will be used to detect if `code` is - * an ES module. - * - * See {@link EvalFlags} for number semantics. - */ - options?: number | ContextEvalOptions, - ): QuickJSContextResult { - const detectModule = (options === undefined ? 1 : 0) as EvalDetectModule - const flags = evalOptionsToFlags(options) as EvalFlags - const resultPtr = this.memory - .newHeapCharPointer(code) - .consume((charHandle) => - this.ffi.QTS_Eval( - this.ctx.value, - charHandle.value.ptr, - charHandle.value.strlen, - filename, - detectModule, - flags, - ), - ) - const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr) - if (errorPtr) { - this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr) - return this.fail(this.memory.heapValueHandle(errorPtr)) - } - return this.success(this.memory.heapValueHandle(resultPtr)) - } - - /** - * Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes. - * @experimental - */ - throw(error: Error | QuickJSHandle) { - return this.errorToHandle(error).consume((handle) => - this.ffi.QTS_Throw(this.ctx.value, handle.value), - ) - } - - /** - * @private - */ - protected borrowPropertyKey(key: QuickJSPropertyKey): QuickJSHandle { - if (typeof key === "number") { - return this.newNumber(key) - } - - if (typeof key === "string") { - return this.newString(key) - } - - // key is already a JSValue, but we're borrowing it. Return a static handle - // for internal use only. - return new StaticLifetime(key.value as JSValueConstPointer, this.runtime) - } - - /** - * @private - */ - getMemory(rt: JSRuntimePointer): ContextMemory { - if (rt === this.rt.value) { - return this.memory - } else { - throw new Error("Private API. Cannot get memory from a different runtime") - } - } - - // Utilities ---------------------------------------------------------------- - - /** - * Dump a JSValue to Javascript in a best-effort fashion. - * If the value is a promise, dumps the promise's state. - * Returns `handle.toString()` if it cannot be serialized to JSON. - */ - dump(handle: QuickJSHandle): any { - this.runtime.assertOwned(handle) - const type = this.typeof(handle) - if (type === "string") { - return this.getString(handle) - } else if (type === "number") { - return this.getNumber(handle) - } else if (type === "bigint") { - return this.getBigInt(handle) - } else if (type === "undefined") { - return undefined - } else if (type === "symbol") { - return this.getSymbol(handle) - } - - // It's confusing if we dump(promise) and just get back {} because promise - // has no properties, so dump promise state. - const asPromiseState = this.getPromiseState(handle) - if (asPromiseState.type === "fulfilled" && !asPromiseState.notAPromise) { - handle.dispose() - return { type: asPromiseState.type, value: asPromiseState.value.consume(this.dump) } - } else if (asPromiseState.type === "pending") { - handle.dispose() - return { type: asPromiseState.type } - } else if (asPromiseState.type === "rejected") { - handle.dispose() - return { type: asPromiseState.type, error: asPromiseState.error.consume(this.dump) } - } - - const str = this.memory.consumeJSCharPointer(this.ffi.QTS_Dump(this.ctx.value, handle.value)) - try { - return JSON.parse(str) - } catch (err) { - return str - } - } - - /** - * Unwrap a SuccessOrFail result such as a {@link VmCallResult} or a - * {@link ExecutePendingJobsResult}, where the fail branch contains a handle to a QuickJS error value. - * If the result is a success, returns the value. - * If the result is an error, converts the error to a native object and throws the error. - */ - unwrapResult(result: SuccessOrFail): T { - if (result.error) { - const context: QuickJSContext = - "context" in result.error ? (result.error as { context: QuickJSContext }).context : this - const cause = result.error.consume((error) => this.dump(error)) - - if (cause && typeof cause === "object" && typeof cause.message === "string") { - const { message, name, stack, ...rest } = cause - const exception = new QuickJSUnwrapError(cause, context) - - if (typeof name === "string") { - exception.name = cause.name - } - - exception.message = message - const hostStack = exception.stack - if (typeof stack === "string") { - exception.stack = `${name}: ${message}\n${cause.stack}Host: ${hostStack}` - } - - Object.assign(exception, rest) - throw exception - } - - throw new QuickJSUnwrapError(cause) - } - - return result.value - } - - /** @private */ - [Symbol.for("nodejs.util.inspect.custom")]() { - if (!this.alive) { - return `${this.constructor.name} { disposed }` - } - return `${this.constructor.name} { ctx: ${this.ctx.value} rt: ${this.rt.value} }` - } - - /** @private */ - protected fnNextId = -32768 // min value of signed 16bit int used by Quickjs - /** @private */ - protected fnMaps = new Map>>() - - /** @private */ - protected getFunction(fn_id: number): VmFunctionImplementation | undefined { - const map_id = fn_id >> 8 - const fnMap = this.fnMaps.get(map_id) - if (!fnMap) { - return undefined - } - return fnMap.get(fn_id) - } - - /** @private */ - protected setFunction(fn_id: number, handle: VmFunctionImplementation) { - const map_id = fn_id >> 8 - let fnMap = this.fnMaps.get(map_id) - if (!fnMap) { - fnMap = new Map>() - this.fnMaps.set(map_id, fnMap) - } - return fnMap.set(fn_id, handle) - } - - /** - * @hidden - */ - private cToHostCallbacks: ContextCallbacks = { - callFunction: (ctx, this_ptr, argc, argv, fn_id) => { - if (ctx !== this.ctx.value) { - throw new Error("QuickJSContext instance received C -> JS call with mismatched ctx") - } - - const fn = this.getFunction(fn_id) - if (!fn) { - // this "throw" is not catch-able from the TS side. could we somehow handle this higher up? - throw new Error(`QuickJSContext had no callback with id ${fn_id}`) - } - - return Scope.withScopeMaybeAsync(this, function* (awaited, scope) { - const thisHandle = scope.manage( - new WeakLifetime( - this_ptr, - this.memory.copyJSValue, - this.memory.freeJSValue, - this.runtime, - ), - ) - const argHandles = new Array(argc) - for (let i = 0; i < argc; i++) { - const ptr = this.ffi.QTS_ArgvGetJSValueConstPointer(argv, i) - argHandles[i] = scope.manage( - new WeakLifetime(ptr, this.memory.copyJSValue, this.memory.freeJSValue, this.runtime), - ) - } - - try { - const result = yield* awaited(fn.apply(thisHandle, argHandles)) - if (result) { - if ("error" in result && result.error) { - this.runtime.debugLog("throw error", result.error) - throw result.error - } - const handle = scope.manage(result instanceof Lifetime ? result : result.value) - return this.ffi.QTS_DupValuePointer(this.ctx.value, handle.value) - } - return 0 as JSValuePointer - } catch (error) { - return this.errorToHandle(error as Error).consume((errorHandle) => - this.ffi.QTS_Throw(this.ctx.value, errorHandle.value), - ) - } - }) as JSValuePointer - }, - } - - private errorToHandle(error: Error | QuickJSHandle): QuickJSHandle { - if (error instanceof Lifetime) { - return error - } - - return this.newError(error) - } - - /** - * Outputs QuickJS Objects in binary form - * - * **WARNING**: QuickJS's binary JSON doesn't have a standard so expect it to change between version - * - * ```ts - * // imagine sending data to another via IPC - * let dataLifetime = context.newString("This is an example") - * ?.consume(handle => context.encodeBinaryJSON(handle)) - * ?.consume(handle => context.getArrayBuffer(handle)) - * socket.write(dataLifetime?.value) - * ``` - */ - encodeBinaryJSON(handle: QuickJSHandle): QuickJSHandle { - const ptr = this.ffi.QTS_bjson_encode(this.ctx.value, handle.value) - return this.memory.heapValueHandle(ptr) - } - - /** - * Outputs Handle of the given QuickJS Object in binary form - * - * ```ts - * // imagine receiving data from another via IPC - * socket.on("data", chunk => { - * context.newArrayBuffer(chunk) - * ?.consume(handle => context.decodeBinaryJSON(handle)) - * ?.consume(handle => console.log(context.dump(handle))) - * }) - * ``` - */ - decodeBinaryJSON(handle: QuickJSHandle): QuickJSHandle { - const ptr = this.ffi.QTS_bjson_decode(this.ctx.value, handle.value) - return this.memory.heapValueHandle(ptr) - } - - protected success(value: S): DisposableSuccess { - return DisposableResult.success(value) - } - - protected fail(error: QuickJSHandle): DisposableFail { - return DisposableResult.fail(error, (error) => this.unwrapResult(error)) - } -} diff --git a/packages/quickjs-emscripten-core/src/debug.ts b/packages/quickjs-emscripten-core/src/debug.ts deleted file mode 100644 index 1cf4487e9..000000000 --- a/packages/quickjs-emscripten-core/src/debug.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @private - * Mutable variable. Use {@link setDebugMode} to enable. - */ -export let QTS_DEBUG = false - -/** - * Enable (or disable) debug logging and object creation tracking globally. - * This setting is inherited by newly created QuickJSRuntime instances. - * To get debug logging in the WebAssembly module, you need to use a debug build variant. - * See [the quickjs-emscripten-core README](https://github.com/justjake/quickjs-emscripten/tree/main/doc/quickjs-emscripten-core) for more about build variants. - */ -export function setDebugMode(enabled: boolean = true) { - QTS_DEBUG = enabled -} - -/** Get the global debug mode */ -export function isDebugMode() { - return QTS_DEBUG -} - -/** - * @private - */ -export function debugLog(...args: any[]) { - if (QTS_DEBUG) { - console.log("quickjs-emscripten:", ...args) - } -} diff --git a/packages/quickjs-emscripten-core/src/deferred-promise.ts b/packages/quickjs-emscripten-core/src/deferred-promise.ts deleted file mode 100644 index 6e3db42bb..000000000 --- a/packages/quickjs-emscripten-core/src/deferred-promise.ts +++ /dev/null @@ -1,186 +0,0 @@ -import { UsingDisposable, type Disposable } from "./lifetime" -import type { QuickJSHandle } from "./types" -import type { QuickJSRuntime } from "./runtime" -import type { QuickJSContext } from "./context" -export type { PromiseExecutor } from "./types" - -/** - * A promise state inside QuickJS, which can be pending, fulfilled, or rejected. - * You can unwrap a JSPromiseState with {@link QuickJSContext#unwrapResult}. - */ -export type JSPromiseState = - | JSPromiseStatePending - | JSPromiseStateFulfilled - | JSPromiseStateRejected - -/** - * Pending promise state. - * See {@link JSPromiseState}. - */ -export interface JSPromiseStatePending { - type: "pending" - /** - * The error property here allows unwrapping a JSPromiseState with {@link QuickJSContext#unwrapResult}. - * Unwrapping a pending promise will throw a {@link QuickJSPromisePending} error. - */ - get error(): Error -} - -/** - * Fulfilled promise state. - * See {@link JSPromiseState}. - */ -export interface JSPromiseStateFulfilled { - type: "fulfilled" - value: QuickJSHandle - error?: undefined - /** Trying to get the promise state of a non-Promise value returns a fulfilled state with the original value, and `notAPromise: true`. */ - notAPromise?: boolean -} - -/** - * Rejected promise state. - * See {@link JSPromiseState}. - */ -export interface JSPromiseStateRejected { - type: "rejected" - error: QuickJSHandle -} - -/** - * QuickJSDeferredPromise wraps a QuickJS promise {@link handle} and allows - * {@link resolve}ing or {@link reject}ing that promise. Use it to bridge asynchronous - * code on the host to APIs inside a QuickJSContext. - * - * Managing the lifetime of promises is tricky. There are three - * {@link QuickJSHandle}s inside of each deferred promise object: (1) the promise - * itself, (2) the `resolve` callback, and (3) the `reject` callback. - * - * - If the promise will be fulfilled before the end of it's {@link owner}'s lifetime, - * the only cleanup necessary is `deferred.handle.dispose()`, because - * calling {@link resolve} or {@link reject} will dispose of both callbacks automatically. - * - * - As the return value of a {@link VmFunctionImplementation}, return {@link handle}, - * and ensure that either {@link resolve} or {@link reject} will be called. No other - * clean-up is necessary. - * - * - In other cases, call {@link dispose}, which will dispose {@link handle} as well as the - * QuickJS handles that back {@link resolve} and {@link reject}. For this object, - * {@link dispose} is idempotent. - */ -export class QuickJSDeferredPromise extends UsingDisposable implements Disposable { - public owner: QuickJSRuntime - public context: QuickJSContext - - /** - * A handle of the Promise instance inside the QuickJSContext. - * You must dispose {@link handle} or the entire QuickJSDeferredPromise once you - * are finished with it. - */ - public handle: QuickJSHandle - - /** - * A native promise that will resolve once this deferred is settled. - */ - public settled: Promise - - private resolveHandle: QuickJSHandle - private rejectHandle: QuickJSHandle - private onSettled!: () => void - - /** - * Use {@link QuickJSContext#newPromise} to create a new promise instead of calling - * this constructor directly. - */ - constructor(args: { - context: QuickJSContext - promiseHandle: QuickJSHandle - resolveHandle: QuickJSHandle - rejectHandle: QuickJSHandle - }) { - super() - this.context = args.context - this.owner = args.context.runtime - this.handle = args.promiseHandle - this.settled = new Promise((resolve) => { - this.onSettled = resolve - }) - this.resolveHandle = args.resolveHandle - this.rejectHandle = args.rejectHandle - } - - /** - * Resolve {@link handle} with the given value, if any. - * Calling this method after calling {@link dispose} is a no-op. - * - * Note that after resolving a promise, you may need to call - * {@link QuickJSRuntime#executePendingJobs} to propagate the result to the promise's - * callbacks. - */ - resolve = (value?: QuickJSHandle) => { - if (!this.resolveHandle.alive) { - return - } - - this.context - .unwrapResult( - this.context.callFunction( - this.resolveHandle, - this.context.undefined, - value || this.context.undefined, - ), - ) - .dispose() - - this.disposeResolvers() - this.onSettled() - } - - /** - * Reject {@link handle} with the given value, if any. - * Calling this method after calling {@link dispose} is a no-op. - * - * Note that after rejecting a promise, you may need to call - * {@link QuickJSRuntime#executePendingJobs} to propagate the result to the promise's - * callbacks. - */ - reject = (value?: QuickJSHandle) => { - if (!this.rejectHandle.alive) { - return - } - - this.context - .unwrapResult( - this.context.callFunction( - this.rejectHandle, - this.context.undefined, - value || this.context.undefined, - ), - ) - .dispose() - - this.disposeResolvers() - this.onSettled() - } - - get alive() { - return this.handle.alive || this.resolveHandle.alive || this.rejectHandle.alive - } - - dispose = () => { - if (this.handle.alive) { - this.handle.dispose() - } - this.disposeResolvers() - } - - private disposeResolvers() { - if (this.resolveHandle.alive) { - this.resolveHandle.dispose() - } - - if (this.rejectHandle.alive) { - this.rejectHandle.dispose() - } - } -} diff --git a/packages/quickjs-emscripten-core/src/errors.ts b/packages/quickjs-emscripten-core/src/errors.ts deleted file mode 100644 index af491e54c..000000000 --- a/packages/quickjs-emscripten-core/src/errors.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { QuickJSContext } from "./context" - -/** - * Error thrown if {@link QuickJSContext#unwrapResult} unwraps an error value that isn't an object. - */ -export class QuickJSUnwrapError extends Error { - name = "QuickJSUnwrapError" - constructor( - public cause: unknown, - public context?: QuickJSContext, - ) { - const message = - typeof cause === "object" && cause && "message" in cause - ? String(cause.message) - : String(cause) - super(message) - } -} - -export class QuickJSWrongOwner extends Error { - name = "QuickJSWrongOwner" -} - -export class QuickJSUseAfterFree extends Error { - name = "QuickJSUseAfterFree" -} - -export class QuickJSNotImplemented extends Error { - name = "QuickJSNotImplemented" -} - -export class QuickJSAsyncifyError extends Error { - name = "QuickJSAsyncifyError" -} - -export class QuickJSAsyncifySuspended extends Error { - name = "QuickJSAsyncifySuspended" -} - -export class QuickJSMemoryLeakDetected extends Error { - name = "QuickJSMemoryLeakDetected" -} - -export class QuickJSEmscriptenModuleError extends Error { - name = "QuickJSEmscriptenModuleError" -} - -export class QuickJSUnknownIntrinsic extends TypeError { - name = "QuickJSUnknownIntrinsic" -} - -export class QuickJSPromisePending extends Error { - name = "QuickJSPromisePending" -} - -export class QuickJSEmptyGetOwnPropertyNames extends Error { - name = "QuickJSEmptyGetOwnPropertyNames" -} diff --git a/packages/quickjs-emscripten-core/src/from-variant.ts b/packages/quickjs-emscripten-core/src/from-variant.ts deleted file mode 100644 index e04228775..000000000 --- a/packages/quickjs-emscripten-core/src/from-variant.ts +++ /dev/null @@ -1,315 +0,0 @@ -import type { - QuickJSSyncVariant, - QuickJSAsyncVariant, - QuickJSVariant, - EmscriptenModuleLoaderOptions, - SourceMapData, - QuickJSEmscriptenExtensions, -} from "@jitl/quickjs-ffi-types" -import type { QuickJSWASMModule } from "./module.js" -import type { QuickJSAsyncWASMModule } from "./module-asyncify.js" -import { QuickJSEmscriptenModuleError } from "./errors.js" -import { debugLog } from "./debug.js" - -// Otherwise we have build errors? -export { QuickJSSyncVariant, QuickJSAsyncVariant, QuickJSVariant } - -export type PromisedDefault = - | T - | Promise - | Promise<{ default: T }> - | Promise<{ default: { default: T } }> - -/** - * Create a new, completely isolated WebAssembly module containing the QuickJS library. - * See the documentation on {@link QuickJSWASMModule}. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - * - * @example - * ```ts - * const quickjs = new newQuickJSWASMModuleFromVariant( - * import('@jitl/quickjs-browser-release-sync-wasm') - * ) - * ``` - */ -export async function newQuickJSWASMModuleFromVariant( - /** - * A {@link QuickJSSyncVariant} to construct the WebAssembly module. - */ - variantOrPromise: PromisedDefault, -): Promise { - const variant = smartUnwrap(await variantOrPromise) - const [wasmModuleLoader, QuickJSFFI, { QuickJSWASMModule }] = await Promise.all([ - variant.importModuleLoader().then(smartUnwrap), - variant.importFFI(), - import("./module.js").then(smartUnwrap), - ]) - const wasmModule = await wasmModuleLoader() - wasmModule.type = "sync" - const ffi = new QuickJSFFI(wasmModule) - return new QuickJSWASMModule(wasmModule, ffi) -} - -/** - * Create a new, completely isolated WebAssembly module containing a version of the QuickJS library - * compiled with Emscripten's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) transform. - * - * This version of the library offers features that enable synchronous code - * inside the VM to interact with asynchronous code in the host environment. - * See the documentation on {@link QuickJSAsyncWASMModule}, {@link QuickJSAsyncRuntime}, - * and {@link QuickJSAsyncContext}. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - * - * @example - * ```ts - * const quickjs = new newQuickJSAsyncWASMModuleFromVariant( - * import('@jitl/quickjs-browser-debug-asyncify-wasm') - * ) - * ``` - */ -export async function newQuickJSAsyncWASMModuleFromVariant( - /** - * A {@link QuickJSAsyncVariant} to construct the WebAssembly module. - */ - variantOrPromise: PromisedDefault, -): Promise { - const variant = smartUnwrap(await variantOrPromise) - const [wasmModuleLoader, QuickJSAsyncFFI, { QuickJSAsyncWASMModule }] = await Promise.all([ - variant.importModuleLoader().then(smartUnwrap), - variant.importFFI(), - import("./module-asyncify.js").then(smartUnwrap), - ]) - const wasmModule = await wasmModuleLoader() - wasmModule.type = "async" - const ffi = new QuickJSAsyncFFI(wasmModule) - return new QuickJSAsyncWASMModule(wasmModule, ffi) -} - -/** - * Helper intended to memoize the creation of a WebAssembly module. - * ```typescript - * const getDebugModule = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) - * ``` - */ -export function memoizePromiseFactory(fn: () => Promise): () => Promise { - let promise: Promise | undefined - return () => { - return (promise ??= fn()) - } -} - -function smartUnwrap(val: T | { default: T } | { default: { default: T } }): T { - if (val && `default` in val && val.default) { - if (val.default && `default` in val.default && val.default.default) { - return val.default.default - } - return val.default as T - } - return val as T -} - -export type OrLoader = T | (() => Promise) - -export interface CustomizeVariantOptions { - /** If given, Emscripten will try to load the WebAssembly module data from this location (path or URI) as appropriate for the current platform. */ - wasmLocation?: string - /** If given, Emscripten will compile the WebAssembly.Module from these bytes. */ - wasmBinary?: OrLoader - /** If given, Emscripten will instantiate the WebAssembly.Instance from this existing WebAssembly.Module */ - wasmModule?: OrLoader - /** If given, use the Memory when instantiating the WebAssembly.Instance. */ - wasmMemory?: OrLoader - /** If given, Emscripten will try to load the source map for the WebAssembly module from this location (path or URI) as appropriate for the current platform. */ - wasmSourceMapLocation?: string - /** If given, we will provide the source map to Emscripten directly. This may only be respected if wasmModule is also provided. */ - wasmSourceMapData?: OrLoader - /** - * If set, this method will be called when the runtime needs to load a file, - * such as a .wasm WebAssembly file, .mem memory init file, or a file - * generated by the file packager. - * - * The function receives two parameters: - * - * - `fileName`, the relative path to the file as configured in build - * process, eg `"emscripten-module.wasm"`. - * - `prefix` (path to the main JavaScript file’s directory). This may be `''` - * (empty string) in some cases if the Emscripten Javascript code can't locate - * itself. Try logging it in your environment. - * - * It should return the actual URI or path to the requested file. - * - * This lets you host file packages on a different location than the directory - * of the JavaScript file (which is the default expectation), for example if - * you want to host them on a CDN. - */ - locateFile?: EmscriptenModuleLoaderOptions["locateFile"] - /** The enumerable properties of this object will be passed verbatim, although they may be overwritten if you pass other options. */ - emscriptenModule?: EmscriptenModuleLoaderOptions - /** Debug logger */ - log?: typeof console.log -} - -/** - * Create a new variant by overriding how Emscripten obtains the WebAssembly module. - * This may be necessary in Cloudflare Workers, which can't compile WebAssembly modules from binary data. - */ -export function newVariant( - baseVariant: T, - options: CustomizeVariantOptions, -): T { - const variant: T = { - ...baseVariant, - async importModuleLoader() { - const moduleLoader = smartUnwrap(await baseVariant.importModuleLoader()) - return async function newModuleLoader() { - const moduleLoaderArg: EmscriptenModuleLoaderOptions = options.emscriptenModule - ? { ...options.emscriptenModule } - : {} - const log = - options.log ?? ((...args: unknown[]) => debugLog("newVariant moduleLoader:", ...args)) - const tapValue = (message: unknown[], val: T) => { - log(...message, val) - return val - } - - const force = (val: OrLoader | undefined): T | undefined | Promise => { - if (typeof val === "function") { - return (val as () => Promise)() - } - return val - } - - if (options.wasmLocation || options.wasmSourceMapLocation || options.locateFile) { - moduleLoaderArg.locateFile = (fileName: string, relativeTo: string) => { - const args = { fileName, relativeTo } - if (fileName.endsWith(".wasm") && options.wasmLocation !== undefined) { - return tapValue( - ["locateFile .wasm: provide wasmLocation", args], - options.wasmLocation, - ) - } - - if (fileName.endsWith(".map")) { - if (options.wasmSourceMapLocation !== undefined) { - return tapValue( - ["locateFile .map: provide wasmSourceMapLocation", args], - options.wasmSourceMapLocation, - ) - } - - if (options.wasmLocation && !options.locateFile) { - return tapValue( - ["locateFile .map: infer from wasmLocation", args], - options.wasmLocation + ".map", - ) - } - } - - if (options.locateFile) { - return tapValue( - ["locateFile: use provided fn", args], - options.locateFile(fileName, relativeTo), - ) - } - - return tapValue(["locateFile: unhandled, passthrough", args], fileName) - } - } - - if (options.wasmBinary) { - moduleLoaderArg.wasmBinary = await force(options.wasmBinary) - } - - if (options.wasmMemory) { - moduleLoaderArg.wasmMemory = await force(options.wasmMemory) - } - - const optionsWasmModule = options.wasmModule - let modulePromise: Promise | undefined - if (optionsWasmModule) { - moduleLoaderArg.instantiateWasm = async (imports, onSuccess) => { - modulePromise ??= Promise.resolve(force(optionsWasmModule)) - const wasmModule = await modulePromise - if (!wasmModule) { - // This should never happen - throw new QuickJSEmscriptenModuleError( - `options.wasmModule returned ${String(wasmModule)}`, - ) - } - const instance = await WebAssembly.instantiate(wasmModule, imports) - onSuccess(instance) - return instance.exports - } - } - - moduleLoaderArg.monitorRunDependencies = (left: number) => { - log("monitorRunDependencies:", left) - } - - // This will be replaced with the actual function by --pre-js - // Having the mock around makes our code simpler gives us handy logging - // if we need to understand any issues - moduleLoaderArg.quickjsEmscriptenInit = () => newMockExtensions(log) - - const resultPromise = moduleLoader(moduleLoaderArg) - const extensions = moduleLoaderArg.quickjsEmscriptenInit?.(log) - if ( - optionsWasmModule && - extensions?.receiveWasmOffsetConverter && - !extensions.existingWasmOffsetConverter - ) { - // Unlikely to be available, we'll usually end up mocking this. - // Still if the user has both, we'll take it. - const wasmBinary = (await force(options.wasmBinary)) ?? new ArrayBuffer(0) - - modulePromise ??= Promise.resolve(force(optionsWasmModule)) - const wasmModule = await modulePromise - if (!wasmModule) { - // This should never happen - throw new QuickJSEmscriptenModuleError( - `options.wasmModule returned ${String(wasmModule)}`, - ) - } - extensions.receiveWasmOffsetConverter(wasmBinary, wasmModule) - } - - if (extensions?.receiveSourceMapJSON) { - const loadedSourceMapData = await force(options.wasmSourceMapData) - if (typeof loadedSourceMapData === "string") { - extensions.receiveSourceMapJSON(JSON.parse(loadedSourceMapData)) - } else if (loadedSourceMapData) { - extensions.receiveSourceMapJSON(loadedSourceMapData) - } else { - extensions.receiveSourceMapJSON({ version: 3, names: [], sources: [], mappings: "" }) - } - } - - return resultPromise - } - }, - } - return variant -} - -function newMockExtensions(log: typeof console.log): QuickJSEmscriptenExtensions { - const mockMessage = `mock called, emscripten module may not be initialized yet` - return { - mock: true, - removeRunDependency(name: string) { - log(`${mockMessage}: removeRunDependency called:`, name) - }, - receiveSourceMapJSON(data: unknown) { - log(`${mockMessage}: receiveSourceMapJSON called:`, data) - }, - WasmOffsetConverter: undefined, - receiveWasmOffsetConverter(bytes: ArrayBuffer, mod: WebAssembly.Module) { - log(`${mockMessage}: receiveWasmOffsetConverter called:`, bytes, mod) - }, - } -} diff --git a/packages/quickjs-emscripten-core/src/index.ts b/packages/quickjs-emscripten-core/src/index.ts deleted file mode 100644 index 4f62a7b76..000000000 --- a/packages/quickjs-emscripten-core/src/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -export * from "@jitl/quickjs-ffi-types" - -// Sync classes -export { QuickJSWASMModule } from "./module" -export { QuickJSContext } from "./context" -export { QuickJSRuntime } from "./runtime" -export type { InterruptHandler, ExecutePendingJobsResult } from "./runtime" - -// Async classes -export { QuickJSAsyncWASMModule } from "./module-asyncify" -export { QuickJSAsyncRuntime } from "./runtime-asyncify" -export { QuickJSAsyncContext } from "./context-asyncify" -export type { AsyncFunctionImplementation } from "./context-asyncify" - -// Build variants -export * from "./from-variant" - -// Export helpers -export * from "./vm-interface" -export * from "./lifetime" -export * from "./interrupt-helpers" -/** Collects the informative errors this library may throw. */ -export * as errors from "./errors" -export * from "./deferred-promise" -export * from "./module-test" -export type { - StaticJSValue, - JSValueConst, - JSValue, - QuickJSHandle, - ContextOptions, - ContextEvalOptions, - RuntimeOptions, - AsyncRuntimeOptions, - RuntimeOptionsBase, - JSModuleLoader, - JSModuleLoadResult, - JSModuleLoaderAsync, - JSModuleLoadSuccess, - JSModuleLoadFailure, - JSModuleNormalizer, - JSModuleNormalizerAsync, - JSModuleNormalizeResult, - JSModuleNormalizeFailure, - JSModuleNormalizeSuccess, - Intrinsics, -} from "./types" -export { DefaultIntrinsics } from "./types" -export type { ModuleEvalOptions } from "./module" -export type { QuickJSPropertyKey } from "./context" -export { debugLog, setDebugMode } from "./debug" diff --git a/packages/quickjs-emscripten-core/src/interrupt-helpers.ts b/packages/quickjs-emscripten-core/src/interrupt-helpers.ts deleted file mode 100644 index ae6317497..000000000 --- a/packages/quickjs-emscripten-core/src/interrupt-helpers.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { InterruptHandler } from "./runtime" - -/** - * Returns an interrupt handler that interrupts Javascript execution after a deadline time. - * - * @param deadline - Interrupt execution if it's still running after this time. - * Number values are compared against `Date.now()` - */ -export function shouldInterruptAfterDeadline(deadline: Date | number): InterruptHandler { - const deadlineAsNumber = typeof deadline === "number" ? deadline : deadline.getTime() - - return function () { - return Date.now() > deadlineAsNumber - } -} diff --git a/packages/quickjs-emscripten-core/src/lifetime.test.ts b/packages/quickjs-emscripten-core/src/lifetime.test.ts deleted file mode 100644 index cea6f50b4..000000000 --- a/packages/quickjs-emscripten-core/src/lifetime.test.ts +++ /dev/null @@ -1,156 +0,0 @@ -import assert from "assert" -import { describe, it } from "vitest" -import { DisposableResult, Lifetime, Scope, createDisposableArray } from "./lifetime" - -describe("Lifetime", () => { - describe(".consume", () => { - it("yeilds the value", () => { - const lifetime = new Lifetime(1) - const result = lifetime.consume((l) => l.value + 1) - assert.strictEqual(result, 2) - }) - - it("disposes the lifetime", () => { - let disposed = false - const lifetime = new Lifetime(2, undefined, () => { - disposed = true - }) - lifetime.consume((l) => l.value * 2) - assert.strictEqual(lifetime.alive, false) - assert.strictEqual(disposed, true) - }) - }) - - describe("using statement", () => { - it("disposes the lifetime", () => { - let outerLifetime - - { - using lifetime = new Lifetime(1) - outerLifetime = lifetime - assert.strictEqual(outerLifetime.alive, true) - } - - assert.strictEqual(outerLifetime.alive, false) - }) - }) -}) - -describe("Scope", () => { - describe(".withScope", () => { - function counter() { - let n = 0 - return { - increment: () => n++, - count: () => n, - } - } - it("disposes all the lifetimes", () => { - const { increment, count } = counter() - const secondLifetime = Scope.withScope((scope) => { - scope.manage(new Lifetime("first", undefined, () => increment())) - return scope.manage(new Lifetime("second", undefined, () => increment())) - }) - - assert.strictEqual(secondLifetime.alive, false) - assert.strictEqual(count(), 2) - }) - }) -}) - -describe("createDisposableArray", () => { - it("is alive if any element is alive", () => { - const lifetimes = [new Lifetime(1), new Lifetime(2)] - const result = createDisposableArray(lifetimes) - assert.strictEqual(result.alive, true) - - lifetimes[0].dispose() - assert.strictEqual(result.alive, true) - - lifetimes[1].dispose() - assert.strictEqual(result.alive, false) - }) - - it(".dispose() disposes all alive elements and ignores dead elements", () => { - const lifetimes = [new Lifetime(1), new Lifetime(2)] - lifetimes[0].dispose() - const result = createDisposableArray(lifetimes) - result.dispose() - assert.strictEqual(lifetimes[0].alive, false) - assert.strictEqual(lifetimes[1].alive, false) - }) -}) - -describe("DisposableResult", () => { - function itBehavesAsDisposable(factory: (v: T) => DisposableResult) { - it("is alive when the value is not disposable", () => { - const result = factory(false) - assert.strictEqual(result.alive, true) - }) - - it("is alive when the value is disposable and alive", () => { - const lifetime = new Lifetime(1) - const result = factory(lifetime) - assert.strictEqual(result.alive, true) - lifetime.dispose() - assert.strictEqual(result.alive, false) - }) - - it("disposes the value when dispose is called", () => { - const lifetime = new Lifetime(1) - const result = factory(lifetime) - result.dispose() - assert.strictEqual(lifetime.alive, false) - }) - - it("can call unwrapOr", () => { - const result = factory("hi") - result.unwrapOr(0) - }) - } - - describe("success", () => { - itBehavesAsDisposable((v) => DisposableResult.success(v)) - - it("unwrap returns the value", () => { - const val = {} - const result = DisposableResult.success(val) - assert.strictEqual(result.unwrap(), val) - }) - - it("unwrapOr returns the value", () => { - const val = {} - const result = DisposableResult.success(val) - assert.strictEqual(result.unwrapOr(0), val) - }) - }) - - describe("fail", () => { - itBehavesAsDisposable((v) => DisposableResult.fail(v, () => {})) - - it("unwrap calls the onUnwrap", () => { - let calledWith: unknown = undefined - const expectedError = new Error("will throw") - const result = DisposableResult.fail("error", (v) => { - calledWith = v - throw expectedError - }) - assert.throws( - () => result.unwrap(), - (e) => e === expectedError, - ) - assert.strictEqual(calledWith, result) - }) - - it("throws even if unwrap doesnt", () => { - const result = DisposableResult.fail("error", () => {}) - assert.throws(() => result.unwrap()) - }) - - it("unwrapOr returns the fallback", () => { - const fallback = {} - const result = DisposableResult.fail("error", () => {}) - assert.strictEqual(result.unwrapOr(fallback), fallback) - }) - }) -}) diff --git a/packages/quickjs-emscripten-core/src/lifetime.ts b/packages/quickjs-emscripten-core/src/lifetime.ts deleted file mode 100644 index 5b97e43b0..000000000 --- a/packages/quickjs-emscripten-core/src/lifetime.ts +++ /dev/null @@ -1,479 +0,0 @@ -import type { SuccessOrFail } from "./vm-interface" -import type { MaybeAsyncBlock } from "./asyncify-helpers" -import { maybeAsync } from "./asyncify-helpers" -import { QTS_DEBUG } from "./debug" -import { QuickJSUseAfterFree } from "./errors" -import type { QuickJSHandle } from "./types" - -/** - * An object that can be disposed. - * {@link Lifetime} is the canonical implementation of Disposable. - * Use {@link Scope} to manage cleaning up multiple disposables. - */ -export interface Disposable { - /** - * Dispose of the underlying resources used by this object. - */ - dispose(): void - - /** - * @returns true if the object is alive - * @returns false after the object has been {@link dispose}d - */ - alive: boolean - - /** - * A method that is used to release resources held by an object. Called by the semantics of the `using` statement. - */ - [Symbol.dispose](): void -} - -/** - * Base abstract class that helps implement {@link Disposable} by providing a default implementation of {@link Symbol.dispose}. - */ -export abstract class UsingDisposable implements Disposable { - /** - * @returns true if the object is alive - * @returns false after the object has been {@link dispose}d - */ - declare abstract readonly alive: boolean - /** - * Dispose of the underlying resources used by this object. - */ - abstract dispose(): void - /** - * Just calls the standard .dispose() method of this class. - */ - [Symbol.dispose]() { - return this.dispose() - } -} - -// Polyfill as needed if Symbol.dispose is not available. -// This polyfill matches ESBuild's behavior. -const SymbolDispose = Symbol.dispose ?? Symbol.for("Symbol.dispose") -const prototypeAsAny = UsingDisposable.prototype as any -if (!prototypeAsAny[SymbolDispose]) { - prototypeAsAny[SymbolDispose] = function () { - return this.dispose() - } -} - -/** - * A lifetime prevents access to a value after the lifetime has been - * {@link dispose}ed. - * - * Typically, quickjs-emscripten uses Lifetimes to protect C memory pointers. - */ -export class Lifetime - extends UsingDisposable - implements Disposable -{ - protected _alive: boolean = true - protected _constructorStack = QTS_DEBUG ? new Error("Lifetime constructed").stack : undefined - - /** - * When the Lifetime is disposed, it will call `disposer(_value)`. Use the - * disposer function to implement whatever cleanup needs to happen at the end - * of `value`'s lifetime. - * - * `_owner` is not used or controlled by the lifetime. It's just metadata for - * the creator. - */ - constructor( - protected readonly _value: T, - protected readonly copier?: (value: T | TCopy) => TCopy, - protected readonly disposer?: (value: T | TCopy) => void, - protected readonly _owner?: Owner, - ) { - super() - } - - get alive() { - return this._alive - } - - /** - * The value this Lifetime protects. You must never retain the value - it - * may become invalid, leading to memory errors. - * - * @throws If the lifetime has been {@link dispose}d already. - */ - get value() { - this.assertAlive() - return this._value - } - - get owner() { - return this._owner - } - - get dupable() { - return !!this.copier - } - - /** - * Create a new handle pointing to the same {@link value}. - */ - dup() { - this.assertAlive() - if (!this.copier) { - throw new Error("Non-dupable lifetime") - } - return new Lifetime( - this.copier(this._value), - this.copier, - this.disposer, - this._owner, - ) - } - - /** - * Call `map` with this lifetime, then dispose the lifetime. - * @return the result of `map(this)`. - */ - consume(map: (lifetime: this) => O): O - // A specific type definition is needed for our common use-case - // https://github.com/microsoft/TypeScript/issues/30271 - consume(map: (lifetime: QuickJSHandle) => O): O - consume(map: (lifetime: any) => O): O { - this.assertAlive() - const result = map(this) - this.dispose() - return result - } - - /** - * Call `map` with this lifetime, returning the result. - * Does not dispose the lifetime. - * @return the result of `map(this)`. - */ - map(map: (lifetime: this) => O): O - map(map: (lifetime: QuickJSHandle) => O): O - map(map: (lifetime: any) => O): O { - this.assertAlive() - return map(this) - } - - /** - * Call `fn` with this lifetime, then return `this`. Does not dispose the - * lifetime. Useful for imperative operations within an expression, like when - * you're building up objects, or to add logging in the middle of a call chain. - * @returns this - */ - tap(fn: (lifetime: this) => void): this - tap(fn: (lifetime: QuickJSHandle) => void): QuickJSHandle - tap(fn: (lifetime: any) => void): any { - fn(this) - return this - } - - /** - * Dispose of {@link value} and perform cleanup. - */ - dispose() { - this.assertAlive() - if (this.disposer) { - this.disposer(this._value) - } - this._alive = false - } - - private assertAlive() { - if (!this.alive) { - if (this._constructorStack) { - throw new QuickJSUseAfterFree( - `Lifetime not alive\n${this._constructorStack}\nLifetime used`, - ) - } - throw new QuickJSUseAfterFree("Lifetime not alive") - } - } -} - -/** - * A Lifetime that lives forever. Used for constants. - */ -export class StaticLifetime extends Lifetime { - constructor(value: T, owner?: Owner) { - super(value, undefined, undefined, owner) - } - - // Static lifetime doesn't need a copier to be copiable - get dupable() { - return true - } - - // Copy returns the same instance. - dup() { - return this - } - - // Dispose does nothing. - dispose() {} -} - -/** - * A Lifetime that does not own its `value`. A WeakLifetime never calls its - * `disposer` function, but can be `dup`ed to produce regular lifetimes that - * do. - * - * Used for function arguments. - */ -export class WeakLifetime extends Lifetime { - constructor( - value: T, - copier?: (value: T | TCopy) => TCopy, - disposer?: (value: TCopy) => void, - owner?: Owner, - ) { - // We don't care if the disposer doesn't support freeing T - super(value, copier, disposer as (value: T | TCopy) => void, owner) - } - - dispose() { - this._alive = false - } -} - -function scopeFinally(scope: Scope, blockError: Error | undefined) { - // console.log('scopeFinally', scope, blockError) - let disposeError: Error | undefined - try { - scope.dispose() - } catch (error) { - disposeError = error as any - } - - if (blockError && disposeError) { - Object.assign(blockError, { - message: `${blockError.message}\n Then, failed to dispose scope: ${disposeError.message}`, - disposeError, - }) - throw blockError - } - - if (blockError || disposeError) { - throw blockError || disposeError - } -} - -/** - * Scope helps reduce the burden of manually tracking and disposing of - * Lifetimes. See {@link withScope}. and {@link withScopeAsync}. - */ -export class Scope extends UsingDisposable implements Disposable { - /** - * Run `block` with a new Scope instance that will be disposed after the block returns. - * Inside `block`, call `scope.manage` on each lifetime you create to have the lifetime - * automatically disposed after the block returns. - * - * @warning Do not use with async functions. Instead, use {@link withScopeAsync}. - */ - static withScope(block: (scope: Scope) => R): R { - const scope = new Scope() - let blockError: Error | undefined - try { - return block(scope) - } catch (error) { - blockError = error as any - throw error - } finally { - scopeFinally(scope, blockError) - } - } - - static withScopeMaybeAsync( - _this: This, - block: MaybeAsyncBlock, - ): Return | Promise { - return maybeAsync(undefined, function* (awaited) { - const scope = new Scope() - let blockError: Error | undefined - try { - return yield* awaited.of(block.call(_this, awaited, scope)) - } catch (error) { - blockError = error as any - throw error - } finally { - scopeFinally(scope, blockError) - } - }) - } - - /** - * Run `block` with a new Scope instance that will be disposed after the - * block's returned promise settles. Inside `block`, call `scope.manage` on each - * lifetime you create to have the lifetime automatically disposed after the - * block returns. - */ - static async withScopeAsync(block: (scope: Scope) => Promise): Promise { - const scope = new Scope() - let blockError: Error | undefined - try { - return await block(scope) - } catch (error) { - blockError = error as any - throw error - } finally { - scopeFinally(scope, blockError) - } - } - - private _disposables: Lifetime> = new Lifetime(new Set()) - - /** - * Track `lifetime` so that it is disposed when this scope is disposed. - */ - manage = (lifetime: T): T => { - this._disposables.value.add(lifetime) - return lifetime - } - - get alive() { - return this._disposables.alive - } - - dispose() { - const lifetimes = Array.from(this._disposables.value.values()).reverse() - for (const lifetime of lifetimes) { - if (lifetime.alive) { - lifetime.dispose() - } - } - this._disposables.dispose() - } -} - -/** - * An `Array` that also implements {@link Disposable}: - * - * - Considered {@link Disposable#alive} if any of its elements are `alive`. - * - When {@link Disposable#dispose}d, it will dispose of all its elements that are `alive`. - */ -export type DisposableArray = T[] & Disposable - -/** - * Create an array that also implements {@link Disposable}. - */ -export function createDisposableArray( - items?: Iterable, -): DisposableArray { - const array = items ? Array.from(items) : [] - - function disposeAlive() { - return array.forEach((disposable) => (disposable.alive ? disposable.dispose() : undefined)) - } - - function someIsAlive() { - return array.some((disposable) => disposable.alive) - } - - Object.defineProperty(array, SymbolDispose, { - configurable: true, - enumerable: false, - value: disposeAlive, - }) - - Object.defineProperty(array, "dispose", { - configurable: true, - enumerable: false, - value: disposeAlive, - }) - - Object.defineProperty(array, "alive", { - configurable: true, - enumerable: false, - get: someIsAlive, - }) - - return array as T[] & Disposable -} - -function isDisposable(value: unknown): value is { alive: boolean; dispose(): unknown } { - return Boolean( - value && - (typeof value === "object" || typeof value === "function") && - "alive" in value && - typeof value.alive === "boolean" && - "dispose" in value && - typeof value.dispose === "function", - ) -} - -abstract class AbstractDisposableResult extends UsingDisposable implements Disposable { - static success(value: S): DisposableSuccess { - return new DisposableSuccess(value) satisfies SuccessOrFail - } - - static fail(error: F, onUnwrap: (status: SuccessOrFail) => void): DisposableFail { - return new DisposableFail( - error, - onUnwrap as (status: SuccessOrFail) => void, - ) satisfies SuccessOrFail - } - - static is(result: SuccessOrFail): result is DisposableResult { - return result instanceof AbstractDisposableResult - } - - abstract get alive(): boolean - abstract dispose(): void -} - -export class DisposableSuccess extends AbstractDisposableResult { - declare error?: undefined - - constructor(readonly value: S) { - super() - } - - override get alive() { - return isDisposable(this.value) ? this.value.alive : true - } - - override dispose(): void { - if (isDisposable(this.value)) { - this.value.dispose() - } - } - - unwrap(): S { - return this.value - } - - unwrapOr(_fallback: T): S | T { - return this.value - } -} - -export class DisposableFail extends AbstractDisposableResult { - constructor( - readonly error: F, - private readonly onUnwrap: (status: SuccessOrFail) => void, - ) { - super() - } - - override get alive(): boolean { - return isDisposable(this.error) ? this.error.alive : true - } - - override dispose(): void { - if (isDisposable(this.error)) { - this.error.dispose() - } - } - - unwrap(): never { - this.onUnwrap(this) - throw this.error - } - - unwrapOr(fallback: T): T { - return fallback - } -} - -export type DisposableResult = DisposableSuccess | DisposableFail -export const DisposableResult = AbstractDisposableResult diff --git a/packages/quickjs-emscripten-core/src/memory.ts b/packages/quickjs-emscripten-core/src/memory.ts deleted file mode 100644 index 19628f8a9..000000000 --- a/packages/quickjs-emscripten-core/src/memory.ts +++ /dev/null @@ -1,94 +0,0 @@ -import type { - EitherModule, - OwnedHeapCharPointer, - JSValueConstPointerPointer, - JSVoidPointer, -} from "@jitl/quickjs-ffi-types" -import { Lifetime } from "./lifetime" -import type { QuickJSHandle } from "./types" - -/** - * @private - */ -export type HeapUint8Array = { - pointer: JSVoidPointer - numBytes: number -} - -/** - * Add more types as needed. - * @private - */ -export type TypedArray = Int32Array | Uint32Array - -/** @private */ -export interface TypedArrayConstructor { - new (length: number): T - new (array: ArrayLike | ArrayBufferLike): T - new (buffer: ArrayBufferLike, byteOffset?: number, length?: number): T - BYTES_PER_ELEMENT: number -} - -/** @private */ -export type HeapTypedArray = Lifetime<{ - typedArray: JS - ptr: C -}> - -/** - * @private - */ -export class ModuleMemory { - constructor(public module: EitherModule) {} - - toPointerArray(handleArray: QuickJSHandle[]): Lifetime { - const typedArray = new Int32Array(handleArray.map((handle) => handle.value)) - const numBytes = typedArray.length * typedArray.BYTES_PER_ELEMENT - const ptr = this.module._malloc(numBytes) as JSValueConstPointerPointer - const heapBytes = new Uint8Array(this.module.HEAPU8.buffer, ptr, numBytes) - heapBytes.set(new Uint8Array(typedArray.buffer)) - return new Lifetime(ptr, undefined, (ptr) => this.module._free(ptr)) - } - - newTypedArray( - kind: TypedArrayConstructor, - length: number, - ): HeapTypedArray { - const zeros = new kind(new Array(length).fill(0)) - const numBytes = zeros.length * zeros.BYTES_PER_ELEMENT - const ptr = this.module._malloc(numBytes) as C - const typedArray = new kind(this.module.HEAPU8.buffer, ptr, length) - typedArray.set(zeros) - return new Lifetime({ typedArray, ptr }, undefined, (value) => this.module._free(value.ptr)) - } - - // TODO: shouldn't this be Uint32 instead of Int32? - newMutablePointerArray( - length: number, - ): Lifetime<{ typedArray: Int32Array; ptr: T }> { - return this.newTypedArray(Int32Array, length) - } - - newHeapCharPointer(string: string): Lifetime<{ ptr: OwnedHeapCharPointer; strlen: number }> { - const strlen = this.module.lengthBytesUTF8(string) - const dataBytes = strlen + 1 - const ptr: OwnedHeapCharPointer = this.module._malloc(dataBytes) as OwnedHeapCharPointer - this.module.stringToUTF8(string, ptr, dataBytes) - return new Lifetime({ ptr, strlen }, undefined, (value) => this.module._free(value.ptr)) - } - - newHeapBufferPointer(buffer: Uint8Array): Lifetime { - const numBytes = buffer.byteLength - const ptr: JSVoidPointer = this.module._malloc(numBytes) as JSVoidPointer - this.module.HEAPU8.set(buffer, ptr) - return new Lifetime({ pointer: ptr, numBytes }, undefined, (value) => - this.module._free(value.pointer), - ) - } - - consumeHeapCharPointer(ptr: OwnedHeapCharPointer): string { - const str = this.module.UTF8ToString(ptr) - this.module._free(ptr) - return str - } -} diff --git a/packages/quickjs-emscripten-core/src/module-asyncify.ts b/packages/quickjs-emscripten-core/src/module-asyncify.ts deleted file mode 100644 index e4d26cb02..000000000 --- a/packages/quickjs-emscripten-core/src/module-asyncify.ts +++ /dev/null @@ -1,112 +0,0 @@ -import type { QuickJSAsyncEmscriptenModule, QuickJSAsyncFFI } from "@jitl/quickjs-ffi-types" -import type { QuickJSAsyncContext } from "./context-asyncify" -import { QuickJSNotImplemented } from "./errors" -import { Lifetime, Scope } from "./lifetime" -import type { ModuleEvalOptions } from "./module" -import { applyBaseRuntimeOptions, applyModuleEvalRuntimeOptions, QuickJSWASMModule } from "./module" -import { QuickJSAsyncRuntime } from "./runtime-asyncify" -import type { AsyncRuntimeOptions, ContextOptions } from "./types" - -/** - * Asyncified version of {@link QuickJSWASMModule}. - * - * Due to limitations of Emscripten's ASYNCIFY process, only a single async - * function call can happen at a time across the entire WebAssembly module. - * - * That means that all runtimes, contexts, functions, etc created inside this - * WebAssembly are limited to a single concurrent async action. - * **Multiple concurrent async actions is an error.** - * - * To allow for multiple concurrent async actions, you must create multiple WebAssembly - * modules. - */ -export class QuickJSAsyncWASMModule extends QuickJSWASMModule { - /** @private */ - protected ffi: QuickJSAsyncFFI - /** @private */ - protected module: QuickJSAsyncEmscriptenModule - - /** @private */ - constructor(module: QuickJSAsyncEmscriptenModule, ffi: QuickJSAsyncFFI) { - super(module, ffi) - this.ffi = ffi - this.module = module - } - - /** - * Create a new async runtime inside this WebAssembly module. All runtimes inside a - * module are limited to a single async call at a time. For multiple - * concurrent async actions, create multiple WebAssembly modules. - */ - override newRuntime(options: AsyncRuntimeOptions = {}): QuickJSAsyncRuntime { - const rt = new Lifetime(this.ffi.QTS_NewRuntime(), undefined, (rt_ptr) => { - this.callbacks.deleteRuntime(rt_ptr) - this.ffi.QTS_FreeRuntime(rt_ptr) - }) - const runtime = new QuickJSAsyncRuntime({ - module: this.module, - ffi: this.ffi, - rt, - callbacks: this.callbacks, - }) - - applyBaseRuntimeOptions(runtime, options) - - if (options.moduleLoader) { - runtime.setModuleLoader(options.moduleLoader) - } - - return runtime - } - - /** - * A simplified API to create a new {@link QuickJSAsyncRuntime} and a - * {@link QuickJSAsyncContext} inside that runtime at the same time. The runtime will - * be disposed when the context is disposed. - */ - override newContext(options: ContextOptions = {}): QuickJSAsyncContext { - const runtime = this.newRuntime() - const lifetimes = options.ownedLifetimes ? options.ownedLifetimes.concat([runtime]) : [runtime] - const context = runtime.newContext({ ...options, ownedLifetimes: lifetimes }) - runtime.context = context - return context - } - - /** Synchronous evalCode is not supported. */ - override evalCode(): never { - throw new QuickJSNotImplemented("QuickJSWASMModuleAsyncify.evalCode: use evalCodeAsync instead") - } - - /** - * One-off evaluate code without needing to create a {@link QuickJSAsyncRuntime} or - * {@link QuickJSAsyncContext} explicitly. - * - * This version allows for asynchronous Ecmascript module loading. - * - * Note that only a single async action can occur at a time inside the entire WebAssembly module. - * **Multiple concurrent async actions is an error.** - * - * See the documentation for {@link QuickJSWASMModule#evalCode} for more details. - */ - evalCodeAsync(code: string, options: ModuleEvalOptions): Promise { - // TODO: we should really figure out generator for the Promise monad... - return Scope.withScopeAsync(async (scope) => { - const vm = scope.manage(this.newContext()) - applyModuleEvalRuntimeOptions(vm.runtime, options) - const result = await vm.evalCodeAsync(code, "eval.js") - - if (options.memoryLimitBytes !== undefined) { - // Remove memory limit so we can dump the result without exceeding it. - vm.runtime.setMemoryLimit(-1) - } - - if (result.error) { - const error = vm.dump(scope.manage(result.error)) - throw error - } - - const value = vm.dump(scope.manage(result.value)) - return value - }) - } -} diff --git a/packages/quickjs-emscripten-core/src/module-test.ts b/packages/quickjs-emscripten-core/src/module-test.ts deleted file mode 100644 index ed5eaebfe..000000000 --- a/packages/quickjs-emscripten-core/src/module-test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import type { QuickJSContext } from "./context" -import type { ModuleEvalOptions, QuickJSWASMModule } from "./module" -import type { QuickJSRuntime } from "./runtime" -import type { ContextOptions, RuntimeOptions } from "./types" -import { QuickJSMemoryLeakDetected } from "./errors" -import { Lifetime } from "./lifetime" - -/** - * A test wrapper of {@link QuickJSWASMModule} that keeps a reference to each - * context or runtime created. - * - * Call {@link disposeAll} to reset these sets and calls `dispose` on any left alive - * (which may throw an error). - * - * Call {@link assertNoMemoryAllocated} at the end of a test, when you expect that you've - * freed all the memory you've ever allocated. - */ -export class TestQuickJSWASMModule implements Pick { - contexts = new Set() - runtimes = new Set() - constructor(private parent: QuickJSWASMModule) {} - - newRuntime(options?: RuntimeOptions): QuickJSRuntime { - const runtime = this.parent.newRuntime({ - ...options, - ownedLifetimes: [ - new Lifetime(undefined, undefined, () => this.runtimes.delete(runtime)), - ...(options?.ownedLifetimes ?? []), - ], - }) - this.runtimes.add(runtime) - return runtime - } - - newContext(options?: ContextOptions): QuickJSContext { - const context = this.parent.newContext({ - ...options, - ownedLifetimes: [ - new Lifetime(undefined, undefined, () => this.contexts.delete(context)), - ...(options?.ownedLifetimes ?? []), - ], - }) - this.contexts.add(context) - return context - } - - evalCode(code: string, options?: ModuleEvalOptions): unknown { - return this.parent.evalCode(code, options) - } - - disposeAll() { - const allDisposables = [...this.contexts, ...this.runtimes] - this.runtimes.clear() - this.contexts.clear() - allDisposables.forEach((d) => { - if (d.alive) { - d.dispose() - } - }) - } - - assertNoMemoryAllocated() { - const leaksDetected = this.getFFI().QTS_RecoverableLeakCheck() - if (leaksDetected) { - // Note: this is currently only available when building from source - // with debug builds. - throw new QuickJSMemoryLeakDetected("Leak sanitizer detected un-freed memory") - } - - if (this.contexts.size > 0) { - throw new QuickJSMemoryLeakDetected(`${this.contexts.size} contexts leaked`) - } - - if (this.runtimes.size > 0) { - throw new QuickJSMemoryLeakDetected(`${this.runtimes.size} runtimes leaked`) - } - } - - getWasmMemory(): WebAssembly.Memory { - return this.parent.getWasmMemory() - } - - /** @private */ - getFFI() { - return this.parent.getFFI() - } -} diff --git a/packages/quickjs-emscripten-core/src/module.ts b/packages/quickjs-emscripten-core/src/module.ts deleted file mode 100644 index 787df7dbb..000000000 --- a/packages/quickjs-emscripten-core/src/module.ts +++ /dev/null @@ -1,445 +0,0 @@ -import type { - Asyncify, - AsyncifySleepResult, - EitherModule, - EmscriptenModuleCallbacks, - BorrowedHeapCharPointer, - JSContextPointer, - JSRuntimePointer, - JSValuePointer, - EitherFFI, -} from "@jitl/quickjs-ffi-types" -import type { QuickJSContext } from "./context" -import { debugLog } from "./debug" -import { QuickJSAsyncifyError, QuickJSAsyncifySuspended } from "./errors" -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import type { CustomizeVariantOptions } from "./from-variant" -import { Lifetime, Scope } from "./lifetime" -import type { InterruptHandler } from "./runtime" -import { QuickJSRuntime } from "./runtime" -import type { ContextOptions, JSModuleLoader, RuntimeOptions, RuntimeOptionsBase } from "./types" -import { concat } from "./types" - -type EmscriptenCallback = ( - ...args: [Asyncify | undefined, ...BaseArgs] -) => Result | AsyncifySleepResult -type MaybeAsyncEmscriptenCallback> = - T extends EmscriptenCallback - ? (...args: Args) => Result | Promise - : never -type MaybeAsyncEmscriptenCallbacks = { - [K in keyof EmscriptenModuleCallbacks]: MaybeAsyncEmscriptenCallback -} - -/** - * @private - */ -export interface ContextCallbacks { - callFunction: MaybeAsyncEmscriptenCallbacks["callFunction"] -} - -/** - * @private - */ -export interface RuntimeCallbacks { - shouldInterrupt: MaybeAsyncEmscriptenCallbacks["shouldInterrupt"] - loadModuleSource: MaybeAsyncEmscriptenCallbacks["loadModuleSource"] - normalizeModule: MaybeAsyncEmscriptenCallbacks["normalizeModule"] -} - -class QuickJSEmscriptenModuleCallbacks implements EmscriptenModuleCallbacks { - public callFunction: EmscriptenModuleCallbacks["callFunction"] - public shouldInterrupt: EmscriptenModuleCallbacks["shouldInterrupt"] - public loadModuleSource: EmscriptenModuleCallbacks["loadModuleSource"] - public normalizeModule: EmscriptenModuleCallbacks["normalizeModule"] - constructor(args: EmscriptenModuleCallbacks) { - this.callFunction = args.callFunction - this.shouldInterrupt = args.shouldInterrupt - this.loadModuleSource = args.loadModuleSource - this.normalizeModule = args.normalizeModule - } -} - -/** - * Options for {@link QuickJSWASMModule#evalCode}. - */ -export interface ModuleEvalOptions { - /** - * Interrupt evaluation if `shouldInterrupt` returns `true`. - * See {@link shouldInterruptAfterDeadline}. - */ - shouldInterrupt?: InterruptHandler - - /** - * Memory limit, in bytes, of WebAssembly heap memory used by the QuickJS VM. - */ - memoryLimitBytes?: number - - /** - * Stack size limit for this vm, in bytes - * To remove the limit, set to `0`. - */ - maxStackSizeBytes?: number - - /** - * Module loader for any `import` statements or expressions. - */ - moduleLoader?: JSModuleLoader -} - -/** - * We use static functions per module to dispatch runtime or context calls from - * C to the host. This class manages the indirection from a specific runtime or - * context pointer to the appropriate callback handler. - * - * @private - */ -export class QuickJSModuleCallbacks { - private module: EitherModule - private contextCallbacks = new Map() - private runtimeCallbacks = new Map() - - constructor(module: EitherModule) { - this.module = module - this.module.callbacks = this.cToHostCallbacks - } - - setRuntimeCallbacks(rt: JSRuntimePointer, callbacks: RuntimeCallbacks) { - this.runtimeCallbacks.set(rt, callbacks) - } - - deleteRuntime(rt: JSRuntimePointer) { - this.runtimeCallbacks.delete(rt) - } - - setContextCallbacks(ctx: JSContextPointer, callbacks: ContextCallbacks) { - this.contextCallbacks.set(ctx, callbacks) - } - - deleteContext(ctx: JSContextPointer) { - this.contextCallbacks.delete(ctx) - } - - private suspendedCount = 0 - private suspended: QuickJSAsyncifySuspended | undefined - - private handleAsyncify( - asyncify: Asyncify | undefined, - fn: () => T | Promise, - ): T | AsyncifySleepResult { - if (asyncify) { - // We must always call asyncify.handleSync around our function. - // This allows asyncify to resume suspended execution on the second call. - // Asyncify internally can detect sync behavior, and avoid suspending. - return asyncify.handleSleep((done) => { - try { - const result = fn() - if (!(result instanceof Promise)) { - debugLog("asyncify.handleSleep: not suspending:", result) - done(result) - return - } - - // Is promise, we intend to suspend. - if (this.suspended) { - throw new QuickJSAsyncifyError( - `Already suspended at: ${this.suspended.stack}\nAttempted to suspend at:`, - ) - } else { - this.suspended = new QuickJSAsyncifySuspended(`(${this.suspendedCount++})`) - debugLog("asyncify.handleSleep: suspending:", this.suspended) - } - - result.then( - (resolvedResult) => { - this.suspended = undefined - debugLog("asyncify.handleSleep: resolved:", resolvedResult) - done(resolvedResult) - }, - (error) => { - debugLog("asyncify.handleSleep: rejected:", error) - console.error("QuickJS: cannot handle error in suspended function", error) - this.suspended = undefined - }, - ) - } catch (error) { - debugLog("asyncify.handleSleep: error:", error) - this.suspended = undefined - throw error - } - }) - } - - // No asyncify - we should never return a promise. - const value = fn() - if (value instanceof Promise) { - throw new Error("Promise return value not supported in non-asyncify context.") - } - return value - } - - private cToHostCallbacks = new QuickJSEmscriptenModuleCallbacks({ - callFunction: (asyncify, ctx, this_ptr, argc, argv, fn_id) => - this.handleAsyncify(asyncify, () => { - try { - const vm = this.contextCallbacks.get(ctx) - if (!vm) { - throw new Error(`QuickJSContext(ctx = ${ctx}) not found for C function call "${fn_id}"`) - } - return vm.callFunction(ctx, this_ptr, argc, argv, fn_id) - } catch (error) { - console.error("[C to host error: returning null]", error) - return 0 as JSValuePointer - } - }), - - shouldInterrupt: (asyncify, rt) => - this.handleAsyncify(asyncify, () => { - try { - const vm = this.runtimeCallbacks.get(rt) - if (!vm) { - throw new Error(`QuickJSRuntime(rt = ${rt}) not found for C interrupt`) - } - return vm.shouldInterrupt(rt) - } catch (error) { - console.error("[C to host interrupt: returning error]", error) - return 1 - } - }), - - loadModuleSource: (asyncify, rt, ctx, moduleName) => - this.handleAsyncify(asyncify, () => { - try { - const runtimeCallbacks = this.runtimeCallbacks.get(rt) - if (!runtimeCallbacks) { - throw new Error(`QuickJSRuntime(rt = ${rt}) not found for C module loader`) - } - - const loadModule = runtimeCallbacks.loadModuleSource - if (!loadModule) { - throw new Error(`QuickJSRuntime(rt = ${rt}) does not support module loading`) - } - return loadModule(rt, ctx, moduleName) - } catch (error) { - console.error("[C to host module loader error: returning null]", error) - return 0 as BorrowedHeapCharPointer - } - }), - - normalizeModule: (asyncify, rt, ctx, moduleBaseName, moduleName) => - this.handleAsyncify(asyncify, () => { - try { - const runtimeCallbacks = this.runtimeCallbacks.get(rt) - if (!runtimeCallbacks) { - throw new Error(`QuickJSRuntime(rt = ${rt}) not found for C module loader`) - } - - const normalizeModule = runtimeCallbacks.normalizeModule - if (!normalizeModule) { - throw new Error(`QuickJSRuntime(rt = ${rt}) does not support module loading`) - } - return normalizeModule(rt, ctx, moduleBaseName, moduleName) - } catch (error) { - console.error("[C to host module loader error: returning null]", error) - return 0 as BorrowedHeapCharPointer - } - }), - }) -} - -/** - * Process RuntimeOptions and apply them to a QuickJSRuntime. - * @private - */ -export function applyBaseRuntimeOptions( - runtime: QuickJSRuntime, - options: RuntimeOptionsBase, -): void { - if (options.interruptHandler) { - runtime.setInterruptHandler(options.interruptHandler) - } - - if (options.maxStackSizeBytes !== undefined) { - runtime.setMaxStackSize(options.maxStackSizeBytes) - } - - if (options.memoryLimitBytes !== undefined) { - runtime.setMemoryLimit(options.memoryLimitBytes) - } -} - -/** - * Process ModuleEvalOptions and apply them to a QuickJSRuntime. - * @private - */ -export function applyModuleEvalRuntimeOptions( - runtime: T, - options: ModuleEvalOptions, -) { - if (options.moduleLoader) { - runtime.setModuleLoader(options.moduleLoader) - } - - if (options.shouldInterrupt) { - runtime.setInterruptHandler(options.shouldInterrupt) - } - - if (options.memoryLimitBytes !== undefined) { - runtime.setMemoryLimit(options.memoryLimitBytes) - } - - if (options.maxStackSizeBytes !== undefined) { - runtime.setMaxStackSize(options.maxStackSizeBytes) - } -} - -/** - * This class presents a Javascript interface to QuickJS, a Javascript interpreter - * that supports EcmaScript 2020 (ES2020). - * - * It wraps a single WebAssembly module containing the QuickJS library and - * associated helper C code. WebAssembly modules are completely isolated from - * each other by the host's WebAssembly runtime. Separate WebAssembly modules - * have the most isolation guarantees possible with this library. - * - * The simplest way to start running code is {@link evalCode}. This shortcut - * method will evaluate Javascript safely and return the result as a native - * Javascript value. - * - * For more control over the execution environment, or to interact with values - * inside QuickJS, create a context with {@link newContext} or a runtime with - * {@link newRuntime}. - */ -export class QuickJSWASMModule { - /** @private */ - protected ffi: EitherFFI - /** @private */ - protected callbacks: QuickJSModuleCallbacks - /** @private */ - protected module: EitherModule - - /** @private */ - constructor(module: EitherModule, ffi: EitherFFI) { - this.module = module - this.ffi = ffi - this.callbacks = new QuickJSModuleCallbacks(module) - } - - /** - * Create a runtime. - * Use the runtime to set limits on CPU and memory usage and configure module - * loading for one or more {@link QuickJSContext}s inside the runtime. - */ - newRuntime(options: RuntimeOptions = {}): QuickJSRuntime { - const rt = new Lifetime(this.ffi.QTS_NewRuntime(), undefined, (rt_ptr) => { - this.callbacks.deleteRuntime(rt_ptr) - this.ffi.QTS_FreeRuntime(rt_ptr) - }) - - const runtime = new QuickJSRuntime({ - module: this.module, - callbacks: this.callbacks, - ffi: this.ffi, - rt, - }) - - applyBaseRuntimeOptions(runtime, options) - - if (options.moduleLoader) { - runtime.setModuleLoader(options.moduleLoader) - } - - return runtime - } - - /** - * A simplified API to create a new {@link QuickJSRuntime} and a - * {@link QuickJSContext} inside that runtime at the same time. The runtime will - * be disposed when the context is disposed. - */ - newContext(options: ContextOptions = {}): QuickJSContext { - const runtime = this.newRuntime() - const context = runtime.newContext({ - ...options, - ownedLifetimes: concat(runtime, options.ownedLifetimes), - }) - runtime.context = context - return context - } - - /** - * One-off evaluate code without needing to create a {@link QuickJSRuntime} or - * {@link QuickJSContext} explicitly. - * - * To protect against infinite loops, use the `shouldInterrupt` option. The - * {@link shouldInterruptAfterDeadline} function will create a time-based deadline. - * - * If you need more control over how the code executes, create a - * {@link QuickJSRuntime} (with {@link newRuntime}) or a {@link QuickJSContext} (with - * {@link newContext} or {@link QuickJSRuntime#newContext}), and use its - * {@link QuickJSContext#evalCode} method. - * - * Asynchronous callbacks may not run during the first call to `evalCode`. If - * you need to work with async code inside QuickJS, create a runtime and use - * {@link QuickJSRuntime#executePendingJobs}. - * - * @returns The result is coerced to a native Javascript value using JSON - * serialization, so properties and values unsupported by JSON will be dropped. - * - * @throws If `code` throws during evaluation, the exception will be - * converted into a native Javascript value and thrown. - * - * @throws if `options.shouldInterrupt` interrupted execution, will throw a Error - * with name `"InternalError"` and message `"interrupted"`. - */ - evalCode(code: string, options: ModuleEvalOptions = {}): unknown { - return Scope.withScope((scope) => { - const vm = scope.manage(this.newContext()) - - applyModuleEvalRuntimeOptions(vm.runtime, options) - const result = vm.evalCode(code, "eval.js") - - if (options.memoryLimitBytes !== undefined) { - // Remove memory limit so we can dump the result without exceeding it. - vm.runtime.setMemoryLimit(-1) - } - - if (result.error) { - const error = vm.dump(scope.manage(result.error)) - throw error - } - - const value = vm.dump(scope.manage(result.value)) - return value - }) - } - - /** - * Retrieve the WebAssembly memory used by this QuickJS module. - * Use this access very carefully - you are responsible for safe interaction with the memory. - * - * To supply a custom, pre-initialized memory to QuickJS, create a new variant - * and provide the {@link CustomizeVariantOptions#wasmMemory} option. - * - * @experimental - */ - getWasmMemory(): WebAssembly.Memory { - const extensions = this.module.quickjsEmscriptenInit?.(() => {}) - const memory = extensions?.getWasmMemory?.() - if (!memory) { - throw new Error(`Variant does not support getting WebAssembly.Memory`) - } - return memory - } - - /** - * Get a low-level interface to the QuickJS functions in this WebAssembly - * module. - * @experimental - * @unstable No warranty is provided with this API. It could change at any time. - * @private - */ - getFFI(): EitherFFI { - return this.ffi - } -} diff --git a/packages/quickjs-emscripten-core/src/runtime-asyncify.ts b/packages/quickjs-emscripten-core/src/runtime-asyncify.ts deleted file mode 100644 index 17026c392..000000000 --- a/packages/quickjs-emscripten-core/src/runtime-asyncify.ts +++ /dev/null @@ -1,95 +0,0 @@ -import type { - QuickJSAsyncEmscriptenModule, - QuickJSAsyncFFI, - JSContextPointer, - JSRuntimePointer, -} from "@jitl/quickjs-ffi-types" -import { QuickJSAsyncContext } from "./context-asyncify" -import type { - // Used in doc - // eslint-disable-next-line @typescript-eslint/no-unused-vars - QuickJSAsyncWASMModule, -} from "./module-asyncify" -import type { QuickJSModuleCallbacks } from "./module" -import { QuickJSRuntime } from "./runtime" -import type { - ContextOptions, - JSModuleLoader, - JSModuleLoaderAsync, - JSModuleNormalizer, - JSModuleNormalizerAsync, -} from "./types" -import { intrinsicsToFlags } from "./types" -import { Lifetime } from "./lifetime" - -export class QuickJSAsyncRuntime extends QuickJSRuntime { - public declare context: QuickJSAsyncContext | undefined - - /** @private */ - protected declare module: QuickJSAsyncEmscriptenModule - /** @private */ - protected declare ffi: QuickJSAsyncFFI - /** @private */ - protected declare rt: Lifetime - /** @private */ - protected declare callbacks: QuickJSModuleCallbacks - /** @private */ - protected declare contextMap: Map - - /** @private */ - constructor(args: { - module: QuickJSAsyncEmscriptenModule - ffi: QuickJSAsyncFFI - rt: Lifetime - callbacks: QuickJSModuleCallbacks - }) { - super(args) - } - - override newContext(options: ContextOptions = {}): QuickJSAsyncContext { - const intrinsics = intrinsicsToFlags(options.intrinsics) - const ctx = new Lifetime( - this.ffi.QTS_NewContext(this.rt.value, intrinsics), - undefined, - (ctx_ptr) => { - this.contextMap.delete(ctx_ptr) - this.callbacks.deleteContext(ctx_ptr) - this.ffi.QTS_FreeContext(ctx_ptr) - }, - ) - - const context = new QuickJSAsyncContext({ - module: this.module, - ctx, - ffi: this.ffi, - rt: this.rt, - ownedLifetimes: [], - runtime: this, - callbacks: this.callbacks, - }) - this.contextMap.set(ctx.value, context) - - return context - } - - public override setModuleLoader( - moduleLoader: JSModuleLoaderAsync, - moduleNormalizer?: JSModuleNormalizerAsync, - ): void { - super.setModuleLoader( - moduleLoader as JSModuleLoader, - moduleNormalizer as JSModuleNormalizer | undefined, - ) - } - - /** - * Set the max stack size for this runtime in bytes. - * To remove the limit, set to `0`. - * - * Setting this limit also adjusts the global `ASYNCIFY_STACK_SIZE` for the entire {@link QuickJSAsyncWASMModule}. - * See the [pull request](https://github.com/justjake/quickjs-emscripten/pull/114) for more details. - */ - public override setMaxStackSize(stackSize: number): void { - return super.setMaxStackSize(stackSize) - } -} diff --git a/packages/quickjs-emscripten-core/src/runtime.ts b/packages/quickjs-emscripten-core/src/runtime.ts deleted file mode 100644 index fd98b4068..000000000 --- a/packages/quickjs-emscripten-core/src/runtime.ts +++ /dev/null @@ -1,473 +0,0 @@ -import type { - BorrowedHeapCharPointer, - JSContextPointer, - JSContextPointerPointer, - JSRuntimePointer, - EitherFFI, - EitherModule, -} from "@jitl/quickjs-ffi-types" -import { maybeAsyncFn } from "./asyncify-helpers" -import { QuickJSContext } from "./context" -import { QTS_DEBUG } from "./debug" -import { QuickJSWrongOwner } from "./errors" -import type { Disposable } from "./lifetime" -import { DisposableResult, Lifetime, Scope, UsingDisposable } from "./lifetime" -import { ModuleMemory } from "./memory" -import type { QuickJSModuleCallbacks, RuntimeCallbacks } from "./module" -import type { ContextOptions, JSModuleLoader, JSModuleNormalizer, QuickJSHandle } from "./types" -import { intrinsicsToFlags } from "./types" - -/** - * Callback called regularly while the VM executes code. - * Determines if a VM's execution should be interrupted. - * - * @returns `true` to interrupt JS execution inside the VM. - * @returns `false` or `undefined` to continue JS execution inside the VM. - */ -export type InterruptHandler = (runtime: QuickJSRuntime) => boolean | undefined | void - -/** - * Used as an optional for the results of executing pendingJobs. - * On success, `value` contains the number of async jobs executed - * by the runtime. - * @source - */ -export type ExecutePendingJobsResult = DisposableResult< - /** Number of jobs successfully executed. */ - number, - /** The error that occurred. */ - QuickJSHandle & { - /** The context where the error occurred. */ - context: QuickJSContext - } -> - -/** - * A runtime represents a Javascript runtime corresponding to an object heap. - * Several runtimes can exist at the same time but they cannot exchange objects. - * Inside a given runtime, no multi-threading is supported. - * - * You can think of separate runtimes like different domains in a browser, and - * the contexts within a runtime like the different windows open to the same - * domain. - * - * Create a runtime via {@link QuickJSWASMModule.newRuntime}. - * - * You should create separate runtime instances for untrusted code from - * different sources for isolation. However, stronger isolation is also - * available (at the cost of memory usage), by creating separate WebAssembly - * modules to further isolate untrusted code. - * See {@link newQuickJSWASMModule}. - * - * Implement memory and CPU constraints with {@link setInterruptHandler} - * (called regularly while the interpreter runs), {@link setMemoryLimit}, and - * {@link setMaxStackSize}. - * Use {@link computeMemoryUsage} or {@link dumpMemoryUsage} to guide memory limit - * tuning. - * - * Configure ES module loading with {@link setModuleLoader}. - */ -export class QuickJSRuntime extends UsingDisposable implements Disposable { - /** - * If this runtime was created as as part of a context, points to the context - * associated with the runtime. - * - * If this runtime was created stand-alone, this may or may not contain a context. - * A context here may be allocated if one is needed by the runtime, eg for {@link computeMemoryUsage}. - */ - public context: QuickJSContext | undefined - - /** @private */ - protected module: EitherModule - /** @private */ - protected memory: ModuleMemory - /** @private */ - protected ffi: EitherFFI - /** @private */ - protected rt: Lifetime - /** @private */ - protected callbacks: QuickJSModuleCallbacks - /** @private */ - protected scope = new Scope() - - /** @private */ - protected contextMap = new Map() - /** @private */ - protected moduleLoader: JSModuleLoader | undefined - /** @private */ - protected moduleNormalizer: JSModuleNormalizer | undefined - - /** @private */ - constructor(args: { - module: EitherModule - ffi: EitherFFI - rt: Lifetime - callbacks: QuickJSModuleCallbacks - ownedLifetimes?: Disposable[] - }) { - super() - args.ownedLifetimes?.forEach((lifetime) => this.scope.manage(lifetime)) - this.module = args.module - this.memory = new ModuleMemory(this.module) - this.ffi = args.ffi - this.rt = args.rt - this.callbacks = args.callbacks - this.scope.manage(this.rt) - this.callbacks.setRuntimeCallbacks(this.rt.value, this.cToHostCallbacks) - - this.executePendingJobs = this.executePendingJobs.bind(this) - - if (QTS_DEBUG) { - this.setDebugMode(true) - } - } - - get alive() { - return this.scope.alive - } - - dispose() { - return this.scope.dispose() - } - - /** - * Create a new context within this runtime. Contexts have isolated globals, - * but you can explicitly share objects between contexts with the same - * runtime. - * - * You should dispose a created context before disposing this runtime. - */ - newContext(options: ContextOptions = {}): QuickJSContext { - const intrinsics = intrinsicsToFlags(options.intrinsics) - const ctx = new Lifetime( - options.contextPointer || this.ffi.QTS_NewContext(this.rt.value, intrinsics), - undefined, - (ctx_ptr) => { - this.contextMap.delete(ctx_ptr) - this.callbacks.deleteContext(ctx_ptr) - this.ffi.QTS_FreeContext(ctx_ptr) - }, - ) - - const context = new QuickJSContext({ - module: this.module, - ctx, - ffi: this.ffi, - rt: this.rt, - ownedLifetimes: options.ownedLifetimes, - runtime: this, - callbacks: this.callbacks, - }) - this.contextMap.set(ctx.value, context) - - return context - } - - /** - * Set the loader for EcmaScript modules requested by any context in this - * runtime. - * - * The loader can be removed with {@link removeModuleLoader}. - */ - setModuleLoader(moduleLoader: JSModuleLoader, moduleNormalizer?: JSModuleNormalizer): void { - this.moduleLoader = moduleLoader - this.moduleNormalizer = moduleNormalizer - this.ffi.QTS_RuntimeEnableModuleLoader(this.rt.value, this.moduleNormalizer ? 1 : 0) - } - - /** - * Remove the the loader set by {@link setModuleLoader}. This disables module loading. - */ - removeModuleLoader(): void { - this.moduleLoader = undefined - this.ffi.QTS_RuntimeDisableModuleLoader(this.rt.value) - } - - // Runtime management ------------------------------------------------------- - - /** - * In QuickJS, promises and async functions create pendingJobs. These do not execute - * immediately and need to be run by calling {@link executePendingJobs}. - * - * @return true if there is at least one pendingJob queued up. - */ - hasPendingJob(): boolean { - return Boolean(this.ffi.QTS_IsJobPending(this.rt.value)) - } - - private interruptHandler: InterruptHandler | undefined - - /** - * Set a callback which is regularly called by the QuickJS engine when it is - * executing code. This callback can be used to implement an execution - * timeout. - * - * The interrupt handler can be removed with {@link removeInterruptHandler}. - */ - setInterruptHandler(cb: InterruptHandler) { - const prevInterruptHandler = this.interruptHandler - this.interruptHandler = cb - if (!prevInterruptHandler) { - this.ffi.QTS_RuntimeEnableInterruptHandler(this.rt.value) - } - } - - /** - * Remove the interrupt handler, if any. - * See {@link setInterruptHandler}. - */ - removeInterruptHandler() { - if (this.interruptHandler) { - this.ffi.QTS_RuntimeDisableInterruptHandler(this.rt.value) - this.interruptHandler = undefined - } - } - - /** - * Execute pendingJobs on the runtime until `maxJobsToExecute` jobs are - * executed (default all pendingJobs), the queue is exhausted, or the runtime - * encounters an exception. - * - * In QuickJS, promises and async functions *inside the runtime* create - * pendingJobs. These do not execute immediately and need to triggered to run. - * - * @param maxJobsToExecute - When negative, run all pending jobs. Otherwise execute - * at most `maxJobsToExecute` before returning. - * - * @return On success, the number of executed jobs. On error, the exception - * that stopped execution, and the context it occurred in. Note that - * executePendingJobs will not normally return errors thrown inside async - * functions or rejected promises. Those errors are available by calling - * {@link QuickJSContext#resolvePromise} on the promise handle returned by the async function. - */ - executePendingJobs(maxJobsToExecute: number | void = -1): ExecutePendingJobsResult { - const ctxPtrOut = this.memory.newMutablePointerArray(1) - const valuePtr = this.ffi.QTS_ExecutePendingJob( - this.rt.value, - maxJobsToExecute ?? -1, - ctxPtrOut.value.ptr, - ) - - const ctxPtr = ctxPtrOut.value.typedArray[0] as JSContextPointer - ctxPtrOut.dispose() - if (ctxPtr === 0) { - // No jobs executed. - this.ffi.QTS_FreeValuePointerRuntime(this.rt.value, valuePtr) - return DisposableResult.success(0) - } - - const context = - this.contextMap.get(ctxPtr) ?? - this.newContext({ - contextPointer: ctxPtr, - }) - - const resultValue = context.getMemory(this.rt.value).heapValueHandle(valuePtr) - const typeOfRet = context.typeof(resultValue) - if (typeOfRet === "number") { - const executedJobs = context.getNumber(resultValue) - resultValue.dispose() - return DisposableResult.success(executedJobs) - } else { - const error = Object.assign(resultValue as QuickJSHandle, { context }) - return DisposableResult.fail(error, (error) => context.unwrapResult(error)) - } - } - - /** - * Set the max memory this runtime can allocate. - * To remove the limit, set to `-1`. - */ - setMemoryLimit(limitBytes: number) { - if (limitBytes < 0 && limitBytes !== -1) { - throw new Error("Cannot set memory limit to negative number. To unset, pass -1") - } - - this.ffi.QTS_RuntimeSetMemoryLimit(this.rt.value, limitBytes) - } - - /** - * Compute memory usage for this runtime. Returns the result as a handle to a - * JSValue object. Use {@link QuickJSContext#dump} to convert to a native object. - * Calling this method will allocate more memory inside the runtime. The information - * is accurate as of just before the call to `computeMemoryUsage`. - * For a human-digestible representation, see {@link dumpMemoryUsage}. - */ - computeMemoryUsage(): QuickJSHandle { - const serviceContextMemory = this.getSystemContext().getMemory(this.rt.value) - return serviceContextMemory.heapValueHandle( - this.ffi.QTS_RuntimeComputeMemoryUsage(this.rt.value, serviceContextMemory.ctx.value), - ) - } - - /** - * @returns a human-readable description of memory usage in this runtime. - * For programmatic access to this information, see {@link computeMemoryUsage}. - */ - dumpMemoryUsage(): string { - return this.memory.consumeHeapCharPointer(this.ffi.QTS_RuntimeDumpMemoryUsage(this.rt.value)) - } - - /** - * Set the max stack size for this runtime, in bytes. - * To remove the limit, set to `0`. - */ - setMaxStackSize(stackSize: number) { - if (stackSize < 0) { - throw new Error("Cannot set memory limit to negative number. To unset, pass 0.") - } - - this.ffi.QTS_RuntimeSetMaxStackSize(this.rt.value, stackSize) - } - - /** - * Assert that `handle` is owned by this runtime. - * @throws QuickJSWrongOwner if owned by a different runtime. - */ - assertOwned(handle: QuickJSHandle) { - if (handle.owner && handle.owner.rt !== this.rt) { - throw new QuickJSWrongOwner( - `Handle is not owned by this runtime: ${handle.owner.rt.value} != ${this.rt.value}`, - ) - } - } - - private _debugMode = false - - /** - * Enable or disable debug logging. - * - * If this module is a DEBUG variant, more logs will be printed from the C - * code. - */ - setDebugMode(enabled: boolean) { - this._debugMode = enabled - if (this.ffi.DEBUG && this.rt.alive) { - this.ffi.QTS_SetDebugLogEnabled(this.rt.value, enabled ? 1 : 0) - } - } - - /** - * @returns true if debug logging is enabled - */ - isDebugMode(): boolean { - return this._debugMode - } - - /** - * In debug mode, log the result of calling `msg()`. - * - * We take a function instead of a log message to avoid expensive string - * manipulation if debug logging is disabled. - */ - debugLog(...msg: unknown[]) { - if (this._debugMode) { - console.log("quickjs-emscripten:", ...msg) - } - } - - /** @private */ - [Symbol.for("nodejs.util.inspect.custom")]() { - if (!this.alive) { - return `${this.constructor.name} { disposed }` - } - return `${this.constructor.name} { rt: ${this.rt.value} }` - } - - private getSystemContext() { - if (!this.context) { - // We own this context and should dispose of it. - this.context = this.scope.manage(this.newContext()) - } - return this.context - } - - private cToHostCallbacks: RuntimeCallbacks = { - shouldInterrupt: (rt) => { - if (rt !== this.rt.value) { - throw new Error("QuickJSContext instance received C -> JS interrupt with mismatched rt") - } - - const fn = this.interruptHandler - if (!fn) { - throw new Error("QuickJSContext had no interrupt handler") - } - - return fn(this) ? 1 : 0 - }, - - loadModuleSource: maybeAsyncFn(this, function* (awaited, rt, ctx, moduleName) { - const moduleLoader = this.moduleLoader - if (!moduleLoader) { - throw new Error("Runtime has no module loader") - } - - if (rt !== this.rt.value) { - throw new Error("Runtime pointer mismatch") - } - - const context = - this.contextMap.get(ctx) ?? - this.newContext({ - contextPointer: ctx, - }) - - try { - const result = yield* awaited(moduleLoader(moduleName, context)) - - if (typeof result === "object" && "error" in result && result.error) { - this.debugLog("cToHostLoadModule: loader returned error", result.error) - throw result.error - } - - const moduleSource = - typeof result === "string" ? result : "value" in result ? result.value : result - - return this.memory.newHeapCharPointer(moduleSource).value.ptr - } catch (error) { - this.debugLog("cToHostLoadModule: caught error", error) - context.throw(error as any) - return 0 as BorrowedHeapCharPointer - } - }), - - normalizeModule: maybeAsyncFn( - this, - function* (awaited, rt, ctx, baseModuleName, moduleNameRequest) { - const moduleNormalizer = this.moduleNormalizer - if (!moduleNormalizer) { - throw new Error("Runtime has no module normalizer") - } - - if (rt !== this.rt.value) { - throw new Error("Runtime pointer mismatch") - } - - const context: QuickJSContext = - this.contextMap.get(ctx) ?? - this.newContext({ - /* TODO: Does this happen? Are we responsible for disposing? I don't think so */ - contextPointer: ctx, - }) - - try { - const result = yield* awaited( - moduleNormalizer(baseModuleName, moduleNameRequest, context), - ) - - if (typeof result === "object" && "error" in result && result.error) { - this.debugLog("cToHostNormalizeModule: normalizer returned error", result.error) - throw result.error - } - - const name = typeof result === "string" ? result : result.value - return context.getMemory(this.rt.value).newHeapCharPointer(name).value.ptr - } catch (error) { - this.debugLog("normalizeModule: caught error", error) - context.throw(error as any) - return 0 as BorrowedHeapCharPointer - } - }, - ), - } -} diff --git a/packages/quickjs-emscripten-core/src/types.ts b/packages/quickjs-emscripten-core/src/types.ts deleted file mode 100644 index a56849140..000000000 --- a/packages/quickjs-emscripten-core/src/types.ts +++ /dev/null @@ -1,346 +0,0 @@ -import type { JSContextPointer, JSValueConstPointer, JSValuePointer } from "@jitl/quickjs-ffi-types" -import { EvalFlags, GetOwnPropertyNamesFlags, IntrinsicsFlags } from "@jitl/quickjs-ffi-types" -import type { QuickJSContext } from "./context" -import type { SuccessOrFail, VmFunctionImplementation } from "./vm-interface" -import type { Disposable, Lifetime } from "./lifetime" -import type { QuickJSAsyncContext } from "./context-asyncify" -import type { InterruptHandler, QuickJSRuntime } from "./runtime" -import { QuickJSUnknownIntrinsic } from "./errors" - -/** - * A QuickJSHandle to a constant that will never change, and does not need to - * be disposed. - */ -export type StaticJSValue = Lifetime - -/** - * A QuickJSHandle to a borrowed value that does not need to be disposed. - * - * In QuickJS, a JSValueConst is a "borrowed" reference that isn't owned by the - * current scope. That means that the current scope should not `JS_FreeValue` - * it, or retain a reference to it after the scope exits, because it may be - * freed by its owner. - * - * quickjs-emscripten takes care of disposing JSValueConst references. - */ -export type JSValueConst = Lifetime - -/** - * A owned QuickJSHandle that should be disposed or returned. - * - * The QuickJS interpreter passes Javascript values between functions as - * `JSValue` structs that references some internal data. Because passing - * structs cross the Empscripten FFI interfaces is bothersome, we use pointers - * to these structs instead. - * - * A JSValue reference is "owned" in its scope. before exiting the scope, it - * should be freed, by calling `JS_FreeValue(ctx, js_value)`) or returned from - * the scope. We extend that contract - a JSValuePointer (`JSValue*`) must also - * be `free`d. - * - * You can do so from Javascript by calling the .dispose() method. - */ -export type JSValue = Lifetime -// | Lifetime - -/** - * Wraps a C pointer to a QuickJS JSValue, which represents a Javascript value inside - * a QuickJS virtual machine. - * - * Values must not be shared between QuickJSContext instances. - * You must dispose of any handles you create by calling the `.dispose()` method. - */ -export type QuickJSHandle = StaticJSValue | JSValue | JSValueConst - -export type JSModuleExport = - | { - type: "function" - name: string - implementation: (vm: QuickJSContext) => VmFunctionImplementation - } - | { type: "value"; name: string; value: (vm: QuickJSContext) => QuickJSHandle } - -export interface JSModuleDefinition { - name: string - exports: JSModuleExport[] -} - -export type JSModuleLoadSuccess = string -export type JSModuleLoadFailure = Error | QuickJSHandle -export type JSModuleLoadResult = - | JSModuleLoadSuccess - | SuccessOrFail - -export interface JSModuleLoaderAsync { - /** Load module (async) */ - ( - moduleName: string, - context: QuickJSAsyncContext, - ): JSModuleLoadResult | Promise -} -export interface JSModuleLoader { - /** Load module (sync) */ - (moduleName: string, context: QuickJSContext): JSModuleLoadResult -} - -export type JSModuleNormalizeSuccess = string -export type JSModuleNormalizeFailure = Error | QuickJSHandle -export type JSModuleNormalizeResult = - | JSModuleNormalizeSuccess - | SuccessOrFail - -export interface JSModuleNormalizerAsync { - ( - baseModuleName: string, - requestedName: string, - vm: QuickJSAsyncContext, - ): JSModuleNormalizeResult | Promise -} -export interface JSModuleNormalizer extends JSModuleNormalizerAsync { - (baseModuleName: string, requestedName: string, vm: QuickJSContext): JSModuleNormalizeResult -} - -type TODO = hint & typeHint & never - -const UnstableSymbol = Symbol("Unstable") - -export type PartiallyImplemented = never & - T & { - [UnstableSymbol]: "This feature may unimplemented, broken, throw errors, etc." - } - -export interface RuntimeOptionsBase { - interruptHandler?: InterruptHandler - maxStackSizeBytes?: number - memoryLimitBytes?: number - - promiseRejectionHandler?: TODO<"JSHostPromiseRejectionTracker"> - runtimeInfo?: TODO<"JS_SetRuntimeInfo", string> - gcThreshold?: TODO<"JS_SetGCThreshold", number> - sharedArrayBufferFunctions?: TODO< - "JS_SetJSSharedArrayBufferFunctions", - { sab_alloc: TODO; sab_free: TODO; sab_dup: TODO; sab_opaque: TODO } - > - - /** - * Extra lifetimes the runtime should dispose of after it is destroyed. - * @private - */ - ownedLifetimes?: Disposable[] -} - -export interface RuntimeOptions extends RuntimeOptionsBase { - moduleLoader?: JSModuleLoader -} - -export interface AsyncRuntimeOptions extends RuntimeOptionsBase { - moduleLoader?: JSModuleLoaderAsync | JSModuleLoader -} - -// This guy could be declared as Partial>, -// but it leads to bad docs. -/** - * Language features that can be enabled or disabled in a QuickJSContext. - * @see {@link ContextOptions} - */ -export type Intrinsics = { - BaseObjects?: boolean - Date?: boolean - Eval?: boolean - StringNormalize?: boolean - RegExp?: boolean - RegExpCompiler?: boolean - JSON?: boolean - Proxy?: boolean - MapSet?: boolean - TypedArrays?: boolean - Promise?: boolean - BigInt?: boolean - BigFloat?: boolean - BigDecimal?: boolean - OperatorOverloading?: boolean - BignumExt?: boolean -} - -type _Assert = U -type _intrinsicsHasKeysOfIntrinsicFlags = _Assert -type _intrinsicsHasKeysOfIntrinsicFlags2 = _Assert - -/** - * The default {@link Intrinsics} language features enabled in a QuickJSContext. - * @see {@link ContextOptions} - */ -export const DefaultIntrinsics = Object.freeze({ - BaseObjects: true, - Date: true, - Eval: true, - StringNormalize: true, - RegExp: true, - JSON: true, - Proxy: true, - MapSet: true, - TypedArrays: true, - Promise: true, -} as const satisfies Intrinsics) - -/** - * @private - */ -export function intrinsicsToFlags(intrinsics: Intrinsics | undefined): IntrinsicsFlags { - if (!intrinsics) { - return 0 as IntrinsicsFlags - } - - let result = 0 - for (const [maybeIntrinsicName, enabled] of Object.entries(intrinsics)) { - if (!(maybeIntrinsicName in IntrinsicsFlags)) { - throw new QuickJSUnknownIntrinsic(maybeIntrinsicName) - } - const intrinsicName = maybeIntrinsicName as keyof typeof IntrinsicsFlags - - if (enabled) { - result |= IntrinsicsFlags[intrinsicName] - } - } - return result as IntrinsicsFlags -} - -/** - * Options for creating a {@link QuickJSContext} or {@link QuickJSAsyncContext} - * Pass to {@link QuickJSRuntime#newContext}. - */ -export interface ContextOptions { - /** - * What built-in objects and language features to enable? - * If unset, the default intrinsics will be used. - * To omit all intrinsics, pass an empty array. - * - * To remove a specific intrinsic, but retain the other defaults, - * override it from {@link DefaultIntrinsics} - * ```ts - * const contextWithoutDateOrEval = runtime.newContext({ - * intrinsics: { - * ...DefaultIntrinsics, - * Date: false, - * } - * }) - * ``` - */ - intrinsics?: Intrinsics - - /** - * Wrap the provided context instead of constructing a new one. - * @private - */ - contextPointer?: JSContextPointer - - /** - * Extra lifetimes the context should dispose of after it is destroyed. - * @private - */ - ownedLifetimes?: Disposable[] -} - -export interface ContextEvalOptions { - /** - * Global code (default), or "module" code? - * - * - When type is `"global"`, the code is evaluated in the global scope of the QuickJSContext, and the return value is the result of the last expression. - * - When type is `"module"`, the code is evaluated is a module scope, may use `import`, `export`, and top-level `await`. The return value is the module's exports, or a promise for the module's exports. - */ - type?: "global" | "module" - /** Force "strict" mode */ - strict?: boolean - /** Force "strip" mode */ - strip?: boolean - /** - * compile but do not run. The result is an object with a - * JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed - * with JS_EvalFunction(). - */ - compileOnly?: boolean - /** don't include the stack frames before this eval in the Error() backtraces */ - backtraceBarrier?: boolean -} - -/** Convert {@link ContextEvalOptions} to a bitfield flags */ -export function evalOptionsToFlags(evalOptions: ContextEvalOptions | number | undefined): number { - if (typeof evalOptions === "number") { - return evalOptions - } - - if (evalOptions === undefined) { - return 0 - } - - const { type, strict, strip, compileOnly, backtraceBarrier } = evalOptions - let flags = 0 - if (type === "global") flags |= EvalFlags.JS_EVAL_TYPE_GLOBAL - if (type === "module") flags |= EvalFlags.JS_EVAL_TYPE_MODULE - if (strict) flags |= EvalFlags.JS_EVAL_FLAG_STRICT - if (strip) flags |= EvalFlags.JS_EVAL_FLAG_STRIP - if (compileOnly) flags |= EvalFlags.JS_EVAL_FLAG_COMPILE_ONLY - if (backtraceBarrier) flags |= EvalFlags.JS_EVAL_FLAG_BACKTRACE_BARRIER - return flags -} - -export interface GetOwnPropertyNamesOptions { - /** Include number properties like array indexes *as numbers* in the result. This is not standards-compliant */ - numbers?: boolean - /** Enable standards-compliant number properties. When set, `includeNumbers` is ignored. */ - numbersAsStrings?: boolean - /** Include strings in the result */ - strings?: boolean - /** Include symbols in the result */ - symbols?: boolean - /** Include implementation-specific private properties in the result */ - quickjsPrivate?: boolean - /** Only include the enumerable properties */ - onlyEnumerable?: boolean -} - -/** Convert {@link GetOwnPropertyNamesOptions} to bitfield flags */ -export function getOwnPropertyNamesOptionsToFlags( - options: GetOwnPropertyNamesOptions | GetOwnPropertyNamesFlags | undefined, -): GetOwnPropertyNamesFlags { - if (typeof options === "number") { - return options - } - - if (options === undefined) { - return 0 as GetOwnPropertyNamesFlags - } - - const { - strings: includeStrings, - symbols: includeSymbols, - quickjsPrivate: includePrivate, - onlyEnumerable, - numbers: includeNumbers, - numbersAsStrings, - } = options - let flags = 0 - if (includeStrings) flags |= GetOwnPropertyNamesFlags.JS_GPN_STRING_MASK - if (includeSymbols) flags |= GetOwnPropertyNamesFlags.JS_GPN_SYMBOL_MASK - if (includePrivate) flags |= GetOwnPropertyNamesFlags.JS_GPN_PRIVATE_MASK - if (onlyEnumerable) flags |= GetOwnPropertyNamesFlags.JS_GPN_ENUM_ONLY - if (includeNumbers) flags |= GetOwnPropertyNamesFlags.QTS_GPN_NUMBER_MASK - if (numbersAsStrings) flags |= GetOwnPropertyNamesFlags.QTS_STANDARD_COMPLIANT_NUMBER - - return flags as GetOwnPropertyNamesFlags -} - -export type PromiseExecutor = ( - resolve: (value: ResolveT | PromiseLike) => void, - reject: (reason: RejectT) => void, -) => void - -export function concat(...values: Array): T[] { - let result: T[] = [] - for (const value of values) { - if (value !== undefined) { - result = result.concat(value) - } - } - return result -} diff --git a/packages/quickjs-emscripten-core/src/vm-interface.ts b/packages/quickjs-emscripten-core/src/vm-interface.ts deleted file mode 100644 index 4fc944adc..000000000 --- a/packages/quickjs-emscripten-core/src/vm-interface.ts +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Used as an optional. - * `{ value: S } | { error: E }`. - */ -export type SuccessOrFail = - | { - value: S - error?: undefined - } - | { - error: F - } - -export function isSuccess(successOrFail: SuccessOrFail): successOrFail is { value: S } { - return "error" in successOrFail === false -} - -export function isFail(successOrFail: SuccessOrFail): successOrFail is { error: F } { - return "error" in successOrFail === true -} - -/** - * Used as an optional for results of a Vm call. - * `{ value: VmHandle } | { error: VmHandle }`. - */ -export type VmCallResult = SuccessOrFail - -/** - * A VmFunctionImplementation takes handles as arguments. - * It should return a handle, or be void. - * - * To indicate an exception, a VMs can throw either a handle (transferred - * directly) or any other Javascript value (only the poperties `name` and - * `message` will be transferred). Or, the VmFunctionImplementation may return - * a VmCallResult's `{ error: handle }` error variant. - * - * VmFunctionImplementation should not free its arguments or its return value. - * It should not retain a reference to its return value or thrown error. - */ -export type VmFunctionImplementation = ( - this: VmHandle, - ...args: VmHandle[] -) => VmHandle | VmCallResult | void - -/** - * A minimal interface to a Javascript execution environment. - * - * Higher-level tools should build over the LowLevelJavascriptVm interface to - * share as much as possible between executors. - * - * From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/ - */ -export interface LowLevelJavascriptVm { - global: VmHandle - undefined: VmHandle - - typeof(handle: VmHandle): string - - getNumber(handle: VmHandle): number - getString(handle: VmHandle): string - - newNumber(value: number): VmHandle - newString(value: string): VmHandle - newObject(prototype?: VmHandle): VmHandle - newFunction(name: string, value: VmFunctionImplementation): VmHandle - - // For accessing properties of objects - getProp(handle: VmHandle, key: string | VmHandle): VmHandle - setProp(handle: VmHandle, key: string | VmHandle, value: VmHandle): void - defineProp( - handle: VmHandle, - key: string | VmHandle, - descriptor: VmPropertyDescriptor, - ): void - - callFunction(func: VmHandle, thisVal: VmHandle, ...args: VmHandle[]): VmCallResult - evalCode(code: string, filename?: string): VmCallResult -} - -/** - * From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/ - */ -export interface VmPropertyDescriptor { - value?: VmHandle - configurable?: boolean - enumerable?: boolean - get?: (this: VmHandle) => VmHandle - set?: (this: VmHandle, value: VmHandle) => void -} diff --git a/packages/quickjs-emscripten-core/tsconfig.build.json b/packages/quickjs-emscripten-core/tsconfig.build.json deleted file mode 100644 index 407f93165..000000000 --- a/packages/quickjs-emscripten-core/tsconfig.build.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@jitl/tsconfig/tsconfig.json", - "include": ["src/**/*"], - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "paths": {} - } -} diff --git a/packages/quickjs-emscripten-core/tsconfig.json b/packages/quickjs-emscripten-core/tsconfig.json deleted file mode 100644 index 66f2a6a32..000000000 --- a/packages/quickjs-emscripten-core/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@jitl/tsconfig/tsconfig.json", - "include": ["src/**/*"], - "compilerOptions": { - "paths": { - "@jitl/quickjs-ffi-types": ["../quickjs-ffi-types/src"], - "@jitl/quickjs-ffi-types/*": ["../quickjs-ffi-types/src/*"] - } - } -} diff --git a/packages/quickjs-emscripten-core/tsup.config.ts b/packages/quickjs-emscripten-core/tsup.config.ts deleted file mode 100644 index 91dc5f581..000000000 --- a/packages/quickjs-emscripten-core/tsup.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" - -export default extendConfig({ - tsconfig: "./tsconfig.build.json", -}) diff --git a/packages/quickjs-emscripten-core/typedoc.js b/packages/quickjs-emscripten-core/typedoc.js deleted file mode 100644 index e124ab88c..000000000 --- a/packages/quickjs-emscripten-core/typedoc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: "../../typedoc.base.js", - entryPoints: ["./src/index.ts"], -} diff --git a/packages/quickjs-emscripten-core/vite.config.mts b/packages/quickjs-emscripten-core/vite.config.mts deleted file mode 100644 index b8036c096..000000000 --- a/packages/quickjs-emscripten-core/vite.config.mts +++ /dev/null @@ -1,2 +0,0 @@ -import config from "@jitl/tsconfig/vite.base.config.mjs" -export default config diff --git a/packages/quickjs-emscripten/.gitignore b/packages/quickjs-emscripten/.gitignore deleted file mode 100644 index afbe45a27..000000000 --- a/packages/quickjs-emscripten/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -.output diff --git a/packages/quickjs-emscripten/LICENSE b/packages/quickjs-emscripten/LICENSE deleted file mode 100644 index 22f51c713..000000000 --- a/packages/quickjs-emscripten/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/quickjs-emscripten/makeTestPackageJson.ts b/packages/quickjs-emscripten/makeTestPackageJson.ts deleted file mode 100755 index d92f2bf01..000000000 --- a/packages/quickjs-emscripten/makeTestPackageJson.ts +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env -S npx tsx -import fs from "node:fs" -import pkg from "./package.json" -import update from "./node.package.json" -const newPkg = { ...pkg, ...update } -fs.writeFileSync(".output/package.json", JSON.stringify(newPkg, null, 2)) diff --git a/packages/quickjs-emscripten/node.package.json b/packages/quickjs-emscripten/node.package.json deleted file mode 100644 index c2411ba15..000000000 --- a/packages/quickjs-emscripten/node.package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "imports": { - "#variants": "./variants.js" - } -} diff --git a/packages/quickjs-emscripten/package.json b/packages/quickjs-emscripten/package.json deleted file mode 100644 index e0c736768..000000000 --- a/packages/quickjs-emscripten/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "quickjs-emscripten", - "version": "0.31.0", - "sideEffects": false, - "license": "MIT", - "type": "commonjs", - "keywords": [ - "eval", - "quickjs", - "vm", - "interpreter", - "runtime", - "safe", - "emscripten", - "wasm" - ], - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "files": [ - "LICENSE", - "dist/**/*", - "!dist/*.test.js", - "!dist/*.tsbuildinfo" - ], - "scripts": { - "build": "npx tsup", - "clean": "git clean -fx dist .output", - "tsc": "npx tsc -p . --noEmit", - "test:vi": "VITEST=1 npx vitest run", - "test:node": "npx tsc -p tsconfig.build.json && ./makeTestPackageJson.ts && node --experimental-import-meta-resolve -r source-map-support/register --test ./.output/*node-test*.*js", - "test": "npm run test:vi && npm run test:node" - }, - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - }, - "./variants": { - "types": "./dist/variants.d.ts", - "import": "./dist/variants.mjs", - "require": "./dist/variants.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@jitl/quickjs-wasmfile-debug-asyncify": "workspace:*", - "@jitl/quickjs-wasmfile-debug-sync": "workspace:*", - "@jitl/quickjs-wasmfile-release-asyncify": "workspace:*", - "@jitl/quickjs-wasmfile-release-sync": "workspace:*", - "quickjs-emscripten-core": "workspace:*" - }, - "devDependencies": { - "@jitl/quickjs-singlefile-cjs-release-asyncify": "workspace:*", - "@jitl/quickjs-singlefile-cjs-release-sync": "workspace:*" - }, - "engines": { - "node": ">=16.0.0" - } -} diff --git a/packages/quickjs-emscripten/src/index.ts b/packages/quickjs-emscripten/src/index.ts deleted file mode 100644 index 4e856fc46..000000000 --- a/packages/quickjs-emscripten/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "quickjs-emscripten-core" -export * from "#variants" -export * from "./mod.js" diff --git a/packages/quickjs-emscripten/src/leak.test.ts b/packages/quickjs-emscripten/src/leak.test.ts deleted file mode 100644 index e3d099732..000000000 --- a/packages/quickjs-emscripten/src/leak.test.ts +++ /dev/null @@ -1,192 +0,0 @@ -import assert from "assert" -import { beforeEach, it, describe } from "vitest" -import type { QuickJSWASMModule } from "." -import { - getQuickJS, - newQuickJSAsyncWASMModule, - newQuickJSWASMModule, - DEBUG_ASYNC, - DEBUG_SYNC, - memoizePromiseFactory as memoizeNewModule, -} from "." - -const TEST_LEAK = Boolean(process.env.TEST_LEAK) -const testOptions = { - timeout: Infinity, -} - -function checkModuleForLeaks(getModule: () => Promise) { - let wasmModule: QuickJSWASMModule - - beforeEach(async function () { - wasmModule = await getModule() - const ffi = wasmModule.getFFI() - if (!ffi.QTS_BuildIsSanitizeLeak()) { - console.warn("Note: leak sanitizer not enabled in this build.") - } - }) - - it( - "if DEBUG and not ASYNCIFY, should have sanitizer.", - () => { - const ffi = wasmModule.getFFI() - if (ffi.QTS_BuildIsSanitizeLeak()) { - // Ok! sanitizer enabled - return - } - - if (ffi.QTS_BuildIsDebug() && !ffi.QTS_BuildIsAsyncify()) { - assert.fail("Sanitizer should be enabled in sync debug build.") - } - }, - testOptions, - ) - - const DURATION_MS = TEST_LEAK ? 10 * 1000 : 100 - const MAX_ITERATIONS = 1000 - const PASSED_RECENTLY: Array = ["runtime", "runtimeContext"] - const PRIORITY: Array = ["eval", "dumpEval"] - - const checks = { - runtime() { - const rt = wasmModule.newRuntime() - rt.dispose() - }, - runtimeContext() { - const rt = wasmModule.newRuntime() - const ctx = rt.newContext() - ctx.dispose() - rt.dispose() - }, - moduleContext() { - const ctx = wasmModule.newContext() - ctx.dispose() - }, - newString() { - const ctx = wasmModule.newContext() - const longString = "a".repeat(1024 * 1024) - const string = ctx.newString(longString) - string.dispose() - ctx.dispose() - }, - getString() { - const ctx = wasmModule.newContext() - const longString = "a".repeat(1024 * 1024) - const string = ctx.newString(longString) - ctx.getString(string) - string.dispose() - ctx.dispose() - }, - dumpString() { - const ctx = wasmModule.newContext() - const longString = "a".repeat(1024 * 1024) - const string = ctx.newString(longString) - ctx.dump(string) - string.dispose() - ctx.dispose() - }, - newNumber() { - const ctx = wasmModule.newContext() - const number = ctx.newNumber(42) - number.dispose() - ctx.dispose() - }, - getNumber() { - const ctx = wasmModule.newContext() - const number = ctx.newNumber(42) - ctx.getNumber(number) - number.dispose() - ctx.dispose() - }, - dumpNumber() { - const ctx = wasmModule.newContext() - const number = ctx.newNumber(42) - ctx.dump(number) - number.dispose() - ctx.dispose() - }, - eval() { - const ctx = wasmModule.newContext() - const arrayValue = "[" + '"a",'.repeat(1024) + "]" - const result = ctx.evalCode(arrayValue) - ctx.unwrapResult(result).dispose() - ctx.dispose() - }, - dumpEval() { - const ctx = wasmModule.newContext() - const arrayValue = "[" + '"a",'.repeat(1024) + "]" - const result = ctx.evalCode(arrayValue) - const handle = ctx.unwrapResult(result) - ctx.dump(handle) - handle.dispose() - ctx.dispose() - }, - } - - const checkNames = Object.keys(checks) as Array - checkNames.sort((a, b) => { - if (PRIORITY.includes(a) && PRIORITY.includes(b)) { - return 0 - } - - if (PRIORITY.includes(a)) { - return -1 - } - - if (PRIORITY.includes(b)) { - return 1 - } - - const aIndex = PASSED_RECENTLY.indexOf(a) - const bIndex = PASSED_RECENTLY.indexOf(b) - return aIndex - bIndex - }) - - for (const checkName of checkNames) { - const fn = checks[checkName as keyof typeof checks] - const test = TEST_LEAK ? it : it.skip - test( - `should not leak: ${checkName}`, - () => { - console.log(`Running ${checkName}...`) - const startedAt = Date.now() - let i = 0 - for (; i < MAX_ITERATIONS; i++) { - fn() - if (i > 1 && Date.now() - startedAt > DURATION_MS) { - break - } - } - - console.log(i, "iterations,", i / DURATION_MS, "iterations/ms") - - const didLeak = wasmModule.getFFI().QTS_RecoverableLeakCheck() - assert.strictEqual(didLeak, 0, "no leaks") - }, - testOptions, - ) - } -} - -describe("Leak checks (most accurate with debug build)", function () { - describe("DEBUG sync module", function () { - const loader = memoizeNewModule(() => newQuickJSWASMModule(DEBUG_SYNC)) - checkModuleForLeaks(loader) - }) - - describe("RELEASE sync module", function () { - checkModuleForLeaks(getQuickJS) - }) - - describe.skip("DEBUG async module", function () { - const loader = memoizeNewModule(() => newQuickJSAsyncWASMModule(DEBUG_ASYNC)) - checkModuleForLeaks(loader) - }) - - // Leaving this enabled, but note that we now disable - // leak sanitizer for ASYNCIFY since it's not reliable. - describe("RELEASE async module", function () { - const loader = memoizeNewModule(() => newQuickJSAsyncWASMModule()) - checkModuleForLeaks(loader) - }) -}) diff --git a/packages/quickjs-emscripten/src/mod.ts b/packages/quickjs-emscripten/src/mod.ts deleted file mode 100644 index 84cfba517..000000000 --- a/packages/quickjs-emscripten/src/mod.ts +++ /dev/null @@ -1,79 +0,0 @@ -import type { - AsyncRuntimeOptions, - ContextOptions, - QuickJSAsyncContext, - QuickJSAsyncRuntime, - QuickJSWASMModule, -} from "quickjs-emscripten-core" -import { newQuickJSAsyncWASMModule, newQuickJSWASMModule } from "#variants" - -let singleton: QuickJSWASMModule | undefined = undefined -let singletonPromise: Promise | undefined = undefined - -/** - * Get a shared singleton {@link QuickJSWASMModule}. Use this to evaluate code - * or create Javascript environments. - * - * This is the top-level entrypoint for the quickjs-emscripten library. - * - * If you need strictest possible isolation guarantees, you may create a - * separate {@link QuickJSWASMModule} via {@link newQuickJSWASMModule}. - * - * To work with the asyncified version of this library, see these functions: - * - * - {@link newAsyncRuntime}. - * - {@link newAsyncContext}. - * - {@link newQuickJSAsyncWASMModule}. - */ -export async function getQuickJS(): Promise { - singletonPromise ??= newQuickJSWASMModule().then((instance) => { - singleton = instance - return instance - }) - return await singletonPromise -} - -/** - * Provides synchronous access to the shared {@link QuickJSWASMModule} instance returned by {@link getQuickJS}, as long as - * least once. - * @throws If called before `getQuickJS` resolves. - */ -export function getQuickJSSync(): QuickJSWASMModule { - if (!singleton) { - throw new Error("QuickJS not initialized. Await getQuickJS() at least once.") - } - return singleton -} - -/** - * Create a new {@link QuickJSAsyncRuntime} in a separate WebAssembly module. - * - * Each runtime is isolated in a separate WebAssembly module, so that errors in - * one runtime cannot contaminate another runtime, and each runtime can execute - * an asynchronous action without conflicts. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - */ -export async function newAsyncRuntime(options?: AsyncRuntimeOptions): Promise { - const module = await newQuickJSAsyncWASMModule() - return module.newRuntime(options) -} - -/** - * Create a new {@link QuickJSAsyncContext} (with an associated runtime) in an - * separate WebAssembly module. - * - * Each context is isolated in a separate WebAssembly module, so that errors in - * one runtime cannot contaminate another runtime, and each runtime can execute - * an asynchronous action without conflicts. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - */ -export async function newAsyncContext(options?: ContextOptions): Promise { - const module = await newQuickJSAsyncWASMModule() - return module.newContext(options) -} diff --git a/packages/quickjs-emscripten/src/package.test.ts b/packages/quickjs-emscripten/src/package.test.ts deleted file mode 100644 index d090333c7..000000000 --- a/packages/quickjs-emscripten/src/package.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { assert, test } from "vitest" -import packageJson from "../package.json" - -test("all export subpaths start with ./", () => { - for (const [name, mappings] of Object.entries(packageJson.exports)) { - if (typeof mappings === "string") { - assert.isTrue( - mappings.startsWith("./"), - `package.json export "${name}" points to ${mappings}, but it doesn't start with ./`, - ) - continue - } - - for (const [condition, subpath] of Object.entries(mappings)) { - assert.isTrue( - subpath.startsWith("./"), - `package.json export "${name}" condition ${condition} subpath ${subpath} does not start with ./`, - ) - } - } -}) diff --git a/packages/quickjs-emscripten/src/quickjs-in-quickjs-node-test.mts b/packages/quickjs-emscripten/src/quickjs-in-quickjs-node-test.mts deleted file mode 100644 index afb075ddd..000000000 --- a/packages/quickjs-emscripten/src/quickjs-in-quickjs-node-test.mts +++ /dev/null @@ -1,264 +0,0 @@ -import fs from "node:fs" -import util from "node:util" -import module from "node:module" -import { test } from "node:test" -import path from "node:path" -import assert from "node:assert" -import { getQuickJS } from "./index.js" -import type { JSModuleLoader, JSModuleNormalizer, QuickJSHandle, QuickJSContext } from "./index.js" - -const DEBUG = true - -const ttyLog = (...args: unknown[]) => { - if (DEBUG) { - console.error("[DEBUG]", util.format(...args)) - } -} - -const QuickJS = await getQuickJS() - -function addConsoleGlobal(context: QuickJSContext, logOfLogs: any[]) { - const consoleHandle = context.newObject() - const log = context.newFunction("log", (...args: QuickJSHandle[]) => { - const logged = args.map((arg) => context.dump(arg)) - logOfLogs.push(logged) - ttyLog(...logged) - }) - context.setProp(consoleHandle, "log", log) - context.setProp(consoleHandle, "error", log) - context.setProp(context.global, "console", consoleHandle) - log.dispose() - consoleHandle.dispose() -} - -function* pathAncestors(filepath: string) { - yield filepath - while (filepath !== "/") { - filepath = path.dirname(filepath) - yield filepath - } -} - -class QuickJSNodeModuleLoader { - static convertPath(filepath: string, mountPoints: Map) { - filepath = path.normalize(filepath) - for (const dirname of pathAncestors(filepath)) { - const mappedDirname = mountPoints.get(dirname) - if (!mappedDirname) { - continue - } - return mappedDirname + filepath.slice(dirname.length) - } - return undefined - } - - require = module.createRequire(import.meta.url) - hostToGuest = new Map() - guestToHost = new Map() - - mount(args: { hostPath: string; guestPath: string }) { - const guestPath = path.normalize(args.guestPath) - if (!path.isAbsolute(guestPath)) { - throw new Error("guestPath must be absolute") - } - - const hostPath = fs.realpathSync(args.hostPath) - this.hostToGuest.set(hostPath, guestPath) - this.guestToHost.set(guestPath, hostPath) - - ttyLog("mount", { hostPath, guestPath }) - } - - mountImport(args: { hostImport: string; guestImport: string; direct?: true }) { - const hostFile = this.require.resolve(args.hostImport).replace(".js", ".mjs") - this.mount({ - hostPath: args.direct ? hostFile : path.dirname(hostFile), - guestPath: "/node_modules/" + args.guestImport, - }) - } - - toGuestPath(hostPath: string) { - return QuickJSNodeModuleLoader.convertPath(hostPath, this.hostToGuest) - } - - toHostPath(guestPath: string) { - return QuickJSNodeModuleLoader.convertPath(guestPath, this.guestToHost) - } - - jsModuleNormalizer: JSModuleNormalizer = (baseModuleName, requestedName, _context) => { - if (path.isAbsolute(requestedName)) { - ttyLog("absolute", requestedName) - return path.normalize(requestedName) - } - - if (requestedName.startsWith(".")) { - const resolved = path.resolve(path.dirname(baseModuleName), requestedName) - ttyLog("relative", { resolved, baseModuleName, requestedName }) - return path.normalize(resolved) - } - - const resolved = path.resolve("/node_modules/", requestedName) - ttyLog("node_modules", { resolved, baseModuleName, requestedName }) - return path.normalize(resolved) - } - - jsModuleLoader: JSModuleLoader = (moduleName, _context) => { - try { - const hostPath = this.toHostPath(moduleName) - if (hostPath) { - return fs.readFileSync(hostPath, "utf8") - } - throw new Error("Not found") - } catch (error) { - ttyLog("QuickJSNodeModuleLoader.loader error:", { moduleName, error }) - return { - error: Error(`Not found: ${moduleName}`), - } - } - } -} - -test("quickjs-for-quickjs", async () => { - const moduleLoader = new QuickJSNodeModuleLoader() - moduleLoader.mountImport({ - hostImport: "quickjs-emscripten-core", - guestImport: "quickjs-emscripten-core", - }) - moduleLoader.mountImport({ - hostImport: "@jitl/quickjs-asmjs-mjs-release-sync", - guestImport: "@jitl/quickjs-asmjs-mjs-release-sync", - }) - moduleLoader.mountImport({ - hostImport: "@jitl/quickjs-ffi-types", - guestImport: "@jitl/quickjs-ffi-types", - direct: true, - }) - - const runtime = QuickJS.newRuntime() - runtime.setModuleLoader(moduleLoader.jsModuleLoader, moduleLoader.jsModuleNormalizer) - - const context = runtime.newContext() - const logs: any[] = [] - addConsoleGlobal(context, logs) - - ttyLog("=== Starting quickjs-for-quickjs test ===") - - // First, let's test if simple async functions work - ttyLog("--- Test 1: Simple async function ---") - const simpleAsyncResult = context.evalCode( - ` -globalThis.simpleTest = (async () => { - console.log('async step 1') - await Promise.resolve() - console.log('async step 2') - return 42 -})() -`, - "/simple-async.mjs", - ) - context.unwrapResult(simpleAsyncResult).dispose() - - // Execute pending jobs and see how many were executed - let jobResult = runtime.executePendingJobs() - ttyLog("After simple async, executePendingJobs result:", jobResult) - ttyLog("Logs so far:", logs) - - // Check the Promise state - const simpleTestHandle = context.getProp(context.global, "simpleTest") - const simpleTestState = context.getPromiseState(simpleTestHandle) - ttyLog("simpleTest Promise state:", simpleTestState) - simpleTestHandle.dispose() - - // Now test the full scenario with more logging - ttyLog("--- Test 2: Full quickjs-for-quickjs ---") - const result = context.evalCode( - ` -import { newQuickJSWASMModuleFromVariant } from 'quickjs-emscripten-core/index.mjs' -import variant from '@jitl/quickjs-asmjs-mjs-release-sync/index.mjs' - -console.log('starting main code') -console.log('variant type:', typeof variant) -console.log('variant keys:', Object.keys(variant)) - -globalThis.done = (async () => { - try { - console.log('async function started') - - // Test what the variant loader returns - console.log('calling variant.importModuleLoader...') - const loaderPromise = variant.importModuleLoader() - console.log('importModuleLoader returned:', typeof loaderPromise) - - const loader = await loaderPromise - console.log('loader awaited, type:', typeof loader) - - console.log('calling loader()...') - const modulePromise = loader() - console.log('loader() returned:', typeof modulePromise) - - const wasmModule = await modulePromise - console.log('wasmModule awaited, type:', typeof wasmModule) - console.log('wasmModule.type:', wasmModule?.type) - - // Now create the full QuickJS instance - console.log('calling newQuickJSWASMModuleFromVariant...') - const QuickJS = await newQuickJSWASMModuleFromVariant(variant) - console.log('QuickJS created:', typeof QuickJS) - - const evalResult = QuickJS.evalCode('1+2') - console.log('inner result', evalResult) - - return evalResult - } catch (error) { - console.log('ERROR in async function:', String(error)) - console.log('ERROR stack:', error?.stack || 'no stack') - throw error - } -})() - -console.log('done promise created:', typeof globalThis.done) -`, - "/script.mjs", - ) - context.unwrapResult(result).dispose() - - // Execute pending jobs multiple times with logging - ttyLog("After evalCode, executing pending jobs...") - for (let i = 0; i < 10; i++) { - jobResult = runtime.executePendingJobs() - ttyLog(`executePendingJobs iteration ${i}:`, jobResult) - - // Check done Promise state - const doneHandle = context.getProp(context.global, "done") - const doneState = context.getPromiseState(doneHandle) - ttyLog(`done Promise state at iteration ${i}:`, doneState) - - if (doneState.type !== "pending") { - ttyLog("Promise resolved/rejected, stopping loop") - if (doneState.type === "fulfilled") { - const value = context.dump(doneState.value) - ttyLog("Fulfilled with:", value) - doneState.value.dispose() - } else if (doneState.type === "rejected") { - const error = context.dump(doneState.error) - ttyLog("Rejected with:", error) - doneState.error.dispose() - } - doneHandle.dispose() - break - } - doneHandle.dispose() - - // Small delay to let any host promises settle - await new Promise((resolve) => setTimeout(resolve, 10)) - } - - ttyLog("=== Final logs ===") - ttyLog("Logs array:", logs) - - // For now, just check that we eventually see "inner result" - const innerResultLog = logs.find((log: any[]) => log[0] === "inner result") - ttyLog("Looking for 'inner result' log:", innerResultLog) - assert.ok(innerResultLog, "Should have logged 'inner result'") - assert.strictEqual(innerResultLog[1], 3, "Inner result should be 3") -}) diff --git a/packages/quickjs-emscripten/src/quickjs.test.ts b/packages/quickjs-emscripten/src/quickjs.test.ts deleted file mode 100644 index f9fc2336c..000000000 --- a/packages/quickjs-emscripten/src/quickjs.test.ts +++ /dev/null @@ -1,1555 +0,0 @@ -/** - * These tests demonstrate some common patterns for using quickjs-emscripten. - */ - -import assert from "assert" -import fs from "fs" -import { inspect as baseInspect } from "node:util" -import { - describe, - beforeEach, - afterEach, - afterAll as after, - it, - expect, - onTestFailed, -} from "vitest" -import type { - QuickJSHandle, - InterruptHandler, - QuickJSDeferredPromise, - VmCallResult, - QuickJSFFI, - QuickJSAsyncFFI, - ContextOptions, -} from "." -import { - QuickJSContext, - QuickJSAsyncContext, - QuickJSWASMModule, - QuickJSRuntime, - QuickJSAsyncRuntime, - getQuickJS, - newQuickJSAsyncWASMModule, - newQuickJSWASMModule, - isFail, - DEBUG_ASYNC, - DEBUG_SYNC, - memoizePromiseFactory, - debugLog, - errors, - DefaultIntrinsics, - RELEASE_SYNC, - RELEASE_ASYNC, - newVariant, - shouldInterruptAfterDeadline, - Scope, - setDebugMode, -} from "." - -const TEST_SLOW = !process.env.TEST_FAST -const TEST_NG = TEST_SLOW && !process.env.TEST_NO_NG -const TEST_DEBUG = TEST_SLOW && !process.env.TEST_NO_DEBUG -const TEST_ASYNC = TEST_SLOW && !process.env.TEST_NO_ASYNC -const TEST_RELEASE = !process.env.TEST_NO_RELEASE -const DEBUG = Boolean(process.env.DEBUG) -console.log("test sets:", { - TEST_RELEASE, - TEST_DEBUG, - TEST_NG, - TEST_ASYNC, - TEST_SLOW, - DEBUG, -}) - -if (DEBUG) { - setDebugMode(true) -} - -type GetTestContext = (options?: ContextOptions) => Promise - -const baseIt = it -function contextTests(getContext: GetTestContext, isDebug = false) { - let vm: QuickJSContext = undefined as any - let ffi: QuickJSFFI | QuickJSAsyncFFI = undefined as any - let testId = 0 - let anyTestFailed = false - let thisTestFailed = false - - const it = (name: string, fn: (scope: Scope) => unknown) => - baseIt(name, async () => { - onTestFailed(() => { - anyTestFailed = true - }) - - try { - await Scope.withScopeAsync(async (scope) => { - await fn(scope) - }) - } catch (error) { - thisTestFailed = true - throw error - } - }) - - beforeEach(async () => { - testId++ - thisTestFailed = false - vm = await getContext() - ffi = (vm as any).ffi - assertBuildIsConsistent(vm) - }) - - afterEach(() => { - if (!thisTestFailed) { - // this will assert we disposed everything in the test - // however, if we failed we may not have disposed - vm.dispose() - } - vm = undefined as any - }) - - after(() => { - if (!ffi) { - return - } - - if (ffi.QTS_BuildIsAsyncify()) { - // Asyncify explodes during leak checking. - return - } - if (anyTestFailed) { - // we probably threw an error before disposing - return - } - // https://web.dev/webassembly-memory-debugging/ - assert.strictEqual(ffi.QTS_RecoverableLeakCheck(), 0, "No lsan errors") - debugLog("Leaks checked (OK)") - }) - - const getTestId = () => `test-${getContext.name}-${testId}` - - describe("primitives", () => { - it("can round-trip a number", () => { - const jsNumber = 42 - const numHandle = vm.newNumber(jsNumber) - assert.equal(vm.getNumber(numHandle), jsNumber) - numHandle.dispose() - }) - - it("can round-trip a bigint", () => { - const int = 2n ** 64n - const numHandle = vm.newBigInt(int) - assert.equal(vm.getBigInt(numHandle), int) - numHandle.dispose() - }) - - it("can dump a bigint", () => { - const int = 2n ** 64n - const numHandle = vm.newBigInt(int) - assert.equal(vm.dump(numHandle), int) - numHandle.dispose() - }) - - it("can round-trip a string", () => { - const jsString = "an example 🤔 string with unicode 🎉" - const stringHandle = vm.newString(jsString) - assert.equal(vm.getString(stringHandle), jsString) - stringHandle.dispose() - }) - - it("can round-trip a global symbol", () => { - const handle = vm.newSymbolFor("potatoes") - const dumped = vm.getSymbol(handle) - assert.equal(dumped, Symbol.for("potatoes")) - handle.dispose() - }) - - it("can round trip a unique symbol's description", () => { - const symbol = Symbol("cats") - const handle = vm.newUniqueSymbol(symbol) - const dumped = vm.getSymbol(handle) - assert.notStrictEqual(dumped, symbol) - assert.notStrictEqual(dumped, Symbol.for("cats")) - assert.equal(dumped.description, symbol.description) - handle.dispose() - }) - - it("can dump a symbol", () => { - const cows = Symbol.for("cows") - const birds = Symbol("birds") - - const handles = [vm.newSymbolFor(cows), vm.newUniqueSymbol(birds)] - - const [cowDump, birdDump] = handles.map((h) => vm.dump(h)) - - assert.strictEqual(cowDump, cows) - assert.strictEqual(birdDump.description, birds.description) - assert.notStrictEqual(birdDump, birds) - - handles.map((h) => h.dispose()) - }) - - it("can round-trip undefined", () => { - assert.strictEqual(vm.dump(vm.undefined), undefined) - }) - - it("can round-trip true", () => { - assert.strictEqual(vm.dump(vm.true), true) - }) - - it("can round-trip false", () => { - assert.strictEqual(vm.dump(vm.false), false) - }) - - it("can round-trip null", () => { - assert.strictEqual(vm.dump(vm.null), null) - }) - }) - - describe( - "functions", - () => { - it("can wrap a Javascript function and call it", () => { - const some = 9 - const fnHandle = vm.newFunction("addSome", (num) => { - return vm.newNumber(some + vm.getNumber(num)) - }) - const result = vm - .newNumber(1) - .consume((num) => vm.callFunction(fnHandle, vm.undefined, num)) - if (result.error) { - result.error.dispose() - assert.fail("calling fnHandle must succeed") - } - assert.equal(vm.getNumber(result.value), 10) - result.value.dispose() - fnHandle.dispose() - }) - - it("passes through native exceptions", () => { - const fnHandle = vm.newFunction("jsOops", () => { - throw new Error("oops") - }) - - const result = vm.callFunction(fnHandle, vm.undefined) - if (!result.error) { - assert.fail("function call must return error") - } - assert.deepEqual(vm.dump(result.error), { - name: "Error", - message: "oops", - }) - result.error.dispose() - fnHandle.dispose() - }) - - it("can return undefined twice", () => { - const fnHandle = vm.newFunction("returnUndef", () => { - return vm.undefined - }) - - vm.unwrapResult(vm.callFunction(fnHandle, vm.undefined)).dispose() - const result = vm.unwrapResult(vm.callFunction(fnHandle, vm.undefined)) - - assert.equal(vm.typeof(result), "undefined") - result.dispose() - fnHandle.dispose() - }) - - it("can see its arguments being cloned", () => { - let value: QuickJSHandle | undefined - - const fnHandle = vm.newFunction("doSomething", (arg) => { - value = arg.dup() - }) - - const argHandle = vm.newString("something") - const callHandle = vm.callFunction(fnHandle, vm.undefined, argHandle) - - argHandle.dispose() - vm.unwrapResult(callHandle).dispose() - - if (!value) throw new Error(`Value unset`) - - assert.equal(vm.getString(value), "something") - value.dispose() - - fnHandle.dispose() - }) - - const itForMaxFuns = isDebug && TEST_SLOW ? it : baseIt.skip - itForMaxFuns( - "can handle more than signed int max functions being registered", - () => - new Promise((done) => { - // test for unsigned func_id impl - - for (let i = 0; i < Math.pow(2, 16); i++) { - const funcID = i - const fnHandle = vm.newFunction(`__func-${i}`, () => { - return vm.newNumber(funcID) - }) - if (i % 1024 === 0) { - // spot check every 1024 funcs - const res = vm.unwrapResult(vm.callFunction(fnHandle, vm.undefined)) - const calledFuncID = vm.dump(res) - assert(calledFuncID === i) - res.dispose() - } - fnHandle.dispose() - } - done(undefined) - }), - ) - }, - { - // we need more time to register 2^16 functions - timeout: 30000, - }, - ) - - describe("properties", () => { - it("defining a property does not leak", () => { - vm.defineProp(vm.global, "Name", { - enumerable: false, - configurable: false, - get: () => vm.newString("World"), - }) - const result = vm.unwrapResult(vm.evalCode('"Hello " + Name')) - assert.equal(vm.dump(result), "Hello World") - result.dispose() - }) - }) - - describe("objects", () => { - it("can set and get properties by native string", () => { - const object = vm.newObject() - const value = vm.newNumber(42) - vm.setProp(object, "propName", value) - - const value2 = vm.getProp(object, "propName") - assert.equal(vm.getNumber(value2), 42) - - object.dispose() - value.dispose() - value2.dispose() - }) - - it("can set and get properties by handle string", () => { - const object = vm.newObject() - const key = vm.newString("prop as a QuickJS string") - const value = vm.newNumber(42) - vm.setProp(object, key, value) - - const value2 = vm.getProp(object, key) - assert.equal(vm.getNumber(value2), 42) - - object.dispose() - key.dispose() - value.dispose() - value2.dispose() - }) - - it("can create objects with a prototype", () => { - const defaultGreeting = vm.newString("SUP DAWG") - const greeterPrototype = vm.newObject() - vm.setProp(greeterPrototype, "greeting", defaultGreeting) - defaultGreeting.dispose() - const greeter = vm.newObject(greeterPrototype) - - // Gets something from the prototype - const getGreeting = vm.getProp(greeter, "greeting") - assert.equal(vm.getString(getGreeting), "SUP DAWG") - getGreeting.dispose() - - // But setting a property from the prototype does not modify the prototype - const newGreeting = vm.newString("How do you do?") - vm.setProp(greeter, "greeting", newGreeting) - newGreeting.dispose() - - const originalGreeting = vm.getProp(greeterPrototype, "greeting") - assert.equal(vm.getString(originalGreeting), "SUP DAWG") - originalGreeting.dispose() - - greeterPrototype.dispose() - greeter.dispose() - }) - }) - - describe("arrays", () => { - it("can set and get entries by native number", () => { - const array = vm.newArray() - const val1 = vm.newNumber(101) - vm.setProp(array, 0, val1) - - const val2 = vm.getProp(array, 0) - assert.strictEqual(vm.getNumber(val2), 101) - - array.dispose() - val1.dispose() - val2.dispose() - }) - - it("adding items sets array.length", () => { - const vals = [vm.newNumber(0), vm.newNumber(1), vm.newString("cow")] - const array = vm.newArray() - for (let i = 0; i < vals.length; i++) { - vm.setProp(array, i, vals[i]) - } - - const length = vm.getProp(array, "length") - assert.strictEqual(vm.getNumber(length), 3) - - length.dispose() - array.dispose() - vals.forEach((val) => val.dispose()) - }) - - it("can access .length as a number", () => { - const array = vm.newArray() - assert.strictEqual(vm.getLength(array), 0) - vm.newNumber(100).consume((n) => vm.setProp(array, 5, n)) - assert.strictEqual(vm.getLength(array), 6) - array.dispose() - }) - }) - - describe("getOwnPropertyNames", () => { - it("gets array indexes as *numbers*", ({ manage }) => { - const array = manage(vm.newArray()) - vm.setProp(array, 0, vm.undefined) - vm.setProp(array, 1, vm.undefined) - vm.setProp(array, 2, vm.undefined) - - const props = manage( - vm - .getOwnPropertyNames(array, { - numbers: true, - }) - .unwrap(), - ) - - assert.strictEqual(props.length, 3) - assert.strictEqual(vm.dump(props[0]), 0) - assert.strictEqual(vm.dump(props[1]), 1) - assert.strictEqual(vm.dump(props[2]), 2) - }) - - it("gets object keys as *strings*, but does not include symbols", ({ manage }) => { - const obj = manage(vm.newObject()) - vm.setProp(obj, "a", vm.true) - vm.setProp(obj, "b", vm.undefined) - vm.setProp(obj, "c", vm.undefined) - const sym = vm.newUniqueSymbol("d") - vm.setProp(obj, sym, vm.undefined) - sym.dispose() - - const props = manage( - vm - .getOwnPropertyNames(obj, { - onlyEnumerable: true, - strings: true, - }) - .unwrap(), - ) - - assert.strictEqual(props.length, 3) - assert.strictEqual(vm.dump(props[0]), "a") - assert.strictEqual(vm.dump(props[1]), "b") - assert.strictEqual(vm.dump(props[2]), "c") - }) - - it('gets object keys that are symbols only when "includeSymbols" is true', ({ manage }) => { - const obj = manage(vm.newObject()) - const symA = manage(vm.newUniqueSymbol("a")) - vm.setProp(obj, symA, vm.undefined) - vm.setProp(obj, "b", vm.undefined) - vm.setProp(obj, "c", vm.undefined) - - const props = manage( - vm.unwrapResult( - vm.getOwnPropertyNames(obj, { - onlyEnumerable: true, - symbols: true, - }), - ), - ) - - assert.strictEqual(props.length, 1) - assert.strictEqual(vm.typeof(props[0]), "symbol") - }) - - it("gets number keys as strings when in standard compliant mode", ({ manage }) => { - const array = manage(vm.newArray()) - vm.setProp(array, 0, vm.undefined) - vm.setProp(array, 1, vm.undefined) - vm.setProp(array, 2, vm.undefined) - vm.setProp(array, "dog", vm.undefined) - const props = manage( - vm.getOwnPropertyNames(array, { - strings: true, - numbersAsStrings: true, - onlyEnumerable: true, - }), - ) - .unwrap() - .map((p) => vm.dump(p)) - - assert.deepStrictEqual(["0", "1", "2", "dog"], props) - }) - }) - - describe(".unwrapResult", () => { - it("successful result: returns the value", () => { - const handle = vm.newString("OK!") - const result: VmCallResult = { - value: handle, - } - - assert.strictEqual(vm.unwrapResult(result), handle) - handle.dispose() - }) - - it("error result: throws the error as a Javascript value", () => { - const handle = vm.newString("ERROR!") - const result: VmCallResult = { - error: handle, - } - - try { - vm.unwrapResult(result) - assert.fail("vm.unwrapResult(error) must throw") - } catch (error) { - if (error instanceof errors.QuickJSUnwrapError) { - assert.strictEqual(error.cause, "ERROR!", "QuickJSUnwrapError.cause set correctly") - return - } - throw error - } finally { - if (handle.alive) { - handle.dispose() - } - } - }) - }) - - describe(".evalCode", () => { - it("on success: returns { value: success }", () => { - const value = vm.unwrapResult(vm.evalCode(`["this", "should", "work"].join(' ')`)) - assert.equal(vm.getString(value), "this should work") - value.dispose() - }) - - it("on syntax error: returns { error: exception }", () => { - const result = vm.evalCode(`["this", "should", "fail].join(' ')`) - if (!result.error) { - assert.fail("result should be an error") - } - assertError(vm.dump(result.error), { - name: "SyntaxError", - message: "unexpected end of string", - }) - result.error.dispose() - }) - - it("module: on syntax error: returns { error: exception }", () => { - const result = vm.evalCode(`["this", "should", "fail].join(' ')`, "mod.js", { - type: "module", - }) - if (!result.error) { - assert.fail("result should be an error") - } - assertError(vm.dump(result.error), { - name: "SyntaxError", - message: "unexpected end of string", - }) - result.error.dispose() - }) - - it("module: on TypeError: returns { error: exception }", () => { - const result = vm.evalCode(`null.prop`, "mod.js", { type: "module" }) - if (!result.error) { - result.value.consume((val) => - assert.fail(`result should be an error, instead is: ${inspect(vm.dump(val))}`), - ) - return - } - const error = result.error.consume(vm.dump) - assertError(error, { - name: "TypeError", - message: "cannot read property 'prop' of null", - }) - }) - - it("runs in the global context", () => { - vm.unwrapResult(vm.evalCode(`var declaredWithEval = 'Nice!'`)).dispose() - const declaredWithEval = vm.getProp(vm.global, "declaredWithEval") - assert.equal(vm.getString(declaredWithEval), "Nice!") - declaredWithEval.dispose() - }) - - it("can access assigned globals", () => { - let i = 0 - const fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++i) - }) - vm.setProp(vm.global, "nextId", fnHandle) - fnHandle.dispose() - - const nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) - assert.equal(i, 3) - assert.equal(vm.getNumber(nextId), 3) - nextId.dispose() - }) - - it("can handle imports", () => { - let moduleLoaderCalls = 0 - vm.runtime.setModuleLoader(() => { - moduleLoaderCalls++ - return `export const name = "from import";` - }) - vm.unwrapResult( - vm.evalCode( - ` - import {name} from './foo.js' - globalThis.declaredWithEval = name - `, - "importer.js", - ), - ).dispose() - const declaredWithEval = vm.getProp(vm.global, "declaredWithEval") - assert.equal(vm.getString(declaredWithEval), "from import") - declaredWithEval.dispose() - - assert.equal(moduleLoaderCalls, 1, "Only called once") - }) - - it("respects maxStackSize", async () => { - try { - ;(await getQuickJS()).evalCode('"ok"', { maxStackSizeBytes: 1 }) - } catch (e) { - return - } - }) - - it("returns the module exports", () => { - const modExports = vm.unwrapResult( - vm.evalCode(`export const s = "hello"; export const n = 42; export default "the default";`), - ) - - const s = vm.getProp(modExports, "s").consume(vm.dump) - const n = vm.getProp(modExports, "n").consume(vm.dump) - const defaultExport = vm.getProp(modExports, "default").consume(vm.dump) - const asJson = modExports.consume(vm.dump) - try { - assert.equal(s, "hello") - assert.equal(n, 42) - assert.equal(defaultExport, "the default") - } catch (error) { - console.log("Error with module exports:", asJson) - throw error - } - }) - - it("returns a promise of module exports", () => { - const promise = vm.unwrapResult( - vm.evalCode( - ` -await Promise.resolve(0); -export const s = "hello"; -export const n = 42; -export default "the default"; -`, - "mod.js", - { type: "module" }, - ), - ) - - vm.runtime.executePendingJobs() - const promiseState = promise.consume((p) => vm.getPromiseState(p)) - if (promiseState.type === "pending") { - throw new Error(`By now promise should be resolved.`) - } - - const modExports = vm.unwrapResult(promiseState) - const s = vm.getProp(modExports, "s").consume(vm.dump) - const n = vm.getProp(modExports, "n").consume(vm.dump) - const defaultExport = vm.getProp(modExports, "default").consume(vm.dump) - const asJson = modExports.consume(vm.dump) - try { - assert.equal(s, "hello") - assert.equal(n, 42) - assert.equal(defaultExport, "the default") - } catch (error) { - console.log("Error with module exports:", asJson) - throw error - } - }) - }) - - describe("intrinsics", () => { - it("evalCode - context respects intrinsic options - Date Unavailable", async () => { - // Eval is required to use `evalCode` - const newContext = await getContext({ - intrinsics: { - BaseObjects: true, - Eval: true, - }, - }) - - const result = newContext.evalCode(`new Date()`) - - if (!result.error) { - result.value.dispose() - assert.fail("result should be an error") - } - - assertError(newContext.dump(result.error), { - name: "ReferenceError", - message: "'Date' is not defined", - stack: " at (eval.js)\n", - }) - - result.error.dispose() - newContext.dispose() - }) - - it("evalCode - context executes as expected with default intrinsics", async () => { - // Eval is required to use `evalCode` - const newContext = await getContext({ intrinsics: DefaultIntrinsics }) - - let handle - try { - handle = newContext.unwrapResult(newContext.evalCode(`new Date()`)) - } finally { - if (handle?.alive) { - handle.dispose() - } - newContext.dispose() - } - }) - }) - - describe(".executePendingJobs", () => { - it("runs pending jobs", () => { - let i = 0 - const fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++i) - }) - vm.setProp(vm.global, "nextId", fnHandle) - fnHandle.dispose() - - const result = vm.unwrapResult( - vm.evalCode(`(new Promise(resolve => resolve())).then(nextId).then(nextId).then(nextId);1`), - ) - assert.equal(i, 0) - vm.runtime.executePendingJobs() - assert.equal(i, 3) - assert.equal(vm.getNumber(result), 1) - result.dispose() - }) - }) - - describe(".hasPendingJob", () => { - it("returns true when job pending", () => { - let i = 0 - const fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++i) - }) - vm.setProp(vm.global, "nextId", fnHandle) - fnHandle.dispose() - - vm.unwrapResult(vm.evalCode(`(new Promise(resolve => resolve(5)).then(nextId));1`)).dispose() - assert.strictEqual( - vm.runtime.hasPendingJob(), - true, - "has a pending job after creating a promise", - ) - - const executed = vm.unwrapResult(vm.runtime.executePendingJobs()) - assert.strictEqual(executed, 1, "executed exactly 1 job") - - assert.strictEqual(vm.runtime.hasPendingJob(), false, "no longer any jobs after execution") - }) - }) - - describe(".dump", () => { - function dumpTestExample(val: unknown) { - const json = typeof val === "undefined" ? "undefined" : JSON.stringify(val) - const nativeType = typeof val - it(`supports ${nativeType} (${json})`, () => { - const handle = vm.unwrapResult(vm.evalCode(`(${json})`)) - assert.deepEqual(vm.dump(handle), val) - handle.dispose() - }) - } - dumpTestExample(1) - dumpTestExample("hi") - dumpTestExample(true) - dumpTestExample(false) - dumpTestExample(undefined) - dumpTestExample(null) - dumpTestExample({ cow: true }) - dumpTestExample([1, 2, 3]) - }) - - describe(".typeof", () => { - function typeofTestExample(val: unknown, toCode = JSON.stringify) { - const json = toCode(val) - const nativeType = typeof val - it(`supports ${nativeType} (${json})`, () => { - const handle = vm.unwrapResult(vm.evalCode(`(${json})`)) - assert.equal(vm.typeof(handle), nativeType) - handle.dispose() - }) - } - - typeofTestExample(1) - typeofTestExample("hi") - typeofTestExample(true) - typeofTestExample(false) - typeofTestExample(undefined) - typeofTestExample(null) - typeofTestExample({ cow: true }) - typeofTestExample([1, 2, 3]) - typeofTestExample( - function () {}, - (val: any) => val.toString(), - ) - }) - - describe("interrupt handler", () => { - it("is called with the expected VM", () => { - let calls = 0 - const interruptId = getTestId() - const interruptHandler: InterruptHandler = (interruptVm) => { - assert.strictEqual( - interruptVm, - vm.runtime, - "ShouldInterruptHandler callback runtime is the runtime", - ) - debugLog("interruptHandler called", interruptId) - calls++ - return false - } - - debugLog("setInterruptHandler", interruptId) - vm.runtime.setInterruptHandler(interruptHandler) - - vm.unwrapResult(vm.evalCode("1 + 1")).dispose() - - assert(calls > 0, "interruptHandler called at least once") - }) - - it("interrupts infinite loop execution", () => { - let calls = 0 - const interruptId = getTestId() - const interruptHandler: InterruptHandler = () => { - debugLog("interruptHandler called", interruptId) - if (calls > 10) { - return true - } - calls++ - return false - } - - debugLog("setInterruptHandler", interruptId) - vm.runtime.setInterruptHandler(interruptHandler) - - const result = vm.evalCode("i = 0; while (1) { i++ }") - - // Make sure we actually got to interrupt the loop. - const iHandle = vm.getProp(vm.global, "i") - const i = vm.getNumber(iHandle) - iHandle.dispose() - - assert(i > 10, "incremented i") - assert(i > calls, "incremented i more than called the interrupt handler") - // debug('Javascript loop iterrations:', i, 'interrupt handler calls:', calls) - - if (result.error) { - const errorJson = vm.dump(result.error) - result.error.dispose() - assert.equal(errorJson.name, "InternalError") - assert.equal(errorJson.message, "interrupted") - } else { - result.value.dispose() - assert.fail("Should have returned an interrupt error") - } - }) - - it("shouldInterruptAfterDeadline: interrupts", () => { - const deadline = Date.now() + 100 - vm.runtime.setInterruptHandler(shouldInterruptAfterDeadline(deadline)) - - const result = vm.evalCode("i = 0; while (1) { i++ }") - try { - const interruptedAfterIterations = vm.getProp(vm.global, "i").consume(vm.dump) - assert(interruptedAfterIterations > 0, "Allowed at least 1 iteration") - - if (result.error) { - const errorJson = vm.dump(result.error) - assert.equal(errorJson.name, "InternalError") - assert.equal(errorJson.message, "interrupted") - } else { - assert.fail("Should have returned an interrupt error") - } - } finally { - result.error ? result.error.dispose() : result.value.dispose() - } - }) - }) - - describe(".computeMemoryUsage", () => { - it("returns an object with JSON memory usage info", () => { - const result = vm.runtime.computeMemoryUsage() - const resultObj = vm.dump(result) - result.dispose() - - const example = { - array_count: 1, - atom_count: 414, - atom_size: 13593, - binary_object_count: 0, - binary_object_size: 0, - c_func_count: 46, - fast_array_count: 1, - fast_array_elements: 0, - js_func_code_size: 0, - js_func_count: 0, - js_func_pc2line_count: 0, - js_func_pc2line_size: 0, - js_func_size: 0, - malloc_count: 665, - malloc_limit: 4294967295, - memory_used_count: 665, - memory_used_size: 36305, - obj_count: 97, - obj_size: 4656, - prop_count: 654, - prop_size: 5936, - shape_count: 50, - shape_size: 10328, - str_count: 0, - str_size: 0, - } - - assert.deepEqual(Object.keys(resultObj).sort(), Object.keys(example).sort()) - }) - }) - - describe(".setMemoryLimit", () => { - it("sets an enforced limit", () => { - vm.runtime.setMemoryLimit(100) - const result = vm.evalCode(`new Uint8Array(101); "ok"`) - - if (!result.error) { - result.value.dispose() - throw new Error("should be an error") - } - - vm.runtime.setMemoryLimit(-1) // so we can dump - const error = vm.dump(result.error) - result.error.dispose() - - assert.strictEqual(error, null) - }) - - it("removes limit when set to -1", () => { - vm.runtime.setMemoryLimit(100) - vm.runtime.setMemoryLimit(-1) - - const result = vm.unwrapResult(vm.evalCode(`new Uint8Array(101); "ok"`)) - const value = vm.dump(result) - result.dispose() - assert.strictEqual(value, "ok") - }) - }) - - describe(".dumpMemoryUsage()", () => { - it("logs memory usage", () => { - assert( - vm.runtime.dumpMemoryUsage().endsWith("per fast array)\n"), - 'should end with "per fast array)\\n"', - ) - }) - }) - - describe(".setMaxStackSize", () => { - it("sets an enforced limit", () => { - vm.runtime.setMaxStackSize(1) - const result = vm.evalCode('"ok"') - - if (!result.error) { - result.value.dispose() - throw new Error("should be an error") - } - - vm.runtime.setMaxStackSize(0) // so we can dump - const error = vm.dump(result.error) - result.error.dispose() - assert.strictEqual(error.name, "SyntaxError") - assert.strictEqual(error.message, "stack overflow") - }) - - it("removes limit when set to 0", () => { - vm.runtime.setMaxStackSize(1) - vm.runtime.setMaxStackSize(0) - const result = vm.unwrapResult(vm.evalCode('"ok"')) - const value = vm.dump(result) - result.dispose() - assert.strictEqual(value, "ok") - }) - }) - - describe("sharing objects between contexts", () => { - it("can share objects between same runtime", () => { - const otherContext = vm.runtime.newContext() - - const object = vm.newObject() - vm.newString("bar").consume((it) => vm.setProp(object, "foo", it)) - otherContext.setProp(otherContext.global, "myObject", object) - object.dispose() - - const value = vm.unwrapResult(otherContext.evalCode(`myObject`)).consume(otherContext.dump) - assert.deepStrictEqual(value, { foo: "bar" }, "ok") - otherContext.dispose() - }) - }) - - describe(".newPromise()", () => { - it("dispose does not leak", () => { - vm.newPromise().dispose() - }) - - it("passes an end-to-end test", async () => { - const expectedValue = Math.random() - let deferred: QuickJSDeferredPromise = undefined as any - - function timeout(ms: number) { - return new Promise((resolve) => { - setTimeout(() => resolve(), ms) - }) - } - - const asyncFuncHandle = vm.newFunction("getThingy", () => { - deferred = vm.newPromise() - timeout(5).then(() => vm.newNumber(expectedValue).consume((val) => deferred.resolve(val))) - return deferred.handle - }) - - asyncFuncHandle.consume((func) => vm.setProp(vm.global, "getThingy", func)) - - vm.unwrapResult( - vm.evalCode(` - var globalThingy = 'not set by promise'; - getThingy().then(thingy => { globalThingy = thingy }) - `), - ).dispose() - - // Wait for the promise to settle - await deferred.settled - - // Execute promise callbacks inside the VM - vm.runtime.executePendingJobs() - - // Check that the promise executed. - const vmValue = vm.unwrapResult(vm.evalCode(`globalThingy`)).consume((x) => vm.dump(x)) - assert.equal(vmValue, expectedValue) - }) - }) - - describe(".resolvePromise()", () => { - it("retrieves async function return value as a successful VM result", async () => { - const result = vm.unwrapResult( - vm.evalCode(` - async function return1() { - return 1 - } - - return1() - `), - ) - - assert.equal(vm.typeof(result), "object", "Async function returns an object (promise)") - - const promise = result.consume((result) => vm.resolvePromise(result)) - vm.runtime.executePendingJobs() - const asyncResult = vm.unwrapResult(await promise) - - assert.equal(vm.dump(asyncResult), 1, "Awaited promise returns 1") - - asyncResult.dispose() - }) - - it("retrieves async function error as a error VM result", async () => { - const result = vm.unwrapResult( - vm.evalCode(` - async function throwOops() { - throw new Error('oops') - } - - throwOops() - `), - ) - - assert.equal(vm.typeof(result), "object", "Async function returns an object (promise)") - - const promise = result.consume((result) => vm.resolvePromise(result)) - vm.runtime.executePendingJobs() - const asyncResult = await promise - - if (!asyncResult.error) { - throw new Error("Should have returned an error") - } - const error = vm.dump(asyncResult.error) - asyncResult.error.dispose() - - assert.equal(error.name, "Error") - assert.equal(error.message, "oops") - }) - - it("converts non-promise handles into a promise, too", async () => { - const stringHandle = vm.newString("foo") - const promise = vm.resolvePromise(stringHandle) - stringHandle.dispose() - - vm.runtime.executePendingJobs() - - const final = await promise.then((result) => { - const stringHandle2 = vm.unwrapResult(result) - return `unwrapped: ${stringHandle2.consume((stringHandle2) => vm.dump(stringHandle2))}` - }) - assert.equal(final, `unwrapped: foo`) - }) - }) - - describe("memory pressure", () => { - it("can pass a large string to a C function", async () => { - const jsonString = await fs.promises.readFile( - `${__dirname}/../test/json-generator-dot-com-1024-rows.json`, - "utf-8", - ) - const stringHandle = vm.newString(jsonString) - const roundTripped = vm.getString(stringHandle) - stringHandle.dispose() - - assert.strictEqual(roundTripped, jsonString) - }) - }) -} - -function asyncContextTests(getContext: () => Promise) { - let vm: QuickJSAsyncContext = undefined as any - - beforeEach(async () => { - vm = await getContext() - assertBuildIsConsistent(vm) - }) - - afterEach(() => { - vm.dispose() - vm = undefined as any - }) - - describe("asyncify functions", () => { - it("sees Promise as synchronous", async () => { - let asyncFunctionCalls = 0 - const asyncFn = async () => { - asyncFunctionCalls++ - await new Promise((resolve) => setTimeout(resolve, 50)) - return vm.newString("hello from async") - } - const fnHandle = vm.newAsyncifiedFunction("asyncFn", asyncFn) - vm.setProp(vm.global, "asyncFn", fnHandle) - fnHandle.dispose() - - const callResultPromise = vm.evalCodeAsync("asyncFn()") - assert(callResultPromise instanceof Promise) - - const callResult = await callResultPromise - const unwrapped = vm.unwrapResult(callResult) - - const dumped = unwrapped.consume(vm.dump) - assert.equal(dumped, "hello from async") - - assert.equal(asyncFunctionCalls, 1, "one call") - }) - - it("passes through native promise rejection", async () => { - const asyncFn = async () => { - await new Promise((resolve) => setTimeout(resolve, 50)) - throw new Error("async oops") - } - - vm.newAsyncifiedFunction("asyncFn", asyncFn).consume((fn) => - vm.setProp(vm.global, "asyncFn", fn), - ) - - const callResultPromise = vm.evalCodeAsync("asyncFn()") - assert(callResultPromise instanceof Promise) - - const result = await callResultPromise - assert(isFail(result), "VM eval call errored") - - assert.throws(() => vm.unwrapResult(result), /async oops/) - }) - }) - - describe("module loading", () => { - it("supports async module loading", async () => { - async function testBody() { - let moduleLoaderCalls = 0 - const moduleLoader = async () => { - moduleLoaderCalls++ - if (moduleLoaderCalls > 1) { - throw new Error("Module loader should only be called once") - } - debugLog("moduleLoader: sleeping") - await new Promise((resolve) => setTimeout(resolve, 50)) - debugLog("moduleLoader: done sleeping") - return 'export default function() { return "hello from module" }' - } - debugLog("defined module loader") - - vm.runtime.setModuleLoader(moduleLoader) - debugLog("set module loader") - - const promise = vm.evalCodeAsync(` - import otherModule from './other-module' - globalThis.stuff = otherModule() - `) - debugLog("promise", promise) - - const result = await promise - debugLog("awaited vm.evalCodeAsync", result, { alive: vm.alive }) - vm.unwrapResult(result).dispose() - - const stuff = vm.getProp(vm.global, "stuff").consume(vm.dump) - assert.strictEqual(stuff, "hello from module") - } - - try { - await testBody() - } catch (error) { - debugLog("test body threw", error) - throw error - } - }) - - it("passes through the module name", () => { - let callCtx: QuickJSAsyncContext - let callModuleName: string - vm.runtime.setModuleLoader((moduleName, moduleVM) => { - callCtx = moduleVM - callModuleName = moduleName - return `export default 5` - }) - - const result = vm.evalCode("import otherModule from './other-module.js'") - vm.unwrapResult(result).dispose() - - assert.strictEqual(callCtx!, vm, "expected VM") - assert.strictEqual( - callModuleName!, - "other-module.js", - `expected module name, got ${callModuleName!}`, - ) - }) - - it("calls the module loader with the name returned from the module normalizer", async () => { - const EVAL_FILE_NAME = "EVAL FILE NAME.ts" - const NORMALIZED_NAME = "VERY NORMAL NAME" - const IMPORT_PATH = "./other-module/index.js" - let requestedBaseName: string | undefined - let requestedName: string | undefined - let loadedName: string | undefined - - vm.runtime.setModuleLoader( - function load(moduleName: string) { - loadedName = moduleName - return `export default 5` - }, - function normalize( - baseName: string, - name: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _moduleVM: QuickJSAsyncContext, - ) { - requestedBaseName = baseName - requestedName = name - return NORMALIZED_NAME - }, - ) - - // Asserts that the eval worked without incident - const result = vm.evalCode(`import otherModule from '${IMPORT_PATH}'`, EVAL_FILE_NAME) - vm.unwrapResult(result).dispose() - - // Check our request - assert.strictEqual(requestedName, IMPORT_PATH, "requested name is the literal import string") - assert.strictEqual(requestedBaseName, EVAL_FILE_NAME, "base name is our eval file name") - assert.strictEqual( - loadedName, - NORMALIZED_NAME, - "loader received the normalized name we returned", - ) - }) - }) - - describe("ASYNCIFY_STACK_SIZE", () => { - // | ASYNCIFY_STACK_SIZE | Max Nesting Levels | - // |---------------------|--------------------| - // | 4096 (default) | 12 | - // | 81920 | 297 | - it("is enough to support at least 20 levels of function nesting", async () => { - // The nesting levels of the test cannot be too high, otherwise the - // node.js call stack will overflow when executing `yarn test` - const buildName = isBuildDebug(vm) ? "debug" : "release" - const EXPECTED_NESTING_LEVEL = isBuildDebug(vm) ? 18 : 20 - - let asyncFunctionCalls = 0 - const asyncFn = async () => { - asyncFunctionCalls++ - } - vm.newAsyncifiedFunction("asyncFn", asyncFn).consume((fn) => - vm.setProp(vm.global, "asyncFn", fn), - ) - - try { - await vm.evalCodeAsync(` - let nestingLevels = 0 - function nestingFn() { - nestingLevels++ - asyncFn() - if (nestingLevels < ${EXPECTED_NESTING_LEVEL}) { - nestingFn() - } - } - nestingFn(); - `) - } catch (error) { - ;(error as Error).message += - `\nasync calls: ${asyncFunctionCalls} (expected ${EXPECTED_NESTING_LEVEL})` - throw error - } - - assert.equal( - asyncFunctionCalls, - EXPECTED_NESTING_LEVEL, - `${EXPECTED_NESTING_LEVEL} levels of nesting for ${buildName} build`, - ) - }) - }) -} - -describe("QuickJSContext", function () { - if (TEST_RELEASE) { - describe("QuickJS.newContext", function () { - const loader = getQuickJS - const getContext: GetTestContext = (opts) => loader().then((mod) => mod.newContext(opts)) - contextTests(getContext) - }) - } - - if (TEST_DEBUG) { - describe("DEBUG sync module", function () { - const loader = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) - const getContext: GetTestContext = (opts) => loader().then((mod) => mod.newContext(opts)) - contextTests(getContext, true) - }) - } - - if (TEST_NG) { - if (TEST_RELEASE) { - describe("quickjs-ng RELEASE_SYNC", function () { - const loader = memoizePromiseFactory(() => - newQuickJSWASMModule(import("@jitl/quickjs-ng-wasmfile-release-sync")), - ) - const getContext: GetTestContext = (opts) => loader().then((mod) => mod.newContext(opts)) - contextTests(getContext) - }) - } - - if (TEST_DEBUG) { - describe("quickjs-ng DEBUG_SYNC", function () { - const loader = memoizePromiseFactory(() => - newQuickJSWASMModule(import("@jitl/quickjs-ng-wasmfile-debug-sync")), - ) - const getContext: GetTestContext = (opts) => loader().then((mod) => mod.newContext(opts)) - contextTests(getContext) - }) - } - } -}) - -if (TEST_ASYNC) { - describe("QuickJSAsyncContext", () => { - describe("newQuickJSAsyncWASMModule", function () { - const loader = memoizePromiseFactory(() => newQuickJSAsyncWASMModule()) - const getContext = (opts?: ContextOptions) => loader().then((mod) => mod.newContext(opts)) - - describe("sync API", () => { - contextTests(getContext) - }) - - describe("async API", () => { - asyncContextTests(getContext) - }) - }) - - describe("DEBUG async module", function () { - const loader = memoizePromiseFactory(() => newQuickJSAsyncWASMModule(DEBUG_ASYNC)) - const getContext = (opts?: ContextOptions) => loader().then((mod) => mod.newContext(opts)) - - describe("sync API", () => { - contextTests(getContext, true) - }) - - describe("async API", () => { - asyncContextTests(getContext) - }) - }) - - if (TEST_NG) { - describe("quickjs-ng RELEASE_ASYNC", function () { - const loader = memoizePromiseFactory(() => - newQuickJSAsyncWASMModule(import("@jitl/quickjs-ng-wasmfile-release-asyncify")), - ) - const getContext = (opts?: ContextOptions) => loader().then((mod) => mod.newContext(opts)) - - describe("sync API", () => { - contextTests(getContext) - }) - - describe("async API", () => { - asyncContextTests(getContext) - }) - }) - } - }) -} - -describe("QuickJSWASMModule", () => { - const variants = [ - { name: "getQuickJS", loader: getQuickJS }, - { name: "RELEASE_SYNC", loader: () => newQuickJSWASMModule(RELEASE_SYNC) }, - { name: "DEBUG_SYNC", loader: () => newQuickJSWASMModule(DEBUG_SYNC) }, - { name: "DEBUG_ASYNC", loader: () => newQuickJSAsyncWASMModule(DEBUG_ASYNC) }, - { name: "RELEASE_ASYNC", loader: () => newQuickJSAsyncWASMModule(RELEASE_ASYNC) }, - ] - - for (const variant of variants) { - moduleTests(variant) - } - - describe("newVariant", () => { - it("uses the provided WebAssembly.Memory", async () => { - const wasmMemory = new WebAssembly.Memory({ - initial: 16777216 / 65536, - maximum: 2147483648 / 65536, - }) - const variant = newVariant(RELEASE_SYNC, { - wasmMemory, - }) - const mod = await newQuickJSWASMModule(variant) - - expect(mod.getWasmMemory()).toBe(wasmMemory) - }) - }) -}) - -function moduleTests(args: { name: string; loader: () => Promise }) { - const { name, loader } = args - describe(`variant ${name}`, () => { - let instance: QuickJSWASMModule - beforeEach(async () => { - instance = await loader() - }) - - it(".getWasmMemory returns a memory", () => { - const memory = instance.getWasmMemory() - expect(memory).toBeInstanceOf(WebAssembly.Memory) - }) - }) -} - -// TODO: test newRuntime -// TODO: test newAsyncRuntime - -function isBuildDebug(vm: QuickJSContext) { - const ffi: QuickJSFFI = (vm as any).ffi - return Boolean(ffi.QTS_BuildIsDebug()) -} - -function assertBuildIsConsistent(vm: QuickJSContext) { - const ffi: QuickJSFFI = (vm as any).ffi - if (ffi.DEBUG) { - assert.strictEqual( - ffi.QTS_BuildIsDebug(), - 1, - "when FFI is generated with DEBUG, C code is compiled with DEBUG", - ) - } else { - assert.strictEqual( - ffi.QTS_BuildIsDebug(), - 0, - "when FFI is generated without DEBUG, C code is compiled without DEBUG", - ) - } -} - -interface ErrorObj { - name: string - message: string - /** Ignored */ - stack?: unknown -} -function assertError(actual: ErrorObj, expected: ErrorObj) { - assert.strictEqual(`${actual.name}: ${actual.message}`, `${expected.name}: ${expected.message}`) - assert.strictEqual(actual.message, expected.message) - assert.strictEqual(actual.name, expected.name) -} - -function applyVitestHack( - klass: new (...args: never[]) => T, - serialize: (instance: T) => unknown, -) { - klass.prototype["@@__IMMUTABLE_RECORD__@@"] = true - klass.prototype.toJSON = function vitestHackToJSON() { - return serialize(this) - } -} - -applyVitestHack(QuickJSContext, (vm) => ({ - type: "QuickJSContext", - __vitest__: true, - alive: vm.alive, -})) -applyVitestHack(QuickJSAsyncContext, (vm) => ({ - type: "QuickJSAsyncContext", - __vitest__: true, - alive: vm.alive, -})) -applyVitestHack(QuickJSRuntime, (rt) => ({ - type: "QuickJSRuntime", - __vitest__: true, - alive: rt.alive, -})) -applyVitestHack(QuickJSAsyncRuntime, (rt) => ({ - type: "QuickJSAsyncRuntime", - __vitest__: true, - alive: rt.alive, -})) -applyVitestHack(QuickJSWASMModule, () => ({ - type: "QuickJSWASMModule", - __vitest__: true, -})) - -const inspect = (val: unknown) => { - return baseInspect(val, { - depth: 30, - colors: true, - }) -} diff --git a/packages/quickjs-emscripten/src/readme.test.ts b/packages/quickjs-emscripten/src/readme.test.ts deleted file mode 100644 index 2b0e682d3..000000000 --- a/packages/quickjs-emscripten/src/readme.test.ts +++ /dev/null @@ -1,323 +0,0 @@ -import assert from "assert" -import { describe, beforeEach, afterEach, it } from "vitest" -import type { QuickJSWASMModule } from "." -import { - DEBUG_SYNC, - getQuickJS, - newAsyncContext, - newQuickJSAsyncWASMModule, - newQuickJSWASMModule, - shouldInterruptAfterDeadline, - TestQuickJSWASMModule, - memoizePromiseFactory, -} from "." - -describe("README.md", () => { - const originalConsoleLog = console.log - const boundConsoleLog = originalConsoleLog.bind(console) - let consoleLogCalls: unknown[][] = [] - let QuickJS: TestQuickJSWASMModule - - beforeEach(async () => { - consoleLogCalls = [] - console.log = (...args: unknown[]) => { - consoleLogCalls.push(args) - boundConsoleLog(...args) - } - QuickJS = new TestQuickJSWASMModule(await getQuickJS()) - }) - - afterEach(() => { - console.log = originalConsoleLog - QuickJS.disposeAll() - QuickJS.assertNoMemoryAllocated() - }) - - describe("intro", () => { - it("first example", async () => { - { - // eslint-disable-next-line no-inner-declarations - async function main() { - const QuickJS = await getQuickJS() - const vm = QuickJS.newContext() - - const world = vm.newString("world") - vm.setProp(vm.global, "NAME", world) - world.dispose() - - const result = vm.evalCode(`"Hello " + NAME + "!"`) - if (result.error) { - console.log("Execution failed:", vm.dump(result.error)) - result.error.dispose() - } else { - console.log("Success:", vm.dump(result.value)) - result.value.dispose() - } - - vm.dispose() - } - - await main() - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "Success: Hello world!") - }) - - it("eval example", async () => { - { - await getQuickJS().then((QuickJS) => { - const result = QuickJS.evalCode("1 + 1", { - shouldInterrupt: shouldInterruptAfterDeadline(Date.now() + 1000), - memoryLimitBytes: 1024 * 1024, - }) - console.log(result) - }) - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "2") - }) - }) - - describe("interpreter", () => { - it("context example", () => { - { - const vm = QuickJS.newContext() - let state = 0 - - const fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }) - - vm.setProp(vm.global, "nextId", fnHandle) - fnHandle.dispose() - - const nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) - console.log("vm result:", vm.getNumber(nextId), "native state:", state) - - nextId.dispose() - vm.dispose() - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "vm result: 3 native state: 3") - }) - - it("context example w/ using statement", () => { - { - using vm = QuickJS.newContext() - let state = 0 - - { - using fnHandle = vm.newFunction("nextId", () => { - return vm.newNumber(++state) - }) - - vm.setProp(vm.global, "nextId", fnHandle) - } - - using nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)) - console.log("vm result:", vm.getNumber(nextId), "native state:", state) - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "vm result: 3 native state: 3") - }) - - it("runtime example", () => { - // prettier-ignore - { -const runtime = QuickJS.newRuntime() -// "Should be enough for everyone" -- attributed to B. Gates -runtime.setMemoryLimit(1024 * 640) -// Limit stack size -runtime.setMaxStackSize(1024 * 320) -// Interrupt computation after 1024 calls to the interrupt handler -let interruptCycles = 0 -runtime.setInterruptHandler(() => ++interruptCycles > 1024) -// Toy module system that always returns the module name -// as the default export -runtime.setModuleLoader(moduleName => - `export default '${moduleName}'`) -const context = runtime.newContext() -const ok = context.evalCode(` -import fooName from './foo.js' -globalThis.result = fooName -`) -context.unwrapResult(ok).dispose() -// logs "foo.js" -console.log( - context - .getProp(context.global, 'result') - .consume(context.dump) -) -context.dispose() -runtime.dispose() - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "foo.js") - }) - - it("function example", () => { - { - const vm = QuickJS.newContext() - // `console.log` - const logHandle = vm.newFunction("log", (...args) => { - const nativeArgs = args.map(vm.dump) - console.log("QuickJS:", ...nativeArgs) - }) - // Partially implement `console` object - const consoleHandle = vm.newObject() - vm.setProp(consoleHandle, "log", logHandle) - vm.setProp(vm.global, "console", consoleHandle) - consoleHandle.dispose() - logHandle.dispose() - - vm.unwrapResult(vm.evalCode(`console.log("Hello from QuickJS!")`)).dispose() - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "QuickJS: Hello from QuickJS!") - }) - - it("promise example", async () => { - { - const vm = QuickJS.newContext() - const fakeFileSystem = new Map([["example.txt", "Example file content"]]) - - // Function that simulates reading data asynchronously - const readFileHandle = vm.newFunction("readFile", (pathHandle) => { - const path = vm.getString(pathHandle) - const promise = vm.newPromise() - setTimeout(() => { - const content = fakeFileSystem.get(path) - promise.resolve(vm.newString(content || "")) - }, 100) - // IMPORTANT: Once you resolve an async action inside QuickJS, - // call runtime.executePendingJobs() to run any code that was - // waiting on the promise or callback. - promise.settled.then(vm.runtime.executePendingJobs) - return promise.handle - }) - readFileHandle.consume((handle) => vm.setProp(vm.global, "readFile", handle)) - - // Evaluate code that uses `readFile`, which returns a promise - const result = vm.evalCode(`(async () => { - const content = await readFile('example.txt') - return content.toUpperCase() - })()`) - const promiseHandle = vm.unwrapResult(result) - - // Convert the promise handle into a native promise and await it. - // If code like this deadlocks, make sure you are calling - // runtime.executePendingJobs appropriately. - const resolvedResult = await vm.resolvePromise(promiseHandle) - promiseHandle.dispose() - const resolvedHandle = vm.unwrapResult(resolvedResult) - console.log("Result:", vm.getString(resolvedHandle)) - resolvedHandle.dispose() - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "Result: EXAMPLE FILE CONTENT") - }) - - it("asyncify module loader example", async () => { - { - const module = await newQuickJSAsyncWASMModule() - const runtime = module.newRuntime() - const path = await import("path") - const { promises: fs } = await import("fs") - - const importsPath = path.resolve(__dirname, "../../../examples/imports") + "/" - // Module loaders can return promises. - // Execution will suspend until the promise resolves. - runtime.setModuleLoader((moduleName) => { - const modulePath = path.join(importsPath, moduleName) - if (!modulePath.startsWith(importsPath)) { - throw new Error("out of bounds") - } - console.log("loading", moduleName, "from", modulePath) - return fs.readFile(modulePath, "utf-8") - }) - - // evalCodeAsync is required when execution may suspend. - const context = runtime.newContext() - const result = await context.evalCodeAsync(` - import * as React from 'esm.sh/react@17' - import * as ReactDOMServer from 'esm.sh/react-dom@17/server' - const e = React.createElement - globalThis.html = ReactDOMServer.renderToStaticMarkup( - e('div', null, e('strong', null, 'Hello world!')) - ) - `) - context.unwrapResult(result).dispose() - const html = context.getProp(context.global, "html").consume(context.getString) - console.log(html) //
Hello world!
- } - - const lastLogMessage = consoleLogCalls[consoleLogCalls.length - 1].join(" ") - assert.strictEqual(lastLogMessage, "
Hello world!
") - }) - - it("asyncify file reading example", async () => { - { - const context = await newAsyncContext() - const path = await import("path") - const { promises: fs } = await import("fs") - - const importsPath = path.resolve(__dirname, "../../../examples/imports") + "/" - const readFileHandle = context.newAsyncifiedFunction("readFile", async (pathHandle) => { - const pathString = path.join(importsPath, context.getString(pathHandle)) - if (!pathString.startsWith(importsPath)) { - throw new Error("out of bounds") - } - const data = await fs.readFile(pathString, "utf-8") - return context.newString(data) - }) - readFileHandle.consume((fn) => context.setProp(context.global, "readFile", fn)) - - // evalCodeAsync is required when execution may suspend. - const result = await context.evalCodeAsync(` - // Not a promise: vvvvvvvvvvvvvvvvvvvv - const data = JSON.parse(readFile('data.json')) - data.map(x => x.toUpperCase()).join(' ') - `) - const upperCaseData = context.unwrapResult(result).consume(context.getString) - console.log(upperCaseData) // 'VERY USEFUL DATA' - } - - assert.strictEqual(consoleLogCalls[0].join(" "), "VERY USEFUL DATA") - }) - }) - - describe("testing example", () => { - // Define your test suite in a function, so that you can test against - // different module loaders. - function myTests(moduleLoader: () => Promise) { - let QuickJS: TestQuickJSWASMModule - beforeEach(async () => { - // Get a unique TestQuickJSWASMModule instance for each test. - const wasmModule = await moduleLoader() - QuickJS = new TestQuickJSWASMModule(wasmModule) - }) - afterEach(() => { - // Assert that the test disposed all handles. The DEBUG_SYNC build - // variant will show detailed traces for each leak. - QuickJS.assertNoMemoryAllocated() - }) - - it("works well", () => { - // TODO: write a test using QuickJS - const context = QuickJS.newContext() - context.unwrapResult(context.evalCode("1 + 1")).dispose() - context.dispose() - }) - } - - // Run the test suite against a matrix of module loaders. - describe("Check for memory leaks with QuickJS DEBUG build", () => { - const moduleLoader = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC)) - myTests(moduleLoader) - }) - - describe("Realistic test with QuickJS RELEASE build", () => { - myTests(getQuickJS) - }) - }) -}) diff --git a/packages/quickjs-emscripten/src/variant-node-test-cjs.cts b/packages/quickjs-emscripten/src/variant-node-test-cjs.cts deleted file mode 100644 index 15276b342..000000000 --- a/packages/quickjs-emscripten/src/variant-node-test-cjs.cts +++ /dev/null @@ -1,18 +0,0 @@ -import { describe, it } from "node:test" -import { packageSpecifiers, testSuite } from "./variant-test-suite" -import * as quickjsEmscripten from "." - -const VARIANT_LOADERS: Record Promise> = {} -for (const [name, conditions] of Object.entries(packageSpecifiers)) { - if (conditions.import) { - VARIANT_LOADERS[`import(${name})`] = () => import(name) - } - if (conditions.require) { - // eslint-disable-next-line @typescript-eslint/no-var-requires - VARIANT_LOADERS[`require(${name})`] = () => Promise.resolve(require(name)) - } -} - -describe("node:test load variants from CommonJS", () => { - testSuite({ describe, it }, VARIANT_LOADERS, quickjsEmscripten) -}) diff --git a/packages/quickjs-emscripten/src/variant-node-test-mjs.mts b/packages/quickjs-emscripten/src/variant-node-test-mjs.mts deleted file mode 100644 index 8e885e51d..000000000 --- a/packages/quickjs-emscripten/src/variant-node-test-mjs.mts +++ /dev/null @@ -1,21 +0,0 @@ -import { describe, it } from "node:test" -import { createRequire } from "node:module" - -import { packageSpecifiers, testSuite } from "./variant-test-suite.js" -import * as quickjsEmscripten from "./index.js" - -const require = createRequire(import.meta.url) - -const VARIANT_LOADERS: Record Promise> = {} -for (const [name, conditions] of Object.entries(packageSpecifiers)) { - if (conditions.import) { - VARIANT_LOADERS[`import(${name})`] = () => import(name) - } - if (conditions.require) { - VARIANT_LOADERS[`require(${name})`] = () => Promise.resolve(require(name)) - } -} - -describe("node:test load variants from ESModule", () => { - testSuite({ describe, it }, VARIANT_LOADERS, quickjsEmscripten) -}) diff --git a/packages/quickjs-emscripten/src/variant-test-suite.ts b/packages/quickjs-emscripten/src/variant-test-suite.ts deleted file mode 100644 index 513ede7cc..000000000 --- a/packages/quickjs-emscripten/src/variant-test-suite.ts +++ /dev/null @@ -1,126 +0,0 @@ -import assert from "assert" -import variantsManifest from "../../../variants.json" -import type { QuickJSAsyncVariant, QuickJSSyncVariant, QuickJSWASMModule } from "." - -function buildImportSpecifiers() { - const specifiers: Record = {} - for (const [, variant] of Object.entries(variantsManifest)) { - specifiers[variant.packageJson.name] = { - browser: "browser" in variant.variant.exports, - import: "import" in variant.variant.exports, - require: "require" in variant.variant.exports, - } - } - return specifiers -} - -export const packageSpecifiers = buildImportSpecifiers() - -interface TestFramework { - it(name: string, fn: () => void | Promise): void - describe(name: string, fn: () => void): void -} - -export async function getVariantBuildInfoFromModule( - // eslint-disable-next-line @typescript-eslint/consistent-type-imports - mod: typeof import("."), - variant: QuickJSSyncVariant | QuickJSAsyncVariant, -) { - const wasmModule = - variant.type === "sync" - ? await mod.newQuickJSWASMModule(variant) - : await mod.newQuickJSAsyncWASMModule(variant) - return getModuleBuildInfo(wasmModule) -} - -export function getModuleBuildInfo(wasmModule: QuickJSWASMModule) { - const ffi = wasmModule.getFFI() - return { - ffiDebug: ffi.DEBUG, - debug: ffi.QTS_BuildIsDebug(), - asyncify: ffi.QTS_BuildIsAsyncify(), - sanitize: ffi.QTS_BuildIsSanitizeLeak(), - } -} - -const DEFAULT_VARIANT = { - ffiDebug: false, - debug: 0, - asyncify: 0, - sanitize: 0, -} - -export function testSuite( - test: TestFramework, - dynamicLoaders: Record any>, - // eslint-disable-next-line @typescript-eslint/consistent-type-imports - mod: typeof import("."), -) { - const { describe, it } = test - const { getQuickJS, DEBUG_SYNC, RELEASE_SYNC, DEBUG_ASYNC, RELEASE_ASYNC } = mod - const getVariantBuildInfo = (variant: QuickJSSyncVariant | QuickJSAsyncVariant) => - getVariantBuildInfoFromModule(mod, variant) - - const loaders: Record any> = { - static_debug_sync: () => Promise.resolve(DEBUG_SYNC), - static_release_sync: () => Promise.resolve(RELEASE_SYNC), - static_debug_async: () => Promise.resolve(DEBUG_ASYNC), - static_release_async: () => Promise.resolve(RELEASE_ASYNC), - ...dynamicLoaders, - } - - describe("getQuickJS (alias of RELEASE_SYNC)", () => { - it("has expected build settings", async () => { - assert.deepStrictEqual(getModuleBuildInfo(await getQuickJS()), DEFAULT_VARIANT) - }) - }) - - describe("DEBUG_SYNC", () => { - it("has expected build settings", async () => { - assert.deepStrictEqual(await getVariantBuildInfo(DEBUG_SYNC), { - ffiDebug: true, - debug: 1, - asyncify: 0, - sanitize: 1, - }) - }) - }) - - describe("RELEASE_SYNC", () => { - it("has expected build settings", async () => { - assert.deepStrictEqual(await getVariantBuildInfo(RELEASE_SYNC), DEFAULT_VARIANT) - }) - }) - - describe("DEBUG_ASYNC", () => { - it("has expected build settings", async () => { - assert.deepStrictEqual(await getVariantBuildInfo(DEBUG_ASYNC), { - ffiDebug: true, - debug: 1, - asyncify: 1, - sanitize: 0, - }) - }) - }) - - describe("RELEASE_ASYNC", () => { - it("has expected build settings", async () => { - assert.deepStrictEqual(await getVariantBuildInfo(RELEASE_ASYNC), { - ffiDebug: false, - debug: 0, - asyncify: 1, - sanitize: 0, - }) - }) - }) - - for (const [name, loader] of Object.entries(loaders)) { - test.describe(name, () => { - test.it("can be loaded dynamically", async () => { - const loaded = await loader() - const buildInfo = await getVariantBuildInfo(loaded.default ?? loaded) - assert.ok(buildInfo) - }) - }) - } -} diff --git a/packages/quickjs-emscripten/src/variant-vi-cjs.test.cts b/packages/quickjs-emscripten/src/variant-vi-cjs.test.cts deleted file mode 100644 index 07f2618a0..000000000 --- a/packages/quickjs-emscripten/src/variant-vi-cjs.test.cts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, it } from "vitest" -import { testSuite } from "./variant-test-suite" -import * as quickjsEmscripten from "." - -describe("variants (vi cjs)", () => { - testSuite({ describe, it }, {}, quickjsEmscripten) -}) diff --git a/packages/quickjs-emscripten/src/variant-vi-mjs.test.mts b/packages/quickjs-emscripten/src/variant-vi-mjs.test.mts deleted file mode 100644 index 52079b129..000000000 --- a/packages/quickjs-emscripten/src/variant-vi-mjs.test.mts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, it } from "vitest" -import { testSuite } from "./variant-test-suite.js" -import * as quickjsEmscripten from "./index.js" - -describe("variants (vi mjs)", () => { - testSuite({ describe, it }, {}, quickjsEmscripten) -}) diff --git a/packages/quickjs-emscripten/src/variants.iife.ts b/packages/quickjs-emscripten/src/variants.iife.ts deleted file mode 100644 index dcb990f04..000000000 --- a/packages/quickjs-emscripten/src/variants.iife.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { - QuickJSSyncVariant, - QuickJSAsyncVariant, - QuickJSWASMModule, - QuickJSAsyncWASMModule, -} from "quickjs-emscripten-core" -import { - newQuickJSWASMModuleFromVariant, - newQuickJSAsyncWASMModuleFromVariant, -} from "quickjs-emscripten-core" -import RELEASE_SYNC from "@jitl/quickjs-singlefile-cjs-release-sync" -import RELEASE_ASYNC from "@jitl/quickjs-singlefile-cjs-release-asyncify" - -/** - * Create a new, completely isolated WebAssembly module containing the QuickJS library. - * See the documentation on {@link QuickJSWASMModule}. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - */ -export async function newQuickJSWASMModule( - /** - * Optionally, pass a {@link QuickJSSyncVariant} to construct a different WebAssembly module. - */ - variant: QuickJSSyncVariant = RELEASE_SYNC, -): Promise { - return newQuickJSWASMModuleFromVariant(variant) -} - -/** - * Create a new, completely isolated WebAssembly module containing a version of the QuickJS library - * compiled with Emscripten's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) transform. - * - * This version of the library offers features that enable synchronous code - * inside the VM to interact with asynchronous code in the host environment. - * See the documentation on {@link QuickJSAsyncWASMModule}, {@link QuickJSAsyncRuntime}, - * and {@link QuickJSAsyncContext}. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - */ -export async function newQuickJSAsyncWASMModule( - /** - * Optionally, pass a {@link QuickJSAsyncVariant} to construct a different WebAssembly module. - */ - variant: QuickJSAsyncVariant = RELEASE_ASYNC, -): Promise { - return newQuickJSAsyncWASMModuleFromVariant(variant) -} - -export { RELEASE_SYNC, RELEASE_SYNC as DEBUG_SYNC, RELEASE_ASYNC, RELEASE_ASYNC as DEBUG_ASYNC } diff --git a/packages/quickjs-emscripten/src/variants.ts b/packages/quickjs-emscripten/src/variants.ts deleted file mode 100644 index 3b359bd9e..000000000 --- a/packages/quickjs-emscripten/src/variants.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { - QuickJSSyncVariant, - QuickJSAsyncVariant, - QuickJSWASMModule, - QuickJSAsyncWASMModule, - PromisedDefault, -} from "quickjs-emscripten-core" -import { - newQuickJSWASMModuleFromVariant, - newQuickJSAsyncWASMModuleFromVariant, -} from "quickjs-emscripten-core" -import DEBUG_SYNC from "@jitl/quickjs-wasmfile-debug-sync" -import RELEASE_SYNC from "@jitl/quickjs-wasmfile-release-sync" -import DEBUG_ASYNC from "@jitl/quickjs-wasmfile-debug-asyncify" -import RELEASE_ASYNC from "@jitl/quickjs-wasmfile-release-asyncify" - -/** - * Create a new, completely isolated WebAssembly module containing the QuickJS library. - * See the documentation on {@link QuickJSWASMModule}. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - */ -export async function newQuickJSWASMModule( - /** - * Optionally, pass a {@link QuickJSSyncVariant} to construct a different WebAssembly module. - */ - variantOrPromise: PromisedDefault = RELEASE_SYNC, -): Promise { - return newQuickJSWASMModuleFromVariant(variantOrPromise) -} - -/** - * Create a new, completely isolated WebAssembly module containing a version of the QuickJS library - * compiled with Emscripten's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html) transform. - * - * This version of the library offers features that enable synchronous code - * inside the VM to interact with asynchronous code in the host environment. - * See the documentation on {@link QuickJSAsyncWASMModule}, {@link QuickJSAsyncRuntime}, - * and {@link QuickJSAsyncContext}. - * - * Note that there is a hard limit on the number of WebAssembly modules in older - * versions of v8: - * https://bugs.chromium.org/p/v8/issues/detail?id=12076 - */ -export async function newQuickJSAsyncWASMModule( - /** - * Optionally, pass a {@link QuickJSAsyncVariant} to construct a different WebAssembly module. - */ - variantOrPromise: PromisedDefault = RELEASE_ASYNC, -): Promise { - return newQuickJSAsyncWASMModuleFromVariant(variantOrPromise) -} - -export { DEBUG_SYNC, RELEASE_SYNC, DEBUG_ASYNC, RELEASE_ASYNC } diff --git a/packages/quickjs-emscripten/test/json-generator-dot-com-1024-rows.json b/packages/quickjs-emscripten/test/json-generator-dot-com-1024-rows.json deleted file mode 100644 index c672ebb0b..000000000 --- a/packages/quickjs-emscripten/test/json-generator-dot-com-1024-rows.json +++ /dev/null @@ -1,37930 +0,0 @@ -[ - { - "_id": "5f5ba25d28be355188ac371e", - "index": 0, - "guid": "2c52a207-14a0-4664-9f38-f668777277df", - "isActive": false, - "balance": "$1,478.95", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Bentley Garner", - "gender": "male", - "company": "GAPTEC", - "email": "bentleygarner@gaptec.com", - "phone": "+1 (831) 409-2212", - "address": "728 Forest Place, Brule, Guam, 3367", - "about": "Velit exercitation irure pariatur consequat nostrud mollit nulla ex minim. Veniam sit do cillum esse sit. Dolore reprehenderit commodo Lorem excepteur. Non qui id adipisicing ut laboris in mollit tempor tempor quis mollit consequat ipsum et. Voluptate eiusmod anim culpa enim reprehenderit cillum id. Proident est proident reprehenderit laborum duis proident aliquip exercitation amet ad elit tempor pariatur. Duis laborum sint magna aute elit adipisicing occaecat.\r\n", - "registered": "2019-09-17T05:23:31 +04:00", - "latitude": 12.72972, - "longitude": -102.407964, - "tags": ["incididunt", "mollit", "laboris", "cupidatat", "nostrud", "aute", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Kaye Parsons" - }, - { - "id": 1, - "name": "Stephanie Bullock" - }, - { - "id": 2, - "name": "Dora Foley" - } - ], - "greeting": "Hello, Bentley Garner! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dba9b2ce7aa0a1130", - "index": 1, - "guid": "9c6bb661-3043-4c1a-8e55-914ddfb42319", - "isActive": false, - "balance": "$1,313.11", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Nancy Brady", - "gender": "female", - "company": "CEPRENE", - "email": "nancybrady@ceprene.com", - "phone": "+1 (986) 461-2344", - "address": "641 Aurelia Court, Dahlen, Oregon, 539", - "about": "Cupidatat consectetur esse nisi commodo ullamco et exercitation reprehenderit sit do duis duis in aute. Eiusmod sit mollit nisi ea sit esse fugiat tempor nostrud incididunt culpa. Irure proident eu dolore labore velit cupidatat amet sit non voluptate sit.\r\n", - "registered": "2016-07-23T06:00:23 +04:00", - "latitude": -10.100385, - "longitude": -95.915402, - "tags": ["excepteur", "proident", "adipisicing", "eu", "ullamco", "eiusmod", "in"], - "friends": [ - { - "id": 0, - "name": "Leona Mcfadden" - }, - { - "id": 1, - "name": "Jan Holman" - }, - { - "id": 2, - "name": "Victoria Shepherd" - } - ], - "greeting": "Hello, Nancy Brady! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3c3075cde8dcc4de", - "index": 2, - "guid": "bc6cdbbd-9a38-420d-a861-91eb19dd5fe4", - "isActive": false, - "balance": "$2,513.85", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Burgess Stewart", - "gender": "male", - "company": "CONCILITY", - "email": "burgessstewart@concility.com", - "phone": "+1 (895) 457-2356", - "address": "405 Creamer Street, Rosewood, Missouri, 2946", - "about": "Et reprehenderit mollit Lorem commodo tempor amet cillum. Duis laborum nulla officia minim velit id velit nisi et ad eu anim. Commodo consectetur minim eu culpa eiusmod reprehenderit sit ullamco enim. Enim ea minim laboris Lorem ea aliquip. Aliqua adipisicing commodo dolore pariatur nostrud voluptate eu tempor pariatur in velit dolor. Veniam ex consectetur mollit aliquip adipisicing.\r\n", - "registered": "2014-04-21T07:08:48 +04:00", - "latitude": 0.716547, - "longitude": 145.636501, - "tags": ["dolor", "exercitation", "commodo", "nulla", "enim", "eiusmod", "sint"], - "friends": [ - { - "id": 0, - "name": "Herrera Richards" - }, - { - "id": 1, - "name": "Terry Paul" - }, - { - "id": 2, - "name": "Dunlap Parrish" - } - ], - "greeting": "Hello, Burgess Stewart! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25decb348620b1c6d63", - "index": 3, - "guid": "a38c528f-2d39-47bb-94be-4f073dcac780", - "isActive": false, - "balance": "$3,628.41", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Snyder Mathis", - "gender": "male", - "company": "QUALITERN", - "email": "snydermathis@qualitern.com", - "phone": "+1 (864) 595-2397", - "address": "851 Bayview Avenue, Dola, Montana, 4087", - "about": "Mollit veniam commodo magna consectetur. Nisi eiusmod esse nulla id ea consectetur laboris. Aliqua ea ullamco eu labore voluptate veniam elit mollit ea. Ex elit voluptate quis pariatur officia proident. Ipsum aliqua mollit culpa duis ex consequat veniam pariatur aute. Laboris labore minim cillum mollit magna sint Lorem in ea. Est deserunt ea esse adipisicing aliquip in ullamco eu.\r\n", - "registered": "2019-02-13T07:35:07 +05:00", - "latitude": -68.645826, - "longitude": 103.401736, - "tags": ["sint", "minim", "nulla", "Lorem", "tempor", "voluptate", "laborum"], - "friends": [ - { - "id": 0, - "name": "Sallie Coffey" - }, - { - "id": 1, - "name": "Boyer Gordon" - }, - { - "id": 2, - "name": "Lucinda Cline" - } - ], - "greeting": "Hello, Snyder Mathis! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de93405113f5c0c68", - "index": 4, - "guid": "fc9aed0c-a0a5-407f-ab49-028cc68a03cb", - "isActive": true, - "balance": "$1,972.42", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Lyons Sims", - "gender": "male", - "company": "TUBALUM", - "email": "lyonssims@tubalum.com", - "phone": "+1 (813) 506-3021", - "address": "343 Atkins Avenue, Martinsville, Alaska, 1646", - "about": "Reprehenderit duis quis esse ad aliquip ex culpa. Laborum ex quis exercitation ea. Incididunt do duis nisi do.\r\n", - "registered": "2014-06-18T07:05:59 +04:00", - "latitude": -67.407625, - "longitude": 7.730843, - "tags": ["aliquip", "do", "laboris", "qui", "aliquip", "est", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Kim Lynn" - }, - { - "id": 1, - "name": "Christy Pickett" - }, - { - "id": 2, - "name": "Leila Brewer" - } - ], - "greeting": "Hello, Lyons Sims! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d20f36456b068143d", - "index": 5, - "guid": "ebabb474-36a4-4e3c-a20e-ef31323a66ef", - "isActive": false, - "balance": "$1,981.11", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Wheeler Chase", - "gender": "male", - "company": "COMVERGES", - "email": "wheelerchase@comverges.com", - "phone": "+1 (937) 536-3831", - "address": "818 Meserole Avenue, Chamizal, Kentucky, 618", - "about": "Sunt sunt sint ex pariatur. Et minim amet reprehenderit est cillum culpa labore deserunt id laborum ea aute. Anim fugiat cupidatat ullamco aliqua proident deserunt ex sint. Sint elit et voluptate consequat.\r\n", - "registered": "2019-01-31T06:31:01 +05:00", - "latitude": -70.197489, - "longitude": 86.18098, - "tags": ["enim", "ipsum", "amet", "deserunt", "fugiat", "fugiat", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Nguyen Willis" - }, - { - "id": 1, - "name": "Berta Golden" - }, - { - "id": 2, - "name": "Justine Graham" - } - ], - "greeting": "Hello, Wheeler Chase! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25daa5abe0916bf0a08", - "index": 6, - "guid": "ed82fdc4-71bc-46ee-8551-4b092d941890", - "isActive": false, - "balance": "$3,265.58", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Imogene Rich", - "gender": "female", - "company": "PETIGEMS", - "email": "imogenerich@petigems.com", - "phone": "+1 (800) 450-3401", - "address": "488 Covert Street, Oretta, Mississippi, 9267", - "about": "Sint mollit occaecat eiusmod duis. Aute pariatur do id cillum nostrud aliquip ad ad. Nisi ut id consequat deserunt excepteur esse voluptate ut. Anim ut ipsum ullamco nisi magna pariatur. Magna eu veniam veniam nulla anim non mollit amet sit sint pariatur. In cillum irure ullamco laboris ut tempor fugiat commodo est consequat ex quis aliqua exercitation.\r\n", - "registered": "2014-05-02T09:13:42 +04:00", - "latitude": 56.688287, - "longitude": -61.598904, - "tags": ["sit", "velit", "consequat", "do", "ex", "nisi", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Lewis Freeman" - }, - { - "id": 1, - "name": "Spencer Wyatt" - }, - { - "id": 2, - "name": "Michele Dennis" - } - ], - "greeting": "Hello, Imogene Rich! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc2ebf146b4150471", - "index": 7, - "guid": "26b47157-e3d1-4329-88df-c7aae7ee9b89", - "isActive": true, - "balance": "$2,182.47", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Hunter Contreras", - "gender": "male", - "company": "BYTREX", - "email": "huntercontreras@bytrex.com", - "phone": "+1 (861) 516-2173", - "address": "287 Fayette Street, Trinway, North Dakota, 9644", - "about": "Dolore laborum non nisi duis ullamco aliquip nostrud elit exercitation consectetur consequat eu duis nostrud. Commodo aliquip aute incididunt laboris esse duis id Lorem. Mollit incididunt laborum sit nostrud incididunt occaecat pariatur voluptate do aliquip sunt quis reprehenderit. Minim aute consequat in et eu. Dolor voluptate irure ex amet dolor eu cupidatat consequat tempor.\r\n", - "registered": "2016-12-14T07:13:23 +05:00", - "latitude": 22.224098, - "longitude": 85.008616, - "tags": ["do", "commodo", "non", "duis", "incididunt", "nostrud", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Sims Sargent" - }, - { - "id": 1, - "name": "Mosley Hester" - }, - { - "id": 2, - "name": "Constance Hanson" - } - ], - "greeting": "Hello, Hunter Contreras! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d69251011f59c288c", - "index": 8, - "guid": "cf4ac4f9-c03a-4aab-8c12-f1d6c9015969", - "isActive": true, - "balance": "$2,356.22", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Frankie Mccoy", - "gender": "female", - "company": "ACLIMA", - "email": "frankiemccoy@aclima.com", - "phone": "+1 (861) 415-3510", - "address": "348 Dakota Place, Maxville, Federated States Of Micronesia, 7015", - "about": "Culpa amet est tempor laboris ut voluptate aliqua do ex anim magna. Et culpa dolore dolore dolore dolor nulla. Cillum esse laboris Lorem aute sunt et adipisicing ea adipisicing. Nostrud cillum elit adipisicing incididunt officia elit deserunt enim. Fugiat est culpa mollit veniam id cillum. Id duis dolor sunt aliqua magna dolor do Lorem enim enim ex deserunt Lorem. Voluptate officia aliquip nisi et labore anim occaecat labore cillum ipsum cupidatat in nisi sit.\r\n", - "registered": "2019-02-05T06:29:49 +05:00", - "latitude": 82.890405, - "longitude": -95.697225, - "tags": ["minim", "tempor", "cupidatat", "ut", "nulla", "sint", "proident"], - "friends": [ - { - "id": 0, - "name": "Baxter Rivers" - }, - { - "id": 1, - "name": "Emerson Dorsey" - }, - { - "id": 2, - "name": "Francis Nixon" - } - ], - "greeting": "Hello, Frankie Mccoy! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4a3106658af13bc9", - "index": 9, - "guid": "fc293fee-ff70-422c-84d9-1bf2008abcad", - "isActive": true, - "balance": "$1,883.93", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Flynn Hensley", - "gender": "male", - "company": "EXTRAGENE", - "email": "flynnhensley@extragene.com", - "phone": "+1 (929) 511-3250", - "address": "661 Douglass Street, Boyd, Maryland, 9266", - "about": "Enim anim minim aute sunt deserunt officia commodo dolor officia sit eu cupidatat sit veniam. Cupidatat dolor reprehenderit et ullamco occaecat. Incididunt voluptate ex voluptate dolore est ea. Ea minim irure in est veniam ipsum esse Lorem duis. Incididunt reprehenderit nulla cillum aliqua aute occaecat nulla sunt proident nulla. Ipsum reprehenderit voluptate tempor irure ea nulla id aliqua sint adipisicing.\r\n", - "registered": "2019-05-20T04:38:27 +04:00", - "latitude": 67.094099, - "longitude": -32.614452, - "tags": ["cillum", "sint", "non", "consectetur", "ipsum", "enim", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Hoffman Livingston" - }, - { - "id": 1, - "name": "Latasha Cameron" - }, - { - "id": 2, - "name": "Stephens Whitehead" - } - ], - "greeting": "Hello, Flynn Hensley! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6438880b6e006b19", - "index": 10, - "guid": "5868194a-627a-4908-8f83-36b35e852ae9", - "isActive": true, - "balance": "$2,620.48", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Marianne Suarez", - "gender": "female", - "company": "EARTHMARK", - "email": "mariannesuarez@earthmark.com", - "phone": "+1 (884) 498-2439", - "address": "664 Duryea Court, Blende, Virgin Islands, 1787", - "about": "Dolore occaecat ullamco mollit consectetur nulla eiusmod anim aliquip voluptate aliqua elit elit commodo. Ad tempor quis commodo sunt culpa commodo ea minim elit cillum. Cillum sunt nostrud magna cupidatat. Cupidatat quis ex ex occaecat est irure nisi est pariatur do enim veniam velit non. Quis dolore velit tempor veniam in eu aliqua culpa adipisicing veniam minim commodo.\r\n", - "registered": "2019-05-20T05:42:43 +04:00", - "latitude": -23.340547, - "longitude": 65.92682, - "tags": ["duis", "sunt", "ipsum", "aute", "ullamco", "in", "sunt"], - "friends": [ - { - "id": 0, - "name": "Peck Reilly" - }, - { - "id": 1, - "name": "Juliette Watkins" - }, - { - "id": 2, - "name": "Mavis Villarreal" - } - ], - "greeting": "Hello, Marianne Suarez! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dfa933a1837cbd6b1", - "index": 11, - "guid": "f17e813a-3b70-4fa3-b468-918d9b42017a", - "isActive": false, - "balance": "$2,146.53", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Donaldson Salas", - "gender": "male", - "company": "EXTRO", - "email": "donaldsonsalas@extro.com", - "phone": "+1 (928) 411-2349", - "address": "276 Harrison Avenue, Fredericktown, Pennsylvania, 5500", - "about": "Officia duis culpa pariatur do veniam aliqua commodo ex. Deserunt minim fugiat ea est anim sit officia id pariatur sit veniam cillum. Minim esse proident duis ipsum dolore. Commodo et cupidatat sint commodo tempor laborum mollit elit. In esse in eu dolore eu occaecat voluptate consequat laboris tempor mollit laboris. Ut aute do do mollit esse excepteur minim ullamco ullamco ex minim cillum quis excepteur. Aliqua Lorem eiusmod magna nostrud reprehenderit cillum.\r\n", - "registered": "2016-05-26T01:21:00 +04:00", - "latitude": -47.595532, - "longitude": 106.949573, - "tags": ["incididunt", "aliqua", "laborum", "labore", "elit", "exercitation", "proident"], - "friends": [ - { - "id": 0, - "name": "Craft Mckinney" - }, - { - "id": 1, - "name": "Rosalyn Owen" - }, - { - "id": 2, - "name": "Ferguson Durham" - } - ], - "greeting": "Hello, Donaldson Salas! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9a04e6edc1af408b", - "index": 12, - "guid": "b777b668-e1ba-4bea-914c-dd7fe62950d4", - "isActive": false, - "balance": "$1,928.18", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Madeleine Adkins", - "gender": "female", - "company": "POWERNET", - "email": "madeleineadkins@powernet.com", - "phone": "+1 (947) 595-2733", - "address": "697 Brightwater Avenue, Germanton, Washington, 2354", - "about": "Adipisicing sint nostrud dolor laboris est et anim fugiat. Duis quis magna veniam consectetur deserunt elit. Duis ea qui cillum officia nostrud consectetur ad. Adipisicing eu nisi adipisicing eu amet proident enim cupidatat proident elit amet.\r\n", - "registered": "2014-07-25T02:23:46 +04:00", - "latitude": -46.261579, - "longitude": 142.003004, - "tags": ["aliquip", "tempor", "in", "id", "voluptate", "dolor", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Tanner Barton" - }, - { - "id": 1, - "name": "Meyer Morales" - }, - { - "id": 2, - "name": "Leonor Kerr" - } - ], - "greeting": "Hello, Madeleine Adkins! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da89439b13db0f2be", - "index": 13, - "guid": "bd5471a7-10b9-45d7-bade-bb34df66776c", - "isActive": false, - "balance": "$2,779.81", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Clemons Duncan", - "gender": "male", - "company": "IDETICA", - "email": "clemonsduncan@idetica.com", - "phone": "+1 (884) 556-2468", - "address": "829 Lorimer Street, Imperial, Illinois, 7794", - "about": "Cillum magna nulla nulla labore cillum do elit nostrud cillum eiusmod sint aliquip occaecat aliquip. Consequat ullamco nisi ut magna ipsum fugiat voluptate consequat nisi nostrud anim anim ut. Do adipisicing cillum est qui adipisicing officia.\r\n", - "registered": "2018-10-25T07:13:16 +04:00", - "latitude": -45.666517, - "longitude": 79.39314, - "tags": ["aliqua", "ea", "cillum", "consectetur", "cillum", "in", "consequat"], - "friends": [ - { - "id": 0, - "name": "Sofia Foreman" - }, - { - "id": 1, - "name": "Norma White" - }, - { - "id": 2, - "name": "Lane Stanton" - } - ], - "greeting": "Hello, Clemons Duncan! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d93c0432d147d21e4", - "index": 14, - "guid": "70885925-5833-41fa-bf78-dddf8cac547b", - "isActive": false, - "balance": "$3,522.52", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Oconnor Wheeler", - "gender": "male", - "company": "ISOTRACK", - "email": "oconnorwheeler@isotrack.com", - "phone": "+1 (846) 451-2964", - "address": "876 Downing Street, Dupuyer, New Hampshire, 9614", - "about": "Veniam id fugiat aliquip occaecat voluptate laborum nulla sint incididunt pariatur. Fugiat consequat ad eiusmod proident Lorem in proident. Officia in ut duis aute. Qui nulla nulla ea tempor officia dolore aliquip ad cupidatat consequat esse in dolor labore. Minim ad dolor labore tempor sunt ea.\r\n", - "registered": "2014-06-06T05:14:52 +04:00", - "latitude": 21.894631, - "longitude": 30.622291, - "tags": ["laborum", "adipisicing", "quis", "ullamco", "occaecat", "nostrud", "qui"], - "friends": [ - { - "id": 0, - "name": "Maribel Cain" - }, - { - "id": 1, - "name": "Burnett Guerra" - }, - { - "id": 2, - "name": "Hester Donaldson" - } - ], - "greeting": "Hello, Oconnor Wheeler! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dadfcd928e3ace92a", - "index": 15, - "guid": "a680eee0-5671-4856-9941-937c4bfec77d", - "isActive": false, - "balance": "$2,896.97", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Lynne Marshall", - "gender": "female", - "company": "INQUALA", - "email": "lynnemarshall@inquala.com", - "phone": "+1 (858) 463-3746", - "address": "569 Hope Street, Orviston, Colorado, 9477", - "about": "Aliqua et aute sint esse. Dolor amet esse qui et eiusmod enim nisi ad ea occaecat cillum labore voluptate. Non commodo velit nisi ipsum voluptate adipisicing laboris. Deserunt ex aute magna sunt mollit nulla id nisi fugiat excepteur tempor nulla esse. Enim magna fugiat velit nulla esse quis excepteur. Esse elit proident cupidatat tempor non ipsum. Est magna qui mollit commodo irure nulla laborum consequat elit elit non labore.\r\n", - "registered": "2015-07-18T04:27:24 +04:00", - "latitude": 29.581955, - "longitude": -151.746963, - "tags": ["sint", "laborum", "non", "officia", "commodo", "aute", "non"], - "friends": [ - { - "id": 0, - "name": "Lou Small" - }, - { - "id": 1, - "name": "Delia Winters" - }, - { - "id": 2, - "name": "Eula Johnston" - } - ], - "greeting": "Hello, Lynne Marshall! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d275e639ecabfb6f3", - "index": 16, - "guid": "61e94d27-bb4d-4ea6-a831-02245b686d76", - "isActive": true, - "balance": "$2,763.60", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Juarez Maddox", - "gender": "male", - "company": "ZANYMAX", - "email": "juarezmaddox@zanymax.com", - "phone": "+1 (902) 537-2347", - "address": "400 Hampton Place, Fairfield, Maine, 2070", - "about": "Eiusmod dolor elit incididunt sint labore pariatur sit ea sit. Exercitation pariatur ad id velit reprehenderit pariatur excepteur proident sunt pariatur mollit ea. Id adipisicing voluptate sit eiusmod tempor sunt exercitation elit aliquip labore duis nostrud enim. Ut eu consectetur esse amet reprehenderit aliquip officia fugiat esse irure consectetur deserunt officia anim. Sunt excepteur labore veniam labore ad minim pariatur. Qui enim anim incididunt qui ad occaecat consequat.\r\n", - "registered": "2018-12-22T01:34:32 +05:00", - "latitude": -18.785142, - "longitude": -16.286859, - "tags": ["ullamco", "aute", "cupidatat", "irure", "quis", "elit", "duis"], - "friends": [ - { - "id": 0, - "name": "Katherine Lamb" - }, - { - "id": 1, - "name": "Monica Evans" - }, - { - "id": 2, - "name": "Minnie Petersen" - } - ], - "greeting": "Hello, Juarez Maddox! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dec84f633088d44ff", - "index": 17, - "guid": "dc3b3e7d-bca0-44f5-84d7-23ede065cb62", - "isActive": true, - "balance": "$2,974.97", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Mildred Thompson", - "gender": "female", - "company": "AVIT", - "email": "mildredthompson@avit.com", - "phone": "+1 (858) 562-2546", - "address": "990 Woodbine Street, Kraemer, South Carolina, 5606", - "about": "Commodo cillum ipsum aliquip quis dolor do sint mollit ex esse officia proident sit non. Irure exercitation proident nulla incididunt excepteur amet. Voluptate ut ea qui aliqua eu. Culpa nulla ea dolor veniam ullamco. Sint do Lorem magna in consequat ut culpa reprehenderit sunt.\r\n", - "registered": "2018-11-28T08:29:37 +05:00", - "latitude": 5.868197, - "longitude": 109.403486, - "tags": ["aliquip", "eu", "exercitation", "velit", "adipisicing", "dolor", "est"], - "friends": [ - { - "id": 0, - "name": "Allyson Nolan" - }, - { - "id": 1, - "name": "Susana Moreno" - }, - { - "id": 2, - "name": "Benton Austin" - } - ], - "greeting": "Hello, Mildred Thompson! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d611fff4089487738", - "index": 18, - "guid": "9fe72f81-cd24-4b02-9e13-05ab7ec27730", - "isActive": true, - "balance": "$3,975.86", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Gonzales Santiago", - "gender": "male", - "company": "ENVIRE", - "email": "gonzalessantiago@envire.com", - "phone": "+1 (876) 441-2200", - "address": "480 Keen Court, Fairhaven, Connecticut, 670", - "about": "Aute non pariatur sit ad enim voluptate tempor in velit est eiusmod duis. Est veniam aliquip excepteur ad et nulla in aute adipisicing sit ut et voluptate. Anim dolore occaecat sunt aute ut occaecat sunt. Pariatur do velit ullamco officia et. Occaecat et aliqua proident anim proident Lorem aliqua laboris ea eiusmod magna eu elit proident.\r\n", - "registered": "2019-01-24T10:34:08 +05:00", - "latitude": -7.001457, - "longitude": -54.268259, - "tags": ["ex", "quis", "quis", "laborum", "in", "ut", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Murray Perez" - }, - { - "id": 1, - "name": "Alison Donovan" - }, - { - "id": 2, - "name": "Hilary Cooley" - } - ], - "greeting": "Hello, Gonzales Santiago! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d18ec70be5d590adc", - "index": 19, - "guid": "956e78f3-82cf-445b-8c38-ffc299eee6da", - "isActive": false, - "balance": "$1,166.89", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Goodwin Matthews", - "gender": "male", - "company": "CHILLIUM", - "email": "goodwinmatthews@chillium.com", - "phone": "+1 (990) 482-2015", - "address": "630 Onderdonk Avenue, Cutter, Virginia, 9737", - "about": "Consectetur reprehenderit ipsum sint magna. Reprehenderit mollit est minim cillum ad. Aliqua eu in proident eiusmod. Enim sunt cupidatat magna aliqua sit id. Velit voluptate eiusmod ipsum dolor.\r\n", - "registered": "2016-04-22T02:03:49 +04:00", - "latitude": -78.315483, - "longitude": 161.356533, - "tags": ["aute", "officia", "nulla", "dolor", "ex", "voluptate", "mollit"], - "friends": [ - { - "id": 0, - "name": "Aida Rodriquez" - }, - { - "id": 1, - "name": "Jenny Franks" - }, - { - "id": 2, - "name": "Caldwell Guerrero" - } - ], - "greeting": "Hello, Goodwin Matthews! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d5f103049b9de52be", - "index": 20, - "guid": "5b6b1dfc-57c4-4b4d-979a-da4c8c4c4376", - "isActive": true, - "balance": "$3,219.78", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Mccormick Marks", - "gender": "male", - "company": "GEEKKO", - "email": "mccormickmarks@geekko.com", - "phone": "+1 (910) 402-3595", - "address": "880 Clymer Street, Accoville, Georgia, 9500", - "about": "Enim velit officia quis culpa consequat fugiat tempor minim ea in commodo dolore mollit proident. Minim in minim magna officia ex non est sunt. Nostrud duis nostrud velit veniam qui ut esse consequat consequat nulla sint adipisicing. In commodo non adipisicing ex minim mollit deserunt magna cillum. Et elit velit labore exercitation magna dolor est commodo aliqua aliquip cillum.\r\n", - "registered": "2020-06-28T09:46:08 +04:00", - "latitude": 37.6529, - "longitude": 105.846514, - "tags": ["mollit", "proident", "sint", "enim", "exercitation", "sunt", "veniam"], - "friends": [ - { - "id": 0, - "name": "Sherry Merrill" - }, - { - "id": 1, - "name": "Austin Guy" - }, - { - "id": 2, - "name": "Hart Salazar" - } - ], - "greeting": "Hello, Mccormick Marks! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5b41e11635039d88", - "index": 21, - "guid": "fbb18c10-666a-46ce-adaf-864c274cd588", - "isActive": false, - "balance": "$3,785.15", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Esther Rutledge", - "gender": "female", - "company": "SLAMBDA", - "email": "estherrutledge@slambda.com", - "phone": "+1 (942) 546-2538", - "address": "800 Hanover Place, Jamestown, New Jersey, 932", - "about": "Est dolore ullamco est magna occaecat duis excepteur. Labore voluptate pariatur magna laborum est eiusmod amet adipisicing. Eiusmod proident sint non consectetur aliqua laboris in qui. Sint nisi dolor culpa enim aliqua minim ex amet pariatur qui cillum elit. Culpa reprehenderit esse adipisicing reprehenderit laborum occaecat in irure sunt esse.\r\n", - "registered": "2017-01-29T03:54:45 +05:00", - "latitude": -89.576144, - "longitude": -105.937719, - "tags": ["incididunt", "eiusmod", "laborum", "quis", "anim", "ut", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Sophia Mosley" - }, - { - "id": 1, - "name": "Puckett Bates" - }, - { - "id": 2, - "name": "Jenkins Barry" - } - ], - "greeting": "Hello, Esther Rutledge! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db71ea2b6563fba2d", - "index": 22, - "guid": "49bb82d3-6dab-4cc8-8286-df4325612089", - "isActive": false, - "balance": "$2,520.83", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Day Gilmore", - "gender": "male", - "company": "NIPAZ", - "email": "daygilmore@nipaz.com", - "phone": "+1 (978) 500-3006", - "address": "332 Kossuth Place, Reinerton, Minnesota, 8936", - "about": "Nisi esse enim Lorem dolore occaecat qui irure amet reprehenderit officia. Proident ea culpa labore enim voluptate adipisicing officia enim eiusmod eiusmod occaecat amet. Magna magna proident proident enim.\r\n", - "registered": "2019-03-26T03:58:07 +04:00", - "latitude": 58.192055, - "longitude": 45.982319, - "tags": ["sint", "ex", "amet", "amet", "consequat", "excepteur", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Gena Fischer" - }, - { - "id": 1, - "name": "Vera Mclean" - }, - { - "id": 2, - "name": "Terrie Aguirre" - } - ], - "greeting": "Hello, Day Gilmore! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd24f889031627307", - "index": 23, - "guid": "8783fb17-0d39-4adb-96a7-5fae3a915625", - "isActive": true, - "balance": "$3,006.34", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Sullivan Blevins", - "gender": "male", - "company": "REALMO", - "email": "sullivanblevins@realmo.com", - "phone": "+1 (874) 425-2936", - "address": "412 Highland Boulevard, Hobucken, Texas, 6345", - "about": "Aute aliquip occaecat elit eiusmod do. Est esse nulla consectetur exercitation reprehenderit sunt mollit exercitation. In enim sint deserunt duis occaecat sunt dolor laborum incididunt do minim.\r\n", - "registered": "2017-04-22T08:40:07 +04:00", - "latitude": 81.995305, - "longitude": -19.973575, - "tags": ["voluptate", "in", "ipsum", "ullamco", "fugiat", "irure", "elit"], - "friends": [ - { - "id": 0, - "name": "Sears Hoover" - }, - { - "id": 1, - "name": "Lydia Blake" - }, - { - "id": 2, - "name": "Hyde Watson" - } - ], - "greeting": "Hello, Sullivan Blevins! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc51ebdd4c570c79e", - "index": 24, - "guid": "72043b4f-90fd-456f-a88c-b984610d3b43", - "isActive": false, - "balance": "$1,630.60", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Chambers Berry", - "gender": "male", - "company": "STEELTAB", - "email": "chambersberry@steeltab.com", - "phone": "+1 (857) 491-3803", - "address": "202 Dupont Street, Summertown, Alabama, 8422", - "about": "Eiusmod adipisicing cupidatat officia reprehenderit sunt consequat officia dolore. Lorem ad esse minim ex voluptate esse enim nisi excepteur laborum dolore labore irure in. Officia enim cillum anim anim ut excepteur excepteur adipisicing magna consectetur incididunt. Non sint ipsum nisi et ipsum adipisicing id magna ad. Sit et dolor aute minim voluptate ipsum do fugiat fugiat consequat eu duis aliqua.\r\n", - "registered": "2015-11-24T10:34:33 +05:00", - "latitude": -17.617132, - "longitude": -163.861894, - "tags": ["aute", "excepteur", "velit", "adipisicing", "est", "sit", "labore"], - "friends": [ - { - "id": 0, - "name": "Liliana William" - }, - { - "id": 1, - "name": "Corina Berg" - }, - { - "id": 2, - "name": "Downs Collier" - } - ], - "greeting": "Hello, Chambers Berry! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9c31c48edad12216", - "index": 25, - "guid": "7b8cf5d0-e07e-49a6-82e4-88b74e314e07", - "isActive": false, - "balance": "$1,978.78", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Fern Todd", - "gender": "female", - "company": "HELIXO", - "email": "ferntodd@helixo.com", - "phone": "+1 (805) 410-3181", - "address": "829 Leonora Court, Motley, Rhode Island, 8102", - "about": "Ut incididunt ipsum laboris occaecat. Ut sit tempor incididunt elit cillum ad in anim esse cupidatat consectetur velit ut. Incididunt dolore magna ipsum nostrud deserunt ea et aliquip et culpa. Aliqua adipisicing nostrud aliqua fugiat. Amet pariatur dolore exercitation ipsum quis officia aliquip. Adipisicing dolore aute eiusmod ea sunt ad. Laborum anim amet consectetur velit sint sint aliqua aliqua culpa magna pariatur amet.\r\n", - "registered": "2014-09-30T03:30:43 +04:00", - "latitude": -86.468852, - "longitude": 58.451029, - "tags": ["fugiat", "reprehenderit", "et", "duis", "incididunt", "dolor", "tempor"], - "friends": [ - { - "id": 0, - "name": "Dillon Pollard" - }, - { - "id": 1, - "name": "Augusta Francis" - }, - { - "id": 2, - "name": "Nichole Camacho" - } - ], - "greeting": "Hello, Fern Todd! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d34e192d340fafd10", - "index": 26, - "guid": "43aa76d8-badc-492f-89ab-5d440188f282", - "isActive": true, - "balance": "$3,139.75", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Cathy Lynch", - "gender": "female", - "company": "CODAX", - "email": "cathylynch@codax.com", - "phone": "+1 (836) 596-3165", - "address": "876 Ashland Place, Rockingham, Florida, 7713", - "about": "Enim qui incididunt mollit consequat Lorem consequat nisi. Eiusmod laboris ex sit dolore tempor ullamco ut laboris. Id voluptate sint excepteur ex incididunt ullamco sit. Ad ipsum elit cillum sit magna. Nisi quis sit aliquip ad proident ad cupidatat proident.\r\n", - "registered": "2018-04-02T12:55:13 +04:00", - "latitude": -45.885852, - "longitude": 106.837807, - "tags": ["sunt", "pariatur", "in", "quis", "deserunt", "ad", "laborum"], - "friends": [ - { - "id": 0, - "name": "Ernestine Howell" - }, - { - "id": 1, - "name": "Collier Ware" - }, - { - "id": 2, - "name": "Woodward Bentley" - } - ], - "greeting": "Hello, Cathy Lynch! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1764926639da235b", - "index": 27, - "guid": "b4103f72-408b-45f6-97ad-61c945f9793f", - "isActive": true, - "balance": "$3,835.18", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Kirby Robertson", - "gender": "male", - "company": "ORGANICA", - "email": "kirbyrobertson@organica.com", - "phone": "+1 (808) 508-2289", - "address": "783 Church Avenue, Rodanthe, Indiana, 5488", - "about": "Minim aliquip fugiat ea nulla. In culpa aliquip veniam quis magna consectetur cillum esse culpa. Qui cupidatat labore adipisicing ad irure elit tempor quis amet. Quis dolore proident qui pariatur veniam officia nostrud nisi. Minim cupidatat nulla nisi mollit in consectetur in incididunt eiusmod qui ipsum. Mollit sunt eiusmod incididunt tempor officia mollit pariatur.\r\n", - "registered": "2020-06-30T01:34:37 +04:00", - "latitude": 7.162908, - "longitude": 134.383808, - "tags": ["labore", "quis", "mollit", "commodo", "mollit", "anim", "tempor"], - "friends": [ - { - "id": 0, - "name": "Sandoval George" - }, - { - "id": 1, - "name": "Annie Chambers" - }, - { - "id": 2, - "name": "Bailey Skinner" - } - ], - "greeting": "Hello, Kirby Robertson! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d22bbd4abb6feff84", - "index": 28, - "guid": "e60c973d-7609-4056-97a2-724bc412fede", - "isActive": false, - "balance": "$1,745.88", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Ramos Hudson", - "gender": "male", - "company": "LUDAK", - "email": "ramoshudson@ludak.com", - "phone": "+1 (969) 553-2818", - "address": "404 Riverdale Avenue, Springdale, Northern Mariana Islands, 7140", - "about": "Excepteur ut veniam amet quis deserunt esse qui labore sint. Sint cillum duis deserunt amet officia voluptate amet. Ipsum fugiat nostrud nostrud fugiat adipisicing ut aliqua cupidatat Lorem non. Reprehenderit tempor do irure fugiat est aute incididunt proident do do dolore ipsum. Do sit proident adipisicing ea et commodo irure voluptate labore in.\r\n", - "registered": "2018-10-17T03:31:11 +04:00", - "latitude": -25.108837, - "longitude": 138.742179, - "tags": ["cillum", "dolore", "reprehenderit", "et", "ad", "quis", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Dorthy Barrett" - }, - { - "id": 1, - "name": "Mia Pace" - }, - { - "id": 2, - "name": "Underwood Jacobs" - } - ], - "greeting": "Hello, Ramos Hudson! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dae3e7a3983a7d2f7", - "index": 29, - "guid": "6f34d967-c283-4cd6-a9c6-5243c3bc632a", - "isActive": false, - "balance": "$1,414.28", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Dale Jackson", - "gender": "female", - "company": "QUORDATE", - "email": "dalejackson@quordate.com", - "phone": "+1 (859) 435-2101", - "address": "466 Jackson Place, Darrtown, Idaho, 3512", - "about": "Sunt et deserunt deserunt sunt consectetur do cillum aliquip deserunt enim. Ullamco ipsum non Lorem non adipisicing exercitation elit. Ullamco reprehenderit veniam id eu consequat ipsum quis. Id culpa cupidatat cillum cupidatat anim eiusmod. Sint aliquip elit irure irure.\r\n", - "registered": "2020-02-14T12:16:04 +05:00", - "latitude": -43.814225, - "longitude": 78.959, - "tags": ["anim", "Lorem", "id", "nisi", "quis", "in", "esse"], - "friends": [ - { - "id": 0, - "name": "Lang Henry" - }, - { - "id": 1, - "name": "Iris Wright" - }, - { - "id": 2, - "name": "Hawkins Stout" - } - ], - "greeting": "Hello, Dale Jackson! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da7a2ebf9f3a74fab", - "index": 30, - "guid": "76972054-6218-4b45-aed7-520d69c0fb95", - "isActive": false, - "balance": "$2,849.24", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Arline Acosta", - "gender": "female", - "company": "INSURON", - "email": "arlineacosta@insuron.com", - "phone": "+1 (891) 470-2625", - "address": "589 Stratford Road, Bend, District Of Columbia, 3282", - "about": "Consectetur mollit proident exercitation est pariatur aliquip. Nisi sit id dolore proident nisi voluptate ullamco ea dolor fugiat sunt Lorem enim. Dolor sunt sit voluptate mollit aute voluptate non.\r\n", - "registered": "2016-11-26T09:31:33 +05:00", - "latitude": -50.562776, - "longitude": -135.512055, - "tags": ["mollit", "aliquip", "minim", "qui", "amet", "proident", "laboris"], - "friends": [ - { - "id": 0, - "name": "Tammi Wood" - }, - { - "id": 1, - "name": "Ericka Collins" - }, - { - "id": 2, - "name": "Finch Melendez" - } - ], - "greeting": "Hello, Arline Acosta! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d307a1b88f4132374", - "index": 31, - "guid": "0ada9599-66da-40ca-828f-277c47bc8597", - "isActive": false, - "balance": "$3,891.04", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "May Fernandez", - "gender": "male", - "company": "SKINSERVE", - "email": "mayfernandez@skinserve.com", - "phone": "+1 (899) 519-3591", - "address": "551 Fuller Place, Talpa, New Mexico, 6282", - "about": "Adipisicing enim ullamco labore amet aliqua ea veniam sint. Ea enim sunt excepteur magna. Aliquip commodo irure cillum tempor sint. Laboris consequat mollit occaecat dolore veniam Lorem. Consectetur irure sint cillum qui incididunt et aliqua amet minim enim do cupidatat consectetur Lorem. Elit proident aute cupidatat veniam ex.\r\n", - "registered": "2019-05-09T10:10:32 +04:00", - "latitude": 28.739355, - "longitude": 174.774482, - "tags": ["tempor", "consequat", "sunt", "anim", "irure", "voluptate", "culpa"], - "friends": [ - { - "id": 0, - "name": "Wright Cummings" - }, - { - "id": 1, - "name": "Mack Saunders" - }, - { - "id": 2, - "name": "Angela Vang" - } - ], - "greeting": "Hello, May Fernandez! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d17c03163a591b2e6", - "index": 32, - "guid": "1bdaba21-c4cf-409a-8417-be4c78542b26", - "isActive": false, - "balance": "$2,113.02", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Fulton Compton", - "gender": "male", - "company": "FUTURIZE", - "email": "fultoncompton@futurize.com", - "phone": "+1 (914) 523-2160", - "address": "402 Kensington Street, Dodge, South Dakota, 3038", - "about": "Aute non labore dolor tempor occaecat magna. Voluptate cillum commodo aliquip incididunt sint commodo mollit enim adipisicing fugiat et. Elit ea dolor ut anim amet voluptate. Nisi elit aute ad mollit est nulla ex mollit laboris reprehenderit est excepteur laboris officia.\r\n", - "registered": "2014-04-29T10:26:40 +04:00", - "latitude": 15.789549, - "longitude": -111.87946, - "tags": ["id", "cupidatat", "est", "amet", "elit", "duis", "cillum"], - "friends": [ - { - "id": 0, - "name": "Valenzuela Webb" - }, - { - "id": 1, - "name": "Stanton Dejesus" - }, - { - "id": 2, - "name": "Juanita Vaughan" - } - ], - "greeting": "Hello, Fulton Compton! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8b2e0781f45766a6", - "index": 33, - "guid": "97aecb4c-b396-4b27-ad4e-7b5cbbca8489", - "isActive": true, - "balance": "$2,012.81", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Nina Woodward", - "gender": "female", - "company": "NORSUL", - "email": "ninawoodward@norsul.com", - "phone": "+1 (986) 424-2388", - "address": "871 Ash Street, Whitehaven, American Samoa, 6558", - "about": "Aliqua laboris aliquip proident nulla velit. Elit occaecat fugiat enim consequat cupidatat quis sunt mollit. Occaecat nostrud quis et ex sit. Cupidatat anim elit velit sit mollit adipisicing anim aliqua ullamco quis proident. Tempor cupidatat consectetur deserunt culpa consectetur aliqua nisi eu.\r\n", - "registered": "2020-01-22T04:02:50 +05:00", - "latitude": 24.695939, - "longitude": -50.917549, - "tags": ["excepteur", "amet", "voluptate", "incididunt", "culpa", "voluptate", "elit"], - "friends": [ - { - "id": 0, - "name": "Sellers Lloyd" - }, - { - "id": 1, - "name": "Davis Simon" - }, - { - "id": 2, - "name": "Avery Burks" - } - ], - "greeting": "Hello, Nina Woodward! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8a855bc39729da96", - "index": 34, - "guid": "20fcc33f-3c47-4499-bb24-053573ac1d44", - "isActive": false, - "balance": "$3,674.78", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Candice Garza", - "gender": "female", - "company": "POLARAX", - "email": "candicegarza@polarax.com", - "phone": "+1 (950) 451-3487", - "address": "525 Clark Street, Hilltop, Iowa, 6655", - "about": "Consectetur anim cillum sunt fugiat ex mollit commodo sit. Eiusmod commodo esse irure velit veniam. Sint labore pariatur ut aliquip. Culpa anim laborum deserunt nisi fugiat duis non sunt. Laboris aute adipisicing sunt et in non deserunt sint magna consequat velit. Non ex velit quis non velit exercitation. Eu officia ullamco cillum tempor laborum.\r\n", - "registered": "2020-04-04T05:11:17 +04:00", - "latitude": -33.741544, - "longitude": -68.067473, - "tags": ["Lorem", "minim", "quis", "ea", "labore", "ex", "in"], - "friends": [ - { - "id": 0, - "name": "Ochoa Zimmerman" - }, - { - "id": 1, - "name": "Lott Patrick" - }, - { - "id": 2, - "name": "Nash Gilbert" - } - ], - "greeting": "Hello, Candice Garza! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2a47f401c63a5a65", - "index": 35, - "guid": "0674bc03-1384-4e84-be96-62299a029e1f", - "isActive": true, - "balance": "$2,804.82", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Misty Hamilton", - "gender": "female", - "company": "QOT", - "email": "mistyhamilton@qot.com", - "phone": "+1 (815) 598-3669", - "address": "703 Arkansas Drive, Blandburg, Palau, 3166", - "about": "Veniam irure aute eiusmod sint proident. Commodo consequat quis mollit sint dolore sunt nostrud. Consequat mollit dolore officia sint sit voluptate dolore esse deserunt mollit in et ex magna. Laboris excepteur fugiat et enim sit aliquip amet amet esse ut proident do minim. Aute ullamco fugiat officia minim amet reprehenderit ipsum ea reprehenderit cillum nisi duis. Duis nostrud sit sint elit nisi id irure eu cillum enim exercitation voluptate laboris.\r\n", - "registered": "2017-01-30T07:49:47 +05:00", - "latitude": 5.829607, - "longitude": 27.896065, - "tags": ["amet", "Lorem", "ex", "aliqua", "reprehenderit", "ad", "ea"], - "friends": [ - { - "id": 0, - "name": "Dionne Hawkins" - }, - { - "id": 1, - "name": "Janine Erickson" - }, - { - "id": 2, - "name": "Hendrix Clements" - } - ], - "greeting": "Hello, Misty Hamilton! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0d57fe3183a2c5b3", - "index": 36, - "guid": "df217f49-e3a2-4cec-896b-db3f348a5240", - "isActive": false, - "balance": "$2,943.94", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Dickerson Rogers", - "gender": "male", - "company": "GEEKOSIS", - "email": "dickersonrogers@geekosis.com", - "phone": "+1 (805) 538-2406", - "address": "685 Eckford Street, Faxon, West Virginia, 1425", - "about": "Minim cillum pariatur consequat amet ad ad aute nisi mollit dolore Lorem pariatur. Esse pariatur tempor Lorem eiusmod adipisicing nostrud nulla. Excepteur enim anim tempor fugiat cupidatat nostrud exercitation excepteur do Lorem fugiat fugiat nulla.\r\n", - "registered": "2020-06-16T12:07:22 +04:00", - "latitude": 52.739686, - "longitude": -16.968715, - "tags": ["ullamco", "sunt", "duis", "ipsum", "ipsum", "ea", "nulla"], - "friends": [ - { - "id": 0, - "name": "Moore Shields" - }, - { - "id": 1, - "name": "Bridgett Serrano" - }, - { - "id": 2, - "name": "Mckinney Burch" - } - ], - "greeting": "Hello, Dickerson Rogers! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5edaf999859d9a23", - "index": 37, - "guid": "3598c14a-795c-4b19-8183-f16734dbc085", - "isActive": true, - "balance": "$2,394.78", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Pitts Gates", - "gender": "male", - "company": "GINKLE", - "email": "pittsgates@ginkle.com", - "phone": "+1 (880) 590-3598", - "address": "992 Coyle Street, Cumberland, New York, 2268", - "about": "Qui quis fugiat ad deserunt occaecat sit qui fugiat deserunt ad qui enim. Nisi laboris excepteur Lorem Lorem Lorem. Non aliqua nulla sit aliquip Lorem. Qui mollit exercitation quis ea culpa aute duis irure ut velit proident do duis. Duis ea do officia eiusmod aliquip consequat ullamco cupidatat eu.\r\n", - "registered": "2017-06-27T12:24:30 +04:00", - "latitude": -35.022363, - "longitude": 9.031461, - "tags": ["commodo", "do", "aliquip", "laboris", "id", "aute", "culpa"], - "friends": [ - { - "id": 0, - "name": "Nikki Burt" - }, - { - "id": 1, - "name": "Anderson Walls" - }, - { - "id": 2, - "name": "Lowe Calhoun" - } - ], - "greeting": "Hello, Pitts Gates! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4354ddecb1e13dfb", - "index": 38, - "guid": "e2112fdb-215c-415d-bf3a-896ab8aa44d5", - "isActive": false, - "balance": "$3,277.38", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Flossie Gentry", - "gender": "female", - "company": "KRAGGLE", - "email": "flossiegentry@kraggle.com", - "phone": "+1 (919) 534-3968", - "address": "332 Menahan Street, Delwood, Hawaii, 1581", - "about": "Id aute laborum exercitation non. Fugiat cupidatat aliqua mollit aliqua ad cupidatat ullamco eiusmod velit labore ea culpa. Eu eu exercitation quis pariatur.\r\n", - "registered": "2019-09-29T07:18:12 +04:00", - "latitude": -18.214078, - "longitude": 10.527615, - "tags": ["est", "quis", "dolore", "culpa", "enim", "in", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Paula Yang" - }, - { - "id": 1, - "name": "Crane Summers" - }, - { - "id": 2, - "name": "Lacey Farrell" - } - ], - "greeting": "Hello, Flossie Gentry! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc145b10009a38acf", - "index": 39, - "guid": "a42dcc10-95ce-4442-a535-18fe7849f0f1", - "isActive": false, - "balance": "$3,828.02", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Carney Warren", - "gender": "male", - "company": "NIMON", - "email": "carneywarren@nimon.com", - "phone": "+1 (849) 455-3771", - "address": "163 Aviation Road, Kipp, Nebraska, 6084", - "about": "Cillum duis proident culpa officia qui aute laboris aute ut reprehenderit ad. Consequat veniam incididunt eu quis aute elit voluptate eu. Pariatur sunt labore officia deserunt in elit enim.\r\n", - "registered": "2017-08-25T03:45:09 +04:00", - "latitude": -32.531901, - "longitude": -38.803251, - "tags": ["ex", "nulla", "magna", "cillum", "laborum", "ullamco", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Alston Park" - }, - { - "id": 1, - "name": "Paul Mills" - }, - { - "id": 2, - "name": "Mccall Buchanan" - } - ], - "greeting": "Hello, Carney Warren! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddf7fabcb3990b349", - "index": 40, - "guid": "d219c994-c26a-4dfb-835b-712598752bee", - "isActive": true, - "balance": "$2,231.03", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Sharron Floyd", - "gender": "female", - "company": "TASMANIA", - "email": "sharronfloyd@tasmania.com", - "phone": "+1 (818) 522-3153", - "address": "353 Pooles Lane, Aurora, Wisconsin, 554", - "about": "Sit velit ut cupidatat proident. Ex irure nostrud nostrud nulla sint cillum dolore eiusmod voluptate velit ullamco. Eu labore irure quis cillum deserunt.\r\n", - "registered": "2020-03-08T08:19:40 +04:00", - "latitude": -44.401061, - "longitude": -10.917199, - "tags": ["laboris", "ea", "occaecat", "occaecat", "elit", "veniam", "amet"], - "friends": [ - { - "id": 0, - "name": "Lynette Barlow" - }, - { - "id": 1, - "name": "Patti Mccall" - }, - { - "id": 2, - "name": "Maxwell Ramos" - } - ], - "greeting": "Hello, Sharron Floyd! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df1dc31af88a58ae6", - "index": 41, - "guid": "9893dcb5-1354-433d-a087-a567632ae801", - "isActive": true, - "balance": "$3,235.92", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Concepcion Horn", - "gender": "female", - "company": "DUOFLEX", - "email": "concepcionhorn@duoflex.com", - "phone": "+1 (883) 416-3345", - "address": "534 Vandervoort Place, Greenbackville, Arizona, 5673", - "about": "Laboris proident dolor duis officia laborum minim ut ea eiusmod qui eiusmod pariatur. Cillum nostrud qui laborum laborum cupidatat laborum. Sint ea ex ullamco deserunt reprehenderit incididunt aliqua consequat elit voluptate officia. Fugiat cillum adipisicing ex nostrud cillum. Laborum ut nostrud deserunt ipsum anim ad aute ad consequat officia officia ex veniam ut. Adipisicing quis reprehenderit et fugiat pariatur. Sint consectetur non exercitation consequat pariatur duis deserunt veniam ad dolor eiusmod.\r\n", - "registered": "2018-12-28T02:11:26 +05:00", - "latitude": 46.525022, - "longitude": 106.014535, - "tags": ["duis", "aliquip", "id", "pariatur", "id", "aliquip", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Roxie Blackwell" - }, - { - "id": 1, - "name": "Jessica Nielsen" - }, - { - "id": 2, - "name": "Fletcher Lucas" - } - ], - "greeting": "Hello, Concepcion Horn! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d54a8a0818b306f2c", - "index": 42, - "guid": "e8f0736d-50c1-44b7-b023-1c7a382cad22", - "isActive": true, - "balance": "$1,567.61", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Larson Alvarez", - "gender": "male", - "company": "OTHERSIDE", - "email": "larsonalvarez@otherside.com", - "phone": "+1 (869) 521-3506", - "address": "158 Hunts Lane, Kohatk, Ohio, 4779", - "about": "Esse id do cupidatat sint. Voluptate aliqua id incididunt dolore proident incididunt dolor fugiat duis magna amet minim excepteur. Mollit ut aliquip duis irure non excepteur tempor proident elit. Laboris et est sit exercitation elit consequat exercitation elit ex pariatur non consequat.\r\n", - "registered": "2014-03-27T09:19:03 +04:00", - "latitude": -54.200835, - "longitude": -158.443057, - "tags": ["proident", "quis", "dolor", "quis", "consequat", "aliqua", "laborum"], - "friends": [ - { - "id": 0, - "name": "Wyatt Hyde" - }, - { - "id": 1, - "name": "Zelma Flores" - }, - { - "id": 2, - "name": "Angel Mcmahon" - } - ], - "greeting": "Hello, Larson Alvarez! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3afdfed79b8275be", - "index": 43, - "guid": "ac6b3efd-7582-4509-87d4-af9d979c8b38", - "isActive": false, - "balance": "$1,409.77", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Nettie Fulton", - "gender": "female", - "company": "STOCKPOST", - "email": "nettiefulton@stockpost.com", - "phone": "+1 (991) 453-2378", - "address": "435 Middagh Street, Austinburg, Arkansas, 1173", - "about": "Veniam consequat aliqua adipisicing eu nisi duis. Et excepteur deserunt esse reprehenderit elit dolore dolore tempor voluptate sint duis. Nostrud excepteur aliqua magna pariatur sint fugiat elit commodo excepteur incididunt ea. Dolor ullamco laboris eu id.\r\n", - "registered": "2017-01-24T11:42:10 +05:00", - "latitude": 20.83742, - "longitude": 17.335455, - "tags": ["duis", "velit", "laborum", "elit", "ullamco", "nulla", "in"], - "friends": [ - { - "id": 0, - "name": "Katrina Vance" - }, - { - "id": 1, - "name": "Erma Wilkinson" - }, - { - "id": 2, - "name": "Holland Beck" - } - ], - "greeting": "Hello, Nettie Fulton! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8e1dada0e9174917", - "index": 44, - "guid": "60a9a201-c850-44bf-b067-6901304e3ff7", - "isActive": true, - "balance": "$3,366.82", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "brown", - "name": "Beasley Ball", - "gender": "male", - "company": "PODUNK", - "email": "beasleyball@podunk.com", - "phone": "+1 (910) 431-2738", - "address": "109 Sutton Street, Whitestone, Nevada, 1977", - "about": "Commodo sit proident eu veniam. Et tempor elit ad eu in. Ad nisi proident Lorem anim ex sint duis dolore eiusmod elit eu. Lorem quis mollit incididunt est dolore ea eiusmod aute. Exercitation laborum laboris anim excepteur amet culpa aute aliqua cillum culpa irure.\r\n", - "registered": "2019-09-26T04:59:25 +04:00", - "latitude": -40.747304, - "longitude": -39.292304, - "tags": ["enim", "non", "officia", "dolore", "ullamco", "aute", "tempor"], - "friends": [ - { - "id": 0, - "name": "Marta Callahan" - }, - { - "id": 1, - "name": "Fischer Finch" - }, - { - "id": 2, - "name": "Jillian Lowery" - } - ], - "greeting": "Hello, Beasley Ball! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d111d64d8787bd343", - "index": 45, - "guid": "ec5474d5-3ed9-442f-816d-d3e72d814de5", - "isActive": false, - "balance": "$2,380.27", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Kaufman Vinson", - "gender": "male", - "company": "INSECTUS", - "email": "kaufmanvinson@insectus.com", - "phone": "+1 (875) 519-2737", - "address": "708 Aster Court, Dennard, Massachusetts, 4283", - "about": "Commodo culpa nisi ipsum esse consequat elit ipsum. Ipsum et veniam qui cupidatat. Exercitation occaecat anim do cillum.\r\n", - "registered": "2018-02-24T02:42:23 +05:00", - "latitude": -72.414933, - "longitude": 126.565434, - "tags": ["aute", "fugiat", "quis", "sunt", "eu", "velit", "esse"], - "friends": [ - { - "id": 0, - "name": "Mcleod Becker" - }, - { - "id": 1, - "name": "Georgette Nelson" - }, - { - "id": 2, - "name": "Margarita Mcpherson" - } - ], - "greeting": "Hello, Kaufman Vinson! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d15fc2ec2bca55e0d", - "index": 46, - "guid": "b3794da7-3d2a-4781-acca-80075a974514", - "isActive": true, - "balance": "$2,780.91", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Calderon Jenkins", - "gender": "male", - "company": "KEENGEN", - "email": "calderonjenkins@keengen.com", - "phone": "+1 (941) 518-2174", - "address": "498 Delevan Street, Golconda, Marshall Islands, 8527", - "about": "Occaecat cupidatat commodo adipisicing irure amet. Do veniam exercitation non dolor mollit qui incididunt officia aliqua id ad. Adipisicing labore nulla pariatur in est aliquip minim dolore dolor. Sunt anim cillum ullamco dolor. Nulla reprehenderit ex anim non culpa nulla do.\r\n", - "registered": "2016-01-23T09:45:43 +05:00", - "latitude": 50.548218, - "longitude": 58.0685, - "tags": ["aliquip", "ex", "dolore", "adipisicing", "magna", "in", "sint"], - "friends": [ - { - "id": 0, - "name": "Cobb Robbins" - }, - { - "id": 1, - "name": "Angie Norton" - }, - { - "id": 2, - "name": "Katheryn Bond" - } - ], - "greeting": "Hello, Calderon Jenkins! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d692cd3622821dda7", - "index": 47, - "guid": "484cb356-5c5c-44dc-971a-f0ac87a1dbe6", - "isActive": true, - "balance": "$2,347.76", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Carol Roman", - "gender": "female", - "company": "BIOSPAN", - "email": "carolroman@biospan.com", - "phone": "+1 (828) 534-3848", - "address": "775 Kermit Place, Dargan, Puerto Rico, 9756", - "about": "Quis adipisicing consectetur esse mollit. Lorem reprehenderit dolore velit ullamco cillum dolore fugiat dolor. Ullamco in non qui nisi enim id elit sunt est sint nulla officia commodo ut. Id dolore magna occaecat occaecat consectetur consequat commodo irure velit enim. Consequat nisi amet quis do elit incididunt sint consequat veniam.\r\n", - "registered": "2018-06-14T07:39:20 +04:00", - "latitude": -35.356835, - "longitude": -10.20962, - "tags": ["aute", "nostrud", "exercitation", "eu", "nisi", "minim", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Young Carlson" - }, - { - "id": 1, - "name": "Norton Sweeney" - }, - { - "id": 2, - "name": "Patty Roberson" - } - ], - "greeting": "Hello, Carol Roman! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db5cdbaa8d4bdaaf0", - "index": 48, - "guid": "955acea2-2cf2-4c62-9675-42d07d63a4a8", - "isActive": false, - "balance": "$2,140.85", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Cherry Trevino", - "gender": "female", - "company": "AUTOGRATE", - "email": "cherrytrevino@autograte.com", - "phone": "+1 (926) 535-3557", - "address": "924 Maple Street, Caledonia, California, 6604", - "about": "Id dolor cillum mollit mollit. Deserunt esse eu laborum minim officia ipsum anim excepteur. Consequat dolor veniam qui cillum ex duis.\r\n", - "registered": "2018-07-28T03:50:41 +04:00", - "latitude": 28.686016, - "longitude": -136.534607, - "tags": ["est", "dolor", "consectetur", "ea", "adipisicing", "aliqua", "cillum"], - "friends": [ - { - "id": 0, - "name": "Rhonda Macias" - }, - { - "id": 1, - "name": "Bell Finley" - }, - { - "id": 2, - "name": "Mckee Wynn" - } - ], - "greeting": "Hello, Cherry Trevino! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd38e7eff1b7605c4", - "index": 49, - "guid": "a8355312-ea1b-4137-8867-9f9f08012d47", - "isActive": true, - "balance": "$1,518.11", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Gibson Bray", - "gender": "male", - "company": "KNEEDLES", - "email": "gibsonbray@kneedles.com", - "phone": "+1 (941) 558-3958", - "address": "980 Rugby Road, Craig, Tennessee, 678", - "about": "Commodo in proident proident officia est reprehenderit esse sint excepteur reprehenderit in. Qui laboris occaecat amet id est consectetur ullamco exercitation mollit cupidatat aliquip aute sint. Culpa sint adipisicing non nostrud minim aute fugiat do mollit dolore mollit amet. Elit officia eiusmod ut aliquip sint dolore ea exercitation cupidatat incididunt minim et dolor laborum. Veniam ad duis aliquip pariatur anim deserunt ullamco velit non excepteur qui. Culpa consequat pariatur pariatur exercitation cillum minim nisi anim nulla do ut.\r\n", - "registered": "2019-10-27T05:00:26 +04:00", - "latitude": 63.129587, - "longitude": -131.51175, - "tags": ["anim", "duis", "ea", "non", "cupidatat", "consequat", "nulla"], - "friends": [ - { - "id": 0, - "name": "Lawanda Ross" - }, - { - "id": 1, - "name": "Decker Schultz" - }, - { - "id": 2, - "name": "Dolly Warner" - } - ], - "greeting": "Hello, Gibson Bray! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ddce2e720d617bf3c", - "index": 50, - "guid": "c5994d9d-69e9-4f5f-9849-c61028509c22", - "isActive": true, - "balance": "$1,591.80", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Rowena Mullen", - "gender": "female", - "company": "SCENTY", - "email": "rowenamullen@scenty.com", - "phone": "+1 (945) 526-3919", - "address": "246 Lott Avenue, Greer, Wyoming, 3285", - "about": "Culpa nostrud excepteur eu dolor sunt dolore anim. Tempor amet veniam sint elit nulla do magna dolor elit voluptate ut laboris quis nulla. Veniam culpa ullamco ut sunt qui. In dolor pariatur elit in labore sunt nisi ullamco esse eiusmod proident quis.\r\n", - "registered": "2014-02-04T01:16:46 +05:00", - "latitude": -42.545274, - "longitude": -81.202655, - "tags": ["aliqua", "Lorem", "consequat", "eu", "excepteur", "nulla", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Galloway Soto" - }, - { - "id": 1, - "name": "Brewer Forbes" - }, - { - "id": 2, - "name": "Angelique Hubbard" - } - ], - "greeting": "Hello, Rowena Mullen! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4200ccdd33abd123", - "index": 51, - "guid": "65e1f0c7-5c2c-4aad-b57d-9aac28ce6f46", - "isActive": false, - "balance": "$2,412.83", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Georgia Owens", - "gender": "female", - "company": "INSURESYS", - "email": "georgiaowens@insuresys.com", - "phone": "+1 (941) 408-2096", - "address": "616 Glenmore Avenue, Cumminsville, North Carolina, 8302", - "about": "Anim quis laboris qui ullamco. Ipsum minim adipisicing nostrud velit ut. Aliqua adipisicing incididunt culpa dolore duis occaecat mollit ex dolore proident. Velit sunt non fugiat culpa eu ad culpa dolore excepteur qui minim anim. Lorem enim magna sit minim quis et. Labore duis ipsum est sunt qui sit et do. Reprehenderit cillum proident enim sunt magna sint sunt Lorem aliqua proident.\r\n", - "registered": "2020-08-18T10:03:38 +04:00", - "latitude": 82.101448, - "longitude": 10.505099, - "tags": ["eiusmod", "non", "dolor", "amet", "enim", "elit", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Enid Sosa" - }, - { - "id": 1, - "name": "Ortega Espinoza" - }, - { - "id": 2, - "name": "Diane Dudley" - } - ], - "greeting": "Hello, Georgia Owens! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1f418f1b75892478", - "index": 52, - "guid": "886eaa1d-23ee-4654-a465-42ee0e094079", - "isActive": true, - "balance": "$2,959.05", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Kane Robles", - "gender": "male", - "company": "PORTALIS", - "email": "kanerobles@portalis.com", - "phone": "+1 (873) 581-3761", - "address": "717 Howard Alley, Sultana, Michigan, 4569", - "about": "Exercitation ut incididunt nisi proident aute dolore quis sint quis id laboris. Ex qui mollit minim occaecat nisi amet elit nostrud labore est aliqua in. Amet quis consectetur officia ex occaecat Lorem ullamco cillum enim culpa aliqua magna non ullamco. Consequat incididunt fugiat Lorem adipisicing pariatur dolor consectetur mollit pariatur tempor dolore et ut ex. Lorem laborum Lorem et est qui sit cillum nostrud cillum. Eiusmod proident consequat aliqua laborum in sint eiusmod reprehenderit labore ad nulla nulla.\r\n", - "registered": "2016-12-22T04:37:51 +05:00", - "latitude": 81.116615, - "longitude": -95.332244, - "tags": ["do", "Lorem", "sit", "et", "mollit", "duis", "velit"], - "friends": [ - { - "id": 0, - "name": "Desiree Mcmillan" - }, - { - "id": 1, - "name": "Shepherd Dickerson" - }, - { - "id": 2, - "name": "Lelia Gould" - } - ], - "greeting": "Hello, Kane Robles! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7930de4b5e52142a", - "index": 53, - "guid": "23206382-f1db-497d-bbff-3e24aca5d3a1", - "isActive": false, - "balance": "$1,709.44", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Dalton Moody", - "gender": "male", - "company": "SKYBOLD", - "email": "daltonmoody@skybold.com", - "phone": "+1 (869) 469-3292", - "address": "899 Narrows Avenue, Caberfae, Oklahoma, 8679", - "about": "Id enim enim nisi labore labore eiusmod dolore nisi sit occaecat. Aliqua Lorem aliquip cillum mollit ad do irure eiusmod quis ut cupidatat elit velit enim. Sint eu ad laboris aute dolore id minim. Enim ullamco magna magna aute officia. Nisi proident mollit incididunt ullamco reprehenderit cupidatat sit commodo esse est enim voluptate. Labore do enim adipisicing labore.\r\n", - "registered": "2015-05-15T04:15:53 +04:00", - "latitude": -35.35465, - "longitude": 16.857745, - "tags": ["minim", "ea", "reprehenderit", "dolore", "veniam", "velit", "commodo"], - "friends": [ - { - "id": 0, - "name": "Marina Hayden" - }, - { - "id": 1, - "name": "Abbott Washington" - }, - { - "id": 2, - "name": "Morse Howard" - } - ], - "greeting": "Hello, Dalton Moody! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4b91e8ea0c7e4521", - "index": 54, - "guid": "ef14167b-4c5f-495c-a821-f432787c53ee", - "isActive": false, - "balance": "$3,935.18", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Colleen Williams", - "gender": "female", - "company": "ACCUPRINT", - "email": "colleenwilliams@accuprint.com", - "phone": "+1 (826) 520-3436", - "address": "253 Wolcott Street, Mulberry, Vermont, 4485", - "about": "Quis ullamco proident occaecat anim id minim exercitation mollit consequat commodo non non nulla ad. Aliquip enim ad commodo ea. Laboris esse culpa eu in culpa nostrud veniam ullamco.\r\n", - "registered": "2015-06-10T09:45:11 +04:00", - "latitude": -36.594868, - "longitude": 30.576621, - "tags": ["commodo", "Lorem", "culpa", "ut", "eiusmod", "eiusmod", "velit"], - "friends": [ - { - "id": 0, - "name": "Saunders Combs" - }, - { - "id": 1, - "name": "Pugh Pierce" - }, - { - "id": 2, - "name": "Guthrie Christensen" - } - ], - "greeting": "Hello, Colleen Williams! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d57449f2b4bcc2518", - "index": 55, - "guid": "a0152855-d73f-4ac4-a754-93c489003385", - "isActive": true, - "balance": "$3,224.58", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Gail Sweet", - "gender": "female", - "company": "MEDICROIX", - "email": "gailsweet@medicroix.com", - "phone": "+1 (897) 555-3343", - "address": "826 Melba Court, Weedville, Utah, 8954", - "about": "Labore ullamco consequat aliqua deserunt occaecat aliquip fugiat. Amet mollit proident aliqua ad excepteur enim nisi pariatur. Veniam nisi occaecat pariatur do adipisicing et do. Id culpa non incididunt excepteur magna exercitation aliqua cillum et. Adipisicing occaecat magna in et enim sunt. Consectetur mollit proident ex sunt sit magna anim magna irure aute deserunt quis non exercitation. Non mollit ut aute esse exercitation culpa quis reprehenderit labore ipsum exercitation.\r\n", - "registered": "2014-12-29T01:45:56 +05:00", - "latitude": -5.639696, - "longitude": -70.726242, - "tags": ["cillum", "non", "sint", "esse", "sint", "sit", "aute"], - "friends": [ - { - "id": 0, - "name": "Carlson Roach" - }, - { - "id": 1, - "name": "Miller Shannon" - }, - { - "id": 2, - "name": "Klein Andrews" - } - ], - "greeting": "Hello, Gail Sweet! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8f8cf2ab5e64fe29", - "index": 56, - "guid": "22d960fb-d199-486d-afd7-1bce66bb93fd", - "isActive": false, - "balance": "$2,025.13", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Mcmahon Pena", - "gender": "male", - "company": "INCUBUS", - "email": "mcmahonpena@incubus.com", - "phone": "+1 (847) 429-2125", - "address": "560 Clay Street, Springhill, Kansas, 4139", - "about": "Sunt aliqua veniam occaecat ea. Ad eiusmod anim culpa mollit anim eiusmod laboris minim id nostrud dolore. Nisi adipisicing id voluptate minim occaecat. Nostrud amet cillum aliqua aliquip. In reprehenderit fugiat ex Lorem laboris consequat dolore enim do nulla aute incididunt laboris.\r\n", - "registered": "2015-12-14T06:04:12 +05:00", - "latitude": 89.574219, - "longitude": -128.833385, - "tags": ["cupidatat", "cillum", "proident", "exercitation", "duis", "pariatur", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Darla Hardin" - }, - { - "id": 1, - "name": "Bird Haley" - }, - { - "id": 2, - "name": "Vilma Massey" - } - ], - "greeting": "Hello, Mcmahon Pena! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcc55c8a03e0523bb", - "index": 57, - "guid": "fcd16238-ea5b-4f9e-b300-3a2ac2ef924c", - "isActive": true, - "balance": "$3,431.97", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Perry Briggs", - "gender": "male", - "company": "ASIMILINE", - "email": "perrybriggs@asimiline.com", - "phone": "+1 (924) 508-3011", - "address": "610 Church Lane, Skyland, Delaware, 8772", - "about": "Nulla sit consequat aliqua reprehenderit nulla ipsum proident. Officia qui minim elit commodo. Proident laboris enim duis anim eiusmod esse dolore anim ad adipisicing est. Nulla anim occaecat quis nostrud reprehenderit aute fugiat ad. Fugiat mollit exercitation consectetur nulla nostrud deserunt cupidatat magna officia mollit aliqua ad et. In id nostrud sunt dolor cillum officia qui.\r\n", - "registered": "2016-06-04T02:39:12 +04:00", - "latitude": -69.901124, - "longitude": -67.644923, - "tags": ["ex", "sit", "eiusmod", "ut", "quis", "aute", "enim"], - "friends": [ - { - "id": 0, - "name": "Evangeline Wolf" - }, - { - "id": 1, - "name": "Taylor Good" - }, - { - "id": 2, - "name": "Harper Weber" - } - ], - "greeting": "Hello, Perry Briggs! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9e615939712d1e3e", - "index": 58, - "guid": "946f011d-ee92-4b67-b5e4-4dc71d53f16b", - "isActive": false, - "balance": "$2,332.42", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Kerri Holden", - "gender": "female", - "company": "ORBAXTER", - "email": "kerriholden@orbaxter.com", - "phone": "+1 (971) 460-3619", - "address": "614 Whitty Lane, Lewis, Guam, 3152", - "about": "Ad incididunt culpa id non. Anim esse elit ex reprehenderit consectetur velit quis sunt excepteur. Laborum aliqua laborum proident amet sit do laborum voluptate eu. Voluptate eu velit magna Lorem non nostrud incididunt est eu id cillum enim aliquip velit.\r\n", - "registered": "2016-02-28T01:20:52 +05:00", - "latitude": -61.961594, - "longitude": 134.062414, - "tags": ["exercitation", "est", "sunt", "aute", "ut", "cupidatat", "do"], - "friends": [ - { - "id": 0, - "name": "Patterson Moran" - }, - { - "id": 1, - "name": "Hicks Terrell" - }, - { - "id": 2, - "name": "Hamilton Holcomb" - } - ], - "greeting": "Hello, Kerri Holden! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d03bd6ed78d2dad11", - "index": 59, - "guid": "a272b3da-cf1d-4fe4-8c51-3fc11da50766", - "isActive": true, - "balance": "$1,877.88", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Mcintyre Hurst", - "gender": "male", - "company": "PHORMULA", - "email": "mcintyrehurst@phormula.com", - "phone": "+1 (830) 530-2617", - "address": "893 Cumberland Walk, Stockdale, Oregon, 3650", - "about": "Ex nostrud irure sunt ut culpa ipsum ut proident commodo pariatur nostrud commodo duis. Consectetur laboris elit laborum cillum minim aliquip eiusmod sunt est est pariatur do. Id eu velit sit officia ea culpa excepteur exercitation laborum elit labore excepteur anim labore. Ex fugiat laboris sunt culpa minim nulla. In voluptate quis occaecat eu Lorem officia culpa duis. Culpa cupidatat ea proident aliquip aliqua.\r\n", - "registered": "2017-12-01T09:06:20 +05:00", - "latitude": -79.898146, - "longitude": -44.432446, - "tags": ["incididunt", "ex", "irure", "cillum", "ullamco", "sunt", "dolore"], - "friends": [ - { - "id": 0, - "name": "Lloyd Lowe" - }, - { - "id": 1, - "name": "Shana Luna" - }, - { - "id": 2, - "name": "Pierce Sanford" - } - ], - "greeting": "Hello, Mcintyre Hurst! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de9b6073424d8231f", - "index": 60, - "guid": "4ce2a2a4-b92f-4aa1-950f-bff061d66670", - "isActive": true, - "balance": "$3,145.07", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Valencia Maldonado", - "gender": "male", - "company": "MAGNEMO", - "email": "valenciamaldonado@magnemo.com", - "phone": "+1 (840) 584-3672", - "address": "913 Hausman Street, Wadsworth, Missouri, 3048", - "about": "Adipisicing proident velit officia dolor do in deserunt cillum dolore consequat. Anim quis veniam voluptate eiusmod id laboris eiusmod. Non amet officia aliquip dolore fugiat adipisicing consectetur anim amet. Proident proident velit officia ad sit ex enim incididunt eu. Ad amet pariatur quis ex magna qui ad laborum nostrud velit. Eiusmod ea ea incididunt elit occaecat mollit deserunt adipisicing. Veniam veniam adipisicing cillum magna eu pariatur deserunt enim elit nostrud et in voluptate.\r\n", - "registered": "2018-06-01T05:03:59 +04:00", - "latitude": 4.462784, - "longitude": 117.382221, - "tags": ["eu", "aliqua", "commodo", "qui", "esse", "fugiat", "et"], - "friends": [ - { - "id": 0, - "name": "Melva Lewis" - }, - { - "id": 1, - "name": "Santos Clarke" - }, - { - "id": 2, - "name": "Jean Chen" - } - ], - "greeting": "Hello, Valencia Maldonado! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9c66a31070564a95", - "index": 61, - "guid": "e7ad176d-c835-40b3-b50d-122b61f5e9eb", - "isActive": false, - "balance": "$2,028.54", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Washington Cantu", - "gender": "male", - "company": "COMSTRUCT", - "email": "washingtoncantu@comstruct.com", - "phone": "+1 (865) 470-2747", - "address": "120 Kingsland Avenue, Crawfordsville, Montana, 6706", - "about": "Deserunt consectetur Lorem non mollit magna ea ad aliquip incididunt laborum laboris culpa nostrud. Anim veniam sint dolor ipsum. Qui sint reprehenderit aliquip est. Excepteur nulla ad officia reprehenderit.\r\n", - "registered": "2015-11-03T05:57:52 +05:00", - "latitude": -41.543774, - "longitude": -172.213955, - "tags": ["aute", "irure", "pariatur", "irure", "et", "commodo", "mollit"], - "friends": [ - { - "id": 0, - "name": "Jayne Cook" - }, - { - "id": 1, - "name": "Diaz Murray" - }, - { - "id": 2, - "name": "Schneider Webster" - } - ], - "greeting": "Hello, Washington Cantu! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4e90c0dd607ad2a1", - "index": 62, - "guid": "702d89ad-ae38-4450-8907-f53899179ec2", - "isActive": true, - "balance": "$1,828.79", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Odessa Mcfarland", - "gender": "female", - "company": "TALAE", - "email": "odessamcfarland@talae.com", - "phone": "+1 (866) 468-2267", - "address": "585 Rockaway Avenue, Jacksonwald, Alaska, 388", - "about": "Eiusmod ut tempor tempor laboris. Officia magna elit et voluptate do officia enim irure labore enim. Esse reprehenderit cillum non minim non id ipsum ut fugiat.\r\n", - "registered": "2014-12-11T10:17:52 +05:00", - "latitude": 11.210857, - "longitude": -100.283737, - "tags": ["commodo", "fugiat", "aliqua", "esse", "esse", "culpa", "eu"], - "friends": [ - { - "id": 0, - "name": "Luisa Stokes" - }, - { - "id": 1, - "name": "Alyson Obrien" - }, - { - "id": 2, - "name": "Conner Decker" - } - ], - "greeting": "Hello, Odessa Mcfarland! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d58e4b54885f2d5e2", - "index": 63, - "guid": "590f0e23-4181-4b62-9db3-b4317ff257e8", - "isActive": false, - "balance": "$3,891.04", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Levine Mcdonald", - "gender": "male", - "company": "MEGALL", - "email": "levinemcdonald@megall.com", - "phone": "+1 (851) 561-2276", - "address": "789 Rodney Street, Orin, Kentucky, 2890", - "about": "Ad dolor consequat ullamco dolore eu incididunt eu officia. Duis cillum cupidatat culpa qui deserunt elit adipisicing. Non qui mollit nulla sint.\r\n", - "registered": "2015-09-25T12:25:49 +04:00", - "latitude": 23.55422, - "longitude": 158.836774, - "tags": ["eiusmod", "duis", "ullamco", "cillum", "aliqua", "pariatur", "culpa"], - "friends": [ - { - "id": 0, - "name": "Liz Berger" - }, - { - "id": 1, - "name": "Irwin Riggs" - }, - { - "id": 2, - "name": "Vargas Dominguez" - } - ], - "greeting": "Hello, Levine Mcdonald! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da1f044446a2fc53e", - "index": 64, - "guid": "cb081e3d-afb5-4e09-bac3-5107f27f17af", - "isActive": false, - "balance": "$1,616.02", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Baird Cooke", - "gender": "male", - "company": "MEMORA", - "email": "bairdcooke@memora.com", - "phone": "+1 (953) 570-3032", - "address": "322 Degraw Street, Allentown, Mississippi, 242", - "about": "Veniam anim minim veniam laboris voluptate culpa deserunt aliquip minim et laboris nulla et. Velit irure laboris culpa sint nostrud ea ipsum. Pariatur mollit incididunt nostrud id reprehenderit occaecat laborum nulla minim cupidatat sint ut. Aute ex commodo deserunt deserunt irure adipisicing laborum ut dolor proident duis.\r\n", - "registered": "2015-08-18T11:23:32 +04:00", - "latitude": -32.543122, - "longitude": 75.373886, - "tags": ["est", "aliquip", "laborum", "tempor", "adipisicing", "irure", "qui"], - "friends": [ - { - "id": 0, - "name": "Powers Melton" - }, - { - "id": 1, - "name": "Katie Steele" - }, - { - "id": 2, - "name": "Charity Clark" - } - ], - "greeting": "Hello, Baird Cooke! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd4407fdad8dd14f8", - "index": 65, - "guid": "94b36d8c-b864-4cae-8715-17b387730eeb", - "isActive": true, - "balance": "$2,813.66", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Estela Sanders", - "gender": "female", - "company": "SINGAVERA", - "email": "estelasanders@singavera.com", - "phone": "+1 (924) 414-2262", - "address": "680 Ocean Court, Neibert, North Dakota, 7453", - "about": "Labore amet occaecat cupidatat non exercitation et aute. Esse nisi laborum nisi anim ex ea Lorem elit sunt elit laborum. Mollit elit sunt labore laborum id labore amet velit exercitation incididunt deserunt. Aliquip irure anim est cupidatat exercitation esse deserunt aute consectetur sunt nulla. Consectetur amet ea in est.\r\n", - "registered": "2020-05-13T08:15:59 +04:00", - "latitude": -9.929706, - "longitude": 141.956936, - "tags": ["do", "aliqua", "aliqua", "amet", "voluptate", "laboris", "id"], - "friends": [ - { - "id": 0, - "name": "Letha Witt" - }, - { - "id": 1, - "name": "Cleveland Grimes" - }, - { - "id": 2, - "name": "Selma Bass" - } - ], - "greeting": "Hello, Estela Sanders! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6c540374764a7222", - "index": 66, - "guid": "b5474645-7bb0-453c-b7bb-f342263b4f8e", - "isActive": true, - "balance": "$1,860.78", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Deborah Jarvis", - "gender": "female", - "company": "MELBACOR", - "email": "deborahjarvis@melbacor.com", - "phone": "+1 (915) 576-2688", - "address": "531 Orient Avenue, Navarre, Federated States Of Micronesia, 3499", - "about": "Tempor excepteur fugiat minim sit qui magna ullamco est. Laboris enim ipsum elit nisi velit incididunt elit. Cupidatat cillum voluptate ex enim sunt anim labore eiusmod. Adipisicing culpa quis culpa quis Lorem adipisicing et minim duis eiusmod.\r\n", - "registered": "2015-11-02T02:00:17 +05:00", - "latitude": -14.676117, - "longitude": 173.908847, - "tags": ["amet", "elit", "laborum", "qui", "anim", "dolor", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Beulah Peck" - }, - { - "id": 1, - "name": "Stafford Barron" - }, - { - "id": 2, - "name": "Charlene Mcclain" - } - ], - "greeting": "Hello, Deborah Jarvis! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db23335c75c730e65", - "index": 67, - "guid": "f71d92a0-4e1c-4a03-ac14-1db4be219a20", - "isActive": false, - "balance": "$3,313.43", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Marissa Osborne", - "gender": "female", - "company": "TURNABOUT", - "email": "marissaosborne@turnabout.com", - "phone": "+1 (855) 514-3090", - "address": "206 Hendrickson Street, Ypsilanti, Maryland, 180", - "about": "Occaecat adipisicing aliquip fugiat eiusmod. Velit velit adipisicing ullamco proident dolor. Adipisicing laboris adipisicing nulla ipsum enim consequat nulla consectetur non. Nostrud minim est proident enim minim. Proident qui duis dolore ut mollit. Nisi cupidatat Lorem commodo eiusmod sit do minim velit adipisicing cillum ex laboris officia.\r\n", - "registered": "2020-02-10T10:20:03 +05:00", - "latitude": -89.423022, - "longitude": 144.349497, - "tags": ["sunt", "minim", "occaecat", "Lorem", "irure", "anim", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Garrison Shelton" - }, - { - "id": 1, - "name": "Freda Oneill" - }, - { - "id": 2, - "name": "Anthony Turner" - } - ], - "greeting": "Hello, Marissa Osborne! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3ba96c45eeeaff2c", - "index": 68, - "guid": "bb856e2f-8cc6-41fa-a1cb-3a49b9ddf9ed", - "isActive": true, - "balance": "$1,079.56", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Becker Goodman", - "gender": "male", - "company": "TOURMANIA", - "email": "beckergoodman@tourmania.com", - "phone": "+1 (899) 595-2680", - "address": "604 Knickerbocker Avenue, Leroy, Virgin Islands, 4275", - "about": "Aliqua ut proident non occaecat minim. Veniam laboris sunt aliquip aliqua non ut. Occaecat voluptate ullamco incididunt quis. Nostrud ad aliqua officia labore. Labore in exercitation nisi sit consectetur consectetur officia consectetur aliquip commodo dolore Lorem Lorem. Mollit dolor Lorem duis excepteur ut id cupidatat. Eu occaecat Lorem eu tempor reprehenderit cupidatat anim officia.\r\n", - "registered": "2019-04-27T05:52:50 +04:00", - "latitude": -2.874782, - "longitude": -117.042693, - "tags": ["ad", "nulla", "ea", "tempor", "enim", "laboris", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Hardy Bailey" - }, - { - "id": 1, - "name": "Brennan Cox" - }, - { - "id": 2, - "name": "Debora Gallagher" - } - ], - "greeting": "Hello, Becker Goodman! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1ef04b08b66b9d61", - "index": 69, - "guid": "7a2575c8-10d2-4d0d-85ab-02f671f4ab7b", - "isActive": true, - "balance": "$2,487.45", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Patsy Keith", - "gender": "female", - "company": "PYRAMIA", - "email": "patsykeith@pyramia.com", - "phone": "+1 (805) 464-3467", - "address": "944 McKinley Avenue, Vallonia, Pennsylvania, 5464", - "about": "Enim laboris anim exercitation id ut ipsum irure commodo. Do nisi sint ut ea veniam pariatur nulla excepteur voluptate et duis amet incididunt reprehenderit. Consectetur duis incididunt eu qui reprehenderit consectetur labore officia incididunt eiusmod dolore eiusmod dolore. Veniam sint proident culpa nostrud. In elit duis dolore labore anim culpa irure sunt Lorem pariatur minim. Voluptate in est culpa fugiat velit. Adipisicing aliquip eiusmod ullamco anim eiusmod consequat esse.\r\n", - "registered": "2017-12-13T07:35:43 +05:00", - "latitude": 22.538976, - "longitude": 23.127493, - "tags": ["laborum", "non", "aute", "sit", "incididunt", "ut", "aute"], - "friends": [ - { - "id": 0, - "name": "Georgina Harrington" - }, - { - "id": 1, - "name": "Walker Kidd" - }, - { - "id": 2, - "name": "Cathleen Morris" - } - ], - "greeting": "Hello, Patsy Keith! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8f8e18b5d60d3a26", - "index": 70, - "guid": "fd423306-d934-40ce-891a-d65376cdd909", - "isActive": false, - "balance": "$3,171.36", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Cooper Hull", - "gender": "male", - "company": "ZENTRY", - "email": "cooperhull@zentry.com", - "phone": "+1 (878) 533-3521", - "address": "425 Ridge Court, Gambrills, Washington, 2299", - "about": "Aute culpa Lorem ipsum velit aliqua nisi anim. Ipsum velit sit irure cillum aliqua qui minim eiusmod ad sunt irure aliquip ullamco. Est incididunt aliqua minim mollit Lorem officia adipisicing voluptate eu sit occaecat pariatur exercitation deserunt.\r\n", - "registered": "2017-06-02T08:02:48 +04:00", - "latitude": 70.117286, - "longitude": -94.848861, - "tags": ["anim", "labore", "ut", "aliquip", "mollit", "ex", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Levy Ortega" - }, - { - "id": 1, - "name": "Ingrid Shaw" - }, - { - "id": 2, - "name": "Barrera Farmer" - } - ], - "greeting": "Hello, Cooper Hull! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d324d241841493644", - "index": 71, - "guid": "cef933f3-8e9b-45cd-98c4-7b5140127f8b", - "isActive": false, - "balance": "$1,304.21", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Workman Wagner", - "gender": "male", - "company": "HANDSHAKE", - "email": "workmanwagner@handshake.com", - "phone": "+1 (881) 430-2995", - "address": "513 Beadel Street, Frizzleburg, Illinois, 3658", - "about": "Duis nulla commodo aliqua consectetur ullamco culpa dolor laboris. Lorem labore nisi veniam Lorem anim mollit magna reprehenderit laborum amet. Anim occaecat sunt amet dolor consequat qui cupidatat laborum fugiat cillum esse commodo aute. Velit nisi cillum mollit nostrud sunt culpa deserunt aliqua proident adipisicing incididunt veniam laborum ullamco. Proident adipisicing quis nulla mollit adipisicing pariatur nostrud est ut. Deserunt nulla enim cupidatat magna quis ex officia ullamco cillum quis elit cupidatat exercitation esse. Cillum ad id mollit veniam minim irure mollit aliquip incididunt dolor id cillum non tempor.\r\n", - "registered": "2020-08-13T10:07:43 +04:00", - "latitude": 79.80239, - "longitude": 169.297899, - "tags": ["esse", "elit", "nulla", "magna", "dolore", "eiusmod", "quis"], - "friends": [ - { - "id": 0, - "name": "Sexton Macdonald" - }, - { - "id": 1, - "name": "Felecia Madden" - }, - { - "id": 2, - "name": "Trina Dickson" - } - ], - "greeting": "Hello, Workman Wagner! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de43d5ba8f2e6a110", - "index": 72, - "guid": "3521d6ab-3bd9-499f-ba1f-f97760c2afa0", - "isActive": false, - "balance": "$3,222.67", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Shelton Tran", - "gender": "male", - "company": "MEDALERT", - "email": "sheltontran@medalert.com", - "phone": "+1 (808) 512-2113", - "address": "359 Folsom Place, Driftwood, New Hampshire, 2291", - "about": "Duis cillum consequat et aute aute magna. Excepteur do mollit commodo enim deserunt nisi aliqua sit ad culpa eu sint. Pariatur elit laborum proident consectetur tempor veniam id Lorem. Ex velit incididunt ipsum nulla eu fugiat deserunt laboris nostrud proident eu enim eu deserunt. Nulla nisi ipsum pariatur occaecat irure nisi ex velit. Velit esse qui velit consectetur.\r\n", - "registered": "2019-10-25T11:58:20 +04:00", - "latitude": 4.770415, - "longitude": 15.011565, - "tags": ["do", "velit", "eu", "et", "est", "ad", "proident"], - "friends": [ - { - "id": 0, - "name": "Clements Patel" - }, - { - "id": 1, - "name": "Brooks England" - }, - { - "id": 2, - "name": "Winifred Chapman" - } - ], - "greeting": "Hello, Shelton Tran! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd2ff9f703ff1c60e", - "index": 73, - "guid": "072ae466-a791-43bd-a702-ad6c39fb8737", - "isActive": false, - "balance": "$3,791.28", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "David Gaines", - "gender": "male", - "company": "TELEQUIET", - "email": "davidgaines@telequiet.com", - "phone": "+1 (860) 465-3795", - "address": "189 Roosevelt Court, Ada, Colorado, 4180", - "about": "Nulla sint aliquip excepteur excepteur ipsum in elit ex. Ipsum sit ea eu officia nisi velit Lorem irure veniam commodo pariatur. Eiusmod nostrud ea aliquip dolore culpa minim tempor ea voluptate sint consequat.\r\n", - "registered": "2018-04-07T11:07:07 +04:00", - "latitude": -5.154992, - "longitude": -143.134701, - "tags": ["ex", "in", "anim", "eu", "deserunt", "Lorem", "in"], - "friends": [ - { - "id": 0, - "name": "Evangelina Pitts" - }, - { - "id": 1, - "name": "Barry Lambert" - }, - { - "id": 2, - "name": "Chris Holt" - } - ], - "greeting": "Hello, David Gaines! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d328136317d6865af", - "index": 74, - "guid": "c836909a-5ea7-4b98-a2a8-b30e867a57e3", - "isActive": true, - "balance": "$3,477.93", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Rosalind Mayo", - "gender": "female", - "company": "ISOSWITCH", - "email": "rosalindmayo@isoswitch.com", - "phone": "+1 (891) 549-2187", - "address": "472 Tabor Court, Veguita, Maine, 389", - "about": "Non est deserunt aliquip pariatur irure nostrud adipisicing dolor commodo fugiat proident. Ea irure et dolor aute ipsum. Eu sunt proident officia labore quis esse eu velit ex cillum dolor sit amet nisi. Amet minim occaecat laborum velit. Consequat non proident Lorem minim amet proident eiusmod exercitation elit exercitation ullamco sunt adipisicing.\r\n", - "registered": "2015-12-26T03:17:32 +05:00", - "latitude": 80.842933, - "longitude": 99.116185, - "tags": ["ex", "incididunt", "consequat", "id", "occaecat", "do", "ut"], - "friends": [ - { - "id": 0, - "name": "Cara Noble" - }, - { - "id": 1, - "name": "Benjamin Hooper" - }, - { - "id": 2, - "name": "Moody Waters" - } - ], - "greeting": "Hello, Rosalind Mayo! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dce236b979c36fbcc", - "index": 75, - "guid": "9e50b2be-2929-4fa3-96ad-a6c9690b5397", - "isActive": false, - "balance": "$2,461.19", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Essie Ramsey", - "gender": "female", - "company": "BUZZNESS", - "email": "essieramsey@buzzness.com", - "phone": "+1 (817) 493-3942", - "address": "753 Wakeman Place, Fairlee, South Carolina, 7889", - "about": "Labore laboris eiusmod culpa adipisicing pariatur sit ipsum irure quis. Laborum velit minim fugiat officia. Excepteur sint aliqua anim elit est nisi aute consectetur proident eiusmod. Labore id proident minim est dolore veniam adipisicing.\r\n", - "registered": "2019-10-11T07:57:40 +04:00", - "latitude": -32.172958, - "longitude": -135.683704, - "tags": ["sit", "exercitation", "excepteur", "officia", "id", "aliquip", "ea"], - "friends": [ - { - "id": 0, - "name": "Williams Horton" - }, - { - "id": 1, - "name": "Golden Bryant" - }, - { - "id": 2, - "name": "Simpson Dotson" - } - ], - "greeting": "Hello, Essie Ramsey! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d30a4ebb62aac8bf4", - "index": 76, - "guid": "55e724c0-43ab-4261-8476-f2341e48bd05", - "isActive": true, - "balance": "$3,261.37", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Dean Griffith", - "gender": "male", - "company": "VICON", - "email": "deangriffith@vicon.com", - "phone": "+1 (842) 430-3096", - "address": "858 Hutchinson Court, Goodville, Connecticut, 3602", - "about": "Pariatur fugiat exercitation do et. Amet deserunt qui eiusmod est irure irure id proident aliquip fugiat ullamco occaecat adipisicing. Ipsum nostrud aliquip consectetur cillum aliqua anim fugiat duis veniam tempor aliqua consectetur tempor. Reprehenderit do labore nostrud nostrud commodo aliqua tempor nulla Lorem fugiat proident magna. Reprehenderit quis et do culpa occaecat duis ipsum esse enim officia excepteur. Nisi anim dolore veniam magna fugiat eiusmod ipsum.\r\n", - "registered": "2015-10-16T09:55:25 +04:00", - "latitude": -11.412915, - "longitude": 129.070642, - "tags": ["proident", "pariatur", "voluptate", "nisi", "proident", "quis", "mollit"], - "friends": [ - { - "id": 0, - "name": "Lula Fisher" - }, - { - "id": 1, - "name": "Laurel Tucker" - }, - { - "id": 2, - "name": "Snow Palmer" - } - ], - "greeting": "Hello, Dean Griffith! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dff826b51e6fa99df", - "index": 77, - "guid": "5bad18a8-a511-4c4f-954a-87fa00ee9212", - "isActive": true, - "balance": "$1,604.00", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Lavonne Harrison", - "gender": "female", - "company": "GENESYNK", - "email": "lavonneharrison@genesynk.com", - "phone": "+1 (907) 538-3625", - "address": "956 Jerome Avenue, Bluffview, Virginia, 1265", - "about": "Amet cillum eu adipisicing laboris ullamco voluptate ut deserunt. Laborum nostrud nisi enim labore consequat excepteur ea cupidatat ullamco tempor nulla. Laborum ut deserunt eiusmod ex sunt aliquip occaecat non qui. Nulla officia culpa cillum elit do dolor sunt nisi ea est incididunt irure magna exercitation. Esse ullamco non pariatur officia cupidatat magna enim. Irure commodo sit dolore adipisicing ad.\r\n", - "registered": "2017-07-29T05:04:38 +04:00", - "latitude": 72.367275, - "longitude": -79.4072, - "tags": ["cupidatat", "veniam", "ipsum", "quis", "tempor", "nisi", "minim"], - "friends": [ - { - "id": 0, - "name": "Daniel Clemons" - }, - { - "id": 1, - "name": "Rebecca Mccullough" - }, - { - "id": 2, - "name": "Blevins Barnett" - } - ], - "greeting": "Hello, Lavonne Harrison! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3b61ab846e29c990", - "index": 78, - "guid": "b7330568-dcab-4548-ba52-a41545dbfe29", - "isActive": true, - "balance": "$1,859.08", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Mary King", - "gender": "female", - "company": "TELPOD", - "email": "maryking@telpod.com", - "phone": "+1 (963) 533-2377", - "address": "296 Dahlgreen Place, Wescosville, Georgia, 552", - "about": "Commodo sint irure in anim. Consectetur ut amet ullamco nisi minim veniam sit pariatur esse. Ipsum veniam duis excepteur ipsum anim mollit duis est voluptate voluptate amet qui ex. Nisi enim eu sint non est magna elit. Aliqua aliquip aliquip sunt eiusmod sunt eu irure quis veniam consequat eiusmod mollit in magna. Fugiat officia pariatur sunt proident aliquip deserunt est voluptate.\r\n", - "registered": "2019-05-03T06:28:46 +04:00", - "latitude": 8.380545, - "longitude": 88.28227, - "tags": ["nostrud", "culpa", "amet", "ullamco", "laborum", "dolor", "ea"], - "friends": [ - { - "id": 0, - "name": "Buckley Robinson" - }, - { - "id": 1, - "name": "Mandy Nguyen" - }, - { - "id": 2, - "name": "Lillie Norris" - } - ], - "greeting": "Hello, Mary King! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df417e9fdf95e8539", - "index": 79, - "guid": "32591d61-d956-457b-a84f-2cd9ba26adcb", - "isActive": false, - "balance": "$2,648.32", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Bettie Acevedo", - "gender": "female", - "company": "ELITA", - "email": "bettieacevedo@elita.com", - "phone": "+1 (877) 539-2206", - "address": "788 Beach Place, Dorneyville, New Jersey, 8985", - "about": "Amet cillum eu dolor amet ipsum sunt enim labore cupidatat. Tempor aliqua est proident qui. Commodo enim pariatur excepteur eiusmod nulla amet proident Lorem in reprehenderit incididunt ex.\r\n", - "registered": "2015-06-24T11:48:14 +04:00", - "latitude": -65.352057, - "longitude": 96.891813, - "tags": ["proident", "sit", "ut", "in", "ipsum", "sunt", "ut"], - "friends": [ - { - "id": 0, - "name": "Veronica Hinton" - }, - { - "id": 1, - "name": "Hilda Whitfield" - }, - { - "id": 2, - "name": "Maureen Dunlap" - } - ], - "greeting": "Hello, Bettie Acevedo! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0fabe1c1cb4f4b26", - "index": 80, - "guid": "b387c2ec-fe78-4239-8415-0ef30f59c1bb", - "isActive": true, - "balance": "$3,931.69", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Gretchen Graves", - "gender": "female", - "company": "XYMONK", - "email": "gretchengraves@xymonk.com", - "phone": "+1 (999) 587-3770", - "address": "314 Estate Road, Marenisco, Minnesota, 9762", - "about": "Voluptate fugiat labore consequat incididunt id adipisicing cillum. Enim anim ex adipisicing eiusmod. Duis incididunt cupidatat id incididunt laborum dolore ad ad incididunt incididunt ut laborum ipsum. Esse ea aliqua enim deserunt qui ex eu culpa tempor esse.\r\n", - "registered": "2016-11-14T01:03:33 +05:00", - "latitude": 73.565909, - "longitude": 167.994109, - "tags": ["quis", "culpa", "dolor", "do", "proident", "mollit", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Shelia Boyd" - }, - { - "id": 1, - "name": "Valarie Duran" - }, - { - "id": 2, - "name": "Alexandra Carr" - } - ], - "greeting": "Hello, Gretchen Graves! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d56442b5301997455", - "index": 81, - "guid": "78d072ef-a73d-4937-99aa-f04325c121f6", - "isActive": false, - "balance": "$3,637.71", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Lynch Hebert", - "gender": "male", - "company": "SILODYNE", - "email": "lynchhebert@silodyne.com", - "phone": "+1 (991) 477-3813", - "address": "241 Beayer Place, Oley, Texas, 9188", - "about": "Culpa incididunt qui veniam est non. Cillum amet irure ad in anim consectetur incididunt fugiat anim irure ex irure. Qui voluptate exercitation labore amet nisi voluptate pariatur ex enim sint. Excepteur proident dolor duis quis ullamco non esse. Ea laboris sit anim do enim incididunt commodo labore quis ipsum sunt sit ullamco. Excepteur culpa magna commodo ex eu duis proident occaecat velit exercitation.\r\n", - "registered": "2016-11-21T10:42:07 +05:00", - "latitude": 48.424878, - "longitude": 147.252128, - "tags": ["sit", "excepteur", "fugiat", "proident", "sunt", "proident", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Estes Allen" - }, - { - "id": 1, - "name": "Fitzpatrick Conrad" - }, - { - "id": 2, - "name": "Maria Ray" - } - ], - "greeting": "Hello, Lynch Hebert! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbaa6051dcdc76e30", - "index": 82, - "guid": "12dbf4cb-6dbf-478a-af24-1687887d983a", - "isActive": true, - "balance": "$1,866.07", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Irene Charles", - "gender": "female", - "company": "ZOARERE", - "email": "irenecharles@zoarere.com", - "phone": "+1 (885) 535-3540", - "address": "407 Highland Place, Ripley, Alabama, 4180", - "about": "Non id deserunt non id aliqua consequat eu incididunt officia mollit eu duis Lorem anim. Et do pariatur laboris veniam adipisicing. Id sint do consectetur velit dolore ipsum duis reprehenderit eiusmod in laboris. Culpa nulla pariatur cupidatat exercitation. Officia cupidatat ea ut ut ad laboris ex sunt culpa aute do sint sunt. Non veniam tempor voluptate exercitation est ad dolore sit Lorem mollit.\r\n", - "registered": "2018-10-17T05:32:04 +04:00", - "latitude": -69.893883, - "longitude": 55.597131, - "tags": ["commodo", "sunt", "occaecat", "mollit", "eu", "consequat", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Colon Vasquez" - }, - { - "id": 1, - "name": "Virgie Farley" - }, - { - "id": 2, - "name": "Barnes Sellers" - } - ], - "greeting": "Hello, Irene Charles! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7109acec765ddfe5", - "index": 83, - "guid": "4865e21f-bc69-485b-bb70-a3b074371a79", - "isActive": true, - "balance": "$2,985.43", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Everett Herman", - "gender": "male", - "company": "NIXELT", - "email": "everettherman@nixelt.com", - "phone": "+1 (862) 465-2122", - "address": "833 Williams Court, Vivian, Rhode Island, 1254", - "about": "Minim consequat magna commodo ullamco veniam ipsum non ipsum sint sit do reprehenderit mollit. Cillum est est labore non anim. Tempor nisi enim mollit voluptate velit. Laboris enim occaecat veniam veniam fugiat irure. Do anim enim tempor veniam minim ut fugiat ut laborum et ea.\r\n", - "registered": "2014-10-08T10:18:56 +04:00", - "latitude": 54.170293, - "longitude": 25.658494, - "tags": ["est", "voluptate", "minim", "sit", "in", "laborum", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Orr Mcdowell" - }, - { - "id": 1, - "name": "Mcguire Jennings" - }, - { - "id": 2, - "name": "Soto Arnold" - } - ], - "greeting": "Hello, Everett Herman! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d01bb35739d285444", - "index": 84, - "guid": "6f9c6b9c-3bd9-49d4-b5c5-698492f7bfa3", - "isActive": true, - "balance": "$1,117.06", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Darcy Downs", - "gender": "female", - "company": "DAISU", - "email": "darcydowns@daisu.com", - "phone": "+1 (838) 509-2965", - "address": "545 Cook Street, Bladensburg, Florida, 1966", - "about": "Nostrud est est quis est in nulla cillum dolore. Culpa duis nisi incididunt est ullamco dolor non labore nostrud ut excepteur. Consequat exercitation ea magna minim tempor minim eu. Lorem mollit aliquip aute fugiat aute. Minim ad velit ea nostrud enim excepteur et quis. Mollit sunt excepteur proident velit velit deserunt pariatur irure dolor minim sunt ea. Elit ex adipisicing aliqua ullamco deserunt sunt laboris ut sunt nulla irure deserunt voluptate.\r\n", - "registered": "2015-08-22T08:55:01 +04:00", - "latitude": -89.426829, - "longitude": -154.309109, - "tags": ["id", "velit", "deserunt", "fugiat", "minim", "deserunt", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Molina Hickman" - }, - { - "id": 1, - "name": "Kimberly Conner" - }, - { - "id": 2, - "name": "Odom Rojas" - } - ], - "greeting": "Hello, Darcy Downs! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d14330d63d4dca3da", - "index": 85, - "guid": "31da0b64-e2a5-4845-bbfa-1473b01e212c", - "isActive": true, - "balance": "$3,810.20", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Roach Vega", - "gender": "male", - "company": "MALATHION", - "email": "roachvega@malathion.com", - "phone": "+1 (957) 493-2518", - "address": "444 Vermont Court, Chase, Indiana, 8948", - "about": "Et qui reprehenderit proident proident adipisicing esse proident quis irure labore voluptate aute labore velit. Labore minim nulla nisi amet anim irure ut et anim exercitation. Dolore eu do tempor pariatur. Id nulla nulla duis exercitation commodo sint labore eiusmod reprehenderit excepteur. Sunt sunt incididunt exercitation dolore anim laboris minim minim exercitation duis dolore commodo ipsum consectetur. Irure aliqua velit sint cillum Lorem dolore amet est. Dolore laboris voluptate nostrud exercitation irure adipisicing nisi quis proident veniam ad magna do quis.\r\n", - "registered": "2019-06-11T03:41:01 +04:00", - "latitude": -54.441823, - "longitude": 20.779413, - "tags": ["Lorem", "nostrud", "incididunt", "ex", "Lorem", "quis", "anim"], - "friends": [ - { - "id": 0, - "name": "Mooney Levy" - }, - { - "id": 1, - "name": "Alana Albert" - }, - { - "id": 2, - "name": "Megan Bridges" - } - ], - "greeting": "Hello, Roach Vega! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db880f2e8edd1e449", - "index": 86, - "guid": "a60bff50-91fc-440d-8221-eeadc86b1ba6", - "isActive": false, - "balance": "$1,367.90", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Peggy Bright", - "gender": "female", - "company": "PLASMOSIS", - "email": "peggybright@plasmosis.com", - "phone": "+1 (835) 544-3094", - "address": "933 Cobek Court, Chestnut, Northern Mariana Islands, 3582", - "about": "Dolore nostrud fugiat cupidatat magna adipisicing proident quis anim ex laborum. Consectetur nulla elit officia velit in anim minim. Cupidatat eu adipisicing irure labore irure ut ipsum excepteur dolore et qui nulla. Irure ipsum reprehenderit irure nostrud fugiat nisi incididunt ullamco officia eiusmod id exercitation irure ad. Exercitation minim incididunt ad fugiat laborum qui nostrud.\r\n", - "registered": "2019-06-10T06:30:57 +04:00", - "latitude": 60.412739, - "longitude": 169.617915, - "tags": ["dolor", "esse", "eiusmod", "cillum", "deserunt", "esse", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Todd Pratt" - }, - { - "id": 1, - "name": "Marsha Irwin" - }, - { - "id": 2, - "name": "Mcclure Hays" - } - ], - "greeting": "Hello, Peggy Bright! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db0e39a7888ffc71d", - "index": 87, - "guid": "2f96bafc-4fe5-4e6c-8d9a-878a1c6237cc", - "isActive": true, - "balance": "$2,869.19", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Carver Larson", - "gender": "male", - "company": "EQUICOM", - "email": "carverlarson@equicom.com", - "phone": "+1 (885) 589-2679", - "address": "815 Schenck Avenue, Carlton, Idaho, 2998", - "about": "Proident irure ipsum cupidatat labore esse Lorem deserunt veniam. Et amet eiusmod nisi ea proident veniam mollit est cupidatat laborum sit nisi culpa. Excepteur aliqua eiusmod sint est. Et amet elit et deserunt mollit. Nostrud id magna minim ex est duis amet. Sint qui pariatur non nisi deserunt irure ullamco. Minim consectetur eiusmod Lorem dolore minim et pariatur nisi tempor quis officia.\r\n", - "registered": "2015-01-18T07:47:24 +05:00", - "latitude": -7.836222, - "longitude": -175.111413, - "tags": ["dolor", "ea", "dolor", "proident", "officia", "et", "minim"], - "friends": [ - { - "id": 0, - "name": "Jodi Hoffman" - }, - { - "id": 1, - "name": "Williamson Barber" - }, - { - "id": 2, - "name": "Delores Riley" - } - ], - "greeting": "Hello, Carver Larson! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d084d48f9f6180845", - "index": 88, - "guid": "d0a3fdfa-18e9-45c7-ba90-57fff4f4b815", - "isActive": true, - "balance": "$2,930.54", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Jenna Stanley", - "gender": "female", - "company": "TERSANKI", - "email": "jennastanley@tersanki.com", - "phone": "+1 (896) 558-3584", - "address": "430 Irving Place, Fowlerville, District Of Columbia, 7359", - "about": "Ullamco aute laboris ad occaecat esse. Ipsum dolor non exercitation nostrud tempor laboris mollit. Ut eu sunt quis velit aute Lorem.\r\n", - "registered": "2015-10-31T02:08:19 +04:00", - "latitude": -16.213982, - "longitude": 121.979012, - "tags": ["laborum", "mollit", "id", "labore", "enim", "consequat", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Myrtle Bush" - }, - { - "id": 1, - "name": "Faye Green" - }, - { - "id": 2, - "name": "Maldonado Huffman" - } - ], - "greeting": "Hello, Jenna Stanley! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc799f59cb8deb8ba", - "index": 89, - "guid": "54558897-0819-4904-a3b6-3b0b6afe323f", - "isActive": true, - "balance": "$2,359.60", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Martin Atkinson", - "gender": "male", - "company": "ZENTHALL", - "email": "martinatkinson@zenthall.com", - "phone": "+1 (892) 566-2933", - "address": "996 Morton Street, Belfair, New Mexico, 7144", - "about": "Reprehenderit magna velit labore occaecat proident anim tempor cupidatat dolor excepteur elit. Aliqua dolore esse duis incididunt dolor aliquip reprehenderit consequat laborum pariatur Lorem voluptate. Labore sint Lorem excepteur nostrud ipsum occaecat. Sit irure sunt eiusmod minim laborum veniam ipsum sunt. Enim sunt adipisicing fugiat qui. Cillum nulla sint dolore amet consectetur. Tempor quis tempor ea aute ad veniam consectetur non non non adipisicing non.\r\n", - "registered": "2014-05-01T10:37:31 +04:00", - "latitude": 56.123109, - "longitude": -15.973275, - "tags": ["eiusmod", "in", "pariatur", "sint", "excepteur", "proident", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Tyson Weaver" - }, - { - "id": 1, - "name": "Lee Bender" - }, - { - "id": 2, - "name": "Cameron Burris" - } - ], - "greeting": "Hello, Martin Atkinson! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df342a57571b2027e", - "index": 90, - "guid": "59337bc1-822c-4ab6-8620-8ee6fa517f53", - "isActive": true, - "balance": "$2,583.61", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Randolph Bell", - "gender": "male", - "company": "MAROPTIC", - "email": "randolphbell@maroptic.com", - "phone": "+1 (857) 453-2983", - "address": "469 Kensington Walk, Hendersonville, South Dakota, 5238", - "about": "Mollit amet et do ut occaecat voluptate Lorem occaecat magna. Cillum do voluptate Lorem Lorem non adipisicing qui labore aute ad laboris reprehenderit. Deserunt quis pariatur qui Lorem fugiat pariatur anim culpa aute reprehenderit sunt non. Do ut ex aliquip laborum nostrud laboris incididunt magna proident eiusmod reprehenderit in. Id minim id pariatur ullamco aliquip officia amet minim incididunt. Esse adipisicing ipsum et eu in velit enim duis irure dolore consectetur eu deserunt consequat.\r\n", - "registered": "2017-08-09T06:42:01 +04:00", - "latitude": 12.844137, - "longitude": 134.64787, - "tags": ["aliquip", "cillum", "voluptate", "dolore", "aute", "dolore", "in"], - "friends": [ - { - "id": 0, - "name": "Bean Craft" - }, - { - "id": 1, - "name": "Julianne Gallegos" - }, - { - "id": 2, - "name": "Dixie Norman" - } - ], - "greeting": "Hello, Randolph Bell! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de68522218cfba749", - "index": 91, - "guid": "c89f544e-b8a6-4472-b887-5feffa160bd2", - "isActive": false, - "balance": "$2,843.19", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Dorothy Kennedy", - "gender": "female", - "company": "KNOWLYSIS", - "email": "dorothykennedy@knowlysis.com", - "phone": "+1 (850) 540-2700", - "address": "333 Bedford Avenue, Cochranville, American Samoa, 6881", - "about": "Duis exercitation nulla commodo magna sunt magna dolor. Esse in nostrud amet ut. Aute consectetur velit aliqua labore exercitation sint. Et mollit anim sunt minim dolor consectetur fugiat.\r\n", - "registered": "2020-07-03T06:11:46 +04:00", - "latitude": 15.973565, - "longitude": -122.600116, - "tags": ["Lorem", "Lorem", "velit", "nostrud", "elit", "quis", "nisi"], - "friends": [ - { - "id": 0, - "name": "Hensley Frank" - }, - { - "id": 1, - "name": "Eugenia Lester" - }, - { - "id": 2, - "name": "Knight Baker" - } - ], - "greeting": "Hello, Dorothy Kennedy! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d6267e95fb4616274", - "index": 92, - "guid": "41cc2795-3ca5-4691-9ca9-da918f8a6364", - "isActive": false, - "balance": "$1,187.45", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Briggs Shaffer", - "gender": "male", - "company": "ZENTIX", - "email": "briggsshaffer@zentix.com", - "phone": "+1 (969) 586-3449", - "address": "562 Baltic Street, Bowmansville, Iowa, 2277", - "about": "Mollit reprehenderit et excepteur ex aliqua magna aliqua ipsum labore consequat officia in esse. Qui do Lorem deserunt anim exercitation eu irure mollit. Veniam elit anim excepteur mollit sint nostrud amet eu. Occaecat esse aute voluptate proident laborum est magna minim deserunt. Nostrud sunt sit elit consequat dolore culpa est aliqua nulla aliqua sunt velit. Et mollit velit commodo nostrud duis non magna ad exercitation. Cupidatat nostrud cillum commodo voluptate duis fugiat cillum tempor enim.\r\n", - "registered": "2015-08-24T04:54:02 +04:00", - "latitude": -73.792957, - "longitude": -39.025077, - "tags": ["qui", "proident", "aliqua", "esse", "excepteur", "labore", "nulla"], - "friends": [ - { - "id": 0, - "name": "Butler Byrd" - }, - { - "id": 1, - "name": "Francesca Adams" - }, - { - "id": 2, - "name": "Alvarado Armstrong" - } - ], - "greeting": "Hello, Briggs Shaffer! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da59bbbc5a6595528", - "index": 93, - "guid": "409933eb-d5be-4c5a-83b6-9ae880f6d08a", - "isActive": true, - "balance": "$2,922.58", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Bonner Kemp", - "gender": "male", - "company": "TELEPARK", - "email": "bonnerkemp@telepark.com", - "phone": "+1 (925) 563-3093", - "address": "456 Livingston Street, Bartonsville, Palau, 6980", - "about": "Exercitation anim officia tempor dolor anim cillum nostrud. Ullamco consectetur voluptate reprehenderit qui sint ullamco laboris excepteur. Laborum eu ad velit cupidatat do ex eiusmod nostrud anim dolor. Qui et ad adipisicing velit exercitation nostrud. Ullamco minim in id sint elit.\r\n", - "registered": "2019-01-22T07:31:15 +05:00", - "latitude": 49.628363, - "longitude": 134.470461, - "tags": ["ex", "excepteur", "incididunt", "velit", "pariatur", "mollit", "nulla"], - "friends": [ - { - "id": 0, - "name": "Geraldine Stein" - }, - { - "id": 1, - "name": "Britney Aguilar" - }, - { - "id": 2, - "name": "Farmer Glass" - } - ], - "greeting": "Hello, Bonner Kemp! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4827fab9c8a1414a", - "index": 94, - "guid": "28943713-b812-4e52-8ab5-8bd16f891a47", - "isActive": true, - "balance": "$3,443.29", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Trisha Allison", - "gender": "female", - "company": "XPLOR", - "email": "trishaallison@xplor.com", - "phone": "+1 (978) 527-2735", - "address": "536 Voorhies Avenue, Moraida, West Virginia, 4883", - "about": "Esse reprehenderit do tempor ullamco ut. Irure cillum culpa officia in pariatur anim occaecat in mollit. Exercitation aliquip fugiat sunt laborum amet duis adipisicing nisi consequat amet dolore. Duis ea enim occaecat adipisicing elit culpa amet. Laborum dolor duis nostrud Lorem sit.\r\n", - "registered": "2018-01-23T11:59:19 +05:00", - "latitude": -80.779995, - "longitude": -81.373252, - "tags": ["ad", "cupidatat", "labore", "eiusmod", "ea", "elit", "commodo"], - "friends": [ - { - "id": 0, - "name": "Janice West" - }, - { - "id": 1, - "name": "Ramirez Hammond" - }, - { - "id": 2, - "name": "Jacklyn Blackburn" - } - ], - "greeting": "Hello, Trisha Allison! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0524377f8b41e102", - "index": 95, - "guid": "c71deb51-8905-44a3-9378-4a156b12a35a", - "isActive": false, - "balance": "$3,529.59", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Joseph Bernard", - "gender": "male", - "company": "EXPOSA", - "email": "josephbernard@exposa.com", - "phone": "+1 (906) 582-3501", - "address": "975 Pleasant Place, Knowlton, New York, 7124", - "about": "Laboris aute fugiat sit eu magna adipisicing exercitation minim. Adipisicing fugiat Lorem consequat incididunt nisi ut amet adipisicing consectetur eu id duis. Exercitation velit incididunt qui sint consequat reprehenderit voluptate dolor ullamco anim. Lorem minim ex ad nisi ea laborum eiusmod. Consequat labore laboris dolor minim ea esse aliqua quis. Incididunt ad magna ipsum duis ea aute esse ad. In do cillum anim aliqua ex.\r\n", - "registered": "2020-01-28T12:07:15 +05:00", - "latitude": -29.925545, - "longitude": -144.24741, - "tags": ["ea", "elit", "ex", "ea", "sint", "magna", "do"], - "friends": [ - { - "id": 0, - "name": "Spears Parks" - }, - { - "id": 1, - "name": "Joanne Logan" - }, - { - "id": 2, - "name": "Chen Martin" - } - ], - "greeting": "Hello, Joseph Bernard! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dacb01e8e3b75b179", - "index": 96, - "guid": "7c8bed4e-43a4-4014-a8db-a11c714c6dc6", - "isActive": true, - "balance": "$2,716.16", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Morgan Davidson", - "gender": "male", - "company": "XELEGYL", - "email": "morgandavidson@xelegyl.com", - "phone": "+1 (986) 404-2044", - "address": "941 Poplar Street, Marysville, Hawaii, 2374", - "about": "Quis aliquip laborum deserunt sunt esse non est eiusmod irure pariatur labore dolor magna laborum. Consequat do enim eiusmod officia consectetur sunt. Dolore Lorem aliquip id ipsum amet qui do duis magna pariatur elit. Culpa commodo reprehenderit exercitation eiusmod in proident cupidatat non.\r\n", - "registered": "2019-07-08T09:14:45 +04:00", - "latitude": 78.531831, - "longitude": 3.390344, - "tags": ["commodo", "anim", "enim", "eu", "elit", "irure", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Gilbert Bartlett" - }, - { - "id": 1, - "name": "Goldie Garrison" - }, - { - "id": 2, - "name": "Eliza Newman" - } - ], - "greeting": "Hello, Morgan Davidson! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d5695787723e77e99", - "index": 97, - "guid": "2bb09686-2c0e-41f7-8cec-415975ecf4db", - "isActive": false, - "balance": "$2,884.87", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Adrian Brooks", - "gender": "female", - "company": "AMRIL", - "email": "adrianbrooks@amril.com", - "phone": "+1 (927) 402-3052", - "address": "689 Buffalo Avenue, Lafferty, Nebraska, 8097", - "about": "Sunt aliqua deserunt pariatur mollit ex do cupidatat ullamco. Sunt consectetur irure reprehenderit nostrud quis nostrud aute nostrud cillum est et ex. Adipisicing minim voluptate mollit ut duis. Dolore labore amet et sit incididunt quis velit sint nostrud eiusmod sit magna. Dolor quis culpa occaecat ea qui. Cillum esse nisi fugiat nulla ullamco aliqua reprehenderit. Eu laborum ipsum excepteur mollit Lorem adipisicing sint sunt proident sint minim amet et amet.\r\n", - "registered": "2016-10-14T05:11:00 +04:00", - "latitude": -8.221099, - "longitude": 68.42464, - "tags": ["est", "eu", "duis", "laborum", "exercitation", "deserunt", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Campbell Juarez" - }, - { - "id": 1, - "name": "Mullins Humphrey" - }, - { - "id": 2, - "name": "Velazquez Woodard" - } - ], - "greeting": "Hello, Adrian Brooks! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d70fce1fa482c9e4b", - "index": 98, - "guid": "4fc4d0e3-0851-4b03-b1bf-b3d26b58beca", - "isActive": false, - "balance": "$3,576.24", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Avila Cole", - "gender": "male", - "company": "KONGENE", - "email": "avilacole@kongene.com", - "phone": "+1 (878) 427-2302", - "address": "408 Claver Place, Inkerman, Wisconsin, 5223", - "about": "Do sunt anim exercitation consectetur esse id tempor aute irure non incididunt. Ut in nulla cillum proident. Dolor ut reprehenderit pariatur ad incididunt eu. Labore esse sit proident sunt enim occaecat commodo nulla velit. Id aliqua aliquip cupidatat aliquip officia ipsum sit mollit nulla velit minim. Velit ea veniam reprehenderit sint non.\r\n", - "registered": "2018-01-02T08:59:59 +05:00", - "latitude": 67.477898, - "longitude": 15.146189, - "tags": ["aliquip", "nisi", "ex", "sint", "pariatur", "ut", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Rosanna Cobb" - }, - { - "id": 1, - "name": "Hopkins Hopper" - }, - { - "id": 2, - "name": "Haley Sykes" - } - ], - "greeting": "Hello, Avila Cole! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d498b419ab851b3a8", - "index": 99, - "guid": "3f0f72d1-5533-4165-a69d-3df9c9a4c752", - "isActive": false, - "balance": "$3,698.86", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Cline David", - "gender": "male", - "company": "EXOPLODE", - "email": "clinedavid@exoplode.com", - "phone": "+1 (910) 479-3788", - "address": "292 Gunnison Court, Ivanhoe, Arizona, 2534", - "about": "Excepteur incididunt minim velit aliqua nulla mollit ipsum anim qui aliquip ad cupidatat consectetur enim. Culpa elit voluptate magna fugiat nulla dolor non qui sint ea exercitation consectetur pariatur tempor. Laboris proident elit ipsum voluptate non qui enim veniam ullamco sint. Et ex adipisicing officia elit minim magna dolor officia incididunt ea ea. Sit nostrud qui cupidatat nulla culpa.\r\n", - "registered": "2018-08-12T11:33:11 +04:00", - "latitude": -23.815726, - "longitude": -4.337044, - "tags": ["ex", "elit", "ex", "quis", "mollit", "sint", "irure"], - "friends": [ - { - "id": 0, - "name": "Thomas Gardner" - }, - { - "id": 1, - "name": "Mitchell Butler" - }, - { - "id": 2, - "name": "Holden Prince" - } - ], - "greeting": "Hello, Cline David! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25de042e7b14ed882e6", - "index": 100, - "guid": "20c53fa9-d6de-4e31-a91c-bf379b3f8245", - "isActive": false, - "balance": "$2,789.73", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Patrica Riddle", - "gender": "female", - "company": "GEOFORM", - "email": "patricariddle@geoform.com", - "phone": "+1 (871) 539-2996", - "address": "257 Powell Street, Bynum, Ohio, 2257", - "about": "Enim aute non in dolore eu consequat nisi consequat exercitation. Officia incididunt ex magna eu labore et anim magna. Aute sunt mollit ut est pariatur non non voluptate id elit.\r\n", - "registered": "2017-05-10T02:52:32 +04:00", - "latitude": 17.637934, - "longitude": 43.300832, - "tags": ["esse", "commodo", "irure", "in", "anim", "cillum", "veniam"], - "friends": [ - { - "id": 0, - "name": "Bolton Romero" - }, - { - "id": 1, - "name": "Miranda Mccarthy" - }, - { - "id": 2, - "name": "Earnestine Black" - } - ], - "greeting": "Hello, Patrica Riddle! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d378643e2f2706a5d", - "index": 101, - "guid": "6b81fe29-d2ef-4787-83e7-f026de472941", - "isActive": true, - "balance": "$2,840.99", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Effie Bird", - "gender": "female", - "company": "TECHMANIA", - "email": "effiebird@techmania.com", - "phone": "+1 (804) 443-3795", - "address": "520 Devoe Street, Kennedyville, Arkansas, 1170", - "about": "Elit dolor excepteur elit consectetur do in. Veniam est aliqua et do sunt nostrud voluptate qui ea enim. Veniam aliquip aliquip aliquip pariatur nostrud nulla quis. Culpa nulla exercitation occaecat excepteur laborum est aliquip adipisicing. Esse officia ipsum ut cupidatat dolore Lorem.\r\n", - "registered": "2015-03-06T12:15:18 +05:00", - "latitude": 6.889248, - "longitude": 177.665636, - "tags": ["duis", "laborum", "non", "dolor", "laboris", "irure", "ex"], - "friends": [ - { - "id": 0, - "name": "Singleton Mccray" - }, - { - "id": 1, - "name": "Mamie Chang" - }, - { - "id": 2, - "name": "Katelyn Doyle" - } - ], - "greeting": "Hello, Effie Bird! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d59d80bb10535cec4", - "index": 102, - "guid": "e45f8183-9f63-419d-b54b-d41c9287d162", - "isActive": true, - "balance": "$1,554.22", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Rose Joseph", - "gender": "female", - "company": "NETPLAX", - "email": "rosejoseph@netplax.com", - "phone": "+1 (895) 483-2590", - "address": "837 Court Square, Riviera, Nevada, 1490", - "about": "Anim nisi deserunt quis sunt qui magna aliquip ex et. Fugiat qui non aliquip pariatur ut qui deserunt irure. Ullamco deserunt amet quis sit quis ad quis pariatur. Voluptate magna nisi elit amet incididunt tempor proident. Sunt reprehenderit incididunt tempor consequat.\r\n", - "registered": "2018-12-25T03:43:08 +05:00", - "latitude": -30.263113, - "longitude": 37.383918, - "tags": ["aute", "aliqua", "laborum", "amet", "magna", "officia", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Marla Simmons" - }, - { - "id": 1, - "name": "Collins Walton" - }, - { - "id": 2, - "name": "Schroeder Stevens" - } - ], - "greeting": "Hello, Rose Joseph! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd91e37a92befba32", - "index": 103, - "guid": "bbcc2052-fcc8-4788-9d6e-ebb368f9c7dc", - "isActive": false, - "balance": "$3,849.72", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Knowles Woods", - "gender": "male", - "company": "PROVIDCO", - "email": "knowleswoods@providco.com", - "phone": "+1 (909) 449-2388", - "address": "344 Visitation Place, Laurelton, Massachusetts, 4738", - "about": "Esse in fugiat dolore ad do. Lorem veniam incididunt eiusmod irure quis. In tempor pariatur in voluptate. Laborum excepteur ea quis labore. Nostrud sint cillum in eu sit dolor cupidatat laborum in.\r\n", - "registered": "2017-07-14T11:25:49 +04:00", - "latitude": 76.873225, - "longitude": 99.102116, - "tags": ["reprehenderit", "proident", "minim", "irure", "pariatur", "nulla", "ex"], - "friends": [ - { - "id": 0, - "name": "Daisy Knowles" - }, - { - "id": 1, - "name": "Tyler Michael" - }, - { - "id": 2, - "name": "Hobbs Velazquez" - } - ], - "greeting": "Hello, Knowles Woods! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1399458b24b0d32c", - "index": 104, - "guid": "880d4112-9a03-413d-8d6c-3d8de51daa13", - "isActive": true, - "balance": "$2,701.73", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Kris Cotton", - "gender": "female", - "company": "SEQUITUR", - "email": "kriscotton@sequitur.com", - "phone": "+1 (993) 445-3804", - "address": "249 Milford Street, Websterville, Marshall Islands, 2829", - "about": "Do dolore elit aliquip et sint duis non ullamco qui consequat est. Sunt amet magna veniam adipisicing nostrud velit mollit culpa nulla quis. Sint esse non qui nisi labore pariatur cillum. Irure nisi ex laboris pariatur proident quis.\r\n", - "registered": "2019-07-09T02:08:45 +04:00", - "latitude": -54.311597, - "longitude": -131.690209, - "tags": ["cupidatat", "id", "reprehenderit", "sit", "exercitation", "ut", "aute"], - "friends": [ - { - "id": 0, - "name": "Espinoza Richard" - }, - { - "id": 1, - "name": "Franco Barnes" - }, - { - "id": 2, - "name": "Erica Lang" - } - ], - "greeting": "Hello, Kris Cotton! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcf854310c011a459", - "index": 105, - "guid": "c887371a-a1e4-48a2-8385-d527da5a75f4", - "isActive": false, - "balance": "$2,179.15", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Fran Harding", - "gender": "female", - "company": "UNIA", - "email": "franharding@unia.com", - "phone": "+1 (819) 575-3819", - "address": "359 Emerald Street, Tilden, Puerto Rico, 4910", - "about": "Commodo deserunt aliquip quis velit labore quis sint aliqua Lorem ex deserunt ut fugiat. Reprehenderit ullamco cillum do ullamco deserunt est do anim anim. Exercitation dolore et irure fugiat nisi occaecat adipisicing do. Ea qui dolor voluptate exercitation deserunt deserunt deserunt pariatur elit aliquip. Aliquip velit laboris sunt dolor est proident voluptate laborum aute sit minim excepteur.\r\n", - "registered": "2020-08-31T06:59:33 +04:00", - "latitude": 9.666252, - "longitude": 57.431582, - "tags": ["eiusmod", "aliquip", "Lorem", "qui", "ipsum", "aute", "eu"], - "friends": [ - { - "id": 0, - "name": "Bobbi Townsend" - }, - { - "id": 1, - "name": "Maura Dunn" - }, - { - "id": 2, - "name": "Dena Rosa" - } - ], - "greeting": "Hello, Fran Harding! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9929e1807334500f", - "index": 106, - "guid": "86db81b6-be02-456d-bb33-ce644b7b5d4f", - "isActive": true, - "balance": "$1,249.64", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Vazquez Savage", - "gender": "male", - "company": "ZOLAREX", - "email": "vazquezsavage@zolarex.com", - "phone": "+1 (987) 516-2858", - "address": "136 Central Avenue, Nettie, California, 4686", - "about": "Lorem cupidatat qui officia ullamco proident quis sint minim. Qui eiusmod consequat ipsum aute laborum quis. Ex cupidatat voluptate exercitation commodo. Nostrud ipsum deserunt fugiat voluptate incididunt Lorem laborum reprehenderit eu consequat adipisicing enim ad. Laboris qui dolore consectetur dolor laborum sint exercitation deserunt fugiat elit culpa elit tempor. Id minim dolor Lorem non magna culpa sint nostrud qui dolore irure non.\r\n", - "registered": "2017-02-26T12:55:27 +05:00", - "latitude": 42.324324, - "longitude": -151.566577, - "tags": ["sit", "esse", "sit", "consequat", "nulla", "et", "esse"], - "friends": [ - { - "id": 0, - "name": "Alice Crane" - }, - { - "id": 1, - "name": "Kerry Phelps" - }, - { - "id": 2, - "name": "Kendra Boone" - } - ], - "greeting": "Hello, Vazquez Savage! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25daa31dc24cb1e00a1", - "index": 107, - "guid": "72c4b8c0-04d6-49d2-bd90-2233ad671ded", - "isActive": false, - "balance": "$1,007.68", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Elma Pope", - "gender": "female", - "company": "ZEPITOPE", - "email": "elmapope@zepitope.com", - "phone": "+1 (932) 560-2632", - "address": "957 Commercial Street, Logan, Tennessee, 5095", - "about": "Laboris enim laboris sunt dolor non ad et fugiat officia duis ut eiusmod consequat ex. Quis veniam Lorem ea est fugiat velit non consectetur. Lorem nisi sunt fugiat consectetur sunt mollit nostrud adipisicing non dolor incididunt incididunt ullamco labore. Duis occaecat pariatur velit sunt consectetur nulla Lorem voluptate cillum consectetur eu et cillum irure. Pariatur nisi aute magna sunt veniam amet eu et. Laborum aliquip culpa mollit duis eiusmod officia cupidatat eiusmod ullamco aliquip ex.\r\n", - "registered": "2018-08-07T06:32:47 +04:00", - "latitude": -5.328955, - "longitude": -68.771514, - "tags": ["est", "ad", "ex", "ut", "consequat", "proident", "culpa"], - "friends": [ - { - "id": 0, - "name": "Joan Bishop" - }, - { - "id": 1, - "name": "Millicent French" - }, - { - "id": 2, - "name": "Mayo Gibbs" - } - ], - "greeting": "Hello, Elma Pope! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d63a1b0958aa6a5ba", - "index": 108, - "guid": "43feec34-42f5-494d-b93f-266490d32ddb", - "isActive": false, - "balance": "$1,286.49", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Natalie Holmes", - "gender": "female", - "company": "EURON", - "email": "natalieholmes@euron.com", - "phone": "+1 (865) 599-3611", - "address": "840 Haring Street, Machias, Wyoming, 7854", - "about": "Lorem reprehenderit id nisi amet mollit labore. Eiusmod qui reprehenderit occaecat nostrud exercitation tempor minim veniam tempor adipisicing. Quis consequat esse ex nulla do cupidatat. Nulla cillum incididunt reprehenderit aute adipisicing amet officia laborum cupidatat amet est proident. Ullamco do deserunt aliquip tempor culpa proident sint eu esse ut culpa.\r\n", - "registered": "2014-03-11T05:42:25 +04:00", - "latitude": -71.539812, - "longitude": -52.440222, - "tags": ["veniam", "elit", "elit", "sunt", "sunt", "qui", "magna"], - "friends": [ - { - "id": 0, - "name": "Robbins Sampson" - }, - { - "id": 1, - "name": "Clay Marsh" - }, - { - "id": 2, - "name": "Higgins Estrada" - } - ], - "greeting": "Hello, Natalie Holmes! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dad1152191cab69f6", - "index": 109, - "guid": "c59f0d17-a769-4f0f-88a8-8c47ec6ff476", - "isActive": false, - "balance": "$3,000.89", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Amy Greene", - "gender": "female", - "company": "TERASCAPE", - "email": "amygreene@terascape.com", - "phone": "+1 (819) 528-2290", - "address": "947 Abbey Court, Coalmont, North Carolina, 5653", - "about": "Id pariatur ex incididunt ea fugiat et ex exercitation eu. Mollit sunt tempor reprehenderit non occaecat id quis consequat ut. Commodo occaecat consequat ex ut do ex amet culpa. Reprehenderit consequat dolor magna sit minim do duis exercitation esse ut. Enim eu culpa magna quis anim tempor laborum et exercitation eu. Ullamco veniam ea cupidatat aute voluptate sunt et sit elit sit laborum culpa reprehenderit enim.\r\n", - "registered": "2017-12-20T07:03:03 +05:00", - "latitude": 53.474279, - "longitude": 34.810385, - "tags": ["fugiat", "reprehenderit", "consectetur", "commodo", "culpa", "pariatur", "do"], - "friends": [ - { - "id": 0, - "name": "Brock Leonard" - }, - { - "id": 1, - "name": "Crystal Cortez" - }, - { - "id": 2, - "name": "Gay Marquez" - } - ], - "greeting": "Hello, Amy Greene! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25de2be5bfabb062958", - "index": 110, - "guid": "1903999b-3bfa-49ac-b376-4e9236b5ded5", - "isActive": true, - "balance": "$2,140.99", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Jones Hall", - "gender": "male", - "company": "SATIANCE", - "email": "joneshall@satiance.com", - "phone": "+1 (963) 562-2536", - "address": "806 Amber Street, Chautauqua, Michigan, 1543", - "about": "Aute culpa do aliquip adipisicing et aliquip veniam dolore voluptate proident ex. In non pariatur dolore voluptate anim. Veniam eiusmod magna amet duis. Lorem adipisicing mollit nostrud qui ea.\r\n", - "registered": "2018-02-25T01:27:40 +05:00", - "latitude": -61.985101, - "longitude": 36.44187, - "tags": ["reprehenderit", "dolor", "voluptate", "et", "excepteur", "in", "et"], - "friends": [ - { - "id": 0, - "name": "Allison Cantrell" - }, - { - "id": 1, - "name": "Lina Heath" - }, - { - "id": 2, - "name": "Maryanne Barker" - } - ], - "greeting": "Hello, Jones Hall! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d61c6d0ed942d0922", - "index": 111, - "guid": "88022ffa-a2c8-4b94-a91b-e86b6b91dcbf", - "isActive": true, - "balance": "$1,858.55", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Ruiz Trujillo", - "gender": "male", - "company": "CYTREX", - "email": "ruiztrujillo@cytrex.com", - "phone": "+1 (991) 479-3309", - "address": "210 Main Street, Marshall, Oklahoma, 9972", - "about": "Officia aute duis id adipisicing est in duis voluptate sunt commodo eu quis. Dolore nisi amet est reprehenderit excepteur et adipisicing elit. Veniam duis dolore eu est id reprehenderit do esse culpa quis sint sunt consectetur. Nulla incididunt minim sunt officia mollit fugiat cupidatat. Non velit proident amet esse nisi et ullamco commodo labore id dolore consequat. Commodo deserunt veniam et tempor.\r\n", - "registered": "2019-05-28T02:44:18 +04:00", - "latitude": 63.176515, - "longitude": 59.110382, - "tags": ["reprehenderit", "do", "exercitation", "mollit", "ut", "Lorem", "ex"], - "friends": [ - { - "id": 0, - "name": "Karina Franco" - }, - { - "id": 1, - "name": "Caroline Wiggins" - }, - { - "id": 2, - "name": "Cohen Harmon" - } - ], - "greeting": "Hello, Ruiz Trujillo! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9e8e80fe22999dd9", - "index": 112, - "guid": "fba3a195-d2b0-4b92-9128-d3295d0b8b2a", - "isActive": false, - "balance": "$3,332.05", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Maddox Koch", - "gender": "male", - "company": "CENTREE", - "email": "maddoxkoch@centree.com", - "phone": "+1 (881) 517-2662", - "address": "746 Poly Place, Turpin, Vermont, 3298", - "about": "Sunt exercitation tempor labore aliquip eiusmod nulla deserunt pariatur do amet sit velit ut. Eu sit laborum eu cupidatat labore velit exercitation culpa duis ex magna. Tempor ea amet cupidatat culpa ipsum consequat elit minim fugiat officia elit sint adipisicing. Eiusmod quis excepteur ullamco enim pariatur fugiat. Amet id ipsum sint elit Lorem aliqua sint duis. Quis pariatur eu amet duis dolore ea ex.\r\n", - "registered": "2015-09-08T07:05:51 +04:00", - "latitude": -28.958879, - "longitude": -71.939149, - "tags": ["aute", "cupidatat", "excepteur", "consectetur", "qui", "et", "anim"], - "friends": [ - { - "id": 0, - "name": "Iva Blankenship" - }, - { - "id": 1, - "name": "Cotton Wade" - }, - { - "id": 2, - "name": "Carpenter Ryan" - } - ], - "greeting": "Hello, Maddox Koch! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddb2786e908374ced", - "index": 113, - "guid": "1c1715bd-bce6-45a5-bd9f-6a72e21ee10d", - "isActive": true, - "balance": "$2,849.64", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Cortez Wise", - "gender": "male", - "company": "GLUID", - "email": "cortezwise@gluid.com", - "phone": "+1 (838) 568-2823", - "address": "577 Delmonico Place, Sparkill, Utah, 4111", - "about": "Aliquip veniam irure ut cillum nostrud ipsum amet quis eu quis officia. Et sint laboris laborum velit adipisicing exercitation ipsum ea culpa pariatur occaecat laboris in ad. Do deserunt commodo consequat do labore laborum. Culpa tempor officia nisi ut esse dolor anim amet sunt. Eiusmod mollit voluptate dolor nulla nulla eiusmod ad eiusmod ad sint non irure minim. Do consequat quis ea aute deserunt nulla. Consectetur quis labore nostrud minim tempor elit esse.\r\n", - "registered": "2016-08-06T07:28:12 +04:00", - "latitude": -50.502692, - "longitude": 147.188031, - "tags": ["cupidatat", "labore", "duis", "qui", "reprehenderit", "consectetur", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Cindy Padilla" - }, - { - "id": 1, - "name": "Craig Horne" - }, - { - "id": 2, - "name": "Tanisha Leach" - } - ], - "greeting": "Hello, Cortez Wise! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2b82e4be6e18026e", - "index": 114, - "guid": "f64c3dc2-a669-4b32-a358-58502b4de93e", - "isActive": false, - "balance": "$3,257.92", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Gladys Phillips", - "gender": "female", - "company": "AMTAS", - "email": "gladysphillips@amtas.com", - "phone": "+1 (860) 552-3301", - "address": "678 Ebony Court, Grandview, Kansas, 5105", - "about": "Voluptate deserunt officia eiusmod laboris aliqua cillum sunt magna ullamco laborum anim labore. Magna duis esse dolor ipsum reprehenderit nisi proident labore sint minim laboris. Cillum fugiat culpa incididunt dolore laborum. In fugiat tempor est minim est consectetur occaecat sint irure veniam deserunt ad do mollit. Sit voluptate eiusmod mollit veniam mollit est sunt laborum amet mollit elit. Proident eu occaecat fugiat incididunt veniam aliquip reprehenderit aute pariatur labore eu. Ipsum do reprehenderit laborum laboris laboris magna irure elit.\r\n", - "registered": "2016-09-28T06:47:04 +04:00", - "latitude": -23.743315, - "longitude": 18.799183, - "tags": ["exercitation", "ut", "adipisicing", "officia", "mollit", "culpa", "culpa"], - "friends": [ - { - "id": 0, - "name": "Allen Schroeder" - }, - { - "id": 1, - "name": "John Curtis" - }, - { - "id": 2, - "name": "Carr Ewing" - } - ], - "greeting": "Hello, Gladys Phillips! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6fbbc07de1135e02", - "index": 115, - "guid": "97723d09-8ca8-4d85-94ca-090feacd758e", - "isActive": true, - "balance": "$2,165.69", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Delgado Thornton", - "gender": "male", - "company": "TERAPRENE", - "email": "delgadothornton@teraprene.com", - "phone": "+1 (820) 570-2931", - "address": "692 Sunnyside Court, Stouchsburg, Delaware, 7951", - "about": "Non ea laborum consectetur magna eu eiusmod. Pariatur pariatur enim culpa qui pariatur. Sint commodo proident esse id. Mollit fugiat excepteur ipsum deserunt voluptate mollit. Cupidatat est in nisi exercitation aliqua consequat officia sint nostrud labore. Culpa elit proident aliquip esse qui adipisicing aute velit.\r\n", - "registered": "2015-02-04T06:56:11 +05:00", - "latitude": 3.893652, - "longitude": 172.341429, - "tags": ["Lorem", "excepteur", "ut", "aliqua", "culpa", "deserunt", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Park Rowe" - }, - { - "id": 1, - "name": "Tia Gutierrez" - }, - { - "id": 2, - "name": "Reeves Burns" - } - ], - "greeting": "Hello, Delgado Thornton! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd8a3cd4929aa723f", - "index": 116, - "guid": "98105701-59ec-4147-8da3-93d1e72cfd36", - "isActive": false, - "balance": "$3,508.96", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Drake Valdez", - "gender": "male", - "company": "VIAGRAND", - "email": "drakevaldez@viagrand.com", - "phone": "+1 (805) 461-3373", - "address": "416 Stone Avenue, Remington, Guam, 8025", - "about": "Incididunt non ut cillum magna consectetur ad officia et reprehenderit duis velit quis non. Dolor mollit incididunt consectetur excepteur est quis. Incididunt velit est aliqua excepteur reprehenderit cupidatat sit consectetur sit non. Ut occaecat ullamco dolore magna do. Ad voluptate veniam sunt aliqua nisi do velit enim.\r\n", - "registered": "2015-07-04T10:25:56 +04:00", - "latitude": -0.032935, - "longitude": -91.939068, - "tags": ["incididunt", "et", "cillum", "fugiat", "enim", "dolor", "mollit"], - "friends": [ - { - "id": 0, - "name": "Haley Pruitt" - }, - { - "id": 1, - "name": "Bernadine Welch" - }, - { - "id": 2, - "name": "Christian Love" - } - ], - "greeting": "Hello, Drake Valdez! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4e4d275c3bce3b41", - "index": 117, - "guid": "ed82f09d-5f1d-413f-b2ab-85ffcc09fc79", - "isActive": true, - "balance": "$1,680.99", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Sherrie Christian", - "gender": "female", - "company": "NETERIA", - "email": "sherriechristian@neteria.com", - "phone": "+1 (824) 469-3960", - "address": "341 Roebling Street, Lookingglass, Oregon, 9216", - "about": "Elit elit ut amet laboris proident cillum irure aute pariatur. Elit quis aliquip aute do enim laborum ipsum labore fugiat. Consequat elit voluptate duis aliqua id eiusmod.\r\n", - "registered": "2014-07-29T07:45:39 +04:00", - "latitude": -83.018633, - "longitude": 61.090109, - "tags": ["laboris", "amet", "irure", "magna", "qui", "excepteur", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Kathy Orr" - }, - { - "id": 1, - "name": "Aurelia Hodges" - }, - { - "id": 2, - "name": "Kara Dalton" - } - ], - "greeting": "Hello, Sherrie Christian! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7570acaf0a6eefc4", - "index": 118, - "guid": "d92ae515-62c7-43df-a5aa-9d13c09baf54", - "isActive": true, - "balance": "$1,146.70", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Stephenson Sloan", - "gender": "male", - "company": "ISOLOGIX", - "email": "stephensonsloan@isologix.com", - "phone": "+1 (986) 600-2259", - "address": "463 Russell Street, Caroline, Missouri, 7221", - "about": "Adipisicing in excepteur velit voluptate adipisicing ex consequat deserunt occaecat esse nulla. Laboris aute voluptate voluptate aute elit. Labore esse cillum et id. Nisi aute dolor proident sint.\r\n", - "registered": "2017-02-08T01:22:21 +05:00", - "latitude": -65.140418, - "longitude": 166.345052, - "tags": ["mollit", "quis", "tempor", "Lorem", "ea", "anim", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Christensen Dillard" - }, - { - "id": 1, - "name": "Tillman Coleman" - }, - { - "id": 2, - "name": "Brooke Gillespie" - } - ], - "greeting": "Hello, Stephenson Sloan! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2cb63a066034dd9c", - "index": 119, - "guid": "b323d78c-5d1d-404a-a6ca-3a70d3e04377", - "isActive": true, - "balance": "$3,481.37", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Travis Miles", - "gender": "male", - "company": "ENTROFLEX", - "email": "travismiles@entroflex.com", - "phone": "+1 (956) 420-2973", - "address": "552 Seton Place, Elliston, Montana, 2111", - "about": "Elit non deserunt ea amet Lorem nostrud nisi. Occaecat ex nulla tempor magna dolore sunt amet aliquip culpa sit veniam. Deserunt nostrud dolor sunt eu non minim exercitation qui veniam consequat culpa magna. Commodo nisi do qui veniam nostrud ex pariatur. Laboris irure nostrud do cupidatat ad commodo voluptate. Culpa anim dolor incididunt proident.\r\n", - "registered": "2019-04-27T08:11:28 +04:00", - "latitude": 34.944607, - "longitude": 38.063716, - "tags": ["velit", "mollit", "nostrud", "dolor", "do", "ut", "ex"], - "friends": [ - { - "id": 0, - "name": "Marsh Fletcher" - }, - { - "id": 1, - "name": "Guy Jacobson" - }, - { - "id": 2, - "name": "Anastasia Mejia" - } - ], - "greeting": "Hello, Travis Miles! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddf2180beb90f5059", - "index": 120, - "guid": "6e5827aa-bc26-454f-9cd6-dbc9857bc963", - "isActive": false, - "balance": "$1,326.62", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Kelli Terry", - "gender": "female", - "company": "PHOTOBIN", - "email": "kelliterry@photobin.com", - "phone": "+1 (920) 486-2029", - "address": "187 Bokee Court, Chemung, Alaska, 7760", - "about": "Fugiat id consectetur Lorem commodo cupidatat ad eiusmod do dolor voluptate nisi aliquip velit. Quis pariatur anim adipisicing enim. Irure commodo anim tempor ipsum proident non cupidatat eiusmod consectetur in nisi. Ea cillum proident deserunt ea. Culpa culpa consectetur incididunt labore magna irure. Anim ullamco sint nostrud incididunt quis laboris dolore eiusmod excepteur minim dolor pariatur.\r\n", - "registered": "2016-01-06T02:20:56 +05:00", - "latitude": 26.329467, - "longitude": 142.651465, - "tags": ["qui", "fugiat", "esse", "mollit", "sit", "excepteur", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Young Fry" - }, - { - "id": 1, - "name": "Matthews Valencia" - }, - { - "id": 2, - "name": "Fuller Huber" - } - ], - "greeting": "Hello, Kelli Terry! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd6aba10d60f6c82a", - "index": 121, - "guid": "4ad06a37-5362-415c-93e6-a9c81055c87a", - "isActive": true, - "balance": "$2,091.90", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Johnnie Nash", - "gender": "female", - "company": "QUIZMO", - "email": "johnnienash@quizmo.com", - "phone": "+1 (880) 488-3752", - "address": "277 Congress Street, Juarez, Kentucky, 1845", - "about": "Lorem ut mollit et ex cillum labore exercitation mollit commodo id reprehenderit aliqua anim incididunt. Nulla amet esse in dolor enim mollit ullamco officia culpa fugiat officia. Labore esse amet proident aliqua officia in qui fugiat nostrud magna consequat ullamco adipisicing. Sunt commodo anim ad enim.\r\n", - "registered": "2018-12-22T02:40:20 +05:00", - "latitude": 5.077408, - "longitude": 8.549541, - "tags": ["labore", "aute", "nulla", "proident", "occaecat", "fugiat", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Bernadette Weeks" - }, - { - "id": 1, - "name": "Stewart Mendoza" - }, - { - "id": 2, - "name": "Bettye Rice" - } - ], - "greeting": "Hello, Johnnie Nash! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8abbd73c8af22f13", - "index": 122, - "guid": "003ba1a2-27cb-45c5-8ae3-e686ef358e83", - "isActive": false, - "balance": "$3,623.50", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Boone Bradshaw", - "gender": "male", - "company": "OVATION", - "email": "boonebradshaw@ovation.com", - "phone": "+1 (870) 521-3760", - "address": "846 Huron Street, Gerton, Mississippi, 947", - "about": "Reprehenderit non enim aliqua irure voluptate. Cillum laboris nostrud irure in consequat ea officia id ipsum velit magna. Do nisi incididunt officia irure. Eiusmod commodo laboris ex anim consectetur ad commodo labore Lorem nulla cillum. Nisi irure proident Lorem minim dolore mollit sunt et. Aute officia qui laboris in non occaecat ut qui et irure. Est aliquip ut laboris incididunt pariatur nulla aliqua duis aliqua consectetur consectetur anim sit.\r\n", - "registered": "2020-05-03T01:37:30 +04:00", - "latitude": 31.831872, - "longitude": 55.212391, - "tags": ["laborum", "esse", "ut", "quis", "dolor", "eiusmod", "qui"], - "friends": [ - { - "id": 0, - "name": "Weiss Mcdaniel" - }, - { - "id": 1, - "name": "Kelly Atkins" - }, - { - "id": 2, - "name": "Horn Ortiz" - } - ], - "greeting": "Hello, Boone Bradshaw! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2da8dfcdcd20f2a6", - "index": 123, - "guid": "512ca726-87e9-4243-9c29-09430a53d8a2", - "isActive": true, - "balance": "$3,609.38", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Pratt Bradley", - "gender": "male", - "company": "PIGZART", - "email": "prattbradley@pigzart.com", - "phone": "+1 (972) 482-2531", - "address": "587 Lorraine Street, Bluetown, North Dakota, 6954", - "about": "Eu irure duis culpa pariatur consectetur reprehenderit cillum exercitation et consectetur sint est est est. Quis nisi excepteur eu aliquip anim ad anim fugiat reprehenderit. Ipsum consectetur commodo qui exercitation ipsum do nisi nulla mollit incididunt reprehenderit qui non.\r\n", - "registered": "2017-05-09T07:02:56 +04:00", - "latitude": 82.092757, - "longitude": -128.428704, - "tags": ["aute", "excepteur", "ea", "anim", "velit", "culpa", "amet"], - "friends": [ - { - "id": 0, - "name": "Kayla Alvarado" - }, - { - "id": 1, - "name": "Ashley Hale" - }, - { - "id": 2, - "name": "Glenn Cohen" - } - ], - "greeting": "Hello, Pratt Bradley! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d23e8455797580121", - "index": 124, - "guid": "b6c726c6-c6c6-469b-ab9c-46a261edbe3f", - "isActive": false, - "balance": "$3,366.55", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Shawna Cash", - "gender": "female", - "company": "OVERPLEX", - "email": "shawnacash@overplex.com", - "phone": "+1 (833) 552-2761", - "address": "736 Bevy Court, Rockbridge, Federated States Of Micronesia, 1588", - "about": "Laboris nulla amet ex commodo aute proident dolor enim non aute velit reprehenderit. Elit aliquip qui ad in nisi sunt sunt do pariatur commodo in non. Sint cupidatat qui aliqua mollit occaecat non quis. Consectetur occaecat consectetur ex magna quis ex minim reprehenderit aute. Eiusmod in eiusmod ut consequat adipisicing deserunt duis. Ullamco Lorem aute cupidatat pariatur irure est. Mollit enim eiusmod amet do veniam sint do.\r\n", - "registered": "2016-08-20T08:15:44 +04:00", - "latitude": 82.31201, - "longitude": -117.145384, - "tags": ["et", "eiusmod", "eu", "officia", "id", "sunt", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Petersen Wilkins" - }, - { - "id": 1, - "name": "Dyer Lindsay" - }, - { - "id": 2, - "name": "Stacie Hendricks" - } - ], - "greeting": "Hello, Shawna Cash! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0c6057d40949412f", - "index": 125, - "guid": "a50217ef-e1e2-486d-ad3d-6fe7fcc7c90c", - "isActive": true, - "balance": "$2,835.06", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Marisol Davis", - "gender": "female", - "company": "SONGLINES", - "email": "marisoldavis@songlines.com", - "phone": "+1 (901) 429-2373", - "address": "203 Nelson Street, Rosburg, Maryland, 735", - "about": "Et id elit magna nulla dolore eu consequat duis ea tempor ad. Lorem exercitation aliquip consequat eiusmod laborum nostrud sint fugiat veniam adipisicing esse sunt. Anim magna aliquip nulla nulla fugiat duis labore do mollit consequat ad incididunt sint sit. Excepteur ea aliqua qui esse dolor.\r\n", - "registered": "2018-04-14T01:54:29 +04:00", - "latitude": -46.16316, - "longitude": 54.074331, - "tags": ["tempor", "duis", "id", "ut", "laborum", "incididunt", "consequat"], - "friends": [ - { - "id": 0, - "name": "Isabella Mcintyre" - }, - { - "id": 1, - "name": "Ivy Long" - }, - { - "id": 2, - "name": "Ophelia Joyce" - } - ], - "greeting": "Hello, Marisol Davis! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db6fc69bda8fdede0", - "index": 126, - "guid": "4e42c5db-be25-40be-a559-977efdeab57e", - "isActive": false, - "balance": "$3,866.38", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Pacheco Pacheco", - "gender": "male", - "company": "TERRAGEN", - "email": "pachecopacheco@terragen.com", - "phone": "+1 (806) 404-2616", - "address": "729 Greenpoint Avenue, Byrnedale, Virgin Islands, 8024", - "about": "Laborum non labore duis id irure officia excepteur veniam irure dolore ea et. Voluptate deserunt officia ipsum aliquip fugiat esse dolor ipsum excepteur sunt culpa Lorem cillum. Exercitation ea Lorem culpa consectetur consectetur veniam. Esse duis ipsum dolor enim ad tempor et nostrud anim nisi enim. Nisi dolore duis nostrud occaecat veniam sunt officia non.\r\n", - "registered": "2016-08-30T07:49:18 +04:00", - "latitude": 10.800404, - "longitude": 171.722148, - "tags": ["id", "aute", "et", "eiusmod", "aute", "duis", "velit"], - "friends": [ - { - "id": 0, - "name": "Mcgowan Frazier" - }, - { - "id": 1, - "name": "Earline Payne" - }, - { - "id": 2, - "name": "Tara Everett" - } - ], - "greeting": "Hello, Pacheco Pacheco! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dabd475bbb387a7cd", - "index": 127, - "guid": "cf174744-bda1-4d0d-b17d-7f2d061a25c8", - "isActive": false, - "balance": "$1,027.86", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Atkinson Klein", - "gender": "male", - "company": "AFFLUEX", - "email": "atkinsonklein@affluex.com", - "phone": "+1 (954) 519-2190", - "address": "151 Ingraham Street, Brooktrails, Pennsylvania, 5028", - "about": "Laborum aliqua esse Lorem cupidatat amet aliquip. Lorem enim laboris excepteur ipsum sit veniam amet officia dolor laborum ipsum dolor non. Qui pariatur quis laborum ex sint ut cillum amet ullamco do sit minim anim amet. Sit esse veniam labore dolore. Sunt elit eiusmod fugiat qui incididunt ea cupidatat culpa nisi amet esse culpa culpa. Pariatur aute irure officia aliquip.\r\n", - "registered": "2017-10-15T08:45:02 +04:00", - "latitude": 78.870537, - "longitude": 23.358218, - "tags": ["aliquip", "proident", "mollit", "in", "anim", "aute", "ut"], - "friends": [ - { - "id": 0, - "name": "Rollins Byers" - }, - { - "id": 1, - "name": "Kelley Poole" - }, - { - "id": 2, - "name": "Deirdre Medina" - } - ], - "greeting": "Hello, Atkinson Klein! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd806a6f0604f3631", - "index": 128, - "guid": "9622e616-0a8a-449b-b81f-3e91bd056143", - "isActive": false, - "balance": "$1,397.23", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "brown", - "name": "Florine Cross", - "gender": "female", - "company": "STUCCO", - "email": "florinecross@stucco.com", - "phone": "+1 (835) 507-2508", - "address": "472 Gates Avenue, Bentley, Washington, 5128", - "about": "Dolore excepteur ea id sit enim non qui anim duis deserunt sint ipsum. Labore pariatur anim labore eiusmod voluptate incididunt proident sint dolor nulla pariatur occaecat irure. Reprehenderit cupidatat irure ex aliquip esse id veniam elit elit deserunt fugiat do.\r\n", - "registered": "2015-10-13T09:53:27 +04:00", - "latitude": -25.408542, - "longitude": 124.299565, - "tags": ["consectetur", "non", "proident", "cillum", "laborum", "do", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Kathrine Foster" - }, - { - "id": 1, - "name": "Blake Ford" - }, - { - "id": 2, - "name": "Briana Giles" - } - ], - "greeting": "Hello, Florine Cross! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d62b9518393859c26", - "index": 129, - "guid": "7eb3e39f-ed24-443a-a3c4-3e82c0fcc089", - "isActive": false, - "balance": "$3,202.58", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Genevieve Clay", - "gender": "female", - "company": "RETRACK", - "email": "genevieveclay@retrack.com", - "phone": "+1 (857) 517-2020", - "address": "796 Polhemus Place, Guilford, Illinois, 4353", - "about": "Culpa nostrud commodo occaecat do officia laborum nostrud deserunt consequat consectetur. Officia sunt elit eu incididunt dolor aute. Consequat dolor duis irure amet elit amet Lorem mollit nostrud excepteur ullamco ut aliquip.\r\n", - "registered": "2018-01-27T11:52:49 +05:00", - "latitude": -40.64856, - "longitude": -76.851702, - "tags": ["commodo", "do", "ea", "proident", "aute", "tempor", "non"], - "friends": [ - { - "id": 0, - "name": "Rosalinda Mayer" - }, - { - "id": 1, - "name": "Rachelle Dodson" - }, - { - "id": 2, - "name": "Eaton Garrett" - } - ], - "greeting": "Hello, Genevieve Clay! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d522f2130a948731b", - "index": 130, - "guid": "e814a302-a742-4538-97ff-ce58ffaf404d", - "isActive": true, - "balance": "$3,205.23", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Munoz Middleton", - "gender": "male", - "company": "SPRINGBEE", - "email": "munozmiddleton@springbee.com", - "phone": "+1 (813) 482-3934", - "address": "159 Herkimer Place, Caspar, New Hampshire, 7867", - "about": "Tempor mollit cillum cillum aliquip proident voluptate esse dolore aliquip elit. Consequat cillum elit aliqua amet do eu laborum mollit voluptate occaecat. Laborum voluptate nulla ut exercitation velit eu. Anim cupidatat officia ea amet nostrud mollit cillum sit mollit commodo ut officia. Reprehenderit excepteur pariatur in ut. Amet duis adipisicing pariatur aute deserunt culpa cillum do culpa officia sunt.\r\n", - "registered": "2018-03-07T10:45:39 +05:00", - "latitude": 27.119769, - "longitude": 148.24959, - "tags": ["aliqua", "minim", "mollit", "sunt", "excepteur", "laborum", "in"], - "friends": [ - { - "id": 0, - "name": "Shields Strickland" - }, - { - "id": 1, - "name": "Ladonna Peterson" - }, - { - "id": 2, - "name": "Kent Hogan" - } - ], - "greeting": "Hello, Munoz Middleton! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df5ed566086df113b", - "index": 131, - "guid": "0a08cf4a-0dcb-4699-8709-16c766f515f5", - "isActive": false, - "balance": "$2,478.12", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Holder Gross", - "gender": "male", - "company": "RETROTEX", - "email": "holdergross@retrotex.com", - "phone": "+1 (986) 510-3148", - "address": "713 Berriman Street, Joppa, Colorado, 6117", - "about": "Incididunt sit cupidatat mollit nisi veniam velit aliquip veniam. Do dolore exercitation dolor deserunt nulla quis laborum et laborum ea anim pariatur ipsum id. Quis nulla elit enim do. Consequat amet eu sint do ipsum dolor laboris velit id. Voluptate incididunt et in ipsum elit nisi duis non aliquip cupidatat elit.\r\n", - "registered": "2018-12-29T10:27:36 +05:00", - "latitude": 56.655169, - "longitude": 144.508132, - "tags": ["commodo", "pariatur", "eu", "reprehenderit", "exercitation", "culpa", "elit"], - "friends": [ - { - "id": 0, - "name": "Floyd Lawson" - }, - { - "id": 1, - "name": "Loretta Campbell" - }, - { - "id": 2, - "name": "Church Langley" - } - ], - "greeting": "Hello, Holder Gross! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d433dd68aadf1ea07", - "index": 132, - "guid": "5ca040b4-901c-4c00-885b-8ca0a030cd2e", - "isActive": false, - "balance": "$3,623.93", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Huff Reed", - "gender": "male", - "company": "ENOMEN", - "email": "huffreed@enomen.com", - "phone": "+1 (934) 559-2871", - "address": "681 Putnam Avenue, Sunnyside, Maine, 5401", - "about": "Et sunt dolore minim ex pariatur enim aliqua excepteur magna minim minim. Est veniam quis qui elit culpa dolore excepteur voluptate cupidatat et enim pariatur culpa. Ut irure ullamco id ad sint aute sunt. Sunt reprehenderit magna eiusmod qui esse quis anim officia mollit excepteur ipsum nisi magna. Labore eu aute dolor ad officia. Sint ullamco sint ut sit veniam id ad in laborum anim labore magna. Dolor sunt quis cillum minim proident et elit pariatur ad tempor fugiat.\r\n", - "registered": "2019-04-12T12:17:02 +04:00", - "latitude": 17.489765, - "longitude": -99.005339, - "tags": ["Lorem", "nostrud", "ea", "velit", "velit", "incididunt", "non"], - "friends": [ - { - "id": 0, - "name": "Marquita Rush" - }, - { - "id": 1, - "name": "Morrison Buck" - }, - { - "id": 2, - "name": "Madden Pate" - } - ], - "greeting": "Hello, Huff Reed! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5fedda37fa3b9d11", - "index": 133, - "guid": "d19d1a6f-3508-4bfe-bf42-59d587d70f92", - "isActive": true, - "balance": "$3,663.55", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Sandy Maxwell", - "gender": "female", - "company": "CONFRENZY", - "email": "sandymaxwell@confrenzy.com", - "phone": "+1 (870) 563-2235", - "address": "904 Pierrepont Street, Freeburn, South Carolina, 6007", - "about": "Culpa et reprehenderit non ut excepteur amet ea anim et exercitation aliquip mollit. Excepteur labore consectetur anim nostrud anim occaecat do nisi ad voluptate ad aute. Voluptate nulla consequat ex sint. Culpa Lorem ea mollit exercitation nostrud pariatur laborum aliquip. Occaecat consequat laboris duis deserunt minim esse pariatur nostrud veniam aliquip. Proident velit mollit sint incididunt occaecat. Proident sit voluptate velit consequat reprehenderit occaecat.\r\n", - "registered": "2014-11-08T11:39:02 +05:00", - "latitude": -26.74103, - "longitude": -54.797397, - "tags": ["nulla", "ea", "sint", "sunt", "ea", "cupidatat", "officia"], - "friends": [ - { - "id": 0, - "name": "Noel Schneider" - }, - { - "id": 1, - "name": "Jewell Levine" - }, - { - "id": 2, - "name": "Hinton Britt" - } - ], - "greeting": "Hello, Sandy Maxwell! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd2910a38e32a2632", - "index": 134, - "guid": "42d579bf-4add-4884-8dd5-75194b3653c2", - "isActive": false, - "balance": "$2,749.68", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Henson Holder", - "gender": "male", - "company": "HATOLOGY", - "email": "hensonholder@hatology.com", - "phone": "+1 (882) 522-3271", - "address": "267 Lester Court, Siglerville, Connecticut, 917", - "about": "Eiusmod eu sunt officia ea commodo pariatur culpa elit eiusmod tempor deserunt laborum mollit. Reprehenderit id reprehenderit fugiat dolor enim amet et deserunt voluptate. Et non mollit nisi id sunt nostrud occaecat deserunt. Proident consectetur sint aute commodo ex id incididunt consectetur consectetur quis voluptate sint anim. Officia occaecat aliqua aliqua esse laboris. Culpa dolore officia ut reprehenderit et deserunt in deserunt eiusmod deserunt non tempor. Do anim elit eu officia ea aute eu proident adipisicing culpa quis eu ut qui.\r\n", - "registered": "2016-01-14T06:09:52 +05:00", - "latitude": -85.450942, - "longitude": 102.612026, - "tags": ["nulla", "pariatur", "voluptate", "labore", "quis", "adipisicing", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Torres Cleveland" - }, - { - "id": 1, - "name": "Marva Lopez" - }, - { - "id": 2, - "name": "Erika Mercado" - } - ], - "greeting": "Hello, Henson Holder! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0460e969af3b82cc", - "index": 135, - "guid": "ce7ce8bf-5289-4ec0-ba10-95d6d8ade036", - "isActive": true, - "balance": "$2,306.91", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Dina Cabrera", - "gender": "female", - "company": "VORTEXACO", - "email": "dinacabrera@vortexaco.com", - "phone": "+1 (849) 521-2936", - "address": "614 Dunne Place, Yettem, Virginia, 7880", - "about": "Ullamco nulla consequat incididunt et consectetur aute ullamco. In mollit sint Lorem ea tempor et pariatur ad ad dolor sint eu. Enim cillum amet Lorem proident Lorem.\r\n", - "registered": "2016-10-12T07:03:00 +04:00", - "latitude": 7.746359, - "longitude": -92.36211, - "tags": ["eu", "esse", "irure", "id", "voluptate", "voluptate", "commodo"], - "friends": [ - { - "id": 0, - "name": "Combs Gray" - }, - { - "id": 1, - "name": "Griffith Hewitt" - }, - { - "id": 2, - "name": "Dennis Thomas" - } - ], - "greeting": "Hello, Dina Cabrera! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddfc42e31ba3963f7", - "index": 136, - "guid": "3f806fe3-2824-4285-8c3a-ec68f22ca69a", - "isActive": false, - "balance": "$1,094.02", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Jody Houston", - "gender": "female", - "company": "COMCUBINE", - "email": "jodyhouston@comcubine.com", - "phone": "+1 (835) 587-3910", - "address": "462 Reeve Place, Cazadero, Georgia, 4264", - "about": "Velit est laborum nisi incididunt officia eu laboris. Commodo fugiat ea Lorem cupidatat amet pariatur. Ea nostrud ad laborum excepteur irure cupidatat Lorem. Exercitation ex exercitation dolor esse. Veniam amet laborum sit et aute deserunt labore tempor deserunt est id voluptate. Cillum pariatur commodo magna tempor irure velit.\r\n", - "registered": "2017-12-26T11:00:19 +05:00", - "latitude": -85.068612, - "longitude": -8.833742, - "tags": ["qui", "dolore", "elit", "exercitation", "consectetur", "fugiat", "officia"], - "friends": [ - { - "id": 0, - "name": "Freida Wong" - }, - { - "id": 1, - "name": "Valentine Conley" - }, - { - "id": 2, - "name": "Kristine Velez" - } - ], - "greeting": "Hello, Jody Houston! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d41e93100de19976c", - "index": 137, - "guid": "32ad1346-910a-4331-964a-bfec6ae0360a", - "isActive": true, - "balance": "$1,460.32", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Cash May", - "gender": "male", - "company": "BLEENDOT", - "email": "cashmay@bleendot.com", - "phone": "+1 (829) 549-2005", - "address": "367 Colin Place, Verdi, New Jersey, 8227", - "about": "Id non reprehenderit id labore consequat nostrud elit aliquip. Sit nulla consectetur culpa aliquip voluptate voluptate non exercitation. Qui laborum pariatur consectetur culpa. Consectetur eu officia anim Lorem ipsum pariatur ut incididunt fugiat magna cillum dolore ullamco ex.\r\n", - "registered": "2019-01-31T11:45:28 +05:00", - "latitude": 46.181833, - "longitude": 120.948823, - "tags": ["culpa", "ex", "id", "dolore", "occaecat", "voluptate", "enim"], - "friends": [ - { - "id": 0, - "name": "Loraine Randall" - }, - { - "id": 1, - "name": "Lorrie Jones" - }, - { - "id": 2, - "name": "Carmen Glover" - } - ], - "greeting": "Hello, Cash May! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df9bb9476464f3b52", - "index": 138, - "guid": "372eae57-cf38-40da-bf40-b1862d85f3ca", - "isActive": false, - "balance": "$1,940.53", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Faith Mcgee", - "gender": "female", - "company": "QUONK", - "email": "faithmcgee@quonk.com", - "phone": "+1 (900) 539-3703", - "address": "553 Harkness Avenue, Nelson, Minnesota, 5591", - "about": "In aliquip sunt anim pariatur ullamco pariatur labore ut cillum enim nostrud ad Lorem. Adipisicing veniam minim duis officia. Velit commodo et occaecat minim in nisi. Anim quis est irure sunt ullamco excepteur ad.\r\n", - "registered": "2015-08-06T09:17:57 +04:00", - "latitude": -17.849751, - "longitude": -68.932812, - "tags": ["enim", "voluptate", "pariatur", "eu", "officia", "aliqua", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Sheila Singleton" - }, - { - "id": 1, - "name": "Alba Hill" - }, - { - "id": 2, - "name": "Casandra Schmidt" - } - ], - "greeting": "Hello, Faith Mcgee! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dee4875c90389419e", - "index": 139, - "guid": "d012da4e-4806-4b08-8ce6-4a0fa1cfdea0", - "isActive": false, - "balance": "$3,968.60", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Walsh Jensen", - "gender": "male", - "company": "BUZZOPIA", - "email": "walshjensen@buzzopia.com", - "phone": "+1 (807) 417-3869", - "address": "875 Meeker Avenue, Lynn, Texas, 2119", - "about": "Sunt ad minim sint sit. In id pariatur sit irure nulla aliqua laborum laboris labore duis. Nulla commodo culpa reprehenderit quis veniam incididunt dolore magna reprehenderit minim. Mollit eiusmod culpa culpa ut dolore tempor occaecat id proident commodo sunt ex. Id qui est labore adipisicing laboris ullamco in magna laborum qui laborum culpa. Quis cupidatat do dolore laborum adipisicing voluptate id aliquip ut nostrud.\r\n", - "registered": "2017-07-12T01:46:00 +04:00", - "latitude": -16.666982, - "longitude": 114.999486, - "tags": ["minim", "in", "officia", "occaecat", "consectetur", "nulla", "irure"], - "friends": [ - { - "id": 0, - "name": "Greta Murphy" - }, - { - "id": 1, - "name": "Beverley Baxter" - }, - { - "id": 2, - "name": "Mcdonald Henderson" - } - ], - "greeting": "Hello, Walsh Jensen! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2f6b2a34cacb7cc7", - "index": 140, - "guid": "093b76d8-f216-41c7-9ed6-0b800d5baefe", - "isActive": false, - "balance": "$3,659.99", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Marci Lawrence", - "gender": "female", - "company": "KONGLE", - "email": "marcilawrence@kongle.com", - "phone": "+1 (800) 468-3203", - "address": "377 Norman Avenue, Canoochee, Alabama, 5708", - "about": "Proident esse consequat ad Lorem elit mollit dolore nostrud deserunt sit cupidatat duis fugiat. Est cupidatat exercitation reprehenderit fugiat ut eiusmod cupidatat id incididunt. Aliquip esse aliqua veniam voluptate ad. Excepteur ex voluptate tempor eu labore est officia sit ut non officia voluptate officia. Dolor reprehenderit pariatur minim exercitation qui sint fugiat dolor. Sit laboris labore anim irure.\r\n", - "registered": "2015-03-20T04:21:21 +04:00", - "latitude": -30.407326, - "longitude": -107.095617, - "tags": ["aliqua", "voluptate", "cillum", "duis", "deserunt", "qui", "ea"], - "friends": [ - { - "id": 0, - "name": "Ruby Ward" - }, - { - "id": 1, - "name": "Mollie Greer" - }, - { - "id": 2, - "name": "Teri Mcconnell" - } - ], - "greeting": "Hello, Marci Lawrence! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1367d4c7ef9ae008", - "index": 141, - "guid": "3a71a56a-8702-4683-8bf5-812bc96b4476", - "isActive": true, - "balance": "$1,166.86", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Lela Pugh", - "gender": "female", - "company": "OCEANICA", - "email": "lelapugh@oceanica.com", - "phone": "+1 (888) 536-3692", - "address": "919 Krier Place, Zortman, Rhode Island, 8978", - "about": "Sunt excepteur ea exercitation esse reprehenderit non aliqua. Est nulla quis velit enim quis veniam aute cupidatat id incididunt ex dolor laborum. Nisi non cupidatat sunt velit cillum laborum esse consectetur deserunt et. Id ullamco occaecat tempor magna. Pariatur in deserunt anim reprehenderit mollit et. Est ipsum eu aute excepteur laborum nulla. Mollit duis dolor anim laborum est irure duis magna elit magna veniam amet labore aute.\r\n", - "registered": "2014-08-16T04:20:14 +04:00", - "latitude": 70.702899, - "longitude": 68.137519, - "tags": ["sunt", "aliquip", "proident", "veniam", "aliquip", "sit", "dolore"], - "friends": [ - { - "id": 0, - "name": "Frost Hartman" - }, - { - "id": 1, - "name": "Cross Goodwin" - }, - { - "id": 2, - "name": "Gamble Sharpe" - } - ], - "greeting": "Hello, Lela Pugh! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dcbf58c3f34d06374", - "index": 142, - "guid": "a44e355e-00ba-4de2-9248-7963199f01df", - "isActive": false, - "balance": "$1,747.32", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Stevenson Mueller", - "gender": "male", - "company": "ACCUPHARM", - "email": "stevensonmueller@accupharm.com", - "phone": "+1 (917) 460-3457", - "address": "711 Underhill Avenue, Harrison, Florida, 3713", - "about": "Excepteur adipisicing incididunt elit fugiat excepteur duis non duis labore ut minim ad occaecat. Commodo enim nisi aliquip sunt consequat. Tempor irure cillum ullamco tempor enim cillum ipsum deserunt eiusmod pariatur aliquip ad. Velit nisi non nostrud consectetur ea duis excepteur. Magna laborum mollit fugiat id. Aliquip excepteur aliquip eiusmod dolore minim ullamco deserunt est nostrud mollit aliqua proident. Amet incididunt elit occaecat ullamco mollit non amet officia ullamco.\r\n", - "registered": "2015-07-11T08:54:19 +04:00", - "latitude": 15.104125, - "longitude": 165.7786, - "tags": ["amet", "reprehenderit", "veniam", "cillum", "occaecat", "incididunt", "proident"], - "friends": [ - { - "id": 0, - "name": "Rosemarie Lott" - }, - { - "id": 1, - "name": "Small Casey" - }, - { - "id": 2, - "name": "Randi Oconnor" - } - ], - "greeting": "Hello, Stevenson Mueller! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd0c1ed510fa2131b", - "index": 143, - "guid": "22459d7c-257f-4edd-805f-f4ef9e54a405", - "isActive": true, - "balance": "$2,044.18", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Valdez Stephens", - "gender": "male", - "company": "ISOSURE", - "email": "valdezstephens@isosure.com", - "phone": "+1 (901) 572-3463", - "address": "979 Prince Street, Tilleda, Indiana, 1909", - "about": "Laboris do aliquip nostrud et ea quis consequat sunt reprehenderit non enim duis veniam in. Minim ipsum incididunt culpa Lorem aute duis laborum mollit. Cillum ullamco consequat magna labore cillum sunt aliquip duis ullamco amet minim.\r\n", - "registered": "2018-11-09T02:12:23 +05:00", - "latitude": -78.975068, - "longitude": 133.435367, - "tags": ["aute", "anim", "esse", "anim", "non", "culpa", "labore"], - "friends": [ - { - "id": 0, - "name": "Price Frost" - }, - { - "id": 1, - "name": "Abby Benson" - }, - { - "id": 2, - "name": "Clayton Hatfield" - } - ], - "greeting": "Hello, Valdez Stephens! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de3c6ac18ecb783bd", - "index": 144, - "guid": "a1c7d6c0-4394-48cb-850f-f895dabca883", - "isActive": false, - "balance": "$3,872.11", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Nell Kelly", - "gender": "female", - "company": "TWIIST", - "email": "nellkelly@twiist.com", - "phone": "+1 (896) 454-2281", - "address": "927 Bethel Loop, Vaughn, Northern Mariana Islands, 4536", - "about": "Et amet eu tempor sint exercitation aliquip consequat velit ipsum ullamco qui amet. Veniam nulla amet ad et non ad. Est sint irure eiusmod eu nulla do sit enim magna id amet tempor. Dolore duis do proident aliquip ad. Velit cillum ex do Lorem occaecat cillum aute fugiat laboris deserunt.\r\n", - "registered": "2017-09-27T12:55:03 +04:00", - "latitude": -60.361235, - "longitude": -164.177642, - "tags": ["minim", "enim", "ad", "ut", "tempor", "ut", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Quinn Delgado" - }, - { - "id": 1, - "name": "Middleton Avila" - }, - { - "id": 2, - "name": "Barker Cannon" - } - ], - "greeting": "Hello, Nell Kelly! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d789042a7b012c706", - "index": 145, - "guid": "cb85180f-d915-4818-9883-8b8340e850fe", - "isActive": true, - "balance": "$2,256.69", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Kristi Stark", - "gender": "female", - "company": "EXTREMO", - "email": "krististark@extremo.com", - "phone": "+1 (852) 598-2687", - "address": "849 Amity Street, Leland, Idaho, 8599", - "about": "Sunt ad ullamco aliqua do cupidatat mollit reprehenderit irure ipsum consectetur quis nisi est. Sunt aute esse elit Lorem adipisicing aute excepteur labore proident sit labore quis. Velit fugiat cupidatat mollit velit dolor velit est. Laborum aute velit nostrud tempor excepteur dolor. Cillum cupidatat dolore duis ut sunt mollit ullamco sint. Reprehenderit eiusmod commodo pariatur ex adipisicing. Laboris ipsum enim sit voluptate.\r\n", - "registered": "2016-10-17T05:52:21 +04:00", - "latitude": -62.724367, - "longitude": -60.114952, - "tags": ["do", "incididunt", "ea", "proident", "amet", "sit", "tempor"], - "friends": [ - { - "id": 0, - "name": "Ina Olson" - }, - { - "id": 1, - "name": "Dunn Meyers" - }, - { - "id": 2, - "name": "Cain Deleon" - } - ], - "greeting": "Hello, Kristi Stark! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d86540af9ad6b2da1", - "index": 146, - "guid": "4806cfb0-0635-419e-97da-1070d2cd8d6a", - "isActive": false, - "balance": "$3,379.36", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Elena Harris", - "gender": "female", - "company": "CUBIX", - "email": "elenaharris@cubix.com", - "phone": "+1 (820) 410-3492", - "address": "209 Meadow Street, Weeksville, District Of Columbia, 1233", - "about": "Non dolor occaecat ipsum non laboris culpa deserunt veniam quis laborum cupidatat aliqua in. Cillum laborum sunt dolor et incididunt nostrud. Sunt irure quis adipisicing in elit excepteur anim occaecat minim voluptate. Pariatur laboris officia minim in ullamco adipisicing do duis laborum veniam exercitation aliquip. Adipisicing nostrud nulla magna tempor pariatur est elit nostrud deserunt. Nisi minim reprehenderit in qui sunt in duis tempor nostrud ipsum. Dolor reprehenderit in occaecat enim non eu.\r\n", - "registered": "2020-03-01T01:19:27 +05:00", - "latitude": -32.87981, - "longitude": 154.846215, - "tags": ["reprehenderit", "aliquip", "magna", "in", "voluptate", "do", "ex"], - "friends": [ - { - "id": 0, - "name": "Regina Hutchinson" - }, - { - "id": 1, - "name": "Mae Frederick" - }, - { - "id": 2, - "name": "Pope Rodgers" - } - ], - "greeting": "Hello, Elena Harris! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9bec6ebe2e5e9aba", - "index": 147, - "guid": "a20c3e21-ee26-4144-8092-dcc4984cfade", - "isActive": true, - "balance": "$2,421.83", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Hillary Whitaker", - "gender": "female", - "company": "DYNO", - "email": "hillarywhitaker@dyno.com", - "phone": "+1 (857) 431-2289", - "address": "446 Flatbush Avenue, Helen, New Mexico, 9383", - "about": "In exercitation enim sunt ipsum nulla. Dolor dolore amet sint nulla adipisicing Lorem occaecat nisi et eu elit eu. Officia elit ea aliquip et velit. Culpa labore incididunt velit ut eiusmod cupidatat. Non ut nostrud id minim.\r\n", - "registered": "2014-02-28T05:09:58 +05:00", - "latitude": -11.853845, - "longitude": -5.843351, - "tags": ["magna", "ex", "cupidatat", "elit", "quis", "qui", "dolore"], - "friends": [ - { - "id": 0, - "name": "Shanna Miller" - }, - { - "id": 1, - "name": "Sonya Price" - }, - { - "id": 2, - "name": "Lucy Merritt" - } - ], - "greeting": "Hello, Hillary Whitaker! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dcc2ff6892146fa49", - "index": 148, - "guid": "85a23597-b857-479f-82c5-2d149c4e8869", - "isActive": true, - "balance": "$1,535.03", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Lea Valentine", - "gender": "female", - "company": "THREDZ", - "email": "leavalentine@thredz.com", - "phone": "+1 (973) 546-2674", - "address": "832 Winthrop Street, Walland, South Dakota, 8364", - "about": "Consectetur cillum et est sint do ut nulla dolore. Aliqua deserunt consequat sint cillum eu esse eu. Exercitation ad eiusmod ut amet amet proident ad pariatur pariatur aliquip. Eiusmod nulla esse dolore magna ea cupidatat anim commodo magna labore nulla labore. Ea eu dolor ullamco eu officia. Id id sint eiusmod ex adipisicing eu sit est irure ut velit veniam.\r\n", - "registered": "2019-10-17T06:22:25 +04:00", - "latitude": -81.331935, - "longitude": -86.418691, - "tags": ["ea", "excepteur", "incididunt", "nisi", "anim", "deserunt", "anim"], - "friends": [ - { - "id": 0, - "name": "Valeria Avery" - }, - { - "id": 1, - "name": "Lee Alston" - }, - { - "id": 2, - "name": "Roxanne Quinn" - } - ], - "greeting": "Hello, Lea Valentine! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d684193ad92c516fb", - "index": 149, - "guid": "3ec44ac2-3baf-445d-8be0-785dd571a073", - "isActive": false, - "balance": "$2,066.89", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Muriel Perry", - "gender": "female", - "company": "ZILLACTIC", - "email": "murielperry@zillactic.com", - "phone": "+1 (919) 470-2550", - "address": "607 Balfour Place, Lowgap, American Samoa, 1503", - "about": "Minim tempor laboris tempor occaecat magna cillum. Pariatur commodo consectetur ex pariatur laboris nostrud nisi Lorem mollit labore. Enim aliquip quis duis proident laborum enim excepteur. Cupidatat voluptate eiusmod irure commodo nostrud velit exercitation labore est enim laboris dolore in aute. Nisi ipsum voluptate exercitation ex. Dolore culpa est deserunt exercitation aliquip dolore tempor sint incididunt.\r\n", - "registered": "2015-07-10T03:53:59 +04:00", - "latitude": 5.036506, - "longitude": -171.268886, - "tags": ["qui", "veniam", "cillum", "aliquip", "irure", "irure", "laboris"], - "friends": [ - { - "id": 0, - "name": "Carolina Mclaughlin" - }, - { - "id": 1, - "name": "Ava Strong" - }, - { - "id": 2, - "name": "Prince Reid" - } - ], - "greeting": "Hello, Muriel Perry! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da215467bd6546ba6", - "index": 150, - "guid": "e3feb427-04e8-4987-bf31-cb6597602eac", - "isActive": false, - "balance": "$2,458.39", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Natalia Martinez", - "gender": "female", - "company": "RODEMCO", - "email": "nataliamartinez@rodemco.com", - "phone": "+1 (973) 470-3624", - "address": "607 Engert Avenue, Teasdale, Iowa, 6326", - "about": "In pariatur elit exercitation eu magna quis commodo nulla enim cupidatat in. Laborum aliqua quis magna labore officia esse duis elit consequat qui enim culpa aute velit. Irure tempor magna amet aliquip aliquip. Id aliquip duis ipsum duis deserunt aliquip laboris. Deserunt ad ea id nisi magna. Nostrud excepteur ea commodo laboris aute ullamco adipisicing deserunt duis tempor mollit proident nulla. Aute occaecat do labore duis incididunt magna sunt id proident sunt irure in occaecat.\r\n", - "registered": "2020-01-22T07:14:31 +05:00", - "latitude": 28.899655, - "longitude": 119.929402, - "tags": ["id", "anim", "anim", "proident", "cupidatat", "ut", "sit"], - "friends": [ - { - "id": 0, - "name": "Steele Daniels" - }, - { - "id": 1, - "name": "Blair Travis" - }, - { - "id": 2, - "name": "Cervantes Castaneda" - } - ], - "greeting": "Hello, Natalia Martinez! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dad5a8f41cc5ab110", - "index": 151, - "guid": "8d163a43-dc92-4aad-87af-be88afd782b3", - "isActive": true, - "balance": "$3,180.77", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Bridget Cochran", - "gender": "female", - "company": "EVENTIX", - "email": "bridgetcochran@eventix.com", - "phone": "+1 (890) 473-2070", - "address": "430 Dwight Street, Hoehne, Palau, 9755", - "about": "Nisi culpa esse officia laboris officia sit magna ea. Adipisicing amet ad sint magna labore minim cupidatat in anim in amet tempor. Proident consectetur exercitation ex elit velit ad excepteur enim ut. Occaecat excepteur elit exercitation culpa id. Excepteur ea cillum nisi id duis adipisicing et duis voluptate laborum officia nostrud in. Enim dolore dolor duis deserunt cillum ad eu in exercitation eu. Exercitation ullamco excepteur incididunt pariatur culpa et adipisicing in qui sit.\r\n", - "registered": "2016-02-15T07:35:01 +05:00", - "latitude": 85.261015, - "longitude": 1.885707, - "tags": ["duis", "enim", "laborum", "enim", "cillum", "nulla", "in"], - "friends": [ - { - "id": 0, - "name": "Chavez Battle" - }, - { - "id": 1, - "name": "Dominique Castillo" - }, - { - "id": 2, - "name": "Hooper Oneal" - } - ], - "greeting": "Hello, Bridget Cochran! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd9f6484cd2c9809c", - "index": 152, - "guid": "f949bf1d-3415-4840-95c7-4e15c6548e36", - "isActive": true, - "balance": "$2,403.08", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Guadalupe Fitzpatrick", - "gender": "female", - "company": "VORATAK", - "email": "guadalupefitzpatrick@voratak.com", - "phone": "+1 (965) 548-3535", - "address": "586 Desmond Court, Eggertsville, West Virginia, 2876", - "about": "Nostrud labore adipisicing commodo proident ad cillum ut anim dolore. Laboris consequat esse consequat sit officia occaecat consequat duis laborum amet ex pariatur aliqua do. Nulla id commodo anim ipsum reprehenderit culpa fugiat. In velit fugiat commodo ullamco cupidatat est eiusmod cupidatat in ex laborum commodo. Laboris non do id minim ad nisi et dolor consectetur ex. Adipisicing excepteur cillum eiusmod officia cupidatat ex commodo irure pariatur Lorem.\r\n", - "registered": "2016-06-14T08:04:34 +04:00", - "latitude": 9.624909, - "longitude": 30.97459, - "tags": ["elit", "quis", "nisi", "consectetur", "voluptate", "id", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Stacy Velasquez" - }, - { - "id": 1, - "name": "Henry Petty" - }, - { - "id": 2, - "name": "Shepard Pennington" - } - ], - "greeting": "Hello, Guadalupe Fitzpatrick! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8a9302c806475fad", - "index": 153, - "guid": "a1a86ecd-25d1-4b5a-8009-c4776d5d0be6", - "isActive": true, - "balance": "$3,896.23", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Rush Reyes", - "gender": "male", - "company": "CABLAM", - "email": "rushreyes@cablam.com", - "phone": "+1 (952) 537-3160", - "address": "153 Perry Terrace, Oceola, New York, 8763", - "about": "Ullamco nostrud aliquip magna nostrud consequat laboris commodo mollit sit reprehenderit esse. Officia elit nulla incididunt labore ex. Elit laborum minim enim qui fugiat cupidatat Lorem deserunt consequat. Ut exercitation deserunt nulla eiusmod.\r\n", - "registered": "2015-07-30T03:41:26 +04:00", - "latitude": 63.521935, - "longitude": -134.162346, - "tags": ["mollit", "dolore", "sit", "eu", "in", "dolore", "dolore"], - "friends": [ - { - "id": 0, - "name": "Mckenzie Roth" - }, - { - "id": 1, - "name": "Bradford Walker" - }, - { - "id": 2, - "name": "Alexandria Morrison" - } - ], - "greeting": "Hello, Rush Reyes! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2a5bdc0c361618af", - "index": 154, - "guid": "5fdd61a4-554d-4a51-9271-d41147f3ddf5", - "isActive": false, - "balance": "$2,464.95", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "brown", - "name": "Foster Carney", - "gender": "male", - "company": "ZAGGLE", - "email": "fostercarney@zaggle.com", - "phone": "+1 (943) 422-2728", - "address": "455 Kosciusko Street, Limestone, Hawaii, 8280", - "about": "Exercitation cupidatat laboris laborum proident ipsum qui sunt aliquip ex sint incididunt velit incididunt sit. Consequat id aliquip duis consectetur nostrud aute exercitation duis aute magna. Tempor eu est quis non voluptate voluptate officia amet. Minim quis aute non ipsum eu veniam laborum tempor.\r\n", - "registered": "2020-01-31T10:15:39 +05:00", - "latitude": 70.109701, - "longitude": 158.9959, - "tags": ["laboris", "voluptate", "sunt", "nisi", "do", "deserunt", "anim"], - "friends": [ - { - "id": 0, - "name": "Mathews Calderon" - }, - { - "id": 1, - "name": "Sweeney Daugherty" - }, - { - "id": 2, - "name": "Stacey Smith" - } - ], - "greeting": "Hello, Foster Carney! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d55ac96342014066c", - "index": 155, - "guid": "75e189f8-d3b8-47e9-a971-0001cb5a9b76", - "isActive": true, - "balance": "$3,110.35", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Herring Ingram", - "gender": "male", - "company": "QUIZKA", - "email": "herringingram@quizka.com", - "phone": "+1 (822) 423-3757", - "address": "524 Fountain Avenue, Hondah, Nebraska, 2691", - "about": "Enim voluptate irure ea qui nulla eu mollit voluptate sunt mollit deserunt. Consequat veniam consequat aliqua laborum est in ipsum aute duis sit. Aute eu irure in ut veniam aliqua cillum ipsum elit occaecat irure dolor. Ea ex do minim sint eiusmod pariatur reprehenderit nisi veniam sint aliqua ea. Elit et sint in ex ut aliquip cupidatat aliquip eu laborum excepteur. Velit aliqua adipisicing labore dolore.\r\n", - "registered": "2020-07-31T10:29:33 +04:00", - "latitude": 75.92268, - "longitude": -13.081224, - "tags": ["aliqua", "mollit", "ex", "officia", "mollit", "mollit", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Isabelle Randolph" - }, - { - "id": 1, - "name": "Chandler Potts" - }, - { - "id": 2, - "name": "Merritt Delacruz" - } - ], - "greeting": "Hello, Herring Ingram! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8bbe35587359c816", - "index": 156, - "guid": "011cef7d-7411-46fd-841f-5235ebc5864d", - "isActive": false, - "balance": "$1,703.07", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Maritza Head", - "gender": "female", - "company": "ANIVET", - "email": "maritzahead@anivet.com", - "phone": "+1 (975) 540-3762", - "address": "102 Gelston Avenue, Olney, Wisconsin, 8244", - "about": "Voluptate qui velit eu excepteur anim ex cupidatat enim reprehenderit do nisi id amet. Ea tempor sit do elit velit ut minim culpa elit culpa velit est cupidatat esse. Non amet nulla do dolor quis quis reprehenderit ad qui minim officia exercitation. Minim labore commodo occaecat est. Commodo nulla consequat deserunt sunt fugiat id dolor nisi laboris. Pariatur anim sint pariatur voluptate fugiat deserunt incididunt fugiat aliqua cillum nostrud sunt. Consequat consectetur consectetur aliqua proident cillum irure proident enim.\r\n", - "registered": "2014-08-17T08:26:58 +04:00", - "latitude": 25.908485, - "longitude": -35.167545, - "tags": ["eiusmod", "labore", "ea", "tempor", "nisi", "adipisicing", "sit"], - "friends": [ - { - "id": 0, - "name": "Judith Newton" - }, - { - "id": 1, - "name": "Rogers Elliott" - }, - { - "id": 2, - "name": "Acosta Sullivan" - } - ], - "greeting": "Hello, Maritza Head! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de83baf8a8f5ce6d2", - "index": 157, - "guid": "df45b40d-e796-4eb7-ad4f-d5beb0604dc5", - "isActive": true, - "balance": "$2,077.30", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Fannie Montgomery", - "gender": "female", - "company": "FLOTONIC", - "email": "fanniemontgomery@flotonic.com", - "phone": "+1 (970) 540-3958", - "address": "782 Tillary Street, Freetown, Arizona, 9337", - "about": "Nostrud qui ipsum irure aliquip veniam occaecat nisi dolore. Aute mollit magna est est exercitation deserunt. Laboris ex laborum sint Lorem eiusmod ex anim eiusmod enim ad. Qui do culpa consectetur consectetur. Adipisicing qui mollit consectetur Lorem tempor sunt duis irure irure velit. Elit incididunt irure cillum enim id duis. Tempor non ut ex ipsum eu nisi.\r\n", - "registered": "2017-04-17T03:19:55 +04:00", - "latitude": -6.0786, - "longitude": 126.032531, - "tags": ["laborum", "sint", "est", "exercitation", "elit", "anim", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Jenifer Nunez" - }, - { - "id": 1, - "name": "Christa Mann" - }, - { - "id": 2, - "name": "Salinas Miranda" - } - ], - "greeting": "Hello, Fannie Montgomery! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df3cc2ea532f23c42", - "index": 158, - "guid": "8ebb70bc-22c1-47b9-aa6f-5d8515f8a8d8", - "isActive": false, - "balance": "$1,821.13", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Lenore Rose", - "gender": "female", - "company": "JIMBIES", - "email": "lenorerose@jimbies.com", - "phone": "+1 (934) 590-3848", - "address": "215 Arlington Place, Clay, Ohio, 3466", - "about": "Tempor excepteur incididunt eu labore duis adipisicing ipsum excepteur. Ullamco ad voluptate dolore elit. Occaecat deserunt dolore ipsum nisi ea cillum dolor cillum dolore. Nostrud duis proident exercitation consectetur est ea labore. In esse ex et sit et.\r\n", - "registered": "2014-11-26T06:48:27 +05:00", - "latitude": -5.008495, - "longitude": -138.990687, - "tags": ["irure", "ipsum", "adipisicing", "voluptate", "dolor", "voluptate", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Jimmie Rosales" - }, - { - "id": 1, - "name": "Gillespie Vincent" - }, - { - "id": 2, - "name": "Leola Burke" - } - ], - "greeting": "Hello, Lenore Rose! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6a76bedce0af27ef", - "index": 159, - "guid": "d06d84f7-801d-4be3-9550-963244adf27b", - "isActive": true, - "balance": "$3,211.47", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Mcdowell Booker", - "gender": "male", - "company": "GLEAMINK", - "email": "mcdowellbooker@gleamink.com", - "phone": "+1 (832) 423-2946", - "address": "283 Carlton Avenue, Garberville, Arkansas, 5188", - "about": "Voluptate magna ipsum ut cupidatat dolore labore culpa. Eu consequat sunt ad nulla pariatur commodo eu aliqua ullamco reprehenderit duis et. Cupidatat commodo proident adipisicing velit quis consequat velit eu voluptate velit. Lorem non nostrud anim ipsum esse esse dolore ad. Est sit ad laboris nulla ea. Tempor ullamco cillum nisi culpa irure ut excepteur cillum.\r\n", - "registered": "2016-09-25T12:57:26 +04:00", - "latitude": 61.285293, - "longitude": -78.006794, - "tags": ["Lorem", "nulla", "enim", "laboris", "sunt", "velit", "laborum"], - "friends": [ - { - "id": 0, - "name": "Cheryl Hardy" - }, - { - "id": 1, - "name": "Reva James" - }, - { - "id": 2, - "name": "Cynthia Sheppard" - } - ], - "greeting": "Hello, Mcdowell Booker! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d67519c0f66b99a53", - "index": 160, - "guid": "67596703-f5fa-4a8f-82df-20eed0bf3bfd", - "isActive": false, - "balance": "$2,637.67", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Socorro Meadows", - "gender": "female", - "company": "UPDAT", - "email": "socorromeadows@updat.com", - "phone": "+1 (979) 572-3456", - "address": "576 Lincoln Terrace, Wacissa, Nevada, 8667", - "about": "Officia voluptate excepteur reprehenderit reprehenderit Lorem mollit consectetur ut sit elit. Elit nostrud tempor do occaecat ea laboris cupidatat nulla commodo esse est labore. Nostrud consequat velit duis culpa velit amet laborum. Proident eiusmod culpa ad ipsum et do magna sunt magna reprehenderit. Dolor consectetur eiusmod sit aliquip.\r\n", - "registered": "2019-06-21T02:25:13 +04:00", - "latitude": 41.110054, - "longitude": 142.733584, - "tags": ["laboris", "exercitation", "excepteur", "eiusmod", "non", "nisi", "consequat"], - "friends": [ - { - "id": 0, - "name": "Mona Banks" - }, - { - "id": 1, - "name": "Keri Sears" - }, - { - "id": 2, - "name": "Hester Rivera" - } - ], - "greeting": "Hello, Socorro Meadows! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da2ef466e99ddda7f", - "index": 161, - "guid": "9a5fa56c-14a2-4570-afeb-9b2fbca59254", - "isActive": true, - "balance": "$1,177.01", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Rhea Kinney", - "gender": "female", - "company": "KENEGY", - "email": "rheakinney@kenegy.com", - "phone": "+1 (844) 580-3057", - "address": "539 Turner Place, Homeworth, Massachusetts, 6338", - "about": "Eu labore pariatur anim laborum incididunt sint anim Lorem do. Voluptate non excepteur nostrud officia anim ipsum cillum qui qui consectetur aliquip aliqua. Aute id consequat velit reprehenderit do officia amet ad duis incididunt exercitation magna cillum.\r\n", - "registered": "2017-03-05T01:29:44 +05:00", - "latitude": 71.875574, - "longitude": -135.620106, - "tags": ["tempor", "consequat", "irure", "mollit", "consequat", "officia", "esse"], - "friends": [ - { - "id": 0, - "name": "Elvira Justice" - }, - { - "id": 1, - "name": "Sawyer Anderson" - }, - { - "id": 2, - "name": "Lucille Landry" - } - ], - "greeting": "Hello, Rhea Kinney! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d003a13aedb3b17cd", - "index": 162, - "guid": "cb9646eb-0693-4668-ad5d-28da3ac9605b", - "isActive": true, - "balance": "$1,712.29", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Roman Young", - "gender": "male", - "company": "TECHTRIX", - "email": "romanyoung@techtrix.com", - "phone": "+1 (916) 427-3044", - "address": "757 Robert Street, Neahkahnie, Marshall Islands, 2609", - "about": "Qui dolore adipisicing tempor consequat proident culpa eu sint non reprehenderit amet id. Proident deserunt et reprehenderit non veniam anim quis ut id proident irure nulla. Qui quis dolore aliquip exercitation ad nulla deserunt qui aute do aliquip. Incididunt officia dolor est cupidatat cupidatat.\r\n", - "registered": "2020-05-04T04:15:37 +04:00", - "latitude": 47.648993, - "longitude": 175.456502, - "tags": ["ipsum", "esse", "exercitation", "eu", "pariatur", "amet", "minim"], - "friends": [ - { - "id": 0, - "name": "Tricia Harvey" - }, - { - "id": 1, - "name": "Emily Guthrie" - }, - { - "id": 2, - "name": "Strong Mcintosh" - } - ], - "greeting": "Hello, Roman Young! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df5dca833aab822e0", - "index": 163, - "guid": "46dd9c77-aa2a-442b-9b70-b88653415178", - "isActive": false, - "balance": "$2,511.57", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Riggs Wall", - "gender": "male", - "company": "KROG", - "email": "riggswall@krog.com", - "phone": "+1 (940) 456-2633", - "address": "363 Brigham Street, Westphalia, Puerto Rico, 8459", - "about": "Commodo fugiat culpa mollit ut anim aliquip consequat dolor nulla dolor nulla ex. Excepteur non Lorem nostrud amet tempor proident et. Voluptate do reprehenderit ut elit ut proident id. Qui dolore reprehenderit sunt qui.\r\n", - "registered": "2020-04-10T12:15:12 +04:00", - "latitude": -81.198811, - "longitude": 162.461275, - "tags": ["dolor", "elit", "deserunt", "pariatur", "nisi", "do", "quis"], - "friends": [ - { - "id": 0, - "name": "Callie Moss" - }, - { - "id": 1, - "name": "Alexis Holland" - }, - { - "id": 2, - "name": "Claire Bauer" - } - ], - "greeting": "Hello, Riggs Wall! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db4b15b41a3eb6c56", - "index": 164, - "guid": "993d7e90-5eec-46b5-b28b-a3df0a11631b", - "isActive": true, - "balance": "$3,553.31", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Olsen Burton", - "gender": "male", - "company": "EQUITAX", - "email": "olsenburton@equitax.com", - "phone": "+1 (815) 444-2954", - "address": "123 Fleet Street, Adamstown, California, 2762", - "about": "Dolor velit velit consequat duis enim exercitation minim sit in laboris sit officia commodo elit. Cupidatat qui tempor fugiat qui et veniam et magna. Ea nulla magna non aliquip culpa non veniam in commodo in ea quis non. Ipsum proident non consequat esse pariatur pariatur consectetur ut adipisicing quis. Labore aliqua amet et id laborum reprehenderit irure. Sint sunt velit deserunt aliqua ullamco. Qui duis laboris esse tempor reprehenderit ad consequat.\r\n", - "registered": "2015-07-01T08:19:42 +04:00", - "latitude": 76.05953, - "longitude": -74.393595, - "tags": ["dolore", "adipisicing", "dolore", "pariatur", "dolor", "anim", "est"], - "friends": [ - { - "id": 0, - "name": "Christian Haney" - }, - { - "id": 1, - "name": "Lenora Key" - }, - { - "id": 2, - "name": "Anna Gill" - } - ], - "greeting": "Hello, Olsen Burton! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d27e6441ce961bda2", - "index": 165, - "guid": "94bcb8cf-d401-4fae-ab9c-adde3aaee8f5", - "isActive": true, - "balance": "$3,565.33", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Sadie Rivas", - "gender": "female", - "company": "STROZEN", - "email": "sadierivas@strozen.com", - "phone": "+1 (920) 452-2747", - "address": "408 Etna Street, Carlos, Tennessee, 7008", - "about": "Labore velit quis pariatur exercitation aliqua non consequat incididunt commodo duis cillum. Adipisicing id excepteur ipsum esse consectetur quis culpa non. Elit commodo exercitation enim laborum eiusmod sit nisi veniam veniam id commodo commodo elit.\r\n", - "registered": "2020-04-12T10:23:57 +04:00", - "latitude": 77.958154, - "longitude": -170.755903, - "tags": ["fugiat", "irure", "consequat", "cupidatat", "minim", "nisi", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Jeanne Whitley" - }, - { - "id": 1, - "name": "Penny Harrell" - }, - { - "id": 2, - "name": "Hanson Case" - } - ], - "greeting": "Hello, Sadie Rivas! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc7f3390ea45e1312", - "index": 166, - "guid": "d97f632c-990e-4c82-a962-f43ed701728f", - "isActive": false, - "balance": "$1,912.78", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Donna Gamble", - "gender": "female", - "company": "PLASMOS", - "email": "donnagamble@plasmos.com", - "phone": "+1 (898) 523-3344", - "address": "188 Garden Place, Fruitdale, Wyoming, 5985", - "about": "Sit ex occaecat officia elit eu Lorem id. Id deserunt officia dolore occaecat. Incididunt incididunt commodo esse est aliqua esse mollit non in.\r\n", - "registered": "2014-11-07T12:36:17 +05:00", - "latitude": -29.321524, - "longitude": 71.564588, - "tags": ["adipisicing", "cupidatat", "enim", "occaecat", "in", "officia", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Holcomb Hahn" - }, - { - "id": 1, - "name": "Rojas Stone" - }, - { - "id": 2, - "name": "Edna Ramirez" - } - ], - "greeting": "Hello, Donna Gamble! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d04c2565822e1d64d", - "index": 167, - "guid": "dc084838-ae21-45cd-a522-c63b388cc5bb", - "isActive": true, - "balance": "$3,675.25", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Meredith Carver", - "gender": "female", - "company": "GEEKULAR", - "email": "meredithcarver@geekular.com", - "phone": "+1 (966) 575-3174", - "address": "441 Louis Place, Noblestown, North Carolina, 4785", - "about": "Eu et amet ea ex. Dolor anim cupidatat cupidatat anim consequat enim et aute ea mollit aliqua magna minim. Nostrud sunt occaecat ea commodo eu exercitation veniam. Non mollit duis amet elit. Culpa irure incididunt officia veniam quis. Reprehenderit ullamco veniam exercitation adipisicing occaecat cupidatat elit fugiat consectetur commodo tempor do.\r\n", - "registered": "2018-03-18T10:56:50 +04:00", - "latitude": -26.114401, - "longitude": -138.823891, - "tags": ["culpa", "aliquip", "incididunt", "aute", "anim", "fugiat", "sint"], - "friends": [ - { - "id": 0, - "name": "Margret Ayala" - }, - { - "id": 1, - "name": "Mcknight Nicholson" - }, - { - "id": 2, - "name": "Beard Faulkner" - } - ], - "greeting": "Hello, Meredith Carver! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d96667447694491b8", - "index": 168, - "guid": "2c57dd9c-ad56-498c-a019-9f9024a7205d", - "isActive": true, - "balance": "$1,710.15", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Wade Hobbs", - "gender": "male", - "company": "ARTWORLDS", - "email": "wadehobbs@artworlds.com", - "phone": "+1 (895) 592-2876", - "address": "450 Lloyd Court, Vienna, Michigan, 6491", - "about": "Adipisicing et laboris ullamco sunt cillum. Aute eu eiusmod consequat ut duis esse est proident esse. Aliqua ullamco voluptate tempor nisi non est exercitation sit voluptate.\r\n", - "registered": "2018-01-19T12:53:29 +05:00", - "latitude": 18.10785, - "longitude": -24.526745, - "tags": ["excepteur", "cupidatat", "culpa", "mollit", "reprehenderit", "duis", "qui"], - "friends": [ - { - "id": 0, - "name": "Michael Munoz" - }, - { - "id": 1, - "name": "Harding Workman" - }, - { - "id": 2, - "name": "Johns Kent" - } - ], - "greeting": "Hello, Wade Hobbs! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0ea5da2f8b7254f7", - "index": 169, - "guid": "288719f6-6baf-437a-be12-54882dbce1bb", - "isActive": false, - "balance": "$3,929.57", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Bullock Henson", - "gender": "male", - "company": "ZERBINA", - "email": "bullockhenson@zerbina.com", - "phone": "+1 (897) 597-2707", - "address": "268 Campus Road, Babb, Oklahoma, 7317", - "about": "Consequat exercitation ipsum irure ea aliquip nulla et aute culpa qui occaecat in dolor do. Dolore eu elit ex veniam eiusmod sint velit non. Mollit pariatur anim culpa deserunt nisi aliquip consectetur deserunt cupidatat dolore sint ullamco.\r\n", - "registered": "2019-10-08T01:41:21 +04:00", - "latitude": -86.651592, - "longitude": -124.745337, - "tags": ["ad", "consectetur", "consectetur", "velit", "consectetur", "deserunt", "sint"], - "friends": [ - { - "id": 0, - "name": "Raquel Huff" - }, - { - "id": 1, - "name": "Sherman Hines" - }, - { - "id": 2, - "name": "Holt Molina" - } - ], - "greeting": "Hello, Bullock Henson! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d857419c7262518f1", - "index": 170, - "guid": "a5eba275-0a14-4a06-9889-530d25c029c1", - "isActive": false, - "balance": "$3,266.11", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Gwen Anthony", - "gender": "female", - "company": "NEBULEAN", - "email": "gwenanthony@nebulean.com", - "phone": "+1 (801) 443-2241", - "address": "380 Hooper Street, Allamuchy, Vermont, 217", - "about": "Fugiat proident tempor ad labore ipsum laborum dolor laborum excepteur. Enim aute pariatur eu pariatur aute dolore esse dolor excepteur sint. Nulla nulla nulla magna ex excepteur sint eu irure. Proident exercitation sint culpa veniam ad nostrud quis tempor aliquip culpa quis.\r\n", - "registered": "2015-06-12T07:32:39 +04:00", - "latitude": -59.971646, - "longitude": 150.3167, - "tags": ["nulla", "labore", "laboris", "tempor", "nulla", "labore", "aute"], - "friends": [ - { - "id": 0, - "name": "Miranda Church" - }, - { - "id": 1, - "name": "Dorsey Lee" - }, - { - "id": 2, - "name": "James Williamson" - } - ], - "greeting": "Hello, Gwen Anthony! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d093a563907b76163", - "index": 171, - "guid": "16eae939-673a-46ca-aa92-8dd13bac37c6", - "isActive": true, - "balance": "$2,670.87", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Burch Brennan", - "gender": "male", - "company": "BARKARAMA", - "email": "burchbrennan@barkarama.com", - "phone": "+1 (823) 481-2213", - "address": "912 College Place, Rivera, Utah, 9476", - "about": "Culpa laborum ut dolor nisi. Eu occaecat aliquip consectetur officia duis. Duis reprehenderit enim irure duis. Proident eu veniam laboris deserunt proident.\r\n", - "registered": "2015-06-06T05:18:33 +04:00", - "latitude": 86.389511, - "longitude": 90.786469, - "tags": ["nostrud", "ad", "excepteur", "dolore", "eiusmod", "pariatur", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Kenya Knapp" - }, - { - "id": 1, - "name": "Kirsten Bowers" - }, - { - "id": 2, - "name": "Vasquez Kirkland" - } - ], - "greeting": "Hello, Burch Brennan! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d356a870266946cc3", - "index": 172, - "guid": "cb587813-232e-4e0b-982b-41ce12b0d939", - "isActive": false, - "balance": "$1,938.16", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Hood Mack", - "gender": "male", - "company": "FIBRODYNE", - "email": "hoodmack@fibrodyne.com", - "phone": "+1 (850) 436-3074", - "address": "416 Wyckoff Avenue, Enetai, Kansas, 3334", - "about": "Commodo esse quis ut est aliquip amet non in. Eiusmod culpa aliquip eiusmod in elit sunt deserunt sunt velit magna dolore. Pariatur culpa est non non sint eiusmod. Reprehenderit sint do eiusmod dolor non do duis duis exercitation. Magna ullamco nisi ullamco magna. Cupidatat amet id consequat in.\r\n", - "registered": "2020-06-16T12:34:22 +04:00", - "latitude": -60.294979, - "longitude": -62.903615, - "tags": ["cupidatat", "aliqua", "proident", "laboris", "veniam", "qui", "commodo"], - "friends": [ - { - "id": 0, - "name": "Margaret Powers" - }, - { - "id": 1, - "name": "Hollie Chandler" - }, - { - "id": 2, - "name": "Phoebe Kane" - } - ], - "greeting": "Hello, Hood Mack! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2ad4b6af381ca64f", - "index": 173, - "guid": "b0cedc8b-1a5d-41bb-95cc-6f76c75b2667", - "isActive": true, - "balance": "$3,177.15", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Kristin Kramer", - "gender": "female", - "company": "EPLOSION", - "email": "kristinkramer@eplosion.com", - "phone": "+1 (926) 594-2152", - "address": "118 Jerome Street, Bangor, Delaware, 8684", - "about": "Dolore dolore nisi fugiat id incididunt esse minim nulla enim cupidatat ut dolore. Pariatur deserunt sunt voluptate ut officia excepteur. Quis aliquip cupidatat consequat sint labore anim do pariatur voluptate ullamco nisi aliquip officia. Commodo culpa commodo ipsum commodo ea occaecat ipsum cupidatat qui ullamco deserunt et. Velit nostrud dolore aute minim nostrud ex eu enim officia nostrud. Reprehenderit commodo aute amet labore pariatur minim ea elit sint deserunt exercitation laboris culpa aliquip.\r\n", - "registered": "2015-04-10T05:25:54 +04:00", - "latitude": -66.240092, - "longitude": 16.597492, - "tags": ["laborum", "ut", "in", "nisi", "excepteur", "est", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Ann Ruiz" - }, - { - "id": 1, - "name": "Lester Snow" - }, - { - "id": 2, - "name": "Bond Lane" - } - ], - "greeting": "Hello, Kristin Kramer! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1ccaff236251ce9d", - "index": 174, - "guid": "98d9ccc7-f3f7-496c-8ee4-a76976ba4803", - "isActive": true, - "balance": "$3,144.32", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Jaclyn Douglas", - "gender": "female", - "company": "DEMINIMUM", - "email": "jaclyndouglas@deminimum.com", - "phone": "+1 (828) 497-2359", - "address": "322 Fay Court, Manchester, Guam, 4208", - "about": "Lorem irure cupidatat voluptate laborum in enim qui. Occaecat ea qui cillum commodo duis minim duis occaecat duis enim velit ex. Commodo magna qui incididunt esse ipsum ad magna occaecat ipsum sunt.\r\n", - "registered": "2018-08-09T09:08:56 +04:00", - "latitude": -22.215446, - "longitude": 22.978897, - "tags": ["incididunt", "pariatur", "proident", "anim", "elit", "officia", "velit"], - "friends": [ - { - "id": 0, - "name": "Medina Figueroa" - }, - { - "id": 1, - "name": "Lucia Rios" - }, - { - "id": 2, - "name": "Vega Stuart" - } - ], - "greeting": "Hello, Jaclyn Douglas! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d279f1c5bbff6e156", - "index": 175, - "guid": "06a79109-0c74-4e61-8f50-70d7b7ae5274", - "isActive": false, - "balance": "$3,877.83", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Judy Mercer", - "gender": "female", - "company": "KEGULAR", - "email": "judymercer@kegular.com", - "phone": "+1 (922) 531-2398", - "address": "204 Bragg Court, Somerset, Oregon, 3195", - "about": "Aliquip excepteur dolore laboris esse pariatur consectetur deserunt reprehenderit nulla dolor non ea cupidatat. Pariatur officia nisi ex aliqua adipisicing consectetur non aute dolore id veniam ut laborum. Consequat aute sunt culpa tempor irure ex minim aliquip labore elit aliqua officia ut sint. Cupidatat pariatur Lorem cillum aute sunt. Sunt ea voluptate excepteur occaecat qui voluptate amet cillum cupidatat adipisicing qui. Sit proident dolore esse ex cillum proident adipisicing ullamco enim consectetur. Consectetur qui exercitation qui sit veniam tempor pariatur enim adipisicing.\r\n", - "registered": "2018-09-27T11:27:53 +04:00", - "latitude": 82.323503, - "longitude": -92.680301, - "tags": ["do", "occaecat", "minim", "eu", "ea", "ullamco", "nisi"], - "friends": [ - { - "id": 0, - "name": "Humphrey Flynn" - }, - { - "id": 1, - "name": "Holloway Carroll" - }, - { - "id": 2, - "name": "Violet Mccarty" - } - ], - "greeting": "Hello, Judy Mercer! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25de9ff5f20e4ea3c31", - "index": 176, - "guid": "3779c9b7-6965-4fb3-9c97-f0ef2e2c0799", - "isActive": true, - "balance": "$1,335.27", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Webb Blair", - "gender": "male", - "company": "METROZ", - "email": "webbblair@metroz.com", - "phone": "+1 (829) 445-2554", - "address": "320 Thatford Avenue, Downsville, Missouri, 372", - "about": "Duis aliqua enim adipisicing nostrud cillum sit id nisi tempor sit velit excepteur. Commodo culpa sint non consequat dolore. Duis aliqua deserunt ipsum duis. Eu fugiat nisi fugiat Lorem. Labore laboris dolor in reprehenderit qui amet. Et velit laboris officia amet occaecat consequat ipsum in eu ullamco do aliquip.\r\n", - "registered": "2020-03-11T11:46:11 +04:00", - "latitude": -76.885674, - "longitude": 98.497977, - "tags": ["deserunt", "proident", "aliquip", "pariatur", "sit", "irure", "amet"], - "friends": [ - { - "id": 0, - "name": "Johanna Carson" - }, - { - "id": 1, - "name": "Bennett Torres" - }, - { - "id": 2, - "name": "Evelyn Alford" - } - ], - "greeting": "Hello, Webb Blair! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da27f1902339a00a6", - "index": 177, - "guid": "6328016b-799f-469d-85f0-814180123d18", - "isActive": true, - "balance": "$2,568.39", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Dana Bowman", - "gender": "female", - "company": "INTERFIND", - "email": "danabowman@interfind.com", - "phone": "+1 (982) 567-3141", - "address": "276 Gold Street, Hemlock, Montana, 9654", - "about": "Ipsum labore reprehenderit nostrud ex voluptate. Irure dolore reprehenderit nostrud aliqua culpa nostrud laborum voluptate pariatur consequat dolor qui. Id excepteur magna sunt aliquip aliquip sit duis consectetur sunt laborum ullamco. Ut ea commodo nulla officia.\r\n", - "registered": "2018-02-16T04:31:18 +05:00", - "latitude": 77.139274, - "longitude": 99.154646, - "tags": ["duis", "commodo", "officia", "aliquip", "do", "nisi", "nisi"], - "friends": [ - { - "id": 0, - "name": "Johnson Diaz" - }, - { - "id": 1, - "name": "Cristina Morton" - }, - { - "id": 2, - "name": "Cecelia Sherman" - } - ], - "greeting": "Hello, Dana Bowman! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfb70d2e475f2fd0b", - "index": 178, - "guid": "f4dedf23-88ae-491f-a719-3a68f561f934", - "isActive": true, - "balance": "$3,006.08", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Sloan Bean", - "gender": "male", - "company": "MOREGANIC", - "email": "sloanbean@moreganic.com", - "phone": "+1 (980) 471-2108", - "address": "716 Shale Street, Hoagland, Alaska, 2965", - "about": "Ullamco culpa non adipisicing enim occaecat do. Commodo eiusmod exercitation voluptate laborum elit dolor nisi ipsum aliquip. Cillum excepteur fugiat amet do anim duis sit laboris excepteur ad. Sint dolore culpa reprehenderit commodo ut sint veniam. Qui nisi quis incididunt ex. Aliquip Lorem duis voluptate dolor in. Adipisicing duis est qui aute consectetur laboris reprehenderit pariatur fugiat nostrud.\r\n", - "registered": "2018-06-02T06:42:46 +04:00", - "latitude": -41.972702, - "longitude": -7.540802, - "tags": ["magna", "do", "reprehenderit", "anim", "excepteur", "aute", "officia"], - "friends": [ - { - "id": 0, - "name": "Savage Galloway" - }, - { - "id": 1, - "name": "Moran Mcneil" - }, - { - "id": 2, - "name": "Ebony Yates" - } - ], - "greeting": "Hello, Sloan Bean! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dfabc9054952356f7", - "index": 179, - "guid": "49e09e74-bbb0-49c3-a689-208f1a266c07", - "isActive": false, - "balance": "$1,409.84", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Colette Reeves", - "gender": "female", - "company": "NUTRALAB", - "email": "colettereeves@nutralab.com", - "phone": "+1 (976) 459-2569", - "address": "117 Duryea Place, Winfred, Kentucky, 273", - "about": "Velit ipsum ullamco quis sit occaecat. Duis cillum nulla nostrud nulla. Ullamco et aute proident cillum.\r\n", - "registered": "2018-03-07T11:00:14 +05:00", - "latitude": 7.583253, - "longitude": -142.952942, - "tags": ["tempor", "ut", "sit", "cupidatat", "officia", "est", "labore"], - "friends": [ - { - "id": 0, - "name": "Hall Brown" - }, - { - "id": 1, - "name": "Stein Joyner" - }, - { - "id": 2, - "name": "Jerry Spears" - } - ], - "greeting": "Hello, Colette Reeves! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2ab624c408bc645e", - "index": 180, - "guid": "74aa9126-d8e5-4998-93e9-5f3c474c4363", - "isActive": false, - "balance": "$1,431.63", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Rosemary Gilliam", - "gender": "female", - "company": "COMCUR", - "email": "rosemarygilliam@comcur.com", - "phone": "+1 (958) 483-2712", - "address": "460 Cozine Avenue, Venice, Mississippi, 4415", - "about": "Pariatur non ut nostrud nisi voluptate Lorem eu. Enim est est consequat ullamco nisi consequat veniam consectetur consequat ad nulla voluptate proident cupidatat. Eu qui ea deserunt voluptate aliquip.\r\n", - "registered": "2018-11-19T09:31:49 +05:00", - "latitude": 32.032722, - "longitude": -19.41613, - "tags": ["aliquip", "aliqua", "ea", "do", "dolore", "ut", "laboris"], - "friends": [ - { - "id": 0, - "name": "Meghan Rowland" - }, - { - "id": 1, - "name": "Martina Solomon" - }, - { - "id": 2, - "name": "Liza Manning" - } - ], - "greeting": "Hello, Rosemary Gilliam! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d38d6d29e64422a28", - "index": 181, - "guid": "694e03e0-dce0-4ba6-8947-cd9e15c58084", - "isActive": false, - "balance": "$3,330.62", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Haney Patterson", - "gender": "male", - "company": "LOVEPAD", - "email": "haneypatterson@lovepad.com", - "phone": "+1 (843) 557-3662", - "address": "667 Dodworth Street, Loretto, North Dakota, 1944", - "about": "Tempor nulla ex exercitation proident ex eu esse anim pariatur tempor. Nulla nostrud elit eiusmod esse aliqua. Ipsum eu aliqua adipisicing aliquip. Minim ad in sit magna proident mollit sit. Fugiat sint quis veniam fugiat. Deserunt elit dolor ullamco eiusmod.\r\n", - "registered": "2014-10-05T07:04:40 +04:00", - "latitude": -65.027231, - "longitude": 155.993192, - "tags": ["nostrud", "voluptate", "sunt", "eiusmod", "consectetur", "culpa", "esse"], - "friends": [ - { - "id": 0, - "name": "Helena Daniel" - }, - { - "id": 1, - "name": "Kelley Vaughn" - }, - { - "id": 2, - "name": "Rasmussen Cardenas" - } - ], - "greeting": "Hello, Haney Patterson! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db65dd480be62d367", - "index": 182, - "guid": "44a0ba67-9c8a-4ec1-9d3b-3b70d3a0d040", - "isActive": false, - "balance": "$3,118.72", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Blankenship Wells", - "gender": "male", - "company": "SLOFAST", - "email": "blankenshipwells@slofast.com", - "phone": "+1 (972) 588-2240", - "address": "144 Albee Square, Salvo, Federated States Of Micronesia, 2371", - "about": "In anim veniam duis consectetur sit ea ea fugiat officia. Laboris elit irure et do est cillum nostrud sint. Ut sint ad ullamco commodo. Et adipisicing velit aute ullamco fugiat enim non exercitation do mollit adipisicing ea aliqua.\r\n", - "registered": "2018-02-11T07:39:29 +05:00", - "latitude": -84.607075, - "longitude": -33.066576, - "tags": ["ad", "excepteur", "laborum", "laborum", "esse", "quis", "dolore"], - "friends": [ - { - "id": 0, - "name": "Henrietta Buckner" - }, - { - "id": 1, - "name": "Myers Scott" - }, - { - "id": 2, - "name": "Suarez Hansen" - } - ], - "greeting": "Hello, Blankenship Wells! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d12e5e56387479b65", - "index": 183, - "guid": "e43baf34-99cc-427e-8ddc-0d8e30d540b2", - "isActive": false, - "balance": "$3,523.88", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Lindsey Osborn", - "gender": "male", - "company": "VERAQ", - "email": "lindseyosborn@veraq.com", - "phone": "+1 (943) 432-3971", - "address": "200 Schroeders Avenue, Cavalero, Maryland, 1514", - "about": "Lorem cillum qui aliquip Lorem commodo. Nisi adipisicing Lorem amet ad officia quis cillum consectetur id aliquip fugiat et eiusmod eu. Incididunt do occaecat cillum laborum nisi ut laboris eiusmod cupidatat esse laborum. Id irure consectetur reprehenderit dolor ad proident est qui. Fugiat magna fugiat ut enim aliquip sunt aliqua adipisicing proident cillum dolor amet dolore proident. Veniam eu Lorem ipsum velit labore dolor velit ex anim elit sunt ipsum ut.\r\n", - "registered": "2019-05-11T09:57:56 +04:00", - "latitude": -4.406306, - "longitude": 135.159745, - "tags": ["ex", "eiusmod", "ea", "ut", "dolore", "tempor", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Imelda Barr" - }, - { - "id": 1, - "name": "Nadine Mcclure" - }, - { - "id": 2, - "name": "Mattie Bolton" - } - ], - "greeting": "Hello, Lindsey Osborn! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d87cdacd32fef0774", - "index": 184, - "guid": "3513c73e-9c06-45df-9758-3495db5da876", - "isActive": true, - "balance": "$3,944.14", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Holman Roy", - "gender": "male", - "company": "PEARLESSA", - "email": "holmanroy@pearlessa.com", - "phone": "+1 (848) 533-2320", - "address": "988 Meserole Street, Soudan, Virgin Islands, 4986", - "about": "Sit laborum culpa Lorem et ipsum in ex. Sunt pariatur ullamco pariatur ea ipsum qui exercitation laboris ex et. Proident mollit anim proident esse in ea qui incididunt et in elit ex deserunt. Esse ea sint ipsum duis aute exercitation proident. Adipisicing dolor ullamco consequat ipsum voluptate occaecat quis occaecat minim.\r\n", - "registered": "2019-04-14T12:36:19 +04:00", - "latitude": -55.98939, - "longitude": -50.108487, - "tags": ["aliquip", "ex", "labore", "aliqua", "ea", "cillum", "minim"], - "friends": [ - { - "id": 0, - "name": "Audra Drake" - }, - { - "id": 1, - "name": "Carter Dean" - }, - { - "id": 2, - "name": "Robbie Nichols" - } - ], - "greeting": "Hello, Holman Roy! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d27d4852dd4595eed", - "index": 185, - "guid": "4ffc661c-3975-485c-a9d0-f44343cff248", - "isActive": false, - "balance": "$1,259.29", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Catherine Flowers", - "gender": "female", - "company": "LUNCHPAD", - "email": "catherineflowers@lunchpad.com", - "phone": "+1 (974) 582-2586", - "address": "902 Louisiana Avenue, Winesburg, Pennsylvania, 8593", - "about": "Tempor in esse nostrud cillum veniam et aliqua ea consectetur ullamco. Excepteur pariatur deserunt ipsum aute labore sunt laborum consectetur non anim consequat ex. Nisi sint irure eu exercitation nulla. Eiusmod consectetur exercitation ut deserunt deserunt Lorem nostrud consequat. Incididunt dolore duis ullamco sunt officia adipisicing. Enim est ad aute voluptate aute dolore Lorem ut eu aliquip proident laborum irure incididunt.\r\n", - "registered": "2018-05-22T12:52:16 +04:00", - "latitude": -72.432128, - "longitude": 38.504897, - "tags": ["ipsum", "officia", "sit", "irure", "incididunt", "qui", "culpa"], - "friends": [ - { - "id": 0, - "name": "Denise Wallace" - }, - { - "id": 1, - "name": "Durham Gregory" - }, - { - "id": 2, - "name": "Lamb Ellison" - } - ], - "greeting": "Hello, Catherine Flowers! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da8e54ca0b7023217", - "index": 186, - "guid": "e3d85ebd-f27f-410b-9dc0-e6131d5f5d94", - "isActive": true, - "balance": "$2,711.90", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Haynes Walters", - "gender": "male", - "company": "TUBESYS", - "email": "hayneswalters@tubesys.com", - "phone": "+1 (977) 485-3225", - "address": "713 Ira Court, Sanborn, Washington, 9726", - "about": "Sunt irure deserunt ut qui est culpa et cillum non laboris labore eiusmod excepteur consectetur. Aute mollit eu nulla pariatur dolore consequat ad quis. Sit proident nostrud quis anim do mollit consectetur ipsum culpa dolore consequat.\r\n", - "registered": "2014-12-07T08:57:34 +05:00", - "latitude": -86.676035, - "longitude": -5.908484, - "tags": ["proident", "reprehenderit", "irure", "incididunt", "excepteur", "excepteur", "elit"], - "friends": [ - { - "id": 0, - "name": "Silvia Watts" - }, - { - "id": 1, - "name": "Brenda Crawford" - }, - { - "id": 2, - "name": "Lambert Hampton" - } - ], - "greeting": "Hello, Haynes Walters! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d873582aa425fb68d", - "index": 187, - "guid": "464891a8-99f2-408b-8718-77b2de1efc10", - "isActive": false, - "balance": "$2,351.54", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Mercado Duke", - "gender": "male", - "company": "ATOMICA", - "email": "mercadoduke@atomica.com", - "phone": "+1 (986) 525-2295", - "address": "164 Dahl Court, Turah, Illinois, 3580", - "about": "Est culpa et sit elit. Anim anim deserunt et duis aute. Laboris aliquip incididunt deserunt culpa. Consectetur aliqua est exercitation sit. Lorem do ea irure ex aute voluptate reprehenderit excepteur quis sint occaecat est.\r\n", - "registered": "2015-01-12T01:39:37 +05:00", - "latitude": 38.24684, - "longitude": -98.81354, - "tags": ["in", "ullamco", "culpa", "nostrud", "fugiat", "esse", "sit"], - "friends": [ - { - "id": 0, - "name": "Lucile Boyer" - }, - { - "id": 1, - "name": "Rosa Le" - }, - { - "id": 2, - "name": "Swanson Best" - } - ], - "greeting": "Hello, Mercado Duke! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df1d229c208d362ba", - "index": 188, - "guid": "684ac820-16de-40ba-aee3-ede65299abc0", - "isActive": false, - "balance": "$3,464.58", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Madge Sanchez", - "gender": "female", - "company": "HIVEDOM", - "email": "madgesanchez@hivedom.com", - "phone": "+1 (865) 424-2983", - "address": "479 Cooper Street, Stagecoach, New Hampshire, 5027", - "about": "Laboris adipisicing pariatur consequat id. Et mollit et duis reprehenderit minim consequat non pariatur. Quis commodo quis do quis sunt. Exercitation laboris tempor magna aute Lorem et adipisicing. Fugiat non pariatur excepteur anim.\r\n", - "registered": "2015-08-10T07:41:20 +04:00", - "latitude": -57.010503, - "longitude": 26.737439, - "tags": ["ex", "aliqua", "Lorem", "anim", "magna", "do", "mollit"], - "friends": [ - { - "id": 0, - "name": "Dolores Ratliff" - }, - { - "id": 1, - "name": "Yates Jimenez" - }, - { - "id": 2, - "name": "Miriam Hurley" - } - ], - "greeting": "Hello, Madge Sanchez! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9203857d6cbcfcb3", - "index": 189, - "guid": "43dfac1e-173d-4955-885f-2d03e9153253", - "isActive": false, - "balance": "$1,576.80", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Patton Bryan", - "gender": "male", - "company": "CENTURIA", - "email": "pattonbryan@centuria.com", - "phone": "+1 (873) 507-2459", - "address": "341 Montgomery Street, Sterling, Colorado, 3484", - "about": "Sint occaecat occaecat eiusmod quis. Elit ea consequat velit deserunt adipisicing in nulla incididunt commodo deserunt magna. Commodo nisi minim esse tempor. Aute aute proident non cillum minim elit duis consectetur pariatur anim veniam id. Dolor et mollit aliqua non aliquip reprehenderit aliquip excepteur et cillum pariatur in.\r\n", - "registered": "2019-08-21T11:34:42 +04:00", - "latitude": 81.676647, - "longitude": -1.671194, - "tags": ["laboris", "laborum", "id", "cupidatat", "incididunt", "labore", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Sherri Colon" - }, - { - "id": 1, - "name": "Weeks Sharp" - }, - { - "id": 2, - "name": "Padilla Navarro" - } - ], - "greeting": "Hello, Patton Bryan! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7a988a3ce2da1e29", - "index": 190, - "guid": "b1c64383-b97a-4f1d-bc26-13b5cc4776d2", - "isActive": true, - "balance": "$3,700.09", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Jacobs Russell", - "gender": "male", - "company": "GEEKETRON", - "email": "jacobsrussell@geeketron.com", - "phone": "+1 (982) 434-2406", - "address": "797 Celeste Court, Waterview, Maine, 6963", - "about": "Culpa consectetur ut cupidatat qui eu dolore commodo ex enim Lorem. Deserunt ex cupidatat est ex sit sint id sit. Ea magna fugiat nulla ex qui minim eu deserunt amet aliquip elit. Proident incididunt excepteur amet dolor enim pariatur deserunt do et excepteur. Commodo laborum esse tempor cupidatat proident Lorem nisi aute aute irure. Nulla in elit et pariatur anim cupidatat proident veniam ex do ad. Culpa pariatur magna in voluptate excepteur aliqua esse dolor veniam est deserunt.\r\n", - "registered": "2014-08-15T08:59:26 +04:00", - "latitude": -42.404536, - "longitude": -34.571692, - "tags": ["reprehenderit", "do", "ullamco", "nisi", "labore", "culpa", "ea"], - "friends": [ - { - "id": 0, - "name": "Oliver Fields" - }, - { - "id": 1, - "name": "Elisabeth Hayes" - }, - { - "id": 2, - "name": "Bruce Copeland" - } - ], - "greeting": "Hello, Jacobs Russell! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9ff0f6a672d693d0", - "index": 191, - "guid": "70b046c2-addb-4873-82ac-a45dec0071b1", - "isActive": false, - "balance": "$1,383.27", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Randall Pittman", - "gender": "male", - "company": "SECURIA", - "email": "randallpittman@securia.com", - "phone": "+1 (930) 574-2575", - "address": "558 Gain Court, Riceville, South Carolina, 531", - "about": "Eu Lorem id laborum sit aliquip adipisicing non ut aliquip consequat et voluptate sit. Do consectetur nostrud deserunt minim ea exercitation qui laborum aliqua in consequat voluptate veniam. Officia esse exercitation fugiat est eiusmod deserunt ipsum. Quis adipisicing cillum laborum ex non labore sint minim ut mollit do culpa irure ad. Aute occaecat cillum pariatur labore.\r\n", - "registered": "2017-10-26T06:33:22 +04:00", - "latitude": 25.729865, - "longitude": 140.779187, - "tags": ["dolor", "duis", "laborum", "pariatur", "laboris", "deserunt", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Wendy Dawson" - }, - { - "id": 1, - "name": "Richards Perkins" - }, - { - "id": 2, - "name": "Jordan Cervantes" - } - ], - "greeting": "Hello, Randall Pittman! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d70cb036814897760", - "index": 192, - "guid": "2f2aa810-9b6e-43cd-9923-fdabce7d88bc", - "isActive": true, - "balance": "$1,574.03", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "brown", - "name": "Montgomery Rosario", - "gender": "male", - "company": "INTERGEEK", - "email": "montgomeryrosario@intergeek.com", - "phone": "+1 (816) 464-3490", - "address": "298 Dare Court, Macdona, Connecticut, 7651", - "about": "Excepteur elit adipisicing voluptate minim duis. Qui labore sint laboris do sit labore officia laborum officia excepteur magna elit. Laboris nisi commodo consectetur reprehenderit voluptate ipsum et occaecat officia magna sunt velit elit excepteur. Sint aute ex incididunt non quis esse enim. Veniam cupidatat irure culpa nostrud magna non occaecat anim. Nisi eiusmod labore enim in excepteur adipisicing eiusmod incididunt dolor sint non adipisicing nisi pariatur.\r\n", - "registered": "2014-12-19T09:32:21 +05:00", - "latitude": 87.320089, - "longitude": -151.533704, - "tags": ["officia", "in", "nostrud", "qui", "esse", "do", "ex"], - "friends": [ - { - "id": 0, - "name": "Cruz Baird" - }, - { - "id": 1, - "name": "Jane Hunt" - }, - { - "id": 2, - "name": "Katina Chaney" - } - ], - "greeting": "Hello, Montgomery Rosario! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d56a9ffb3659e7db9", - "index": 193, - "guid": "8f8b0157-6670-462e-a95d-252a37869310", - "isActive": true, - "balance": "$3,514.19", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Jami Mullins", - "gender": "female", - "company": "XINWARE", - "email": "jamimullins@xinware.com", - "phone": "+1 (937) 572-3914", - "address": "448 Homecrest Avenue, Falmouth, Virginia, 1780", - "about": "Elit et esse cupidatat ea irure eu aliqua eu. Cillum mollit proident aliquip nulla cillum veniam elit consequat cillum anim velit. Amet dolore id aliquip id. Consequat consequat proident voluptate est consectetur ea sit aliquip sint pariatur ad. Aliquip laborum aliquip magna ea voluptate adipisicing velit sit ipsum. Consectetur laborum eiusmod officia dolore ullamco ipsum.\r\n", - "registered": "2018-04-17T05:14:24 +04:00", - "latitude": -55.469669, - "longitude": -13.797031, - "tags": ["consequat", "commodo", "tempor", "aute", "eu", "adipisicing", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Hickman Roberts" - }, - { - "id": 1, - "name": "Meagan Schwartz" - }, - { - "id": 2, - "name": "Pam Swanson" - } - ], - "greeting": "Hello, Jami Mullins! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7ee2d7615f4bbb2f", - "index": 194, - "guid": "3b30d1e2-b7c8-456d-b076-4f1d916f3eaf", - "isActive": false, - "balance": "$3,841.97", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Houston Gomez", - "gender": "male", - "company": "ASSITIA", - "email": "houstongomez@assitia.com", - "phone": "+1 (886) 494-3618", - "address": "140 Huntington Street, Romeville, Georgia, 8276", - "about": "Tempor in eu cupidatat ad. Eu non laborum minim mollit adipisicing deserunt. Irure cupidatat ullamco aliquip ad aliqua exercitation culpa cillum ut. Excepteur exercitation sunt magna non reprehenderit esse adipisicing laboris deserunt velit eiusmod non veniam ad. Ipsum exercitation excepteur adipisicing ullamco culpa est. Do reprehenderit dolor esse irure aute.\r\n", - "registered": "2017-10-07T12:04:01 +04:00", - "latitude": 21.455827, - "longitude": 29.132674, - "tags": [ - "consectetur", - "ipsum", - "consequat", - "fugiat", - "aliqua", - "exercitation", - "adipisicing" - ], - "friends": [ - { - "id": 0, - "name": "Ellison Guzman" - }, - { - "id": 1, - "name": "Rosie Hancock" - }, - { - "id": 2, - "name": "Wagner Morse" - } - ], - "greeting": "Hello, Houston Gomez! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d90d5d8f4a8a19325", - "index": 195, - "guid": "0b023909-8b7f-4bb7-9a21-56e7d5e9a1f2", - "isActive": false, - "balance": "$2,718.59", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Best Hicks", - "gender": "male", - "company": "GEEKOLA", - "email": "besthicks@geekola.com", - "phone": "+1 (866) 422-2347", - "address": "438 Nautilus Avenue, Eastmont, New Jersey, 5889", - "about": "Commodo deserunt non ex aute et cupidatat eiusmod deserunt culpa nostrud dolor cillum. Adipisicing consequat irure voluptate laborum Lorem proident pariatur eiusmod velit in ullamco. Lorem culpa enim ea exercitation id qui sint irure reprehenderit nostrud amet ipsum Lorem. Anim dolor sint nulla nisi est do ut irure ad occaecat do Lorem nisi.\r\n", - "registered": "2015-08-03T05:22:44 +04:00", - "latitude": 15.690946, - "longitude": -25.886074, - "tags": ["laboris", "ut", "magna", "eu", "commodo", "Lorem", "nisi"], - "friends": [ - { - "id": 0, - "name": "Michelle Mcguire" - }, - { - "id": 1, - "name": "Viola Olsen" - }, - { - "id": 2, - "name": "Sonja Puckett" - } - ], - "greeting": "Hello, Best Hicks! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d6ce56bf74794c72f", - "index": 196, - "guid": "186629b5-88c0-4171-93f3-791daf483b8c", - "isActive": true, - "balance": "$2,134.78", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Deanna York", - "gender": "female", - "company": "LYRIA", - "email": "deannayork@lyria.com", - "phone": "+1 (827) 425-3061", - "address": "119 Manhattan Avenue, Coultervillle, Minnesota, 830", - "about": "Occaecat qui qui laborum laboris eiusmod. Incididunt dolor enim eiusmod cillum velit pariatur. Culpa minim aute veniam officia cupidatat in eu aliqua cupidatat commodo. Eu ad do enim ut amet sit.\r\n", - "registered": "2018-04-26T09:16:45 +04:00", - "latitude": 3.834394, - "longitude": -160.75302, - "tags": ["id", "non", "officia", "irure", "ipsum", "consectetur", "sint"], - "friends": [ - { - "id": 0, - "name": "Barrett Hart" - }, - { - "id": 1, - "name": "Yvonne Reese" - }, - { - "id": 2, - "name": "Pena Mooney" - } - ], - "greeting": "Hello, Deanna York! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2f79354a667b5ab1", - "index": 197, - "guid": "88fac08f-8dbb-4f8b-9262-de233c2b71ca", - "isActive": false, - "balance": "$1,765.47", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Castaneda Odom", - "gender": "male", - "company": "GOKO", - "email": "castanedaodom@goko.com", - "phone": "+1 (852) 491-2877", - "address": "358 Ridgewood Avenue, Canby, Texas, 6157", - "about": "Officia occaecat deserunt commodo tempor quis velit incididunt eiusmod sit non non exercitation aliqua eiusmod. Nostrud ad ea aute culpa irure do dolore Lorem irure. Quis consequat reprehenderit anim laborum aliquip nulla ea. Non consectetur dolor sint labore laborum. Incididunt Lorem sint velit consequat veniam aute laborum sunt consectetur pariatur culpa. Proident nisi ullamco proident et in ut.\r\n", - "registered": "2014-07-16T07:10:19 +04:00", - "latitude": -49.955267, - "longitude": -78.281992, - "tags": ["non", "exercitation", "laborum", "ad", "sint", "quis", "commodo"], - "friends": [ - { - "id": 0, - "name": "Cecilia Kirby" - }, - { - "id": 1, - "name": "Amelia Fowler" - }, - { - "id": 2, - "name": "Campos Little" - } - ], - "greeting": "Hello, Castaneda Odom! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d69195a0f1dba4fac", - "index": 198, - "guid": "7e6c8542-ba6d-4c91-8268-1779e706a433", - "isActive": false, - "balance": "$1,389.84", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Zamora Tanner", - "gender": "male", - "company": "MARTGO", - "email": "zamoratanner@martgo.com", - "phone": "+1 (800) 488-2861", - "address": "584 Beverley Road, Brecon, Alabama, 8063", - "about": "Commodo excepteur labore irure commodo tempor cillum ex officia qui. Magna aute fugiat esse veniam et occaecat Lorem labore non dolore do. Aliqua laborum ullamco amet cillum aliquip in aute aliqua ut non pariatur consectetur. Tempor anim dolore elit excepteur do tempor cillum esse do mollit. Cillum reprehenderit dolore Lorem eiusmod officia do ea fugiat. Occaecat cupidatat nulla cillum eu laboris ipsum sit proident dolor ipsum enim dolor anim qui. Dolore velit aliqua qui proident nulla pariatur Lorem do.\r\n", - "registered": "2019-04-06T08:18:24 +04:00", - "latitude": 18.531755, - "longitude": -151.828855, - "tags": ["fugiat", "duis", "do", "excepteur", "nisi", "sit", "cillum"], - "friends": [ - { - "id": 0, - "name": "Charles Kline" - }, - { - "id": 1, - "name": "Mayer Baldwin" - }, - { - "id": 2, - "name": "Norris Morgan" - } - ], - "greeting": "Hello, Zamora Tanner! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dfbaaf78930d3d26a", - "index": 199, - "guid": "912aef34-2135-42a7-8e42-e0996368394a", - "isActive": false, - "balance": "$2,907.52", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Brandy Mckay", - "gender": "female", - "company": "SHOPABOUT", - "email": "brandymckay@shopabout.com", - "phone": "+1 (904) 471-2933", - "address": "816 Overbaugh Place, Glendale, Rhode Island, 8582", - "about": "Aliqua anim Lorem sunt consectetur ad elit. Velit do nulla officia nisi nulla do. Culpa aute in veniam nisi aute aliqua.\r\n", - "registered": "2015-04-09T04:50:43 +04:00", - "latitude": 83.19785, - "longitude": -116.143346, - "tags": ["in", "do", "occaecat", "consectetur", "dolore", "deserunt", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Frederick Craig" - }, - { - "id": 1, - "name": "Nellie Carey" - }, - { - "id": 2, - "name": "Saundra Mendez" - } - ], - "greeting": "Hello, Brandy Mckay! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8e5fdb3f3d2fbb5f", - "index": 200, - "guid": "888117a8-16af-453d-8519-412c07b72a49", - "isActive": false, - "balance": "$1,878.73", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Kimberley Dillon", - "gender": "female", - "company": "EVEREST", - "email": "kimberleydillon@everest.com", - "phone": "+1 (998) 432-2917", - "address": "238 Woodruff Avenue, Chesterfield, Florida, 4554", - "about": "Consectetur id eiusmod reprehenderit sint nostrud ipsum exercitation id reprehenderit eu nisi quis aute. Aliqua excepteur excepteur eu velit non laboris quis id cupidatat. Aliquip exercitation adipisicing nostrud deserunt ex.\r\n", - "registered": "2017-11-10T05:42:14 +05:00", - "latitude": -60.55613, - "longitude": -108.37002, - "tags": ["consectetur", "adipisicing", "sint", "sunt", "qui", "quis", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Gross Caldwell" - }, - { - "id": 1, - "name": "Aguilar Mathews" - }, - { - "id": 2, - "name": "Julia Solis" - } - ], - "greeting": "Hello, Kimberley Dillon! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d89d1c0a4a51827ea", - "index": 201, - "guid": "74f50cb5-73dd-4760-91f3-768c29003040", - "isActive": true, - "balance": "$3,295.17", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Carson Lara", - "gender": "male", - "company": "ZILLA", - "email": "carsonlara@zilla.com", - "phone": "+1 (824) 596-3149", - "address": "384 Hale Avenue, Blackgum, Indiana, 2653", - "about": "Proident excepteur minim ex ipsum amet enim ea culpa enim consequat exercitation proident. Id elit Lorem aliquip cillum occaecat in culpa nostrud velit adipisicing nulla sunt. Mollit aliquip ea incididunt ipsum proident id excepteur in consectetur.\r\n", - "registered": "2015-04-02T03:27:17 +04:00", - "latitude": -10.199337, - "longitude": -40.393457, - "tags": ["nulla", "id", "amet", "aute", "aute", "et", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Wallace Raymond" - }, - { - "id": 1, - "name": "Preston Chavez" - }, - { - "id": 2, - "name": "Frieda Rocha" - } - ], - "greeting": "Hello, Carson Lara! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de806a9d1d83e7cd4", - "index": 202, - "guid": "a16a6fe1-a08b-4d31-99fd-7442c0d9ac45", - "isActive": false, - "balance": "$3,139.24", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Summer Larsen", - "gender": "female", - "company": "ZOSIS", - "email": "summerlarsen@zosis.com", - "phone": "+1 (971) 451-2826", - "address": "817 Moore Street, Churchill, Northern Mariana Islands, 7886", - "about": "Consequat cupidatat tempor aliqua cillum sit consequat. Laborum minim magna reprehenderit sunt reprehenderit minim. Ullamco fugiat proident nisi ullamco magna dolor laborum voluptate dolore ullamco cupidatat.\r\n", - "registered": "2019-12-21T01:25:16 +05:00", - "latitude": -48.726986, - "longitude": 87.701256, - "tags": ["irure", "proident", "occaecat", "sit", "occaecat", "anim", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Cook Beard" - }, - { - "id": 1, - "name": "Irma Benjamin" - }, - { - "id": 2, - "name": "Charmaine Oliver" - } - ], - "greeting": "Hello, Summer Larsen! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df269907a4a561714", - "index": 203, - "guid": "52b16457-1a19-4fcd-8437-75ae64353c7f", - "isActive": true, - "balance": "$2,525.82", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Ester Fuller", - "gender": "female", - "company": "ANARCO", - "email": "esterfuller@anarco.com", - "phone": "+1 (982) 567-2153", - "address": "966 Woodrow Court, Coldiron, Idaho, 8473", - "about": "Est magna ipsum amet adipisicing do aliqua esse ea minim pariatur sunt duis nostrud ex. Quis adipisicing minim elit qui elit. Excepteur sint ullamco aliqua fugiat voluptate nulla anim voluptate officia anim esse esse irure voluptate. In id reprehenderit velit ex duis do est ex in.\r\n", - "registered": "2014-10-16T10:18:21 +04:00", - "latitude": 66.922516, - "longitude": -136.26086, - "tags": ["tempor", "proident", "proident", "quis", "cillum", "eiusmod", "sint"], - "friends": [ - { - "id": 0, - "name": "Greene Hood" - }, - { - "id": 1, - "name": "Theresa Ferrell" - }, - { - "id": 2, - "name": "Jeanie Rasmussen" - } - ], - "greeting": "Hello, Ester Fuller! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8bfb5a7f8c6d1d96", - "index": 204, - "guid": "d572cdf0-18f1-4ac5-ba9c-59a8f704696f", - "isActive": false, - "balance": "$1,863.40", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Oneil Wolfe", - "gender": "male", - "company": "FIBEROX", - "email": "oneilwolfe@fiberox.com", - "phone": "+1 (900) 557-3860", - "address": "146 Goodwin Place, Aguila, District Of Columbia, 5096", - "about": "Voluptate ipsum nostrud anim dolore non laboris esse irure Lorem aliqua laboris. Dolore do aute in mollit aliquip sit esse sunt incididunt deserunt ullamco dolor in. Esse reprehenderit in aliquip excepteur qui nostrud elit minim. Sit consequat dolore tempor amet cillum et aute velit do ut tempor aliquip. Labore qui amet adipisicing nulla ad.\r\n", - "registered": "2017-11-23T10:16:17 +05:00", - "latitude": 1.596602, - "longitude": -19.130443, - "tags": ["dolore", "dolor", "aute", "Lorem", "elit", "fugiat", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Darlene Goff" - }, - { - "id": 1, - "name": "Meadows Powell" - }, - { - "id": 2, - "name": "Gates Morrow" - } - ], - "greeting": "Hello, Oneil Wolfe! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d59a17eeecde8f223", - "index": 205, - "guid": "e07522a0-fb5d-4c19-a576-857879a02986", - "isActive": true, - "balance": "$1,255.94", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Annette Wilcox", - "gender": "female", - "company": "EXOSPEED", - "email": "annettewilcox@exospeed.com", - "phone": "+1 (932) 480-2533", - "address": "349 Quincy Street, Sunwest, New Mexico, 7993", - "about": "Commodo consequat velit pariatur et consectetur dolor ad excepteur fugiat labore tempor reprehenderit. Pariatur Lorem tempor sit anim nostrud excepteur irure adipisicing. Et proident aliquip id esse culpa. Pariatur anim adipisicing nostrud fugiat mollit cillum dolor commodo officia ullamco irure. Cillum mollit deserunt id et enim quis sunt aute veniam ex et. Ex et et laboris tempor quis consectetur exercitation. In aliquip cillum eiusmod consectetur enim nostrud ut ullamco pariatur.\r\n", - "registered": "2018-04-09T04:42:27 +04:00", - "latitude": -4.959059, - "longitude": 164.385561, - "tags": ["reprehenderit", "voluptate", "labore", "irure", "officia", "commodo", "culpa"], - "friends": [ - { - "id": 0, - "name": "Louisa Simpson" - }, - { - "id": 1, - "name": "Shannon Oneil" - }, - { - "id": 2, - "name": "Luann English" - } - ], - "greeting": "Hello, Annette Wilcox! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25def082a7c77668547", - "index": 206, - "guid": "b40230ab-6593-4560-acc2-bccbd544d255", - "isActive": true, - "balance": "$1,701.74", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Rivas Vazquez", - "gender": "male", - "company": "ZENSOR", - "email": "rivasvazquez@zensor.com", - "phone": "+1 (978) 568-3248", - "address": "595 Ralph Avenue, Tedrow, South Dakota, 4105", - "about": "Dolor laborum amet irure Lorem minim do ad nisi officia incididunt exercitation. Cillum tempor aute quis cupidatat aute consectetur ut consectetur nisi dolore commodo nisi aliqua eu. Laboris occaecat duis dolor consectetur voluptate eu elit. Dolor sunt voluptate minim nisi ipsum proident nisi adipisicing laboris eiusmod velit irure. Anim veniam sint sit ex. Ea labore Lorem labore esse excepteur exercitation voluptate Lorem excepteur mollit non ut minim qui.\r\n", - "registered": "2018-09-30T10:44:40 +04:00", - "latitude": -11.12239, - "longitude": 119.385641, - "tags": ["sint", "eiusmod", "do", "ipsum", "reprehenderit", "elit", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Weber Walter" - }, - { - "id": 1, - "name": "Janna Carter" - }, - { - "id": 2, - "name": "Chaney Stephenson" - } - ], - "greeting": "Hello, Rivas Vazquez! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d54fbe13aa838272c", - "index": 207, - "guid": "84d98322-05bb-4595-ac78-0302a0c964ae", - "isActive": true, - "balance": "$1,867.61", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Twila Santana", - "gender": "female", - "company": "GADTRON", - "email": "twilasantana@gadtron.com", - "phone": "+1 (834) 539-3160", - "address": "779 Prospect Avenue, Richford, American Samoa, 8852", - "about": "Est exercitation culpa cupidatat nostrud tempor mollit proident voluptate nisi culpa incididunt quis. Ullamco consectetur nulla Lorem esse. Quis fugiat dolore laborum proident enim aliqua laborum velit sit elit sit esse est. Laborum duis in id pariatur cillum.\r\n", - "registered": "2014-06-21T05:37:56 +04:00", - "latitude": -60.78145, - "longitude": 31.744981, - "tags": ["magna", "dolore", "et", "id", "aute", "quis", "in"], - "friends": [ - { - "id": 0, - "name": "Melody Moore" - }, - { - "id": 1, - "name": "Ofelia Frye" - }, - { - "id": 2, - "name": "Cora Hughes" - } - ], - "greeting": "Hello, Twila Santana! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3f58a6e9b217b714", - "index": 208, - "guid": "0dc9aab5-5675-4839-8a2a-f9d13f372b9f", - "isActive": false, - "balance": "$3,593.71", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Esperanza Valenzuela", - "gender": "female", - "company": "ENERSAVE", - "email": "esperanzavalenzuela@enersave.com", - "phone": "+1 (895) 493-3953", - "address": "892 Benson Avenue, Drummond, Iowa, 9747", - "about": "Aute tempor tempor veniam fugiat consectetur velit aute velit labore enim tempor anim veniam est. Consectetur fugiat proident amet ex sint sit non minim incididunt est. Eiusmod quis qui laboris nostrud quis cupidatat qui. Duis est nostrud ut adipisicing nulla sunt sit minim pariatur. Ullamco laborum veniam proident minim nisi cillum amet nulla. Elit adipisicing consectetur ipsum ad est ipsum deserunt sint.\r\n", - "registered": "2016-12-16T09:34:36 +05:00", - "latitude": -39.172057, - "longitude": -124.549037, - "tags": ["adipisicing", "excepteur", "ad", "aute", "officia", "eu", "ad"], - "friends": [ - { - "id": 0, - "name": "Gale Glenn" - }, - { - "id": 1, - "name": "Santana Zamora" - }, - { - "id": 2, - "name": "Candy Mckee" - } - ], - "greeting": "Hello, Esperanza Valenzuela! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d395f430585bcf51c", - "index": 209, - "guid": "a1c49bba-b4ce-4970-82d0-ac5bc261f9c3", - "isActive": false, - "balance": "$1,310.20", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Ruthie Maynard", - "gender": "female", - "company": "COMVOY", - "email": "ruthiemaynard@comvoy.com", - "phone": "+1 (826) 423-2455", - "address": "425 Kenilworth Place, Ladera, Palau, 7368", - "about": "Irure consectetur tempor Lorem occaecat minim non sint pariatur. Sunt do elit ad ipsum dolor. Nisi sunt est et irure dolore adipisicing eu dolor reprehenderit nostrud in nulla. Ipsum dolore aliquip fugiat ea. Quis mollit quis esse veniam dolore magna labore sint sint. Elit id exercitation ex proident exercitation ex nisi elit in ea officia sit ullamco. Consequat officia pariatur tempor nisi ipsum tempor duis culpa eu duis culpa consectetur.\r\n", - "registered": "2016-07-20T08:31:49 +04:00", - "latitude": 61.076615, - "longitude": -50.710663, - "tags": ["do", "quis", "veniam", "velit", "ipsum", "Lorem", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Raymond Leon" - }, - { - "id": 1, - "name": "Tonia Porter" - }, - { - "id": 2, - "name": "Heath Bonner" - } - ], - "greeting": "Hello, Ruthie Maynard! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da72c40037e535f46", - "index": 210, - "guid": "293a3cb6-6d0a-417b-b6a1-0917d77e3965", - "isActive": true, - "balance": "$2,565.27", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Joyner Cote", - "gender": "male", - "company": "ELPRO", - "email": "joynercote@elpro.com", - "phone": "+1 (963) 562-2688", - "address": "849 Coles Street, Robbins, West Virginia, 4255", - "about": "Sint in aliqua exercitation officia esse qui esse ipsum velit officia Lorem dolor. Consectetur officia sit commodo excepteur et ipsum ad aute ut id aute enim. Dolor pariatur dolore ad voluptate. Excepteur deserunt exercitation cillum labore ex. Minim mollit nulla occaecat occaecat amet cupidatat magna duis irure culpa nisi deserunt ut.\r\n", - "registered": "2014-05-17T02:25:26 +04:00", - "latitude": 9.269552, - "longitude": 44.807486, - "tags": ["laboris", "incididunt", "nisi", "culpa", "labore", "eu", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Rosetta Tate" - }, - { - "id": 1, - "name": "Fields Carpenter" - }, - { - "id": 2, - "name": "Fox Sexton" - } - ], - "greeting": "Hello, Joyner Cote! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0a1f6ea16c7572e8", - "index": 211, - "guid": "79ba79ac-2a79-4cf4-bb7a-29af37a15577", - "isActive": false, - "balance": "$2,024.42", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Virginia Mason", - "gender": "female", - "company": "PETICULAR", - "email": "virginiamason@peticular.com", - "phone": "+1 (933) 493-3747", - "address": "975 Ryder Street, Newry, New York, 3204", - "about": "Excepteur nisi do aliquip irure cupidatat sunt mollit pariatur. Labore est ex et magna excepteur veniam laboris ad adipisicing fugiat magna. Cupidatat minim consectetur fugiat reprehenderit voluptate exercitation excepteur.\r\n", - "registered": "2018-08-20T08:37:03 +04:00", - "latitude": -89.189744, - "longitude": 45.12141, - "tags": ["consectetur", "amet", "pariatur", "dolore", "aliqua", "amet", "nulla"], - "friends": [ - { - "id": 0, - "name": "Alejandra Gonzales" - }, - { - "id": 1, - "name": "Corrine Fuentes" - }, - { - "id": 2, - "name": "Michael Montoya" - } - ], - "greeting": "Hello, Virginia Mason! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da4307e1d80e3ea35", - "index": 212, - "guid": "ec6b3f68-3b83-4b26-a866-2f52b8398c27", - "isActive": true, - "balance": "$2,825.18", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Gabriela Stafford", - "gender": "female", - "company": "NETROPIC", - "email": "gabrielastafford@netropic.com", - "phone": "+1 (985) 477-3663", - "address": "141 Hamilton Walk, Edgar, Hawaii, 7242", - "about": "Consequat anim voluptate dolore minim qui deserunt ipsum anim ea incididunt aute. Do ullamco nostrud non eiusmod cupidatat fugiat elit elit aute duis sint in duis aliquip. Elit ad sit laborum eu ullamco cillum excepteur reprehenderit commodo enim aliqua qui. Do ad esse voluptate ea. Voluptate occaecat aliqua sit incididunt esse do nulla est laboris deserunt dolore. Esse mollit duis proident deserunt officia enim adipisicing. Nisi veniam deserunt culpa deserunt anim sunt exercitation voluptate fugiat laboris.\r\n", - "registered": "2014-08-14T08:12:20 +04:00", - "latitude": -11.115441, - "longitude": -149.395548, - "tags": ["velit", "est", "culpa", "anim", "enim", "sint", "velit"], - "friends": [ - { - "id": 0, - "name": "Dudley Curry" - }, - { - "id": 1, - "name": "Weaver Johns" - }, - { - "id": 2, - "name": "Lena Santos" - } - ], - "greeting": "Hello, Gabriela Stafford! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7dbea32f99ac8fc2", - "index": 213, - "guid": "db20625a-92e8-4497-9965-94772f7a0b07", - "isActive": true, - "balance": "$2,418.54", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Wolfe Keller", - "gender": "male", - "company": "VISUALIX", - "email": "wolfekeller@visualix.com", - "phone": "+1 (823) 529-3327", - "address": "766 Tech Place, Rote, Nebraska, 6280", - "about": "Eiusmod eiusmod ullamco sint ea est elit magna adipisicing nulla irure consectetur elit dolor duis. Amet aliquip occaecat consequat Lorem veniam duis non cillum commodo sit do ullamco. Qui proident qui qui cupidatat pariatur consectetur cupidatat tempor cupidatat.\r\n", - "registered": "2014-03-03T11:59:21 +05:00", - "latitude": 71.770567, - "longitude": -145.385344, - "tags": ["laborum", "culpa", "aliquip", "esse", "consectetur", "mollit", "culpa"], - "friends": [ - { - "id": 0, - "name": "Newton Haynes" - }, - { - "id": 1, - "name": "Osborne Lyons" - }, - { - "id": 2, - "name": "Alicia Bruce" - } - ], - "greeting": "Hello, Wolfe Keller! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d50929333eb637c1e", - "index": 214, - "guid": "e2d49b4a-40e5-42d2-af00-e05737c3d75f", - "isActive": true, - "balance": "$2,764.50", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Lila Talley", - "gender": "female", - "company": "COSMETEX", - "email": "lilatalley@cosmetex.com", - "phone": "+1 (917) 441-2157", - "address": "954 Pilling Street, Grahamtown, Wisconsin, 8762", - "about": "Nulla esse reprehenderit esse incididunt in elit amet dolor Lorem consequat ad velit laboris. Esse laborum ut ad proident sit. Commodo labore aliqua do adipisicing excepteur cupidatat quis nostrud deserunt ullamco ipsum. Aliqua laborum fugiat ad anim culpa aliquip do aute tempor consectetur. Laboris non reprehenderit ad duis incididunt nulla anim ex in qui aute ad est. Aute est cupidatat in occaecat proident culpa nostrud ipsum deserunt ad duis id deserunt adipisicing.\r\n", - "registered": "2019-01-24T08:19:37 +05:00", - "latitude": 22.620922, - "longitude": 78.965815, - "tags": ["officia", "deserunt", "sunt", "minim", "aliquip", "aute", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Morris Castro" - }, - { - "id": 1, - "name": "Kathie Griffin" - }, - { - "id": 2, - "name": "Lynda Kim" - } - ], - "greeting": "Hello, Lila Talley! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d38280f41350c65c5", - "index": 215, - "guid": "b6923ace-237c-4681-9315-a3cdb42e28cc", - "isActive": false, - "balance": "$3,005.25", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Schultz Moses", - "gender": "male", - "company": "OVERFORK", - "email": "schultzmoses@overfork.com", - "phone": "+1 (910) 429-3713", - "address": "525 Lewis Avenue, Snowville, Arizona, 936", - "about": "Minim deserunt elit aute exercitation Lorem Lorem magna anim consectetur eu Lorem ipsum adipisicing. Eiusmod adipisicing veniam consectetur irure irure laborum nisi do dolore ipsum fugiat. Velit ullamco consectetur irure quis duis eiusmod incididunt minim. Nostrud laborum occaecat do Lorem aliqua veniam exercitation velit enim irure. Culpa dolor esse sit id id culpa adipisicing est. Consequat cillum dolore commodo ea eiusmod ipsum enim minim ut velit officia proident cupidatat quis. Velit magna ut et sint.\r\n", - "registered": "2015-10-29T02:27:31 +04:00", - "latitude": -30.132928, - "longitude": -80.925537, - "tags": ["labore", "reprehenderit", "labore", "sit", "quis", "culpa", "ea"], - "friends": [ - { - "id": 0, - "name": "Dawn Meyer" - }, - { - "id": 1, - "name": "Consuelo Cunningham" - }, - { - "id": 2, - "name": "Lora Gay" - } - ], - "greeting": "Hello, Schultz Moses! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d913a2a580f442590", - "index": 216, - "guid": "7b761528-6093-48e2-a7b0-0104c16775c6", - "isActive": false, - "balance": "$3,669.08", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Brown Snyder", - "gender": "male", - "company": "ELENTRIX", - "email": "brownsnyder@elentrix.com", - "phone": "+1 (874) 549-2633", - "address": "988 Randolph Street, Carrizo, Ohio, 554", - "about": "Exercitation anim cupidatat est occaecat Lorem non exercitation. Voluptate non veniam aliqua incididunt deserunt velit esse. In ea proident culpa nostrud velit adipisicing. Eu nisi culpa excepteur Lorem. Amet mollit deserunt fugiat deserunt et. Qui ullamco commodo commodo reprehenderit nostrud laboris ullamco sunt elit pariatur enim eu. Elit sunt occaecat ullamco tempor duis nostrud sit nulla est ea sint.\r\n", - "registered": "2014-06-19T11:51:43 +04:00", - "latitude": 14.999907, - "longitude": -86.880923, - "tags": ["Lorem", "deserunt", "occaecat", "enim", "consequat", "deserunt", "mollit"], - "friends": [ - { - "id": 0, - "name": "Rene Kaufman" - }, - { - "id": 1, - "name": "Coleman Delaney" - }, - { - "id": 2, - "name": "Conrad Chan" - } - ], - "greeting": "Hello, Brown Snyder! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d24eb31c0dda858c7", - "index": 217, - "guid": "0958efd1-678c-42e0-a600-6bbe1fe1c399", - "isActive": true, - "balance": "$3,537.55", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Letitia Buckley", - "gender": "female", - "company": "APPLIDEC", - "email": "letitiabuckley@applidec.com", - "phone": "+1 (909) 446-2155", - "address": "873 Boerum Street, Terlingua, Arkansas, 2436", - "about": "Sint nostrud velit excepteur cillum pariatur consequat velit est duis qui commodo. Dolore aliqua fugiat cupidatat duis eiusmod consectetur labore incididunt dolore exercitation tempor mollit culpa consectetur. Labore ex fugiat officia mollit. Quis enim velit excepteur occaecat est velit Lorem sunt et elit id. Laborum commodo officia amet voluptate. Ut dolore esse aute voluptate qui cupidatat laborum et culpa minim anim Lorem nostrud mollit. Proident quis sint velit anim voluptate ad aliquip.\r\n", - "registered": "2018-04-30T08:49:09 +04:00", - "latitude": 6.937075, - "longitude": -32.50759, - "tags": ["duis", "incididunt", "ex", "culpa", "proident", "reprehenderit", "dolor"], - "friends": [ - { - "id": 0, - "name": "Kerr Stevenson" - }, - { - "id": 1, - "name": "Stokes Sparks" - }, - { - "id": 2, - "name": "Brandie Spencer" - } - ], - "greeting": "Hello, Letitia Buckley! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2bec293835682825", - "index": 218, - "guid": "85f4e95c-9aa0-46e7-9278-9418d760eeed", - "isActive": false, - "balance": "$1,098.62", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Hess Silva", - "gender": "male", - "company": "ISOLOGICS", - "email": "hesssilva@isologics.com", - "phone": "+1 (873) 401-3521", - "address": "921 Milton Street, Fingerville, Nevada, 9341", - "about": "Amet duis incididunt fugiat elit. Qui eiusmod voluptate veniam voluptate aliquip commodo Lorem anim anim in consectetur mollit tempor. In dolore sunt ad consequat sunt aliqua aliquip est dolor aliqua fugiat enim. Occaecat dolor id sunt veniam dolore sit id excepteur dolore. Anim duis pariatur sint nulla elit. Velit consectetur elit aliquip eiusmod anim laboris sint ad elit mollit Lorem.\r\n", - "registered": "2016-06-22T06:05:52 +04:00", - "latitude": 29.905481, - "longitude": 111.225768, - "tags": ["laboris", "labore", "ad", "nisi", "commodo", "officia", "commodo"], - "friends": [ - { - "id": 0, - "name": "Pickett Ferguson" - }, - { - "id": 1, - "name": "Francis Walsh" - }, - { - "id": 2, - "name": "Addie Tyler" - } - ], - "greeting": "Hello, Hess Silva! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d828a36abf395183a", - "index": 219, - "guid": "0dd6690c-dea4-4d1f-8e13-3477114d49dd", - "isActive": false, - "balance": "$1,362.62", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Nichols Harper", - "gender": "male", - "company": "QUILM", - "email": "nicholsharper@quilm.com", - "phone": "+1 (893) 426-2325", - "address": "338 Little Street, Yardville, Massachusetts, 9359", - "about": "Laborum et ut deserunt irure ex eu. Ex nisi cupidatat minim eiusmod labore sit. Excepteur consectetur aliquip quis enim ut sunt ullamco velit ea eu officia consectetur sunt. Amet eiusmod cupidatat elit nisi pariatur. Dolor laboris sint enim ea incididunt commodo aliqua fugiat duis ullamco reprehenderit reprehenderit. Ullamco voluptate commodo nisi ea enim incididunt veniam Lorem irure sit officia. Commodo veniam sunt culpa eiusmod officia sit.\r\n", - "registered": "2019-07-02T01:22:32 +04:00", - "latitude": 32.414423, - "longitude": -54.634704, - "tags": ["proident", "voluptate", "ea", "veniam", "tempor", "occaecat", "nisi"], - "friends": [ - { - "id": 0, - "name": "Samantha Estes" - }, - { - "id": 1, - "name": "Moreno Mcbride" - }, - { - "id": 2, - "name": "Dale Hernandez" - } - ], - "greeting": "Hello, Nichols Harper! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbc575fae6c6786d8", - "index": 220, - "guid": "c568f755-be85-4f19-9218-0bd5013e6905", - "isActive": true, - "balance": "$3,822.68", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Carly Garcia", - "gender": "female", - "company": "BIOTICA", - "email": "carlygarcia@biotica.com", - "phone": "+1 (988) 476-3614", - "address": "518 Ridge Boulevard, Elrama, Marshall Islands, 3846", - "about": "Dolore sint consequat proident minim ipsum Lorem commodo voluptate id duis ex. Ex et eu elit nostrud in est duis consequat dolor ipsum eiusmod cillum consequat deserunt. Occaecat proident ut cupidatat labore est dolor deserunt proident. Aliquip dolor officia culpa cillum officia ex amet anim enim irure magna velit eiusmod eu. Tempor sit reprehenderit ex sunt officia.\r\n", - "registered": "2014-09-23T07:36:28 +04:00", - "latitude": 4.211805, - "longitude": 48.217245, - "tags": ["irure", "est", "non", "consequat", "duis", "ipsum", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Naomi Burgess" - }, - { - "id": 1, - "name": "Simmons Parker" - }, - { - "id": 2, - "name": "Lessie Richmond" - } - ], - "greeting": "Hello, Carly Garcia! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df53c7ec34213940d", - "index": 221, - "guid": "9e1cadc7-c4b9-4ed7-aa99-99acb9731bfb", - "isActive": false, - "balance": "$2,670.71", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Hays Mccormick", - "gender": "male", - "company": "ATGEN", - "email": "haysmccormick@atgen.com", - "phone": "+1 (947) 523-3989", - "address": "475 Graham Avenue, Cawood, Puerto Rico, 3309", - "about": "Lorem dolor voluptate irure ea quis esse non cillum. Occaecat commodo ex officia aute elit et officia adipisicing in in eu et. Aliqua elit qui consectetur amet minim amet exercitation nulla sint occaecat laborum sit. Do aliqua non occaecat reprehenderit non ad sit voluptate magna in nisi adipisicing excepteur ipsum. Tempor velit reprehenderit commodo eu. Sit nisi ut dolore esse exercitation. Veniam cupidatat veniam dolor consequat qui sit magna consequat consequat elit.\r\n", - "registered": "2014-05-27T04:40:12 +04:00", - "latitude": -7.482738, - "longitude": 33.624298, - "tags": ["pariatur", "laborum", "commodo", "aute", "amet", "ea", "officia"], - "friends": [ - { - "id": 0, - "name": "Wendi Beasley" - }, - { - "id": 1, - "name": "Shaffer Barrera" - }, - { - "id": 2, - "name": "Rowe Hess" - } - ], - "greeting": "Hello, Hays Mccormick! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2ec666f57a2f1f1b", - "index": 222, - "guid": "869336be-c349-4044-9ed0-e628ddbff05b", - "isActive": false, - "balance": "$3,938.55", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Heather Johnson", - "gender": "female", - "company": "ENDIPINE", - "email": "heatherjohnson@endipine.com", - "phone": "+1 (817) 482-3726", - "address": "216 Joralemon Street, Nipinnawasee, California, 5212", - "about": "Ea sunt in elit do adipisicing ut officia elit reprehenderit non. Lorem amet Lorem id exercitation incididunt excepteur irure commodo ipsum aliquip non adipisicing do ullamco. Duis reprehenderit Lorem non magna. Velit duis veniam est reprehenderit velit consectetur ex esse magna labore amet aliquip duis officia. Cupidatat veniam cupidatat dolore laboris. Culpa fugiat est incididunt veniam et enim dolore nisi aute ullamco. Enim pariatur ut qui qui est laborum.\r\n", - "registered": "2014-07-05T12:39:41 +04:00", - "latitude": -24.556121, - "longitude": 152.36379, - "tags": ["culpa", "eiusmod", "tempor", "quis", "consectetur", "id", "mollit"], - "friends": [ - { - "id": 0, - "name": "Foley Branch" - }, - { - "id": 1, - "name": "Cecile Mcleod" - }, - { - "id": 2, - "name": "Vonda Noel" - } - ], - "greeting": "Hello, Heather Johnson! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ded32963212e1c548", - "index": 223, - "guid": "a91d5637-9ded-4f6e-a4ed-8285a9119917", - "isActive": true, - "balance": "$1,425.00", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Roseann Tyson", - "gender": "female", - "company": "ULTRIMAX", - "email": "roseanntyson@ultrimax.com", - "phone": "+1 (801) 571-3964", - "address": "769 Commerce Street, Trail, Tennessee, 2056", - "about": "Proident sit cupidatat ad esse id magna duis laborum aute dolore qui. Id incididunt quis veniam aliquip cupidatat laboris Lorem exercitation esse laborum exercitation magna ut. Incididunt elit est exercitation culpa anim minim et eu quis adipisicing.\r\n", - "registered": "2019-06-25T02:24:16 +04:00", - "latitude": 31.130415, - "longitude": 91.853202, - "tags": ["amet", "ea", "proident", "laborum", "fugiat", "Lorem", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Poole Leblanc" - }, - { - "id": 1, - "name": "Vaughan Bennett" - }, - { - "id": 2, - "name": "Woods Page" - } - ], - "greeting": "Hello, Roseann Tyson! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df65932f2c6c3e6f3", - "index": 224, - "guid": "4bcba0a7-1d66-4c43-8aea-bcfc18cd9ba6", - "isActive": true, - "balance": "$1,887.55", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Dona Franklin", - "gender": "female", - "company": "ISODRIVE", - "email": "donafranklin@isodrive.com", - "phone": "+1 (902) 553-3979", - "address": "882 Chester Court, Levant, Wyoming, 1232", - "about": "Officia laboris sint veniam incididunt officia nisi mollit dolor eu fugiat id commodo. Ullamco voluptate sunt ut nulla minim veniam id cillum officia esse elit anim tempor. In reprehenderit Lorem sit ullamco pariatur nostrud reprehenderit sunt reprehenderit commodo eu sunt ad commodo.\r\n", - "registered": "2014-09-03T09:22:49 +04:00", - "latitude": 7.480288, - "longitude": -77.10871, - "tags": ["sit", "incididunt", "eiusmod", "duis", "voluptate", "id", "laborum"], - "friends": [ - { - "id": 0, - "name": "Deann Mitchell" - }, - { - "id": 1, - "name": "Berger Bowen" - }, - { - "id": 2, - "name": "Merle Hodge" - } - ], - "greeting": "Hello, Dona Franklin! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc42ef2b97cbfa4d0", - "index": 225, - "guid": "0954311b-2f3d-43a5-986c-84aecabfde35", - "isActive": true, - "balance": "$3,681.09", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Ella Taylor", - "gender": "female", - "company": "CAXT", - "email": "ellataylor@caxt.com", - "phone": "+1 (953) 577-2907", - "address": "839 High Street, Fivepointville, North Carolina, 7911", - "about": "Exercitation enim nisi minim enim laborum laboris culpa quis officia minim aliqua est. Qui proident eiusmod incididunt dolore culpa consectetur est tempor esse nisi ea. Magna labore eu sint consequat in excepteur non. Id eiusmod et eiusmod occaecat irure laborum et commodo quis esse do esse magna do. Do incididunt aliqua exercitation consequat qui elit dolor qui ad laborum in.\r\n", - "registered": "2015-06-14T02:26:33 +04:00", - "latitude": 30.644326, - "longitude": 154.394193, - "tags": ["excepteur", "pariatur", "consequat", "dolor", "commodo", "exercitation", "nulla"], - "friends": [ - { - "id": 0, - "name": "Roth Neal" - }, - { - "id": 1, - "name": "Danielle Reynolds" - }, - { - "id": 2, - "name": "Cantu Tillman" - } - ], - "greeting": "Hello, Ella Taylor! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d800994dc6dd204c9", - "index": 226, - "guid": "c387bcc4-101e-442b-b606-32539957e17b", - "isActive": true, - "balance": "$1,652.11", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Susan Wilson", - "gender": "female", - "company": "MOMENTIA", - "email": "susanwilson@momentia.com", - "phone": "+1 (882) 569-2602", - "address": "392 Caton Place, Brookfield, Michigan, 7934", - "about": "Cupidatat sint aute id fugiat reprehenderit eu. Lorem qui nostrud velit consequat reprehenderit aliquip labore. Laborum Lorem ea consectetur laboris Lorem exercitation sunt excepteur.\r\n", - "registered": "2017-08-30T05:31:31 +04:00", - "latitude": 88.349241, - "longitude": 108.809956, - "tags": ["cupidatat", "Lorem", "labore", "aliquip", "Lorem", "nisi", "nulla"], - "friends": [ - { - "id": 0, - "name": "Martha Conway" - }, - { - "id": 1, - "name": "Joann Potter" - }, - { - "id": 2, - "name": "Christina Mcgowan" - } - ], - "greeting": "Hello, Susan Wilson! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4793c8e758610c76", - "index": 227, - "guid": "15f02743-47fb-4256-aa44-85d2d1dea11a", - "isActive": false, - "balance": "$2,890.91", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Perkins Lancaster", - "gender": "male", - "company": "ZILLIDIUM", - "email": "perkinslancaster@zillidium.com", - "phone": "+1 (979) 574-2637", - "address": "407 Auburn Place, Islandia, Oklahoma, 9856", - "about": "Et sunt voluptate voluptate voluptate. Sint cupidatat cillum irure qui dolore ea consectetur sunt excepteur excepteur deserunt cupidatat. Ipsum veniam nisi occaecat Lorem sint nisi labore id veniam ipsum duis in pariatur consectetur. Ad ea nulla quis consequat velit voluptate reprehenderit irure nisi culpa non enim. Magna voluptate aliqua enim ad consequat.\r\n", - "registered": "2020-02-20T08:25:14 +05:00", - "latitude": 46.636598, - "longitude": -31.774038, - "tags": ["non", "nisi", "aliqua", "velit", "ipsum", "labore", "cillum"], - "friends": [ - { - "id": 0, - "name": "Ashley Boyle" - }, - { - "id": 1, - "name": "Andrews Grant" - }, - { - "id": 2, - "name": "Gregory Nieves" - } - ], - "greeting": "Hello, Perkins Lancaster! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dbc4d43d927d6376c", - "index": 228, - "guid": "1b723722-9bb7-406b-bbd5-f9f98749bc06", - "isActive": false, - "balance": "$3,191.10", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Bray Sawyer", - "gender": "male", - "company": "CYTREK", - "email": "braysawyer@cytrek.com", - "phone": "+1 (847) 429-3514", - "address": "524 Grafton Street, Bridgetown, Vermont, 362", - "about": "Consectetur amet magna elit mollit quis irure cupidatat elit aute cupidatat elit eiusmod commodo. Dolor anim ex dolor ipsum sint occaecat. Excepteur est nostrud officia tempor cillum. Ex excepteur aute ex occaecat voluptate voluptate deserunt ex.\r\n", - "registered": "2016-02-19T07:39:48 +05:00", - "latitude": 70.053868, - "longitude": 153.392074, - "tags": ["in", "proident", "excepteur", "eiusmod", "consectetur", "dolore", "est"], - "friends": [ - { - "id": 0, - "name": "Lana Booth" - }, - { - "id": 1, - "name": "Opal Edwards" - }, - { - "id": 2, - "name": "Abigail Malone" - } - ], - "greeting": "Hello, Bray Sawyer! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0b94ce80b9f00d00", - "index": 229, - "guid": "d1266ca9-9e32-4436-bb66-4a0666825bd1", - "isActive": true, - "balance": "$2,884.64", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Lottie Spence", - "gender": "female", - "company": "GEEKOLOGY", - "email": "lottiespence@geekology.com", - "phone": "+1 (883) 572-3461", - "address": "731 School Lane, Eastvale, Utah, 7177", - "about": "Ex ipsum in veniam ullamco fugiat officia. Culpa ea dolore minim ut laborum eiusmod Lorem eu id exercitation. Amet dolor aliquip nostrud eu duis ut cupidatat incididunt nisi nisi veniam reprehenderit aute. Excepteur consectetur adipisicing nisi ut nisi in deserunt Lorem amet nulla. Id proident ad eu magna aute sit irure ullamco cupidatat reprehenderit ullamco.\r\n", - "registered": "2020-06-07T05:45:47 +04:00", - "latitude": -47.458897, - "longitude": 94.557826, - "tags": ["nulla", "aliquip", "officia", "culpa", "id", "qui", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Booth Hunter" - }, - { - "id": 1, - "name": "Leon Wiley" - }, - { - "id": 2, - "name": "Aileen Vargas" - } - ], - "greeting": "Hello, Lottie Spence! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d093ef6618d3f9f30", - "index": 230, - "guid": "35dc0bf6-3042-4948-91bd-4ebe1be2f9dc", - "isActive": true, - "balance": "$3,914.12", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Newman Howe", - "gender": "male", - "company": "COMVEYOR", - "email": "newmanhowe@comveyor.com", - "phone": "+1 (818) 434-3798", - "address": "866 Division Place, Crumpler, Kansas, 8267", - "about": "Aliqua et enim voluptate eiusmod sit esse irure amet nostrud sunt occaecat aliquip dolor. Cupidatat velit elit amet veniam eiusmod non in magna non reprehenderit aute nisi adipisicing. Pariatur minim labore proident incididunt tempor non fugiat deserunt. Velit qui ullamco qui cupidatat ex ex duis sit. Dolore quis nulla dolore in esse incididunt cillum velit aliqua sint ea. Anim Lorem aliquip ullamco magna. Sint nisi Lorem dolor proident aute ea laboris in ullamco laborum.\r\n", - "registered": "2014-11-02T12:41:34 +05:00", - "latitude": 14.650463, - "longitude": -81.445866, - "tags": ["laboris", "minim", "duis", "non", "dolore", "voluptate", "culpa"], - "friends": [ - { - "id": 0, - "name": "Sheena Bradford" - }, - { - "id": 1, - "name": "Tracie Blanchard" - }, - { - "id": 2, - "name": "Amanda Benton" - } - ], - "greeting": "Hello, Newman Howe! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d73ddf414691baf03", - "index": 231, - "guid": "9c309dc1-1b41-4048-beaa-56d920d006bb", - "isActive": false, - "balance": "$1,479.31", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Ollie Wilkerson", - "gender": "female", - "company": "JASPER", - "email": "olliewilkerson@jasper.com", - "phone": "+1 (942) 502-3860", - "address": "210 Jamison Lane, Rivers, Delaware, 9098", - "about": "Minim nostrud sit commodo ut cillum qui velit ea sit. Velit consectetur dolore eiusmod qui laboris. Laboris id irure quis sit. Aute duis voluptate minim esse laboris cillum Lorem incididunt.\r\n", - "registered": "2018-11-16T09:05:21 +05:00", - "latitude": -34.801696, - "longitude": 36.242112, - "tags": ["sit", "elit", "adipisicing", "duis", "in", "dolor", "velit"], - "friends": [ - { - "id": 0, - "name": "Alisa Pearson" - }, - { - "id": 1, - "name": "Forbes Underwood" - }, - { - "id": 2, - "name": "Vinson Mays" - } - ], - "greeting": "Hello, Ollie Wilkerson! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0d6399e22dffce92", - "index": 232, - "guid": "0d85b834-6dd4-440b-bbb4-82a7517c110c", - "isActive": false, - "balance": "$2,407.79", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Jill Kirk", - "gender": "female", - "company": "SUSTENZA", - "email": "jillkirk@sustenza.com", - "phone": "+1 (837) 523-2734", - "address": "234 Dunham Place, Northridge, Guam, 9551", - "about": "Ea minim tempor ex elit. Aliqua reprehenderit elit velit in pariatur ullamco excepteur amet eiusmod. Eu nisi laboris eu anim reprehenderit quis nulla magna adipisicing duis.\r\n", - "registered": "2018-10-18T11:01:32 +04:00", - "latitude": 73.863468, - "longitude": 155.780755, - "tags": ["adipisicing", "aliquip", "cillum", "sit", "in", "enim", "labore"], - "friends": [ - { - "id": 0, - "name": "Green Burnett" - }, - { - "id": 1, - "name": "Carrie Rollins" - }, - { - "id": 2, - "name": "Graham Hopkins" - } - ], - "greeting": "Hello, Jill Kirk! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7ef99c8db3049ad7", - "index": 233, - "guid": "236b72c4-ff81-4972-ba20-5e37fff7b862", - "isActive": false, - "balance": "$2,179.13", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Leach Alexander", - "gender": "male", - "company": "DENTREX", - "email": "leachalexander@dentrex.com", - "phone": "+1 (883) 513-2047", - "address": "243 Applegate Court, Kansas, Oregon, 9218", - "about": "Do amet nostrud amet ullamco esse tempor qui eu voluptate duis minim occaecat adipisicing. Nostrud velit mollit dolor qui irure dolore Lorem ipsum mollit adipisicing amet mollit. Nulla eu cillum exercitation culpa elit. Est sunt elit pariatur incididunt irure magna nisi mollit exercitation et adipisicing qui incididunt.\r\n", - "registered": "2019-12-19T07:25:01 +05:00", - "latitude": 16.56485, - "longitude": -85.690348, - "tags": ["irure", "elit", "elit", "quis", "dolor", "aliqua", "qui"], - "friends": [ - { - "id": 0, - "name": "Morton Snider" - }, - { - "id": 1, - "name": "Ramona Fleming" - }, - { - "id": 2, - "name": "Fisher Lindsey" - } - ], - "greeting": "Hello, Leach Alexander! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5c5e7b59f2b2d4be", - "index": 234, - "guid": "9df9cd48-696d-48c3-90c9-51456c249756", - "isActive": true, - "balance": "$1,901.16", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Cochran Mckenzie", - "gender": "male", - "company": "FISHLAND", - "email": "cochranmckenzie@fishland.com", - "phone": "+1 (895) 539-2857", - "address": "927 Aitken Place, Grapeview, Missouri, 1868", - "about": "Minim dolore nulla irure esse nisi ullamco pariatur dolore in amet elit consequat. Laborum do ad in deserunt id ut enim. Aute ut sint sint amet amet laboris labore. Qui tempor cillum officia ut sit.\r\n", - "registered": "2017-05-29T06:21:56 +04:00", - "latitude": 10.469175, - "longitude": -23.247312, - "tags": ["occaecat", "minim", "pariatur", "consectetur", "laboris", "et", "non"], - "friends": [ - { - "id": 0, - "name": "Lakisha Sandoval" - }, - { - "id": 1, - "name": "Moss Campos" - }, - { - "id": 2, - "name": "Guerrero Preston" - } - ], - "greeting": "Hello, Cochran Mckenzie! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d31f48289a565dcf4", - "index": 235, - "guid": "be4aec31-ad38-4ac3-88d7-6cbad9a0ae89", - "isActive": true, - "balance": "$3,057.51", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Warren Cruz", - "gender": "male", - "company": "ORBEAN", - "email": "warrencruz@orbean.com", - "phone": "+1 (851) 599-3737", - "address": "114 Hazel Court, Tonopah, Montana, 1744", - "about": "Aliquip aute cillum officia enim laborum aute labore enim consectetur labore sunt pariatur irure. Ipsum enim mollit Lorem do commodo officia magna. Ipsum culpa exercitation cupidatat voluptate. Dolor esse eiusmod enim veniam eu occaecat.\r\n", - "registered": "2020-03-23T11:26:53 +04:00", - "latitude": -30.286453, - "longitude": -128.340543, - "tags": ["eu", "minim", "officia", "pariatur", "in", "enim", "nisi"], - "friends": [ - { - "id": 0, - "name": "Helene Weiss" - }, - { - "id": 1, - "name": "Susie House" - }, - { - "id": 2, - "name": "Adrienne Whitney" - } - ], - "greeting": "Hello, Warren Cruz! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de7e9a0019839fbfb", - "index": 236, - "guid": "f5f30724-e829-44ff-a3a6-aab770189209", - "isActive": true, - "balance": "$1,166.85", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Hubbard Herrera", - "gender": "male", - "company": "EQUITOX", - "email": "hubbardherrera@equitox.com", - "phone": "+1 (975) 481-2123", - "address": "272 Midwood Street, Clayville, Alaska, 3822", - "about": "Occaecat ea esse dolore nisi sit magna culpa labore sint do. Dolor amet excepteur consectetur exercitation ad incididunt non commodo aliquip ex laboris. Minim quis laborum elit mollit officia. Exercitation officia et duis fugiat adipisicing sit mollit esse cillum velit ullamco commodo aute.\r\n", - "registered": "2018-11-03T04:46:31 +04:00", - "latitude": 60.308707, - "longitude": -47.390978, - "tags": ["ipsum", "irure", "adipisicing", "incididunt", "veniam", "ipsum", "enim"], - "friends": [ - { - "id": 0, - "name": "Hunt Mcknight" - }, - { - "id": 1, - "name": "Langley Day" - }, - { - "id": 2, - "name": "Mullen Fox" - } - ], - "greeting": "Hello, Hubbard Herrera! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7377fc1d37f1ea9c", - "index": 237, - "guid": "80089055-b26e-4ca9-81f4-140f554ec482", - "isActive": false, - "balance": "$2,893.26", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Karla Gibson", - "gender": "female", - "company": "TOYLETRY", - "email": "karlagibson@toyletry.com", - "phone": "+1 (861) 434-3178", - "address": "140 Gunther Place, Nadine, Kentucky, 4671", - "about": "Quis deserunt incididunt enim pariatur minim aliqua eiusmod officia ullamco adipisicing adipisicing mollit. Reprehenderit officia aliqua do amet voluptate ea dolor labore sint commodo id esse. Voluptate aliqua do deserunt ipsum ullamco et esse occaecat amet excepteur ullamco veniam aliquip sunt. Tempor est dolore consectetur minim qui. Sint officia ipsum reprehenderit incididunt cillum dolore veniam in ea eu elit exercitation culpa. Veniam Lorem dolore laborum pariatur aliqua pariatur excepteur nisi adipisicing nulla dolore nostrud. Et nostrud id proident dolor voluptate laboris nulla sint enim officia esse voluptate.\r\n", - "registered": "2018-05-19T08:48:23 +04:00", - "latitude": -33.208966, - "longitude": 49.490504, - "tags": ["esse", "Lorem", "magna", "non", "cillum", "id", "esse"], - "friends": [ - { - "id": 0, - "name": "Suzanne Wilder" - }, - { - "id": 1, - "name": "Lacy Knox" - }, - { - "id": 2, - "name": "Sheri Myers" - } - ], - "greeting": "Hello, Karla Gibson! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d905e4d5ff9163760", - "index": 238, - "guid": "5f8aca7b-ea35-4874-8ef2-e198b0163c68", - "isActive": true, - "balance": "$1,845.51", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Lola Salinas", - "gender": "female", - "company": "UBERLUX", - "email": "lolasalinas@uberlux.com", - "phone": "+1 (949) 520-2123", - "address": "959 Bliss Terrace, Titanic, Mississippi, 408", - "about": "Consequat dolor eu deserunt sunt ad reprehenderit magna et quis eu in tempor. Laborum quis labore minim culpa in elit cillum commodo adipisicing. Commodo ut voluptate non aliqua ipsum dolor dolore excepteur ea est. Nostrud culpa sint culpa sunt fugiat anim eiusmod magna cupidatat officia excepteur eiusmod irure nisi. Ut magna sit incididunt fugiat. Nostrud dolore proident non est ea esse nisi dolore sit. Sint eu nisi nisi et anim laborum id laborum.\r\n", - "registered": "2020-08-27T11:26:03 +04:00", - "latitude": 81.689306, - "longitude": 61.346439, - "tags": ["labore", "enim", "magna", "voluptate", "in", "commodo", "consequat"], - "friends": [ - { - "id": 0, - "name": "Jocelyn Ellis" - }, - { - "id": 1, - "name": "Nielsen Eaton" - }, - { - "id": 2, - "name": "Willa Fitzgerald" - } - ], - "greeting": "Hello, Lola Salinas! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd2b2fd0aaa8471f6", - "index": 239, - "guid": "7bf2a65a-0825-4fa3-8b32-bdc61677472e", - "isActive": false, - "balance": "$3,258.47", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Fowler Hendrix", - "gender": "male", - "company": "SONIQUE", - "email": "fowlerhendrix@sonique.com", - "phone": "+1 (996) 422-3446", - "address": "268 Lexington Avenue, Hebron, North Dakota, 8931", - "about": "Ullamco aliqua adipisicing tempor aute ullamco irure reprehenderit mollit enim velit do officia consequat ipsum. Eiusmod consectetur incididunt cillum laborum laborum Lorem est magna ea ea. Amet non velit et nostrud elit veniam culpa adipisicing laboris in adipisicing fugiat nostrud quis.\r\n", - "registered": "2015-02-16T07:38:15 +05:00", - "latitude": -74.244085, - "longitude": 3.681181, - "tags": ["dolor", "amet", "deserunt", "sit", "veniam", "Lorem", "consequat"], - "friends": [ - { - "id": 0, - "name": "Janie Holloway" - }, - { - "id": 1, - "name": "Jeannette Morin" - }, - { - "id": 2, - "name": "Gwendolyn Abbott" - } - ], - "greeting": "Hello, Fowler Hendrix! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3c00cf04d131721a", - "index": 240, - "guid": "00bc28aa-bd19-482e-9b78-4a8d5a32e2a4", - "isActive": false, - "balance": "$1,820.55", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Faulkner Rhodes", - "gender": "male", - "company": "VIDTO", - "email": "faulknerrhodes@vidto.com", - "phone": "+1 (816) 451-3822", - "address": "778 Dekoven Court, Sena, Federated States Of Micronesia, 8346", - "about": "Commodo in veniam consectetur laborum dolore qui. Sunt ea proident occaecat ex cillum quis adipisicing anim reprehenderit officia aliquip dolore pariatur. Exercitation eu officia duis sint est. Reprehenderit laboris labore eiusmod enim nostrud pariatur tempor fugiat voluptate reprehenderit. Pariatur duis consequat aliquip quis ea magna et.\r\n", - "registered": "2017-11-06T04:09:43 +05:00", - "latitude": -84.628439, - "longitude": 152.942411, - "tags": ["ullamco", "qui", "laboris", "dolore", "est", "voluptate", "irure"], - "friends": [ - { - "id": 0, - "name": "Terri Dale" - }, - { - "id": 1, - "name": "Smith Peters" - }, - { - "id": 2, - "name": "Rosario Ochoa" - } - ], - "greeting": "Hello, Faulkner Rhodes! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d74171e73db8f9b8e", - "index": 241, - "guid": "cd90b8de-a577-402f-a87d-ed8264a63e79", - "isActive": false, - "balance": "$2,900.64", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Goodman Ayers", - "gender": "male", - "company": "ZAYA", - "email": "goodmanayers@zaya.com", - "phone": "+1 (893) 555-2980", - "address": "466 Alice Court, Waterloo, Maryland, 3853", - "about": "Laborum aute labore dolore voluptate commodo est nostrud incididunt non laboris aliqua est proident. Ad sunt est cillum minim nostrud ipsum deserunt eiusmod sunt sunt id. Tempor reprehenderit incididunt deserunt culpa cillum exercitation ad.\r\n", - "registered": "2014-07-29T07:24:20 +04:00", - "latitude": 10.057095, - "longitude": 14.510668, - "tags": ["adipisicing", "aliqua", "ad", "aliquip", "deserunt", "in", "sit"], - "friends": [ - { - "id": 0, - "name": "Terry Brock" - }, - { - "id": 1, - "name": "Krista Waller" - }, - { - "id": 2, - "name": "Louella Jefferson" - } - ], - "greeting": "Hello, Goodman Ayers! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d034c98f919e6dc85", - "index": 242, - "guid": "a887ea54-7162-4acc-8444-1f5d80b591e7", - "isActive": true, - "balance": "$3,341.23", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Wynn Higgins", - "gender": "male", - "company": "ZENTURY", - "email": "wynnhiggins@zentury.com", - "phone": "+1 (889) 575-2448", - "address": "596 Caton Avenue, Cliffside, Virgin Islands, 912", - "about": "Velit veniam deserunt enim culpa nulla tempor. Tempor adipisicing nostrud eiusmod dolor. Cupidatat ad qui cillum ullamco quis occaecat nisi eiusmod ex minim eiusmod officia. Officia officia reprehenderit proident do aliqua ipsum consequat esse eiusmod. Minim est magna ullamco excepteur amet labore ad. Pariatur ipsum est adipisicing labore enim aliqua nulla ut velit aliquip sint nulla consectetur. Velit tempor ut sunt aliquip dolor ad exercitation quis enim.\r\n", - "registered": "2014-08-15T04:20:49 +04:00", - "latitude": 22.551776, - "longitude": 139.086499, - "tags": ["quis", "culpa", "non", "Lorem", "tempor", "cillum", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Mccray Knight" - }, - { - "id": 1, - "name": "Shari Emerson" - }, - { - "id": 2, - "name": "Marian Dyer" - } - ], - "greeting": "Hello, Wynn Higgins! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1e81566af91682d3", - "index": 243, - "guid": "d376d268-84c6-4825-a24b-5391a002f7f2", - "isActive": true, - "balance": "$2,653.99", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Richmond Ballard", - "gender": "male", - "company": "EBIDCO", - "email": "richmondballard@ebidco.com", - "phone": "+1 (928) 487-2576", - "address": "480 Vanderveer Place, Dixie, Pennsylvania, 9329", - "about": "Enim ullamco ex non commodo tempor laboris nulla tempor do ipsum Lorem velit. Officia esse qui qui adipisicing pariatur occaecat cillum veniam. Ipsum cupidatat proident nisi sunt minim ea sint officia officia. Sunt velit ad adipisicing labore cupidatat tempor cupidatat cupidatat deserunt esse deserunt in. Sunt incididunt nulla est elit do excepteur consequat ipsum exercitation sint.\r\n", - "registered": "2018-07-30T11:10:11 +04:00", - "latitude": 44.346996, - "longitude": 55.139338, - "tags": ["elit", "pariatur", "do", "culpa", "incididunt", "fugiat", "dolor"], - "friends": [ - { - "id": 0, - "name": "Logan Gonzalez" - }, - { - "id": 1, - "name": "Shirley Jordan" - }, - { - "id": 2, - "name": "Cunningham Richardson" - } - ], - "greeting": "Hello, Richmond Ballard! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1a3d58b585d7ceed", - "index": 244, - "guid": "5ca964b3-f28e-42b3-82f4-a043a9adfdd4", - "isActive": true, - "balance": "$2,023.50", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Carolyn Browning", - "gender": "female", - "company": "COLAIRE", - "email": "carolynbrowning@colaire.com", - "phone": "+1 (890) 596-2214", - "address": "585 Tudor Terrace, Brazos, Washington, 8159", - "about": "Deserunt pariatur nisi ex exercitation duis non. Nostrud deserunt minim reprehenderit velit et. Aute adipisicing quis deserunt exercitation ex aliquip tempor.\r\n", - "registered": "2019-01-23T05:03:47 +05:00", - "latitude": 84.192071, - "longitude": 20.78582, - "tags": ["ut", "dolore", "occaecat", "cillum", "cillum", "sint", "proident"], - "friends": [ - { - "id": 0, - "name": "Shaw Shepard" - }, - { - "id": 1, - "name": "Parks Herring" - }, - { - "id": 2, - "name": "Vaughn Carrillo" - } - ], - "greeting": "Hello, Carolyn Browning! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db9c7c4dcad4b6c0d", - "index": 245, - "guid": "830552fc-a5de-4136-8de6-112e2bb3eb3e", - "isActive": true, - "balance": "$2,258.99", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Cassie Short", - "gender": "female", - "company": "DECRATEX", - "email": "cassieshort@decratex.com", - "phone": "+1 (971) 468-2027", - "address": "839 Bartlett Street, Finderne, Illinois, 2208", - "about": "Mollit dolor eu tempor nostrud esse et in eiusmod elit magna. Proident irure elit velit amet minim quis est minim magna esse nostrud officia quis voluptate. Voluptate tempor enim sit nulla velit nostrud sit ipsum ex eu Lorem nostrud consequat. Fugiat velit commodo dolore ea nisi sit reprehenderit dolor sunt pariatur Lorem consequat. Ipsum ad culpa occaecat mollit culpa. Proident minim nulla irure ipsum.\r\n", - "registered": "2017-05-14T04:43:19 +04:00", - "latitude": 40.100177, - "longitude": 98.167605, - "tags": ["ut", "elit", "officia", "proident", "aliquip", "Lorem", "laborum"], - "friends": [ - { - "id": 0, - "name": "Natasha Patton" - }, - { - "id": 1, - "name": "Estella Kelley" - }, - { - "id": 2, - "name": "Lori Odonnell" - } - ], - "greeting": "Hello, Cassie Short! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d99a81a92ec581747", - "index": 246, - "guid": "9b76891c-318b-4d00-82da-84dd5f8dcdaf", - "isActive": false, - "balance": "$1,510.32", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "brown", - "name": "Fuentes Cherry", - "gender": "male", - "company": "GEEKFARM", - "email": "fuentescherry@geekfarm.com", - "phone": "+1 (839) 593-2930", - "address": "479 Friel Place, Matthews, New Hampshire, 7994", - "about": "Aliqua excepteur magna minim ad qui esse magna adipisicing ut anim qui eu officia ullamco. Sit commodo ipsum quis consequat commodo minim et tempor. Quis eiusmod reprehenderit eiusmod do. Nisi enim aliqua laboris reprehenderit enim et ex. Voluptate officia minim cupidatat reprehenderit aliquip ut. Ipsum Lorem amet adipisicing ut amet sit do culpa veniam do. Excepteur commodo exercitation do sint laboris.\r\n", - "registered": "2018-09-06T02:00:15 +04:00", - "latitude": 69.630399, - "longitude": 74.189768, - "tags": ["et", "elit", "laboris", "cupidatat", "laboris", "elit", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Guerra Ashley" - }, - { - "id": 1, - "name": "Hopper Beach" - }, - { - "id": 2, - "name": "Mason Slater" - } - ], - "greeting": "Hello, Fuentes Cherry! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dae527773fe6cf121", - "index": 247, - "guid": "bb80796e-5c72-4ed6-aaf0-f63176f182a8", - "isActive": true, - "balance": "$2,598.69", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Gertrude Davenport", - "gender": "female", - "company": "RAMEON", - "email": "gertrudedavenport@rameon.com", - "phone": "+1 (867) 575-3855", - "address": "521 Thames Street, Deseret, Colorado, 4238", - "about": "Tempor dolore ex Lorem occaecat nisi consectetur officia sit consequat ipsum non eu officia velit. Officia qui veniam nostrud elit et laboris nostrud et officia ex eiusmod do excepteur aliqua. Occaecat id pariatur laborum sint cillum quis do fugiat aliquip aliqua adipisicing quis minim eu. Minim velit anim dolore culpa eu dolor veniam ea. Magna officia anim sit et non. Anim occaecat culpa veniam aute enim anim duis ea adipisicing consequat officia eu.\r\n", - "registered": "2018-03-27T10:27:56 +04:00", - "latitude": -1.245517, - "longitude": 118.938162, - "tags": ["elit", "reprehenderit", "occaecat", "non", "adipisicing", "dolore", "ea"], - "friends": [ - { - "id": 0, - "name": "Barron Monroe" - }, - { - "id": 1, - "name": "Kelly Sutton" - }, - { - "id": 2, - "name": "Diann Russo" - } - ], - "greeting": "Hello, Gertrude Davenport! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1fdbd829ebcce092", - "index": 248, - "guid": "3c81b367-d34b-4745-8639-90fdcf008ffa", - "isActive": false, - "balance": "$2,732.98", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Owens Clayton", - "gender": "male", - "company": "DUFLEX", - "email": "owensclayton@duflex.com", - "phone": "+1 (946) 469-2396", - "address": "583 Radde Place, Fairacres, Maine, 5517", - "about": "Nisi amet labore culpa cupidatat eu laboris laboris quis non fugiat laborum. Ea proident laborum nostrud elit esse cillum enim dolore. Do do sint sint ullamco. Ex nostrud ad aute nisi dolore ipsum. Ad sunt nulla laborum Lorem est nostrud veniam tempor do mollit laborum labore. Sit ipsum eiusmod exercitation cillum velit reprehenderit labore laborum ad. Ea aliqua incididunt in in laborum officia eu in do ullamco laboris voluptate.\r\n", - "registered": "2014-06-01T12:33:59 +04:00", - "latitude": -28.113678, - "longitude": 61.343235, - "tags": ["deserunt", "non", "officia", "minim", "dolore", "mollit", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Davenport Crosby" - }, - { - "id": 1, - "name": "Robles Wooten" - }, - { - "id": 2, - "name": "Tracy Duffy" - } - ], - "greeting": "Hello, Owens Clayton! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25daf48d45ad022a0a0", - "index": 249, - "guid": "b1e3d599-f4ee-416f-b8e9-488a71ecec25", - "isActive": false, - "balance": "$3,094.32", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Davidson Moon", - "gender": "male", - "company": "SULTRAXIN", - "email": "davidsonmoon@sultraxin.com", - "phone": "+1 (834) 488-3676", - "address": "581 Hemlock Street, Rivereno, South Carolina, 2422", - "about": "Officia cillum tempor ad qui culpa veniam pariatur officia aute cillum laborum ullamco. Sint eiusmod Lorem qui sit cupidatat sint dolor enim ad sunt. Qui nulla eu mollit magna reprehenderit ullamco aliqua culpa.\r\n", - "registered": "2014-07-13T12:31:43 +04:00", - "latitude": -39.110332, - "longitude": 106.328155, - "tags": ["incididunt", "adipisicing", "irure", "irure", "labore", "occaecat", "commodo"], - "friends": [ - { - "id": 0, - "name": "Jefferson Dixon" - }, - { - "id": 1, - "name": "Keller Rodriguez" - }, - { - "id": 2, - "name": "Candace Garner" - } - ], - "greeting": "Hello, Davidson Moon! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd2a54ff4b39bd7b7", - "index": 250, - "guid": "5cf63acc-6ecd-4026-8ea4-f7719a816183", - "isActive": false, - "balance": "$3,421.26", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Horne Parsons", - "gender": "male", - "company": "EXOSIS", - "email": "horneparsons@exosis.com", - "phone": "+1 (839) 480-2721", - "address": "984 Village Court, Yorklyn, Connecticut, 2972", - "about": "Et ullamco adipisicing voluptate deserunt commodo ullamco ullamco irure cupidatat mollit Lorem. Nisi esse ullamco qui cupidatat Lorem est qui proident. Dolore Lorem irure irure veniam nostrud sunt enim ullamco labore ut occaecat laboris sint adipisicing. Eiusmod ipsum ullamco amet voluptate minim do mollit sint enim. Elit ad aliquip do do quis adipisicing adipisicing aliqua reprehenderit ex quis. Esse duis nostrud et anim fugiat do aliqua non officia consectetur qui ad. Laborum culpa voluptate ad non aliqua sunt qui in cupidatat occaecat qui ut elit.\r\n", - "registered": "2014-06-27T12:01:23 +04:00", - "latitude": 12.039981, - "longitude": -138.488563, - "tags": ["nisi", "et", "commodo", "culpa", "aliqua", "ad", "elit"], - "friends": [ - { - "id": 0, - "name": "Duffy Bullock" - }, - { - "id": 1, - "name": "Salazar Foley" - }, - { - "id": 2, - "name": "Massey Brady" - } - ], - "greeting": "Hello, Horne Parsons! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d943f5e1115107d31", - "index": 251, - "guid": "dbeabc1a-b9b3-48e8-b1a4-daac9a71d678", - "isActive": true, - "balance": "$3,614.86", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Leanne Mcfadden", - "gender": "female", - "company": "FUTURIS", - "email": "leannemcfadden@futuris.com", - "phone": "+1 (926) 482-3267", - "address": "940 Woodpoint Road, Belvoir, Virginia, 3924", - "about": "Ullamco proident id cupidatat mollit minim sunt ipsum consequat commodo laboris. Aliqua ea et tempor eu velit dolore ea aute ex occaecat. Pariatur fugiat occaecat enim aute aliquip sint culpa qui est labore veniam sint ullamco. Tempor ea esse labore eiusmod dolor et duis aute dolor do aute nisi culpa nulla. Ex duis exercitation laboris aliquip cupidatat ad dolor aliqua incididunt. Officia nostrud fugiat consequat consequat reprehenderit veniam.\r\n", - "registered": "2016-02-22T09:56:04 +05:00", - "latitude": -84.051771, - "longitude": -54.430991, - "tags": ["laboris", "elit", "enim", "et", "non", "ipsum", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Love Holman" - }, - { - "id": 1, - "name": "Ines Shepherd" - }, - { - "id": 2, - "name": "Zimmerman Stewart" - } - ], - "greeting": "Hello, Leanne Mcfadden! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2dcb4a4813d8c4e2", - "index": 252, - "guid": "81204389-11c6-4c22-9a25-42e0725fac9a", - "isActive": false, - "balance": "$1,225.11", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Lowery Richards", - "gender": "male", - "company": "POSHOME", - "email": "loweryrichards@poshome.com", - "phone": "+1 (878) 578-3606", - "address": "297 Fair Street, Gila, Georgia, 5128", - "about": "Adipisicing ipsum irure adipisicing deserunt sunt id sint consectetur ut do dolore non elit. Cillum do mollit id laborum reprehenderit dolore non culpa quis sunt culpa proident exercitation deserunt. Nostrud irure minim elit laboris amet ad deserunt laborum nisi nisi laborum officia aliquip nostrud. Id aute cillum aliquip labore minim. Proident culpa labore officia proident irure consectetur enim enim dolor quis anim duis ipsum ut. Ut pariatur consequat reprehenderit nisi culpa proident.\r\n", - "registered": "2018-12-18T01:28:14 +05:00", - "latitude": 20.463901, - "longitude": -57.833729, - "tags": ["ipsum", "eu", "elit", "irure", "fugiat", "consequat", "est"], - "friends": [ - { - "id": 0, - "name": "Manuela Paul" - }, - { - "id": 1, - "name": "Josie Parrish" - }, - { - "id": 2, - "name": "Elliott Mathis" - } - ], - "greeting": "Hello, Lowery Richards! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dddf10fc96da5f0a7", - "index": 253, - "guid": "af311102-9e60-454d-baa0-8de8f50d860b", - "isActive": false, - "balance": "$1,136.50", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Concetta Coffey", - "gender": "female", - "company": "QIAO", - "email": "concettacoffey@qiao.com", - "phone": "+1 (880) 580-3134", - "address": "325 Chapel Street, Bascom, New Jersey, 880", - "about": "Excepteur adipisicing dolore eu nulla tempor anim adipisicing. Cupidatat deserunt magna cillum ipsum est voluptate pariatur. Officia officia exercitation culpa et reprehenderit eu veniam Lorem sit dolore incididunt adipisicing. Ex Lorem voluptate exercitation irure aliqua ut ex voluptate. Magna est eu est pariatur veniam Lorem fugiat dolore et. Cillum non sint deserunt irure excepteur proident eu.\r\n", - "registered": "2018-10-06T01:21:12 +04:00", - "latitude": 33.725313, - "longitude": 14.170199, - "tags": ["deserunt", "dolor", "voluptate", "consequat", "quis", "magna", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Stella Gordon" - }, - { - "id": 1, - "name": "Walters Cline" - }, - { - "id": 2, - "name": "Hendricks Sims" - } - ], - "greeting": "Hello, Concetta Coffey! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4e42093c9a607782", - "index": 254, - "guid": "0d0c541b-a868-42a2-ac4a-c31eea2f233c", - "isActive": true, - "balance": "$2,700.77", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Deena Lynn", - "gender": "female", - "company": "RONELON", - "email": "deenalynn@ronelon.com", - "phone": "+1 (847) 512-2088", - "address": "788 Tennis Court, Fillmore, Minnesota, 8348", - "about": "Anim ipsum aliqua ipsum exercitation officia fugiat magna consequat esse esse nulla ut ex eiusmod. Non amet duis enim officia sunt. Amet consectetur ut id laboris quis do. Velit elit amet occaecat ex eiusmod velit tempor officia anim pariatur enim aliqua enim. Dolor proident esse pariatur veniam culpa ad minim velit consectetur dolor ut et.\r\n", - "registered": "2017-07-31T08:49:11 +04:00", - "latitude": 38.26468, - "longitude": -91.669401, - "tags": ["deserunt", "fugiat", "ut", "dolor", "et", "culpa", "officia"], - "friends": [ - { - "id": 0, - "name": "Glover Pickett" - }, - { - "id": 1, - "name": "Whitehead Brewer" - }, - { - "id": 2, - "name": "Jewel Chase" - } - ], - "greeting": "Hello, Deena Lynn! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9ae05f18bd102037", - "index": 255, - "guid": "867eebfb-4672-4c1c-8442-11c3af1c8e0a", - "isActive": true, - "balance": "$3,930.76", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Olson Willis", - "gender": "male", - "company": "SUPPORTAL", - "email": "olsonwillis@supportal.com", - "phone": "+1 (838) 479-2124", - "address": "381 Knapp Street, Seymour, Texas, 478", - "about": "Voluptate dolor ex excepteur enim sint duis aute esse dolor enim. Nisi tempor aliqua et deserunt ea sint voluptate occaecat reprehenderit elit dolore eiusmod. Et esse ad mollit consequat ipsum culpa irure adipisicing aute proident ipsum fugiat.\r\n", - "registered": "2018-08-19T12:37:31 +04:00", - "latitude": -54.129383, - "longitude": -170.828798, - "tags": ["sint", "in", "aliqua", "ad", "ipsum", "mollit", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Leticia Golden" - }, - { - "id": 1, - "name": "Malone Graham" - }, - { - "id": 2, - "name": "Adriana Rich" - } - ], - "greeting": "Hello, Olson Willis! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d10a70885f4e64942", - "index": 256, - "guid": "1135756c-680c-4ce3-9587-3b7a625aa55b", - "isActive": false, - "balance": "$2,546.86", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Romero Freeman", - "gender": "male", - "company": "ISOLOGIA", - "email": "romerofreeman@isologia.com", - "phone": "+1 (916) 514-2908", - "address": "743 Brevoort Place, Englevale, Alabama, 1867", - "about": "Reprehenderit amet incididunt deserunt aliqua pariatur pariatur sunt proident. Laboris nisi exercitation sunt excepteur incididunt ipsum consequat nulla minim sint duis. Proident amet ex magna occaecat aliquip veniam non tempor cupidatat est consequat do laborum. Labore exercitation sit magna ut in duis quis ex irure. Elit in sint excepteur non quis ullamco.\r\n", - "registered": "2016-12-30T11:45:08 +05:00", - "latitude": 36.820725, - "longitude": 65.564449, - "tags": ["labore", "id", "sint", "eiusmod", "ex", "et", "proident"], - "friends": [ - { - "id": 0, - "name": "Rios Wyatt" - }, - { - "id": 1, - "name": "Ortiz Dennis" - }, - { - "id": 2, - "name": "Parrish Contreras" - } - ], - "greeting": "Hello, Romero Freeman! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de3f5ffdea9ddbbd3", - "index": 257, - "guid": "57ed8b3f-8a79-478f-9c62-63226ebc58df", - "isActive": true, - "balance": "$3,832.67", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Castillo Sargent", - "gender": "male", - "company": "TRANSLINK", - "email": "castillosargent@translink.com", - "phone": "+1 (850) 510-2967", - "address": "896 Dover Street, Vincent, Rhode Island, 9523", - "about": "Consequat reprehenderit non irure excepteur proident minim consectetur sunt est duis ex aute dolore aliqua. Qui mollit non ullamco elit ex sit consectetur pariatur nulla aliqua minim non. Ad consequat laboris esse dolor in exercitation enim veniam. Ipsum et occaecat elit amet. Ipsum aute consequat sit esse est Lorem sit tempor reprehenderit elit nostrud laboris labore. Culpa et esse do laborum. Exercitation eiusmod est aliquip sit nulla officia sit nostrud.\r\n", - "registered": "2020-06-08T05:35:03 +04:00", - "latitude": -89.933735, - "longitude": -167.477261, - "tags": ["est", "cupidatat", "eu", "nostrud", "aliqua", "elit", "magna"], - "friends": [ - { - "id": 0, - "name": "Rae Hester" - }, - { - "id": 1, - "name": "Katharine Hanson" - }, - { - "id": 2, - "name": "Kaitlin Mccoy" - } - ], - "greeting": "Hello, Castillo Sargent! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9e28a6b3811f8814", - "index": 258, - "guid": "d3e89945-3e1f-4f90-a780-4d2976fd8f85", - "isActive": false, - "balance": "$2,346.66", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Ethel Rivers", - "gender": "female", - "company": "NAXDIS", - "email": "ethelrivers@naxdis.com", - "phone": "+1 (902) 419-2609", - "address": "811 Nolans Lane, Shepardsville, Florida, 2912", - "about": "Id duis ipsum nulla id tempor nisi culpa proident. Sit voluptate esse ex velit. Eu laborum occaecat mollit sunt Lorem consequat commodo culpa in aute. Dolor commodo do aute irure et.\r\n", - "registered": "2018-10-31T09:18:44 +04:00", - "latitude": -0.101653, - "longitude": 63.560303, - "tags": ["mollit", "duis", "proident", "mollit", "veniam", "sint", "id"], - "friends": [ - { - "id": 0, - "name": "Andrea Dorsey" - }, - { - "id": 1, - "name": "Allie Nixon" - }, - { - "id": 2, - "name": "Hatfield Hensley" - } - ], - "greeting": "Hello, Ethel Rivers! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d676c904f26014d54", - "index": 259, - "guid": "e9356ae6-85ec-43c5-af86-124bf7a613de", - "isActive": false, - "balance": "$1,074.51", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Carey Livingston", - "gender": "male", - "company": "INTRADISK", - "email": "careylivingston@intradisk.com", - "phone": "+1 (841) 596-3876", - "address": "141 Crawford Avenue, Monument, Indiana, 875", - "about": "Dolor excepteur elit ullamco amet. Voluptate ea incididunt eiusmod pariatur consequat velit elit in consequat excepteur quis qui non et. Incididunt commodo adipisicing ex dolore duis exercitation aliquip velit.\r\n", - "registered": "2014-04-07T02:06:53 +04:00", - "latitude": -10.881131, - "longitude": -77.330825, - "tags": ["labore", "proident", "nulla", "fugiat", "ut", "reprehenderit", "tempor"], - "friends": [ - { - "id": 0, - "name": "Olga Cameron" - }, - { - "id": 1, - "name": "Russo Whitehead" - }, - { - "id": 2, - "name": "Rochelle Suarez" - } - ], - "greeting": "Hello, Carey Livingston! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7c9b4d48011c5ccd", - "index": 260, - "guid": "f82c7315-b3e8-433d-9a30-ba913b624c86", - "isActive": false, - "balance": "$1,137.44", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Clarke Reilly", - "gender": "male", - "company": "CIPROMOX", - "email": "clarkereilly@cipromox.com", - "phone": "+1 (993) 492-2792", - "address": "495 Vanderbilt Street, Durham, Northern Mariana Islands, 2874", - "about": "Elit dolor aliqua anim exercitation cillum ea cupidatat irure adipisicing laboris in ullamco nisi. Amet sint reprehenderit enim magna esse cupidatat aliquip laborum exercitation pariatur laborum fugiat deserunt magna. Nostrud qui eu laborum commodo est consequat sit exercitation dolore sit.\r\n", - "registered": "2018-05-27T04:08:20 +04:00", - "latitude": -42.095768, - "longitude": 109.46323, - "tags": ["laborum", "exercitation", "anim", "tempor", "mollit", "magna", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Alford Watkins" - }, - { - "id": 1, - "name": "Herman Villarreal" - }, - { - "id": 2, - "name": "Merrill Salas" - } - ], - "greeting": "Hello, Clarke Reilly! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d60900b2934b7e6bd", - "index": 261, - "guid": "aad5c4e3-3562-4f8f-b6d3-f06e9b5c4d39", - "isActive": false, - "balance": "$2,899.27", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Sharpe Mckinney", - "gender": "male", - "company": "ZYTREX", - "email": "sharpemckinney@zytrex.com", - "phone": "+1 (903) 403-3665", - "address": "682 Seacoast Terrace, Interlochen, Idaho, 6694", - "about": "Proident aute dolore reprehenderit laboris minim sint aliquip culpa duis deserunt reprehenderit officia mollit. Et dolor labore ipsum proident. Veniam elit fugiat cupidatat incididunt. Officia aliqua eu ullamco in eu. Veniam cupidatat aute mollit tempor et in tempor ea magna reprehenderit dolore magna.\r\n", - "registered": "2020-07-21T03:13:13 +04:00", - "latitude": 27.318063, - "longitude": 20.50048, - "tags": ["tempor", "amet", "qui", "elit", "ex", "reprehenderit", "enim"], - "friends": [ - { - "id": 0, - "name": "Crawford Owen" - }, - { - "id": 1, - "name": "Clara Durham" - }, - { - "id": 2, - "name": "Justice Adkins" - } - ], - "greeting": "Hello, Sharpe Mckinney! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4d0071f44de5b18a", - "index": 262, - "guid": "4936dcf0-2bdd-4036-b863-4b58d37370db", - "isActive": false, - "balance": "$3,149.35", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Reese Barton", - "gender": "male", - "company": "MITROC", - "email": "reesebarton@mitroc.com", - "phone": "+1 (862) 558-2795", - "address": "585 Manor Court, Sattley, District Of Columbia, 1787", - "about": "Pariatur fugiat aute nostrud officia laboris ea minim elit duis. Irure non consequat labore nisi do nulla incididunt ex deserunt occaecat tempor ipsum esse. Deserunt excepteur ex magna est elit veniam aliqua excepteur officia eiusmod adipisicing officia. Laboris laboris est dolore cillum do officia aliqua nostrud nostrud eiusmod est.\r\n", - "registered": "2020-08-27T12:45:27 +04:00", - "latitude": -9.584288, - "longitude": -115.113003, - "tags": ["sunt", "exercitation", "consequat", "incididunt", "enim", "consectetur", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Inez Morales" - }, - { - "id": 1, - "name": "Dee Kerr" - }, - { - "id": 2, - "name": "Kate Duncan" - } - ], - "greeting": "Hello, Reese Barton! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d485acca64a17237c", - "index": 263, - "guid": "d1e4d08c-5e5d-4473-b062-b6b443f38539", - "isActive": true, - "balance": "$3,797.55", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Dollie Foreman", - "gender": "female", - "company": "PAWNAGRA", - "email": "dollieforeman@pawnagra.com", - "phone": "+1 (976) 535-2268", - "address": "693 Wolf Place, Hartsville/Hartley, New Mexico, 1091", - "about": "Lorem ea magna occaecat excepteur tempor laboris adipisicing voluptate nulla officia incididunt. Ex minim est nulla anim consectetur quis anim. Ea excepteur nulla ullamco esse aliquip incididunt sit irure.\r\n", - "registered": "2017-09-19T01:05:58 +04:00", - "latitude": 83.357627, - "longitude": -99.168596, - "tags": ["reprehenderit", "aliquip", "sunt", "cillum", "nostrud", "sint", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Eddie White" - }, - { - "id": 1, - "name": "Juana Stanton" - }, - { - "id": 2, - "name": "Gloria Wheeler" - } - ], - "greeting": "Hello, Dollie Foreman! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc395ab2743412c0e", - "index": 264, - "guid": "43dfcc21-e635-4840-847c-34103b2eb271", - "isActive": false, - "balance": "$2,562.83", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Mccullough Cain", - "gender": "male", - "company": "GYNKO", - "email": "mcculloughcain@gynko.com", - "phone": "+1 (873) 563-3014", - "address": "475 Varick Avenue, Jenkinsville, South Dakota, 8316", - "about": "Veniam deserunt reprehenderit adipisicing cillum est laboris minim sunt ea sunt mollit consequat dolore. Ullamco irure dolor duis nulla. Dolore aliquip proident proident officia esse dolore duis aute sint quis ad amet eiusmod.\r\n", - "registered": "2017-01-09T03:26:31 +05:00", - "latitude": -14.604086, - "longitude": -87.900567, - "tags": ["est", "amet", "ad", "tempor", "amet", "deserunt", "non"], - "friends": [ - { - "id": 0, - "name": "Kay Guerra" - }, - { - "id": 1, - "name": "Nicholson Donaldson" - }, - { - "id": 2, - "name": "Fitzgerald Marshall" - } - ], - "greeting": "Hello, Mccullough Cain! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc07934e93874a826", - "index": 265, - "guid": "b15c50d9-7848-42b0-9648-043500612f95", - "isActive": true, - "balance": "$1,209.71", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Obrien Small", - "gender": "male", - "company": "PULZE", - "email": "obriensmall@pulze.com", - "phone": "+1 (910) 481-3398", - "address": "597 Chestnut Street, Needmore, American Samoa, 7140", - "about": "Pariatur do excepteur minim nulla do dolore nisi qui laborum laboris commodo tempor ex occaecat. In ut ad reprehenderit consectetur. Consectetur Lorem irure tempor tempor consectetur cillum dolore sit velit proident ullamco commodo. Aute aliquip sit irure anim est officia irure pariatur.\r\n", - "registered": "2015-11-26T06:02:43 +05:00", - "latitude": 67.784131, - "longitude": -177.255279, - "tags": ["pariatur", "Lorem", "officia", "nostrud", "proident", "sint", "anim"], - "friends": [ - { - "id": 0, - "name": "Chapman Winters" - }, - { - "id": 1, - "name": "Willis Johnston" - }, - { - "id": 2, - "name": "Lara Maddox" - } - ], - "greeting": "Hello, Obrien Small! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da4c629289d9afd88", - "index": 266, - "guid": "b6f69628-514f-41ae-97d9-d730599a30d8", - "isActive": true, - "balance": "$2,637.39", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Margery Lamb", - "gender": "female", - "company": "MARKETOID", - "email": "margerylamb@marketoid.com", - "phone": "+1 (868) 500-3185", - "address": "516 Hicks Street, Dunnavant, Iowa, 7346", - "about": "Do quis consectetur qui officia cillum elit eiusmod incididunt magna veniam. Adipisicing id deserunt ipsum adipisicing amet adipisicing consequat ut est. Fugiat mollit labore voluptate do minim. Deserunt eu incididunt pariatur et enim non occaecat aliqua nostrud labore nulla minim excepteur. Culpa sit incididunt nostrud sunt incididunt. Labore minim labore cillum amet ad nulla.\r\n", - "registered": "2019-09-17T08:39:30 +04:00", - "latitude": -74.586323, - "longitude": -110.066315, - "tags": ["voluptate", "cillum", "aute", "sint", "excepteur", "proident", "veniam"], - "friends": [ - { - "id": 0, - "name": "Stone Evans" - }, - { - "id": 1, - "name": "Taylor Petersen" - }, - { - "id": 2, - "name": "Ruth Thompson" - } - ], - "greeting": "Hello, Margery Lamb! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25ded470c61f1b24358", - "index": 267, - "guid": "defc95fb-3ba6-47f9-a34f-f698d2a907a5", - "isActive": true, - "balance": "$1,395.51", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Rose Nolan", - "gender": "male", - "company": "SYBIXTEX", - "email": "rosenolan@sybixtex.com", - "phone": "+1 (980) 533-3012", - "address": "494 Rutland Road, Chalfant, Palau, 8195", - "about": "Tempor commodo dolor nisi cupidatat. Velit velit adipisicing ut amet do adipisicing enim reprehenderit do labore. Non sit labore deserunt enim reprehenderit adipisicing. Eu enim laboris pariatur duis. Officia mollit nostrud qui culpa incididunt ullamco qui deserunt cupidatat culpa in irure excepteur aliquip.\r\n", - "registered": "2020-07-14T06:25:08 +04:00", - "latitude": 7.881714, - "longitude": -56.77515, - "tags": ["quis", "elit", "est", "tempor", "sint", "Lorem", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Flora Moreno" - }, - { - "id": 1, - "name": "Sanford Austin" - }, - { - "id": 2, - "name": "Hallie Santiago" - } - ], - "greeting": "Hello, Rose Nolan! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc4e764043b589a3b", - "index": 268, - "guid": "663be32c-98fc-40fb-a2af-f959decf73b0", - "isActive": true, - "balance": "$2,996.55", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Parker Perez", - "gender": "male", - "company": "LUMBREX", - "email": "parkerperez@lumbrex.com", - "phone": "+1 (958) 446-2858", - "address": "846 Beekman Place, Wyano, West Virginia, 2133", - "about": "In ad cillum consequat ex. Aliquip nisi cillum cillum aliquip do ipsum ad. Laboris ut consequat ullamco esse dolor eiusmod aute minim elit. Incididunt ullamco dolore pariatur proident duis fugiat exercitation enim sunt commodo nostrud occaecat ex cillum.\r\n", - "registered": "2014-11-07T06:40:21 +05:00", - "latitude": -4.777545, - "longitude": 157.194259, - "tags": ["non", "reprehenderit", "aliqua", "incididunt", "dolor", "laborum", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Rachel Donovan" - }, - { - "id": 1, - "name": "Fanny Cooley" - }, - { - "id": 2, - "name": "Charlotte Matthews" - } - ], - "greeting": "Hello, Parker Perez! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9a05b02e05af9945", - "index": 269, - "guid": "f11f1cf4-03c0-4968-be17-ff9117281884", - "isActive": false, - "balance": "$2,155.59", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Adela Rodriquez", - "gender": "female", - "company": "ACCIDENCY", - "email": "adelarodriquez@accidency.com", - "phone": "+1 (806) 444-3332", - "address": "226 Gaylord Drive, Elbert, New York, 3121", - "about": "Nulla nulla duis minim anim laborum. Consequat mollit ad velit aliqua minim fugiat mollit Lorem sint cupidatat consectetur nisi. Eiusmod magna aute duis dolore tempor aute esse qui nulla veniam id est.\r\n", - "registered": "2015-05-07T04:03:35 +04:00", - "latitude": 6.679662, - "longitude": -86.311171, - "tags": ["in", "eiusmod", "Lorem", "incididunt", "ipsum", "reprehenderit", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Chasity Franks" - }, - { - "id": 1, - "name": "Berry Guerrero" - }, - { - "id": 2, - "name": "Albert Marks" - } - ], - "greeting": "Hello, Adela Rodriquez! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25decf32811573251f1", - "index": 270, - "guid": "ff21bb89-da5b-4664-be18-2da45c2fdb21", - "isActive": true, - "balance": "$2,295.16", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Noemi Merrill", - "gender": "female", - "company": "CHORIZON", - "email": "noemimerrill@chorizon.com", - "phone": "+1 (829) 571-3508", - "address": "956 Cleveland Street, Floris, Hawaii, 2609", - "about": "Amet veniam officia nostrud minim adipisicing nostrud nulla voluptate dolore. Voluptate mollit qui consequat esse culpa esse minim dolor commodo. Id proident dolore reprehenderit incididunt incididunt nisi nostrud excepteur. Sunt excepteur cillum enim est occaecat qui fugiat id esse do elit. Reprehenderit sit elit ut sit quis incididunt. Cillum non Lorem fugiat amet tempor dolore ullamco nostrud consequat minim ad. Incididunt anim eiusmod aute dolore aute nostrud eu mollit exercitation pariatur consequat.\r\n", - "registered": "2020-09-04T09:53:43 +04:00", - "latitude": -79.847951, - "longitude": -13.114521, - "tags": ["eu", "non", "eu", "occaecat", "esse", "esse", "quis"], - "friends": [ - { - "id": 0, - "name": "Conway Guy" - }, - { - "id": 1, - "name": "Mallory Salazar" - }, - { - "id": 2, - "name": "May Rutledge" - } - ], - "greeting": "Hello, Noemi Merrill! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3a4b60a41e11e56b", - "index": 271, - "guid": "9d9cef63-8167-4ae6-b7c6-25ef688dd348", - "isActive": false, - "balance": "$3,493.42", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Emilia Mosley", - "gender": "female", - "company": "SARASONIC", - "email": "emiliamosley@sarasonic.com", - "phone": "+1 (970) 571-3577", - "address": "484 Pulaski Street, Odessa, Nebraska, 7469", - "about": "Nulla excepteur cillum labore occaecat laboris cupidatat deserunt quis magna anim ea quis. Laborum Lorem incididunt qui nisi consectetur mollit officia do qui velit. Ex dolor officia deserunt ullamco eiusmod minim minim excepteur cillum elit. Ea amet sunt ut ipsum laboris tempor pariatur cillum amet. Anim ipsum aliqua eiusmod dolore in adipisicing laborum fugiat. Nostrud culpa eu consequat laborum.\r\n", - "registered": "2020-04-02T10:14:53 +04:00", - "latitude": 70.106498, - "longitude": 104.423666, - "tags": ["in", "do", "pariatur", "aute", "aliqua", "duis", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Clarissa Bates" - }, - { - "id": 1, - "name": "Stevens Barry" - }, - { - "id": 2, - "name": "King Gilmore" - } - ], - "greeting": "Hello, Emilia Mosley! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dddb852e2c6f75745", - "index": 272, - "guid": "ff1afdde-a823-4527-ae34-d8601f799624", - "isActive": false, - "balance": "$1,621.01", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Sondra Fischer", - "gender": "female", - "company": "HOTCAKES", - "email": "sondrafischer@hotcakes.com", - "phone": "+1 (826) 421-3589", - "address": "629 Channel Avenue, Steinhatchee, Wisconsin, 5042", - "about": "Qui non proident ut non amet esse aute commodo. Cupidatat aute occaecat non ullamco cillum ex esse culpa ut. Eiusmod est id labore anim. Anim deserunt exercitation dolor exercitation. Velit sit ipsum qui Lorem excepteur officia consectetur quis officia consequat elit laboris. Aute occaecat labore tempor aliquip exercitation consequat officia in commodo. Sint exercitation fugiat excepteur nulla proident anim irure minim proident.\r\n", - "registered": "2017-08-24T05:51:46 +04:00", - "latitude": -26.588693, - "longitude": -158.148286, - "tags": ["anim", "consectetur", "veniam", "duis", "eiusmod", "ipsum", "laboris"], - "friends": [ - { - "id": 0, - "name": "Turner Mclean" - }, - { - "id": 1, - "name": "Cathryn Aguirre" - }, - { - "id": 2, - "name": "Britt Blevins" - } - ], - "greeting": "Hello, Sondra Fischer! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddf39eb5acde831bd", - "index": 273, - "guid": "54b86b44-8dc9-4905-b87f-1bb79b8e820f", - "isActive": true, - "balance": "$3,831.84", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Avis Hoover", - "gender": "female", - "company": "FILODYNE", - "email": "avishoover@filodyne.com", - "phone": "+1 (963) 417-3634", - "address": "223 Debevoise Avenue, Sussex, Arizona, 3208", - "about": "Mollit nulla veniam minim officia enim culpa aliquip consequat nisi cillum. Officia sint non veniam velit excepteur sunt sint tempor tempor proident nulla non. Id ad ex eiusmod aliquip elit qui veniam ullamco sint reprehenderit deserunt ipsum nisi. Ut velit eu minim pariatur anim aute fugiat esse sit sunt exercitation. Sit mollit deserunt exercitation esse laboris ex et laboris veniam sit deserunt sunt fugiat ad. Sunt eu eu exercitation eiusmod ut in do dolor nulla proident.\r\n", - "registered": "2020-05-24T12:09:39 +04:00", - "latitude": 73.90848, - "longitude": -176.561104, - "tags": ["ex", "dolore", "qui", "do", "ex", "officia", "cillum"], - "friends": [ - { - "id": 0, - "name": "Serrano Blake" - }, - { - "id": 1, - "name": "Sharlene Watson" - }, - { - "id": 2, - "name": "Macdonald Berry" - } - ], - "greeting": "Hello, Avis Hoover! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db90c7e6e8618957d", - "index": 274, - "guid": "2d4cc4e8-247e-4339-a24f-4bad4dadc957", - "isActive": false, - "balance": "$1,733.75", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Gabrielle William", - "gender": "female", - "company": "GALLAXIA", - "email": "gabriellewilliam@gallaxia.com", - "phone": "+1 (989) 466-3940", - "address": "630 Rock Street, Woodlands, Ohio, 6484", - "about": "Ex ipsum non eiusmod non ullamco irure ad Lorem sint eiusmod commodo deserunt aliqua amet. Enim laborum consectetur amet duis officia tempor do culpa dolore aliquip excepteur eu. Ullamco anim velit pariatur in dolore duis.\r\n", - "registered": "2019-03-14T07:57:12 +04:00", - "latitude": -69.533768, - "longitude": -1.236793, - "tags": ["eiusmod", "commodo", "deserunt", "eu", "occaecat", "do", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Powell Berg" - }, - { - "id": 1, - "name": "Armstrong Collier" - }, - { - "id": 2, - "name": "Amparo Todd" - } - ], - "greeting": "Hello, Gabrielle William! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d30abd7b515da0237", - "index": 275, - "guid": "492ba60c-9362-4630-9a78-90cae9b5c263", - "isActive": false, - "balance": "$2,028.26", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Bradley Pollard", - "gender": "male", - "company": "VOIPA", - "email": "bradleypollard@voipa.com", - "phone": "+1 (970) 554-3650", - "address": "367 Gotham Avenue, Troy, Arkansas, 4013", - "about": "Sunt non magna commodo est magna irure id. Aute Lorem sit pariatur et incididunt. Esse fugiat exercitation do officia do consequat Lorem fugiat quis. Mollit dolore cupidatat esse fugiat exercitation pariatur do amet incididunt officia pariatur ullamco.\r\n", - "registered": "2016-04-10T10:51:08 +04:00", - "latitude": 43.949776, - "longitude": -83.763943, - "tags": ["aute", "fugiat", "ipsum", "officia", "et", "quis", "nulla"], - "friends": [ - { - "id": 0, - "name": "Jessie Francis" - }, - { - "id": 1, - "name": "Kristina Camacho" - }, - { - "id": 2, - "name": "Wood Lynch" - } - ], - "greeting": "Hello, Bradley Pollard! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc77c1fb7346a07a8", - "index": 276, - "guid": "e707f612-0bf6-446e-9b6b-f6fa17a1820f", - "isActive": false, - "balance": "$2,534.17", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Marcy Howell", - "gender": "female", - "company": "BOINK", - "email": "marcyhowell@boink.com", - "phone": "+1 (855) 526-3219", - "address": "571 Strauss Street, Nile, Nevada, 7355", - "about": "Sint mollit nostrud consectetur ipsum excepteur deserunt esse laboris est et proident officia. Esse consectetur fugiat reprehenderit fugiat officia ex ea proident pariatur ullamco cillum anim. Aute aute duis quis ex amet nulla mollit dolor labore nulla sunt consequat excepteur ad. Deserunt et Lorem laborum enim do. Et dolor Lorem dolore ut est ipsum aute est ullamco nulla.\r\n", - "registered": "2015-09-22T01:49:15 +04:00", - "latitude": 52.704896, - "longitude": -130.69183, - "tags": ["officia", "ipsum", "fugiat", "amet", "amet", "qui", "sunt"], - "friends": [ - { - "id": 0, - "name": "Hale Ware" - }, - { - "id": 1, - "name": "Estrada Bentley" - }, - { - "id": 2, - "name": "Araceli Robertson" - } - ], - "greeting": "Hello, Marcy Howell! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9e5a6d50556a22f1", - "index": 277, - "guid": "45980e17-62c8-42ad-9409-93aac293cae6", - "isActive": false, - "balance": "$2,602.60", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Sheppard George", - "gender": "male", - "company": "DREAMIA", - "email": "sheppardgeorge@dreamia.com", - "phone": "+1 (976) 483-3678", - "address": "342 Rost Place, Esmont, Massachusetts, 8367", - "about": "Non aliqua laboris id adipisicing minim enim mollit enim amet est velit cillum dolor excepteur. Est laboris pariatur labore tempor culpa proident proident laboris ea consectetur. Fugiat officia aliqua mollit ad deserunt nulla proident aliqua proident magna nostrud. Pariatur ad proident ut est fugiat esse est non aute eiusmod officia anim. Ea aute aliquip eiusmod minim deserunt.\r\n", - "registered": "2019-06-10T03:15:34 +04:00", - "latitude": -35.718813, - "longitude": 114.675994, - "tags": ["labore", "cupidatat", "ad", "consectetur", "adipisicing", "dolore", "labore"], - "friends": [ - { - "id": 0, - "name": "Claudette Chambers" - }, - { - "id": 1, - "name": "Shannon Skinner" - }, - { - "id": 2, - "name": "Aguirre Hudson" - } - ], - "greeting": "Hello, Sheppard George! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9880e4946115d576", - "index": 278, - "guid": "9addea93-5eca-4a07-a07a-fd2283642898", - "isActive": false, - "balance": "$1,280.51", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Bette Barrett", - "gender": "female", - "company": "ZENCO", - "email": "bettebarrett@zenco.com", - "phone": "+1 (925) 508-2806", - "address": "371 Heath Place, Lindisfarne, Marshall Islands, 7782", - "about": "Reprehenderit laborum mollit id cupidatat est ad duis. In mollit ut sint velit irure sunt elit. Deserunt fugiat dolor aliquip mollit consectetur non nostrud adipisicing ipsum consequat exercitation velit. Aliquip est nostrud deserunt anim do ipsum amet. Magna nisi incididunt magna dolor sunt. Aliquip velit est anim proident amet cillum in velit consectetur incididunt voluptate aliqua veniam. Ea nisi minim Lorem nulla exercitation.\r\n", - "registered": "2014-09-05T02:30:40 +04:00", - "latitude": -57.977746, - "longitude": -44.29257, - "tags": ["dolor", "cillum", "ullamco", "id", "deserunt", "ullamco", "et"], - "friends": [ - { - "id": 0, - "name": "Knox Pace" - }, - { - "id": 1, - "name": "Ferrell Jacobs" - }, - { - "id": 2, - "name": "Phillips Jackson" - } - ], - "greeting": "Hello, Bette Barrett! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d14c803561908ddab", - "index": 279, - "guid": "e77a433b-458f-4670-b111-ddf12a98d8f1", - "isActive": true, - "balance": "$2,805.94", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Jeannie Henry", - "gender": "female", - "company": "ZEROLOGY", - "email": "jeanniehenry@zerology.com", - "phone": "+1 (818) 418-3819", - "address": "423 Fiske Place, Whitewater, Puerto Rico, 5189", - "about": "Deserunt velit velit et quis proident eu occaecat nostrud commodo deserunt. Magna consectetur veniam dolor ut consequat cupidatat id pariatur culpa. Veniam ipsum quis id nulla sunt est non adipisicing voluptate culpa eu nostrud laboris. Qui magna dolore ullamco fugiat dolor occaecat do ut enim aliquip consequat.\r\n", - "registered": "2018-07-30T07:11:59 +04:00", - "latitude": 62.574936, - "longitude": -166.457786, - "tags": ["quis", "cillum", "nisi", "voluptate", "nostrud", "irure", "laboris"], - "friends": [ - { - "id": 0, - "name": "Terra Wright" - }, - { - "id": 1, - "name": "Yolanda Stout" - }, - { - "id": 2, - "name": "Morrow Acosta" - } - ], - "greeting": "Hello, Jeannie Henry! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dd766132f07c006a0", - "index": 280, - "guid": "937e4188-526a-4710-83b5-1ff8deef08bc", - "isActive": false, - "balance": "$2,941.09", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Rivera Wood", - "gender": "male", - "company": "ROTODYNE", - "email": "riverawood@rotodyne.com", - "phone": "+1 (874) 449-3776", - "address": "651 Bath Avenue, Vandiver, California, 6090", - "about": "Mollit duis aliqua quis consequat occaecat quis. Anim officia do do esse ea elit commodo irure dolore. Magna aliqua excepteur pariatur pariatur anim velit.\r\n", - "registered": "2014-09-06T07:03:29 +04:00", - "latitude": -40.018803, - "longitude": 26.764704, - "tags": ["reprehenderit", "consequat", "minim", "sint", "ad", "minim", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Cheri Collins" - }, - { - "id": 1, - "name": "Adams Melendez" - }, - { - "id": 2, - "name": "Reed Fernandez" - } - ], - "greeting": "Hello, Rivera Wood! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2a50150e9d5bc8a5", - "index": 281, - "guid": "2dbf9768-607f-4b4b-a800-06aec0ea3408", - "isActive": true, - "balance": "$3,289.18", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Boyd Cummings", - "gender": "male", - "company": "BLEEKO", - "email": "boydcummings@bleeko.com", - "phone": "+1 (943) 560-3382", - "address": "608 Crooke Avenue, Graniteville, Tennessee, 1110", - "about": "Fugiat occaecat reprehenderit aute ad nisi magna. Duis ullamco incididunt cillum minim laborum irure minim cillum incididunt occaecat. Enim do id reprehenderit excepteur quis pariatur ea elit qui laboris proident excepteur commodo. Quis nisi velit aliquip ex fugiat officia est proident sint eu do tempor amet. Aliqua esse sint incididunt aute dolore minim ea sit reprehenderit qui ex nisi aute.\r\n", - "registered": "2019-02-16T12:20:48 +05:00", - "latitude": -3.271273, - "longitude": -27.223829, - "tags": ["adipisicing", "do", "officia", "do", "exercitation", "est", "laboris"], - "friends": [ - { - "id": 0, - "name": "Hurley Saunders" - }, - { - "id": 1, - "name": "Kennedy Vang" - }, - { - "id": 2, - "name": "Hayden Compton" - } - ], - "greeting": "Hello, Boyd Cummings! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d38155c5ff81803b9", - "index": 282, - "guid": "b2d3bc96-6115-41be-bdbb-a83741dc2da2", - "isActive": true, - "balance": "$1,757.46", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Livingston Webb", - "gender": "male", - "company": "DRAGBOT", - "email": "livingstonwebb@dragbot.com", - "phone": "+1 (824) 417-3805", - "address": "582 Matthews Place, Franklin, Wyoming, 8280", - "about": "Tempor qui ea voluptate cupidatat elit voluptate occaecat Lorem enim aute sunt. Ea esse elit occaecat mollit non culpa non eu pariatur eu officia duis. Esse do nisi ex dolore dolor sunt consectetur reprehenderit magna mollit ullamco.\r\n", - "registered": "2017-08-31T02:55:32 +04:00", - "latitude": 28.54902, - "longitude": 150.704305, - "tags": ["do", "reprehenderit", "culpa", "esse", "est", "ex", "in"], - "friends": [ - { - "id": 0, - "name": "Beatriz Dejesus" - }, - { - "id": 1, - "name": "Latoya Vaughan" - }, - { - "id": 2, - "name": "Alyssa Woodward" - } - ], - "greeting": "Hello, Livingston Webb! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2e6f522a299574d9", - "index": 283, - "guid": "144e3e15-2813-4e9e-85ed-6124fcb6bd56", - "isActive": false, - "balance": "$3,594.23", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Beth Lloyd", - "gender": "female", - "company": "JUNIPOOR", - "email": "bethlloyd@junipoor.com", - "phone": "+1 (813) 448-2212", - "address": "258 Clara Street, Aberdeen, North Carolina, 8269", - "about": "Ullamco fugiat non laboris ea. Est reprehenderit irure id ipsum incididunt. Eiusmod commodo sit labore adipisicing ad veniam cillum deserunt mollit in id qui aliquip.\r\n", - "registered": "2017-02-22T10:10:17 +05:00", - "latitude": 28.484668, - "longitude": 0.455903, - "tags": ["nostrud", "esse", "elit", "laboris", "amet", "ut", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Bass Simon" - }, - { - "id": 1, - "name": "Sue Burks" - }, - { - "id": 2, - "name": "Debra Garza" - } - ], - "greeting": "Hello, Beth Lloyd! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1f5a62ab48d105da", - "index": 284, - "guid": "325e8041-3d91-4aec-a42d-476a2aed7736", - "isActive": true, - "balance": "$1,470.10", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Maude Zimmerman", - "gender": "female", - "company": "ZENSURE", - "email": "maudezimmerman@zensure.com", - "phone": "+1 (801) 407-3004", - "address": "789 Dunne Court, Harborton, Michigan, 7534", - "about": "Ad pariatur consectetur Lorem est aliqua. Et commodo ullamco fugiat consectetur sunt irure. Non ex laborum Lorem enim consequat ex culpa voluptate voluptate minim. Labore consectetur sit cupidatat est eu fugiat. Id minim veniam esse laboris sint deserunt ad non duis. Et incididunt irure nisi non aute ex.\r\n", - "registered": "2020-07-29T11:29:33 +04:00", - "latitude": -58.6205, - "longitude": 64.848968, - "tags": ["amet", "dolor", "eiusmod", "ipsum", "tempor", "do", "non"], - "friends": [ - { - "id": 0, - "name": "Callahan Patrick" - }, - { - "id": 1, - "name": "Mcclain Gilbert" - }, - { - "id": 2, - "name": "Holly Hamilton" - } - ], - "greeting": "Hello, Maude Zimmerman! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d712295bd7b07b90a", - "index": 285, - "guid": "31408bcf-ac3a-42c7-be00-93df2bb3f303", - "isActive": true, - "balance": "$2,203.08", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Pauline Hawkins", - "gender": "female", - "company": "ACIUM", - "email": "paulinehawkins@acium.com", - "phone": "+1 (806) 444-2161", - "address": "724 Amersfort Place, Disautel, Oklahoma, 8118", - "about": "Ullamco elit in officia et mollit id sunt veniam tempor aliquip adipisicing. Pariatur ad dolor ad ea consequat nulla sint do cupidatat elit sint. Aliquip quis esse reprehenderit enim sint ut ipsum magna. Aute do do aute esse proident aliqua deserunt ullamco minim ut ad adipisicing tempor. Non dolore officia dolore dolor aliqua est ut cillum amet id pariatur anim esse.\r\n", - "registered": "2017-09-25T06:20:02 +04:00", - "latitude": 79.905199, - "longitude": -19.850233, - "tags": ["pariatur", "sunt", "mollit", "enim", "amet", "aute", "laborum"], - "friends": [ - { - "id": 0, - "name": "Mccarty Erickson" - }, - { - "id": 1, - "name": "Douglas Clements" - }, - { - "id": 2, - "name": "Potter Rogers" - } - ], - "greeting": "Hello, Pauline Hawkins! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d82763aeec7221f3f", - "index": 286, - "guid": "217af6e0-87ab-4d62-bc03-f0c1396d44eb", - "isActive": true, - "balance": "$2,765.86", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Fleming Shields", - "gender": "male", - "company": "GOGOL", - "email": "flemingshields@gogol.com", - "phone": "+1 (994) 413-3888", - "address": "972 Oliver Street, Hegins, Vermont, 1704", - "about": "Eu esse deserunt ea dolore cillum fugiat occaecat labore amet labore. Veniam elit quis reprehenderit mollit non exercitation. Ad adipisicing do qui quis commodo tempor elit. Aliqua velit amet voluptate veniam dolor nulla officia sunt aute sint nisi elit adipisicing.\r\n", - "registered": "2018-09-12T09:56:00 +04:00", - "latitude": -34.793746, - "longitude": 168.667176, - "tags": ["velit", "consequat", "nulla", "ad", "ullamco", "cillum", "aute"], - "friends": [ - { - "id": 0, - "name": "Alma Serrano" - }, - { - "id": 1, - "name": "Erickson Burch" - }, - { - "id": 2, - "name": "Mcfarland Gates" - } - ], - "greeting": "Hello, Fleming Shields! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d07ab83ade715f54c", - "index": 287, - "guid": "00d31099-3ea5-43d1-a6eb-5c69d2927b92", - "isActive": true, - "balance": "$2,753.53", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Vicki Burt", - "gender": "female", - "company": "ELEMANTRA", - "email": "vickiburt@elemantra.com", - "phone": "+1 (802) 443-3631", - "address": "659 Will Place, Bodega, Utah, 9238", - "about": "Labore et mollit proident minim velit ut proident. Consectetur mollit quis consequat et nisi ex sit nisi do nisi. Anim exercitation consequat adipisicing eiusmod anim velit magna tempor deserunt. Ipsum irure Lorem reprehenderit ipsum est est nulla adipisicing Lorem. Consectetur duis quis consectetur in. Ex enim esse sit et. Sint excepteur ullamco tempor nostrud ut enim id consectetur eu.\r\n", - "registered": "2018-01-07T04:53:19 +05:00", - "latitude": -35.918283, - "longitude": -78.22512, - "tags": ["enim", "labore", "consectetur", "fugiat", "veniam", "magna", "amet"], - "friends": [ - { - "id": 0, - "name": "Barton Walls" - }, - { - "id": 1, - "name": "Walton Calhoun" - }, - { - "id": 2, - "name": "Shawn Gentry" - } - ], - "greeting": "Hello, Vicki Burt! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d25c11c587bee6a4b", - "index": 288, - "guid": "eea6c6cc-8d42-4994-a36d-fef7dde00960", - "isActive": false, - "balance": "$3,086.72", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Arlene Yang", - "gender": "female", - "company": "PRISMATIC", - "email": "arleneyang@prismatic.com", - "phone": "+1 (855) 420-2840", - "address": "304 Lynch Street, Homeland, Kansas, 5117", - "about": "Velit anim deserunt anim adipisicing velit exercitation. Nulla reprehenderit qui laborum eu elit et cillum elit eu excepteur ut deserunt esse sint. Proident aliquip dolore occaecat mollit eu irure nostrud.\r\n", - "registered": "2015-08-31T06:54:50 +04:00", - "latitude": -52.912008, - "longitude": -117.126998, - "tags": ["sint", "qui", "est", "ullamco", "non", "ea", "quis"], - "friends": [ - { - "id": 0, - "name": "Barbra Summers" - }, - { - "id": 1, - "name": "Navarro Farrell" - }, - { - "id": 2, - "name": "Beryl Warren" - } - ], - "greeting": "Hello, Arlene Yang! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4b65ee80668536c2", - "index": 289, - "guid": "dc2deb7b-8657-4aab-a869-917ce52ea7b0", - "isActive": true, - "balance": "$3,156.44", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Hodge Park", - "gender": "male", - "company": "GEEKOL", - "email": "hodgepark@geekol.com", - "phone": "+1 (871) 450-2521", - "address": "129 Noel Avenue, Tampico, Delaware, 1376", - "about": "Esse dolor et ad id anim nulla duis mollit. In dolore cillum dolore exercitation aliqua. Nulla reprehenderit in aliquip laborum ullamco ad. Cillum occaecat exercitation duis nostrud elit pariatur laborum quis cillum dolor culpa culpa.\r\n", - "registered": "2015-05-15T01:05:54 +04:00", - "latitude": 37.02334, - "longitude": -79.182468, - "tags": ["excepteur", "velit", "adipisicing", "nulla", "cillum", "esse", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Watkins Mills" - }, - { - "id": 1, - "name": "Calhoun Buchanan" - }, - { - "id": 2, - "name": "Cooley Floyd" - } - ], - "greeting": "Hello, Hodge Park! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0db4bb0d5824640c", - "index": 290, - "guid": "b026d666-8917-49a1-a9b4-7c59978919c4", - "isActive": true, - "balance": "$1,033.57", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Lawson Barlow", - "gender": "male", - "company": "NAMEBOX", - "email": "lawsonbarlow@namebox.com", - "phone": "+1 (922) 420-3574", - "address": "982 Jefferson Street, Northchase, Guam, 2829", - "about": "Tempor voluptate qui ipsum adipisicing eiusmod ea officia commodo anim ut et. Occaecat sint esse do ea minim ad. Non elit reprehenderit ipsum ullamco amet quis id proident duis magna velit eu in. Adipisicing excepteur exercitation duis reprehenderit mollit aliqua non et cupidatat officia consequat voluptate est mollit.\r\n", - "registered": "2018-11-13T06:33:14 +05:00", - "latitude": 1.041331, - "longitude": 93.165435, - "tags": ["magna", "voluptate", "Lorem", "dolor", "cupidatat", "duis", "enim"], - "friends": [ - { - "id": 0, - "name": "Rosalie Mccall" - }, - { - "id": 1, - "name": "Eloise Ramos" - }, - { - "id": 2, - "name": "Garcia Horn" - } - ], - "greeting": "Hello, Lawson Barlow! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d91cc5fa7ad70c1af", - "index": 291, - "guid": "ad482cbd-006a-4355-bc86-c209595f8df6", - "isActive": false, - "balance": "$1,607.70", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Reyna Blackwell", - "gender": "female", - "company": "PARLEYNET", - "email": "reynablackwell@parleynet.com", - "phone": "+1 (824) 497-2507", - "address": "915 Oceanview Avenue, Edneyville, Oregon, 1491", - "about": "Ut aute magna irure incididunt anim. Officia ut ad reprehenderit quis labore aliqua deserunt incididunt duis reprehenderit enim. Anim aute commodo enim consequat mollit ad aute enim eu voluptate occaecat officia nulla esse. Aute duis incididunt aute cupidatat ex duis ullamco aliquip consectetur veniam. Qui occaecat do ullamco laborum nisi eiusmod ad quis et reprehenderit. Proident sunt aliquip sint exercitation ut ex. Ea velit cupidatat eiusmod officia magna proident elit culpa qui consequat fugiat tempor.\r\n", - "registered": "2017-07-18T04:51:24 +04:00", - "latitude": 51.182227, - "longitude": 18.887247, - "tags": ["fugiat", "mollit", "cupidatat", "pariatur", "fugiat", "nulla", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Ila Nielsen" - }, - { - "id": 1, - "name": "Lesley Lucas" - }, - { - "id": 2, - "name": "Bonnie Alvarez" - } - ], - "greeting": "Hello, Reyna Blackwell! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3e39483fb36dceb1", - "index": 292, - "guid": "e83eb637-99a4-4f76-b27a-df6ea9151c2f", - "isActive": true, - "balance": "$3,878.60", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Dianna Hyde", - "gender": "female", - "company": "PERMADYNE", - "email": "diannahyde@permadyne.com", - "phone": "+1 (837) 532-3299", - "address": "360 Dewey Place, Greenfields, Missouri, 3856", - "about": "Cillum Lorem et nulla dolore quis incididunt exercitation. Cupidatat aliqua ea dolor voluptate dolore velit esse nostrud aliquip laboris proident labore. Officia dolore magna voluptate in et dolor esse. Sunt Lorem ea culpa nostrud sit ex fugiat ut culpa. Commodo reprehenderit sit excepteur nostrud adipisicing aliqua sint cupidatat officia reprehenderit nulla. Labore pariatur sint nostrud minim minim nisi Lorem officia mollit. Officia dolor mollit exercitation qui sint consectetur cillum eiusmod dolor ea.\r\n", - "registered": "2016-03-07T08:15:46 +05:00", - "latitude": -43.068738, - "longitude": -162.86347, - "tags": ["incididunt", "ad", "non", "ullamco", "qui", "cillum", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Corine Flores" - }, - { - "id": 1, - "name": "Nunez Mcmahon" - }, - { - "id": 2, - "name": "Ware Fulton" - } - ], - "greeting": "Hello, Dianna Hyde! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0c0850576f876304", - "index": 293, - "guid": "b739a510-fc82-46be-929d-4bf7e41a1bed", - "isActive": true, - "balance": "$1,667.54", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Jordan Vance", - "gender": "female", - "company": "REMOTION", - "email": "jordanvance@remotion.com", - "phone": "+1 (934) 496-3341", - "address": "198 Amboy Street, Gwynn, Montana, 6850", - "about": "Ipsum ullamco adipisicing reprehenderit ullamco do id. Ipsum cupidatat reprehenderit sit consequat aliqua id aute aliquip laboris incididunt. Ut labore aliquip qui eiusmod anim qui dolor reprehenderit commodo exercitation amet. Incididunt et tempor laborum deserunt id consectetur et esse excepteur ut veniam proident laboris. Dolor id nisi sunt incididunt ex do veniam id sunt ex nostrud. Lorem amet nisi qui non tempor sit ipsum.\r\n", - "registered": "2016-03-21T11:37:40 +04:00", - "latitude": 82.117464, - "longitude": 2.679725, - "tags": ["excepteur", "fugiat", "commodo", "fugiat", "sint", "minim", "culpa"], - "friends": [ - { - "id": 0, - "name": "Pennington Wilkinson" - }, - { - "id": 1, - "name": "Brianna Beck" - }, - { - "id": 2, - "name": "Audrey Ball" - } - ], - "greeting": "Hello, Jordan Vance! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d087006ed62c3d05e", - "index": 294, - "guid": "da682739-8c54-48a4-b515-a94d507aadc1", - "isActive": false, - "balance": "$2,138.26", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Velez Callahan", - "gender": "male", - "company": "NAMEGEN", - "email": "velezcallahan@namegen.com", - "phone": "+1 (826) 426-2157", - "address": "124 Cherry Street, Valmy, Alaska, 5452", - "about": "Officia pariatur pariatur do proident dolor quis voluptate nisi enim nulla dolore exercitation consectetur. Culpa dolor nostrud aliqua occaecat aute nisi fugiat sunt qui nisi minim est aute labore. Aliqua sint ad esse sunt in laboris consectetur esse ut consequat officia occaecat in. Reprehenderit aliquip aliqua enim minim. Voluptate incididunt proident aliqua nulla ipsum reprehenderit ullamco tempor proident consequat. Pariatur proident aliquip qui nisi voluptate veniam. Ipsum et laboris adipisicing adipisicing magna nostrud incididunt eiusmod culpa ad amet.\r\n", - "registered": "2015-06-17T12:44:33 +04:00", - "latitude": 50.351455, - "longitude": 122.856724, - "tags": ["dolore", "aliquip", "occaecat", "occaecat", "exercitation", "tempor", "tempor"], - "friends": [ - { - "id": 0, - "name": "Lauren Finch" - }, - { - "id": 1, - "name": "Patrice Lowery" - }, - { - "id": 2, - "name": "Mcgee Vinson" - } - ], - "greeting": "Hello, Velez Callahan! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d627b480113343236", - "index": 295, - "guid": "4ccf6118-1d3d-4cd3-9c82-ef33519a2931", - "isActive": false, - "balance": "$2,745.27", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Donovan Becker", - "gender": "male", - "company": "DIGIFAD", - "email": "donovanbecker@digifad.com", - "phone": "+1 (952) 492-3975", - "address": "703 Belvidere Street, Charco, Kentucky, 3719", - "about": "Irure nostrud sint quis ad aute et minim duis deserunt consectetur elit. Veniam officia fugiat ut dolore et. Nisi magna fugiat fugiat magna minim anim.\r\n", - "registered": "2020-04-13T04:04:11 +04:00", - "latitude": 87.839623, - "longitude": 79.493882, - "tags": ["ipsum", "occaecat", "dolore", "tempor", "officia", "culpa", "velit"], - "friends": [ - { - "id": 0, - "name": "Bradshaw Nelson" - }, - { - "id": 1, - "name": "Daugherty Mcpherson" - }, - { - "id": 2, - "name": "Hope Jenkins" - } - ], - "greeting": "Hello, Donovan Becker! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d23289fe1faa42604", - "index": 296, - "guid": "3e6c0b74-71e8-4c13-b0f6-263a511578a6", - "isActive": true, - "balance": "$3,383.55", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Baldwin Robbins", - "gender": "male", - "company": "IMAGEFLOW", - "email": "baldwinrobbins@imageflow.com", - "phone": "+1 (878) 448-2714", - "address": "483 Jay Street, Galesville, Mississippi, 6738", - "about": "Cillum nisi dolor reprehenderit sint est magna laborum excepteur dolor. Esse consectetur ullamco ullamco in ea commodo ipsum commodo veniam proident laboris commodo nulla ad. Non anim duis incididunt eiusmod do ea. Qui sunt esse labore ut consequat aute culpa id ullamco Lorem et. Enim sit minim qui fugiat in non occaecat id irure fugiat amet. Consequat do eu occaecat duis occaecat velit culpa esse nisi ad ullamco tempor esse. Sint ut quis aliqua eu.\r\n", - "registered": "2014-11-01T08:51:37 +04:00", - "latitude": -71.591262, - "longitude": -7.439311, - "tags": ["non", "anim", "amet", "quis", "incididunt", "nisi", "irure"], - "friends": [ - { - "id": 0, - "name": "Joyce Norton" - }, - { - "id": 1, - "name": "Myra Bond" - }, - { - "id": 2, - "name": "Witt Roman" - } - ], - "greeting": "Hello, Baldwin Robbins! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d32819fcbcc7658b6", - "index": 297, - "guid": "1622cd42-8006-482e-8afe-adc6bbc05083", - "isActive": false, - "balance": "$3,510.14", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Frank Carlson", - "gender": "male", - "company": "UNIWORLD", - "email": "frankcarlson@uniworld.com", - "phone": "+1 (964) 476-2456", - "address": "557 Grant Avenue, Belgreen, North Dakota, 4763", - "about": "Tempor qui commodo ut excepteur mollit cupidatat exercitation adipisicing. Culpa non non minim officia. Veniam do fugiat culpa adipisicing velit anim consectetur elit non ad velit adipisicing consequat consectetur. Duis ipsum laborum officia culpa deserunt eu culpa elit pariatur voluptate voluptate proident enim.\r\n", - "registered": "2014-05-10T05:02:15 +04:00", - "latitude": -9.29868, - "longitude": 76.798458, - "tags": ["deserunt", "est", "dolor", "sit", "culpa", "proident", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Horton Sweeney" - }, - { - "id": 1, - "name": "Alisha Roberson" - }, - { - "id": 2, - "name": "Tisha Trevino" - } - ], - "greeting": "Hello, Frank Carlson! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d13f0c0de151b8084", - "index": 298, - "guid": "5b18c045-0afb-497f-9ad3-70a707e43c0c", - "isActive": true, - "balance": "$1,325.96", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Sonia Macias", - "gender": "female", - "company": "SLOGANAUT", - "email": "soniamacias@sloganaut.com", - "phone": "+1 (999) 507-2773", - "address": "864 Malbone Street, Muir, Federated States Of Micronesia, 149", - "about": "Mollit ullamco cupidatat eiusmod tempor nostrud ut aliqua. Reprehenderit magna dolore excepteur sint consequat Lorem commodo velit reprehenderit veniam velit minim. Et enim mollit consectetur in et occaecat veniam sint consequat eu id irure ipsum anim.\r\n", - "registered": "2019-03-25T06:45:15 +04:00", - "latitude": 21.267798, - "longitude": -133.984389, - "tags": ["nostrud", "consectetur", "sint", "laborum", "tempor", "proident", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Paulette Finley" - }, - { - "id": 1, - "name": "Tami Wynn" - }, - { - "id": 2, - "name": "Hartman Bray" - } - ], - "greeting": "Hello, Sonia Macias! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc3fece21c1676a01", - "index": 299, - "guid": "0189f051-88aa-46cb-9061-9bb9838d5a17", - "isActive": true, - "balance": "$3,949.23", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Chase Ross", - "gender": "male", - "company": "FRENEX", - "email": "chaseross@frenex.com", - "phone": "+1 (905) 435-2153", - "address": "564 Taylor Street, Lisco, Maryland, 4244", - "about": "Velit cupidatat minim duis consectetur commodo do in occaecat cupidatat veniam dolor consequat sit non. Velit proident deserunt ad deserunt adipisicing in esse. Anim fugiat magna occaecat in in. Labore eiusmod cillum sit aute duis nisi adipisicing amet. Sunt reprehenderit ea minim Lorem magna in ad amet. Lorem nulla culpa labore ipsum duis mollit. Consequat duis irure sint ipsum reprehenderit veniam irure exercitation.\r\n", - "registered": "2015-09-11T03:44:30 +04:00", - "latitude": 13.14464, - "longitude": -36.213097, - "tags": ["consequat", "exercitation", "tempor", "ipsum", "deserunt", "id", "cillum"], - "friends": [ - { - "id": 0, - "name": "Mari Schultz" - }, - { - "id": 1, - "name": "Madelyn Warner" - }, - { - "id": 2, - "name": "Peters Mullen" - } - ], - "greeting": "Hello, Chase Ross! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db3178933dcd75efc", - "index": 300, - "guid": "5f38ed95-b050-4982-ae79-02b64d410ad3", - "isActive": true, - "balance": "$1,493.03", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Bobbie Soto", - "gender": "female", - "company": "QUONATA", - "email": "bobbiesoto@quonata.com", - "phone": "+1 (817) 414-3994", - "address": "792 Gardner Avenue, Trona, Virgin Islands, 7544", - "about": "Aute ad quis enim irure enim aute exercitation adipisicing cillum fugiat tempor est ex. Est pariatur in incididunt amet dolore labore Lorem. Laboris magna duis anim laboris commodo et esse anim ad elit et.\r\n", - "registered": "2017-04-02T05:18:59 +04:00", - "latitude": 42.836437, - "longitude": 113.175834, - "tags": ["ipsum", "voluptate", "pariatur", "et", "elit", "minim", "ex"], - "friends": [ - { - "id": 0, - "name": "Ellen Forbes" - }, - { - "id": 1, - "name": "April Hubbard" - }, - { - "id": 2, - "name": "Long Owens" - } - ], - "greeting": "Hello, Bobbie Soto! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2377233dbcdcc31c", - "index": 301, - "guid": "16ddf115-ebee-4114-8e74-f220b97b9f03", - "isActive": true, - "balance": "$2,613.77", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Melisa Sosa", - "gender": "female", - "company": "FRANSCENE", - "email": "melisasosa@franscene.com", - "phone": "+1 (921) 473-3118", - "address": "530 Independence Avenue, Clarksburg, Pennsylvania, 8651", - "about": "Laborum nisi velit duis exercitation dolor proident enim esse officia veniam cillum excepteur id culpa. Amet non non ut aliqua eiusmod anim aute reprehenderit eiusmod ut do minim. Qui sunt eu sint laborum aute velit laboris consequat nulla veniam.\r\n", - "registered": "2017-09-06T06:29:19 +04:00", - "latitude": -73.132889, - "longitude": -26.846983, - "tags": ["culpa", "mollit", "ullamco", "dolore", "aute", "id", "sit"], - "friends": [ - { - "id": 0, - "name": "Ward Espinoza" - }, - { - "id": 1, - "name": "Eunice Dudley" - }, - { - "id": 2, - "name": "Farrell Robles" - } - ], - "greeting": "Hello, Melisa Sosa! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d679390603960e388", - "index": 302, - "guid": "328ca392-7d98-4985-98f3-6cf909738ff9", - "isActive": false, - "balance": "$3,421.60", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Angelita Mcmillan", - "gender": "female", - "company": "IMMUNICS", - "email": "angelitamcmillan@immunics.com", - "phone": "+1 (927) 426-2048", - "address": "808 Elizabeth Place, Woodlake, Washington, 9477", - "about": "Et laborum commodo anim magna fugiat anim sint cupidatat nostrud nulla id Lorem Lorem Lorem. Id tempor consequat reprehenderit dolore aliquip velit cillum quis amet commodo id officia. Enim ipsum magna quis labore sunt ut. Eu occaecat ad et irure cillum anim ad exercitation irure consectetur.\r\n", - "registered": "2017-12-01T06:58:34 +05:00", - "latitude": 26.489691, - "longitude": -140.868968, - "tags": ["do", "dolor", "qui", "mollit", "enim", "sit", "amet"], - "friends": [ - { - "id": 0, - "name": "Walls Dickerson" - }, - { - "id": 1, - "name": "Bartlett Gould" - }, - { - "id": 2, - "name": "Howell Moody" - } - ], - "greeting": "Hello, Angelita Mcmillan! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d042d3445d0849137", - "index": 303, - "guid": "8b8775b5-ef4f-41bd-94a6-7f1dc6e38f8d", - "isActive": false, - "balance": "$2,121.01", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Bianca Hayden", - "gender": "female", - "company": "REALYSIS", - "email": "biancahayden@realysis.com", - "phone": "+1 (809) 533-2197", - "address": "163 Waldane Court, Gulf, Illinois, 9607", - "about": "Aliqua mollit deserunt et mollit in mollit et non labore mollit. Esse voluptate culpa ea anim magna culpa nulla magna. Mollit Lorem ut occaecat consectetur.\r\n", - "registered": "2014-03-04T03:55:10 +05:00", - "latitude": 42.824484, - "longitude": -90.929053, - "tags": ["adipisicing", "magna", "sint", "dolor", "reprehenderit", "tempor", "cillum"], - "friends": [ - { - "id": 0, - "name": "Mathis Washington" - }, - { - "id": 1, - "name": "Morales Howard" - }, - { - "id": 2, - "name": "Elsa Williams" - } - ], - "greeting": "Hello, Bianca Hayden! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9d26499ed8aeccde", - "index": 304, - "guid": "d914b9a0-0f55-4513-8e36-e28513faf000", - "isActive": false, - "balance": "$1,296.80", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Mayra Combs", - "gender": "female", - "company": "MACRONAUT", - "email": "mayracombs@macronaut.com", - "phone": "+1 (846) 580-3558", - "address": "403 Broadway , Bowden, New Hampshire, 5600", - "about": "Irure esse deserunt fugiat dolore anim et tempor. Lorem ex ex quis sint et amet ea excepteur mollit et incididunt dolore non fugiat. Magna mollit duis magna laborum quis ea cillum Lorem cupidatat commodo est adipisicing mollit. Ex nisi irure Lorem esse id velit quis fugiat anim do cillum ex enim est. Consectetur incididunt ea ut ea ad labore deserunt cupidatat ex sunt incididunt. Aliquip quis Lorem in ut irure tempor deserunt duis pariatur consectetur irure nisi Lorem. Fugiat excepteur ex adipisicing commodo dolor sunt culpa nostrud in cupidatat pariatur.\r\n", - "registered": "2019-05-05T09:03:48 +04:00", - "latitude": 89.446456, - "longitude": -4.311263, - "tags": ["ut", "irure", "incididunt", "duis", "minim", "nisi", "nulla"], - "friends": [ - { - "id": 0, - "name": "Harrison Pierce" - }, - { - "id": 1, - "name": "Lilian Christensen" - }, - { - "id": 2, - "name": "Mcneil Sweet" - } - ], - "greeting": "Hello, Mayra Combs! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d95b4ad7bce6c3af2", - "index": 305, - "guid": "a10fb5db-46c9-4e42-a7ed-30a917c099a0", - "isActive": false, - "balance": "$3,695.91", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Carlene Roach", - "gender": "female", - "company": "KIGGLE", - "email": "carleneroach@kiggle.com", - "phone": "+1 (830) 448-3290", - "address": "979 Hegeman Avenue, Blodgett, Colorado, 9920", - "about": "Cupidatat irure sunt voluptate cupidatat velit amet deserunt aute. Sit deserunt qui aute sit ipsum consectetur qui sunt velit elit velit esse. Culpa nostrud amet consectetur et nostrud mollit ut. Qui nisi eu exercitation tempor aute sunt dolore est occaecat cupidatat. Dolore elit sint eu proident aliqua aliqua pariatur. Reprehenderit cupidatat duis enim quis cillum anim pariatur anim non ex nisi Lorem aliquip. Aliquip aliquip deserunt non adipisicing dolore ad commodo officia aute aliquip culpa veniam ullamco.\r\n", - "registered": "2014-04-15T07:03:42 +04:00", - "latitude": 36.908984, - "longitude": 93.073575, - "tags": ["exercitation", "commodo", "et", "eu", "fugiat", "elit", "laborum"], - "friends": [ - { - "id": 0, - "name": "Robin Shannon" - }, - { - "id": 1, - "name": "Reynolds Andrews" - }, - { - "id": 2, - "name": "Mitzi Pena" - } - ], - "greeting": "Hello, Carlene Roach! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d02d82a12676c2274", - "index": 306, - "guid": "01ae5ccb-7214-4013-937d-b2814d687830", - "isActive": true, - "balance": "$3,807.63", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Conley Hardin", - "gender": "male", - "company": "GEOFORMA", - "email": "conleyhardin@geoforma.com", - "phone": "+1 (927) 542-3953", - "address": "482 Tilden Avenue, Ribera, Maine, 2628", - "about": "Laboris eiusmod occaecat occaecat reprehenderit laboris et cupidatat enim aute sint excepteur nostrud qui non. Ea elit officia enim reprehenderit eiusmod aliquip elit dolore adipisicing non. Minim ipsum Lorem exercitation labore irure duis.\r\n", - "registered": "2017-09-03T04:52:27 +04:00", - "latitude": -23.628705, - "longitude": 56.25281, - "tags": ["adipisicing", "minim", "ipsum", "veniam", "nulla", "dolore", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Emma Haley" - }, - { - "id": 1, - "name": "Tate Massey" - }, - { - "id": 2, - "name": "Byrd Briggs" - } - ], - "greeting": "Hello, Conley Hardin! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d866026bbd1268706", - "index": 307, - "guid": "9e44f36a-a6a2-42af-b91e-8b473670ea4e", - "isActive": true, - "balance": "$2,163.54", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Mcfadden Wolf", - "gender": "male", - "company": "CORPORANA", - "email": "mcfaddenwolf@corporana.com", - "phone": "+1 (801) 524-2024", - "address": "555 Vanderveer Street, Bawcomville, South Carolina, 5263", - "about": "Laborum ad esse nulla aute aliqua culpa labore laborum nostrud pariatur incididunt. Labore mollit adipisicing id velit. Deserunt qui ad non eu reprehenderit eiusmod exercitation sit. Consectetur nostrud minim ad aliquip. Ad ullamco proident magna eu veniam labore aute laborum aute dolore dolor commodo nisi nisi.\r\n", - "registered": "2018-12-17T09:03:40 +05:00", - "latitude": -58.938044, - "longitude": 87.696956, - "tags": ["laborum", "id", "est", "aliquip", "est", "consectetur", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Vang Good" - }, - { - "id": 1, - "name": "Antoinette Weber" - }, - { - "id": 2, - "name": "Robert Holden" - } - ], - "greeting": "Hello, Mcfadden Wolf! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d05d50e0de3a2586a", - "index": 308, - "guid": "f30316b7-910b-49fd-a7cb-41905b7b2096", - "isActive": true, - "balance": "$1,740.76", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Keith Moran", - "gender": "male", - "company": "EZENTIA", - "email": "keithmoran@ezentia.com", - "phone": "+1 (982) 516-3761", - "address": "972 Pitkin Avenue, Caron, Connecticut, 8805", - "about": "Id et adipisicing esse aute irure laborum. Minim Lorem deserunt deserunt labore. Labore mollit exercitation id nulla nisi deserunt ex nostrud culpa.\r\n", - "registered": "2018-06-23T09:57:08 +04:00", - "latitude": -74.163004, - "longitude": 92.689053, - "tags": ["consequat", "ut", "aliquip", "labore", "ea", "mollit", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Whitley Terrell" - }, - { - "id": 1, - "name": "Francine Holcomb" - }, - { - "id": 2, - "name": "Anita Hurst" - } - ], - "greeting": "Hello, Keith Moran! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d65ba28aa35ab5955", - "index": 309, - "guid": "6546fc68-eb64-43d0-b7a5-d2b1af7041ce", - "isActive": true, - "balance": "$2,127.19", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Casey Lowe", - "gender": "male", - "company": "QUAREX", - "email": "caseylowe@quarex.com", - "phone": "+1 (834) 489-2438", - "address": "426 Seeley Street, Ilchester, Virginia, 9144", - "about": "Labore in voluptate deserunt consequat ullamco est eu irure excepteur. Ex quis occaecat elit anim minim qui eiusmod cillum veniam consequat dolor. Ipsum do adipisicing ullamco laborum aliquip aliquip amet. Qui aute minim anim proident qui eu occaecat exercitation minim aliquip reprehenderit. Officia commodo incididunt nostrud Lorem est ex proident id.\r\n", - "registered": "2020-01-23T09:04:14 +05:00", - "latitude": 27.63474, - "longitude": -118.085158, - "tags": ["magna", "duis", "et", "incididunt", "sit", "est", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Edwards Luna" - }, - { - "id": 1, - "name": "Josephine Sanford" - }, - { - "id": 2, - "name": "Sutton Maldonado" - } - ], - "greeting": "Hello, Casey Lowe! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddf836215a563f6e5", - "index": 310, - "guid": "6b2074d1-235f-4104-ae49-8f396b1525e3", - "isActive": true, - "balance": "$2,246.13", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Bates Lewis", - "gender": "male", - "company": "DIGIRANG", - "email": "bateslewis@digirang.com", - "phone": "+1 (803) 449-2014", - "address": "503 Royce Street, Ronco, Georgia, 8999", - "about": "Aliqua reprehenderit proident irure consectetur aliqua sunt veniam reprehenderit ad eu pariatur pariatur fugiat. Quis in velit enim incididunt elit dolor consequat ex incididunt do voluptate. Aliqua irure aliquip exercitation occaecat reprehenderit.\r\n", - "registered": "2019-02-14T05:48:58 +05:00", - "latitude": -13.945439, - "longitude": -36.384969, - "tags": ["ut", "id", "consequat", "excepteur", "culpa", "id", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Carmella Clarke" - }, - { - "id": 1, - "name": "Ayers Chen" - }, - { - "id": 2, - "name": "Dotson Cantu" - } - ], - "greeting": "Hello, Bates Lewis! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db293ecce0b0cef6b", - "index": 311, - "guid": "8ecf9678-f6a4-4588-b90f-37cf475a4a74", - "isActive": true, - "balance": "$1,875.49", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Sheryl Cook", - "gender": "female", - "company": "PHOLIO", - "email": "sherylcook@pholio.com", - "phone": "+1 (818) 547-2873", - "address": "633 Cambridge Place, Bellfountain, New Jersey, 5969", - "about": "Minim magna in ea velit commodo esse enim elit est nisi. Dolor eiusmod exercitation sit nulla qui do. Cillum commodo eu commodo sunt et veniam velit sunt ut. Aliqua commodo Lorem labore aliquip cillum aliqua ullamco id minim.\r\n", - "registered": "2016-07-22T08:40:04 +04:00", - "latitude": -59.311283, - "longitude": 115.084646, - "tags": ["reprehenderit", "ad", "est", "enim", "nisi", "qui", "dolore"], - "friends": [ - { - "id": 0, - "name": "Carmela Murray" - }, - { - "id": 1, - "name": "Stefanie Webster" - }, - { - "id": 2, - "name": "Perez Mcfarland" - } - ], - "greeting": "Hello, Sheryl Cook! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dbdcb8fc1f1b338dc", - "index": 312, - "guid": "fdf1a82d-4104-402d-8ebe-7f3a40ec8dfd", - "isActive": false, - "balance": "$2,412.76", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Frances Stokes", - "gender": "female", - "company": "CAPSCREEN", - "email": "francesstokes@capscreen.com", - "phone": "+1 (932) 464-2957", - "address": "109 Cadman Plaza, Gorham, Minnesota, 8232", - "about": "Dolore reprehenderit duis cillum minim ea non id adipisicing minim exercitation. Exercitation non elit quis est voluptate anim incididunt irure elit laborum et. Deserunt tempor minim incididunt qui mollit voluptate. Irure tempor excepteur tempor magna id. Eiusmod ut Lorem ipsum reprehenderit laborum magna officia irure nostrud. Excepteur consectetur adipisicing consectetur fugiat amet veniam ad velit consectetur minim officia dolor aliquip. Cupidatat eiusmod ex est enim excepteur est magna ad duis consequat.\r\n", - "registered": "2017-10-14T12:45:32 +04:00", - "latitude": 85.315195, - "longitude": -78.251448, - "tags": ["aute", "voluptate", "quis", "labore", "dolor", "laboris", "magna"], - "friends": [ - { - "id": 0, - "name": "Alexander Obrien" - }, - { - "id": 1, - "name": "Karin Decker" - }, - { - "id": 2, - "name": "Bowen Mcdonald" - } - ], - "greeting": "Hello, Frances Stokes! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3d58fd40b95aedf2", - "index": 313, - "guid": "27b51578-e78e-484a-baa7-f5827d936f34", - "isActive": true, - "balance": "$2,820.66", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Pearl Berger", - "gender": "female", - "company": "PROSURE", - "email": "pearlberger@prosure.com", - "phone": "+1 (830) 444-3879", - "address": "194 Kimball Street, Shrewsbury, Texas, 8346", - "about": "Cillum incididunt dolore nulla velit dolor ipsum duis est Lorem. Commodo proident labore aliquip anim aliqua ad sunt dolor. Ipsum tempor aliquip cillum ea dolore ex exercitation est consectetur sunt sint. Lorem cillum tempor sunt officia sint consequat. Nostrud nisi mollit pariatur duis pariatur qui sit minim adipisicing. Velit ullamco pariatur occaecat nostrud sint sint sint pariatur laboris deserunt. Lorem quis proident mollit adipisicing ea reprehenderit in mollit aliqua qui adipisicing adipisicing sunt est.\r\n", - "registered": "2017-11-01T08:17:24 +04:00", - "latitude": -51.530413, - "longitude": -32.043438, - "tags": ["veniam", "elit", "cillum", "do", "ullamco", "in", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Sargent Riggs" - }, - { - "id": 1, - "name": "Staci Dominguez" - }, - { - "id": 2, - "name": "Hughes Cooke" - } - ], - "greeting": "Hello, Pearl Berger! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8ff727f26b27d842", - "index": 314, - "guid": "59c4ad1e-a122-4487-9cf8-87916da466da", - "isActive": false, - "balance": "$1,461.80", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Maricela Melton", - "gender": "female", - "company": "VISALIA", - "email": "maricelamelton@visalia.com", - "phone": "+1 (987) 407-2871", - "address": "700 Frost Street, Madrid, Alabama, 1868", - "about": "Qui veniam incididunt et quis. Quis et laboris mollit laborum aute consectetur. Nulla ex anim eiusmod reprehenderit voluptate occaecat culpa dolor. Veniam quis ea esse voluptate nulla velit minim in exercitation sint id. Ad ipsum id quis culpa sunt culpa do. Id aliqua est irure non laborum nulla cupidatat consequat nulla.\r\n", - "registered": "2020-07-14T04:55:18 +04:00", - "latitude": -40.998145, - "longitude": -38.650253, - "tags": ["ex", "officia", "pariatur", "aute", "ullamco", "mollit", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Luna Steele" - }, - { - "id": 1, - "name": "Olivia Clark" - }, - { - "id": 2, - "name": "Rivers Sanders" - } - ], - "greeting": "Hello, Maricela Melton! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25daf436e175f2d9d3b", - "index": 315, - "guid": "c34cd7c3-6c99-4f15-8951-879e1f0a0d19", - "isActive": true, - "balance": "$1,356.47", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Wilcox Witt", - "gender": "male", - "company": "QUAILCOM", - "email": "wilcoxwitt@quailcom.com", - "phone": "+1 (807) 566-3438", - "address": "298 Louise Terrace, Itmann, Rhode Island, 446", - "about": "Veniam magna enim voluptate labore voluptate sint ipsum incididunt Lorem ad. Magna sunt tempor ea reprehenderit est culpa. Nisi adipisicing ut occaecat do irure. Qui minim elit adipisicing velit id elit aute fugiat est.\r\n", - "registered": "2015-09-21T04:13:57 +04:00", - "latitude": 29.989858, - "longitude": -155.182659, - "tags": ["consectetur", "aliqua", "nulla", "proident", "laborum", "laboris", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Harriett Grimes" - }, - { - "id": 1, - "name": "Aline Bass" - }, - { - "id": 2, - "name": "Howe Jarvis" - } - ], - "greeting": "Hello, Wilcox Witt! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbe00db621ed637dd", - "index": 316, - "guid": "3e393c2b-96d7-4a32-8112-8f79d9f47af8", - "isActive": false, - "balance": "$3,476.70", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Rosario Peck", - "gender": "male", - "company": "NURALI", - "email": "rosariopeck@nurali.com", - "phone": "+1 (838) 546-2863", - "address": "837 Fleet Walk, Brady, Florida, 7210", - "about": "Mollit cillum velit ut dolor mollit eu magna aliquip laboris est ea eiusmod occaecat. Officia proident voluptate ullamco deserunt anim eiusmod consequat. Adipisicing est duis Lorem incididunt exercitation ullamco deserunt non consectetur.\r\n", - "registered": "2014-06-17T03:52:55 +04:00", - "latitude": 76.050085, - "longitude": 170.139343, - "tags": ["commodo", "est", "officia", "aliqua", "duis", "exercitation", "cillum"], - "friends": [ - { - "id": 0, - "name": "Shelly Barron" - }, - { - "id": 1, - "name": "Tran Mcclain" - }, - { - "id": 2, - "name": "Palmer Osborne" - } - ], - "greeting": "Hello, Rosario Peck! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7e35a4e5321ab69e", - "index": 317, - "guid": "f13186d0-1056-43e9-ba54-c65f121d070d", - "isActive": true, - "balance": "$3,379.43", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Baker Shelton", - "gender": "male", - "company": "MAXIMIND", - "email": "bakershelton@maximind.com", - "phone": "+1 (885) 438-2356", - "address": "960 Ferris Street, Chilton, Indiana, 309", - "about": "Sint id laboris ex aliquip consequat consectetur ut nostrud ad aliquip dolore incididunt nostrud. Dolor irure occaecat labore aliqua esse consequat adipisicing. Qui reprehenderit magna mollit enim voluptate commodo excepteur. Lorem sunt id ipsum esse qui consectetur. Velit adipisicing aliquip dolore mollit Lorem Lorem sunt incididunt est dolor voluptate. Excepteur consectetur commodo non Lorem cillum pariatur eu est do aute. Officia cillum non laboris non.\r\n", - "registered": "2015-10-02T09:28:49 +04:00", - "latitude": 86.295549, - "longitude": -44.658358, - "tags": ["enim", "cillum", "labore", "incididunt", "esse", "exercitation", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Bender Oneill" - }, - { - "id": 1, - "name": "Ray Turner" - }, - { - "id": 2, - "name": "Benson Goodman" - } - ], - "greeting": "Hello, Baker Shelton! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9b427fdd43dca8fb", - "index": 318, - "guid": "c7918170-23c0-47f1-8d71-0b18c8b2a427", - "isActive": false, - "balance": "$2,095.92", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Harmon Bailey", - "gender": "male", - "company": "HOMETOWN", - "email": "harmonbailey@hometown.com", - "phone": "+1 (939) 584-2284", - "address": "216 Wilson Avenue, Nord, Northern Mariana Islands, 4105", - "about": "Magna adipisicing nostrud cillum aute incididunt reprehenderit reprehenderit. Elit consectetur ipsum pariatur fugiat velit aute est. Laborum sunt velit ea mollit ullamco nisi sunt incididunt officia ut. Sint exercitation Lorem est ullamco enim pariatur ut anim aliquip.\r\n", - "registered": "2018-06-17T05:35:18 +04:00", - "latitude": 89.622439, - "longitude": 99.362007, - "tags": ["labore", "occaecat", "commodo", "officia", "veniam", "eiusmod", "nulla"], - "friends": [ - { - "id": 0, - "name": "Glenna Cox" - }, - { - "id": 1, - "name": "Barr Gallagher" - }, - { - "id": 2, - "name": "Berg Keith" - } - ], - "greeting": "Hello, Harmon Bailey! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de0c68a7abb03cf04", - "index": 319, - "guid": "427bed28-c9fd-4a9c-8761-c682eeebb69c", - "isActive": true, - "balance": "$3,347.64", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Deleon Harrington", - "gender": "male", - "company": "PURIA", - "email": "deleonharrington@puria.com", - "phone": "+1 (954) 442-2045", - "address": "208 Bedford Place, Boonville, Idaho, 7824", - "about": "Proident est commodo consectetur do velit. Eiusmod ullamco id exercitation deserunt reprehenderit et consequat laborum non. Consequat labore enim veniam anim occaecat esse id ex proident velit voluptate. Qui nostrud esse commodo aute aute proident labore nulla. Sit ut sint nostrud exercitation culpa pariatur tempor occaecat cillum. Cillum sint est incididunt ipsum aliqua est deserunt cupidatat labore reprehenderit.\r\n", - "registered": "2017-09-20T10:15:58 +04:00", - "latitude": 39.965883, - "longitude": 148.022184, - "tags": ["exercitation", "nisi", "amet", "nulla", "quis", "sunt", "sit"], - "friends": [ - { - "id": 0, - "name": "Holmes Kidd" - }, - { - "id": 1, - "name": "Elizabeth Morris" - }, - { - "id": 2, - "name": "Kramer Hull" - } - ], - "greeting": "Hello, Deleon Harrington! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d37cb0f985ce0758f", - "index": 320, - "guid": "6694412e-8813-4fee-a311-dad6f8673a23", - "isActive": false, - "balance": "$3,300.40", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Antonia Ortega", - "gender": "female", - "company": "GORGANIC", - "email": "antoniaortega@gorganic.com", - "phone": "+1 (840) 550-2857", - "address": "443 Adelphi Street, Clara, District Of Columbia, 6646", - "about": "Exercitation sit nostrud id deserunt commodo reprehenderit veniam. Cupidatat voluptate excepteur nisi mollit aute laboris irure culpa sint reprehenderit aliquip labore. Exercitation deserunt non cillum pariatur sunt dolore amet sunt nostrud aliquip cillum ex nisi. Sunt esse aute culpa reprehenderit Lorem. Aliqua sunt qui nulla incididunt ut cillum sit cillum reprehenderit magna aliquip nostrud Lorem ea. Anim deserunt sit consequat do officia reprehenderit laboris ex ex mollit et quis consectetur pariatur.\r\n", - "registered": "2018-03-10T06:17:16 +05:00", - "latitude": -87.343747, - "longitude": 32.987102, - "tags": ["nulla", "magna", "enim", "irure", "veniam", "laborum", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Carissa Shaw" - }, - { - "id": 1, - "name": "Finley Farmer" - }, - { - "id": 2, - "name": "Autumn Wagner" - } - ], - "greeting": "Hello, Antonia Ortega! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbe3190c2b28b7a98", - "index": 321, - "guid": "033af16b-0901-4d16-9514-677998af4d2f", - "isActive": true, - "balance": "$1,180.48", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Kellie Macdonald", - "gender": "female", - "company": "UNEEQ", - "email": "kelliemacdonald@uneeq.com", - "phone": "+1 (966) 426-2249", - "address": "957 Cox Place, Faywood, New Mexico, 3390", - "about": "Aute anim ut minim duis magna eu elit et veniam officia. Laboris culpa id quis laborum commodo minim irure non consectetur ex enim non ea. Ut aute ea enim nisi id adipisicing consectetur nostrud ea officia occaecat dolor. Proident dolor nulla commodo quis adipisicing occaecat nostrud aliqua Lorem amet Lorem ut. Incididunt id id ad nisi dolore cillum eu deserunt sit elit ut nisi est. Lorem enim commodo pariatur pariatur amet in fugiat dolor sunt ex elit sit velit. Amet nisi ipsum labore ex cupidatat Lorem elit anim elit aute nisi pariatur non.\r\n", - "registered": "2016-12-14T12:14:10 +05:00", - "latitude": 24.208554, - "longitude": 5.683722, - "tags": ["veniam", "consectetur", "eiusmod", "magna", "occaecat", "labore", "magna"], - "friends": [ - { - "id": 0, - "name": "Yvette Madden" - }, - { - "id": 1, - "name": "Gray Dickson" - }, - { - "id": 2, - "name": "Roberts Tran" - } - ], - "greeting": "Hello, Kellie Macdonald! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d321f6dfb1923264a", - "index": 322, - "guid": "cc934f0b-0224-4939-920a-f00b006b2311", - "isActive": false, - "balance": "$2,333.17", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Celina Patel", - "gender": "female", - "company": "KOFFEE", - "email": "celinapatel@koffee.com", - "phone": "+1 (886) 535-2489", - "address": "951 Bainbridge Street, Axis, South Dakota, 907", - "about": "Ad mollit excepteur reprehenderit ut velit minim incididunt. Sit aute ex esse consequat magna aute irure. Nostrud nisi Lorem qui proident anim officia nulla consequat sit enim. Excepteur nostrud laboris reprehenderit qui fugiat sunt adipisicing nostrud laborum. Ipsum nulla incididunt veniam adipisicing excepteur qui.\r\n", - "registered": "2018-05-23T12:16:41 +04:00", - "latitude": 81.366517, - "longitude": -58.537946, - "tags": ["cupidatat", "dolor", "duis", "Lorem", "aliquip", "excepteur", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Freeman England" - }, - { - "id": 1, - "name": "Burke Chapman" - }, - { - "id": 2, - "name": "Burns Gaines" - } - ], - "greeting": "Hello, Celina Patel! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d727c4cae86b60b1e", - "index": 323, - "guid": "16741590-2340-4859-b715-b2b8d9811701", - "isActive": false, - "balance": "$1,042.57", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Rosanne Pitts", - "gender": "female", - "company": "ARTIQ", - "email": "rosannepitts@artiq.com", - "phone": "+1 (993) 411-2734", - "address": "595 Roder Avenue, Sunriver, American Samoa, 884", - "about": "Incididunt voluptate eiusmod reprehenderit ullamco non consectetur aliquip proident laborum cillum adipisicing. Ullamco dolor cupidatat fugiat magna cupidatat incididunt. Proident eiusmod consequat ad ad ad proident fugiat mollit exercitation in exercitation sit Lorem. Commodo sit incididunt dolor consectetur tempor tempor qui occaecat cupidatat sint non sint. Dolore Lorem dolor laboris voluptate elit do anim consectetur laboris. Minim enim eiusmod adipisicing eu et tempor sint ad est mollit Lorem non irure in.\r\n", - "registered": "2014-06-19T09:21:12 +04:00", - "latitude": 7.316725, - "longitude": -11.96802, - "tags": ["pariatur", "irure", "in", "eiusmod", "dolor", "est", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Greer Lambert" - }, - { - "id": 1, - "name": "Deanne Holt" - }, - { - "id": 2, - "name": "Webster Mayo" - } - ], - "greeting": "Hello, Rosanne Pitts! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d783ddd65d3c2e808", - "index": 324, - "guid": "f7672d94-6709-438a-8e63-035ad0de95bc", - "isActive": true, - "balance": "$3,877.19", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Wells Noble", - "gender": "male", - "company": "SNACKTION", - "email": "wellsnoble@snacktion.com", - "phone": "+1 (813) 405-2868", - "address": "270 Hunterfly Place, Felt, Iowa, 9421", - "about": "Voluptate et minim anim irure. Ea eu eiusmod elit magna esse in sit consequat in ut eu sint elit culpa. Minim est esse ullamco officia eiusmod do cillum ex fugiat ullamco aute occaecat proident. Et veniam elit duis amet elit labore nulla ullamco.\r\n", - "registered": "2014-03-11T12:52:50 +04:00", - "latitude": -70.241198, - "longitude": 8.40946, - "tags": ["velit", "irure", "aliqua", "ipsum", "nostrud", "sint", "sit"], - "friends": [ - { - "id": 0, - "name": "Noble Hooper" - }, - { - "id": 1, - "name": "Wilkins Waters" - }, - { - "id": 2, - "name": "Mindy Ramsey" - } - ], - "greeting": "Hello, Wells Noble! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc5331eca6a846344", - "index": 325, - "guid": "7a516e27-50c0-4754-be99-9351ea78d444", - "isActive": true, - "balance": "$3,189.70", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Oneal Horton", - "gender": "male", - "company": "QNEKT", - "email": "onealhorton@qnekt.com", - "phone": "+1 (981) 558-3251", - "address": "781 Colonial Road, Gallina, Palau, 2660", - "about": "Ipsum quis aliquip ullamco excepteur ullamco. Lorem velit anim elit cupidatat. Magna tempor sunt nostrud labore occaecat veniam. Labore aliqua tempor quis enim id sint pariatur tempor id nulla.\r\n", - "registered": "2019-04-07T06:24:25 +04:00", - "latitude": 23.216468, - "longitude": -70.500421, - "tags": ["duis", "eiusmod", "enim", "adipisicing", "magna", "anim", "officia"], - "friends": [ - { - "id": 0, - "name": "Tania Bryant" - }, - { - "id": 1, - "name": "Jacqueline Dotson" - }, - { - "id": 2, - "name": "Alissa Griffith" - } - ], - "greeting": "Hello, Oneal Horton! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d20d53cef77cfc5bd", - "index": 326, - "guid": "2884985c-2b91-4d67-8521-bd411ade3947", - "isActive": true, - "balance": "$3,569.57", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Carrillo Fisher", - "gender": "male", - "company": "IZZBY", - "email": "carrillofisher@izzby.com", - "phone": "+1 (844) 571-3562", - "address": "672 Wallabout Street, Cuylerville, West Virginia, 9916", - "about": "Ut nostrud ut adipisicing culpa ut. Occaecat duis sit dolore laborum sit commodo ipsum proident et consectetur do tempor eu irure. Incididunt et incididunt nulla ullamco. Quis enim ea incididunt dolor qui cupidatat ad duis excepteur. Officia et dolore reprehenderit do officia dolor sint elit officia consequat aliquip. Nulla sit incididunt nisi officia proident culpa culpa qui fugiat et veniam exercitation duis excepteur. Incididunt amet exercitation non irure.\r\n", - "registered": "2020-02-20T03:09:31 +05:00", - "latitude": -14.370567, - "longitude": 114.133844, - "tags": ["veniam", "ut", "qui", "veniam", "cillum", "laborum", "in"], - "friends": [ - { - "id": 0, - "name": "Gracie Tucker" - }, - { - "id": 1, - "name": "Ada Palmer" - }, - { - "id": 2, - "name": "England Harrison" - } - ], - "greeting": "Hello, Carrillo Fisher! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da23588c11e549450", - "index": 327, - "guid": "70708353-89a1-4317-86ef-97c41d30c2c7", - "isActive": true, - "balance": "$2,699.07", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Hewitt Clemons", - "gender": "male", - "company": "SYNTAC", - "email": "hewittclemons@syntac.com", - "phone": "+1 (917) 406-3966", - "address": "933 Rose Street, Harviell, New York, 4411", - "about": "Aute eu sit aute sunt est officia in. Labore ipsum commodo laborum nulla mollit. Cupidatat excepteur cupidatat ea Lorem dolore Lorem eu esse dolor. Ullamco ad id aute duis commodo irure pariatur proident. Ut laborum nulla consequat in ullamco consequat id aute ipsum voluptate nostrud amet cupidatat. Magna anim tempor consequat labore quis veniam in. Aliquip id ut commodo voluptate minim anim ad velit deserunt elit commodo.\r\n", - "registered": "2014-10-26T07:34:36 +04:00", - "latitude": -8.775775, - "longitude": 69.177426, - "tags": ["sint", "laboris", "dolore", "velit", "irure", "dolor", "elit"], - "friends": [ - { - "id": 0, - "name": "Gould Mccullough" - }, - { - "id": 1, - "name": "Robinson Barnett" - }, - { - "id": 2, - "name": "Barber King" - } - ], - "greeting": "Hello, Hewitt Clemons! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d69d6fd42b225dede", - "index": 328, - "guid": "80702581-f36b-45a6-9b2b-4104a6da96c7", - "isActive": true, - "balance": "$1,573.69", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Bridgette Robinson", - "gender": "female", - "company": "ANOCHA", - "email": "bridgetterobinson@anocha.com", - "phone": "+1 (847) 457-3897", - "address": "490 Forrest Street, Brandywine, Hawaii, 2644", - "about": "Nostrud aute deserunt nisi excepteur elit occaecat nostrud aliquip esse aliqua consequat aute elit. Exercitation irure officia reprehenderit esse. Incididunt aliqua non voluptate consectetur aliqua non. Excepteur anim incididunt tempor exercitation deserunt exercitation non reprehenderit nisi ea eiusmod aliquip in deserunt.\r\n", - "registered": "2017-01-06T12:49:42 +05:00", - "latitude": 28.667855, - "longitude": 84.398921, - "tags": ["aute", "pariatur", "sint", "ad", "labore", "laboris", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Trujillo Nguyen" - }, - { - "id": 1, - "name": "Krystal Norris" - }, - { - "id": 2, - "name": "Wall Acevedo" - } - ], - "greeting": "Hello, Bridgette Robinson! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d69848fd54a26cb54", - "index": 329, - "guid": "39eb71d2-f328-4ff3-a816-9bc63f7becac", - "isActive": false, - "balance": "$3,526.79", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Tina Hinton", - "gender": "female", - "company": "BOILCAT", - "email": "tinahinton@boilcat.com", - "phone": "+1 (962) 574-2770", - "address": "127 Albemarle Road, Mapletown, Nebraska, 1753", - "about": "Voluptate ut eiusmod non pariatur magna reprehenderit aliqua ullamco culpa. Exercitation eiusmod est aliqua ex dolor ipsum esse voluptate exercitation tempor velit occaecat occaecat. Labore minim commodo in in nostrud in do nulla ad aute aute. Velit commodo aute enim qui ad consequat occaecat aliqua dolor pariatur incididunt commodo aliquip. Mollit nulla nulla sunt reprehenderit ex in incididunt aliquip minim et. Esse dolore sunt exercitation dolor est anim do qui ut mollit culpa nisi aliquip. Elit sunt duis reprehenderit dolore et ea aliquip non occaecat laboris aliqua enim pariatur.\r\n", - "registered": "2016-10-24T11:25:57 +04:00", - "latitude": 62.093878, - "longitude": -168.198422, - "tags": ["duis", "amet", "voluptate", "ex", "eu", "aute", "nulla"], - "friends": [ - { - "id": 0, - "name": "Lizzie Whitfield" - }, - { - "id": 1, - "name": "Verna Dunlap" - }, - { - "id": 2, - "name": "Alvarez Graves" - } - ], - "greeting": "Hello, Tina Hinton! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9989d5e51e0aca86", - "index": 330, - "guid": "8416beef-df3d-47ab-915d-1591a782eaf1", - "isActive": true, - "balance": "$1,798.22", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Slater Boyd", - "gender": "male", - "company": "PIVITOL", - "email": "slaterboyd@pivitol.com", - "phone": "+1 (850) 513-2412", - "address": "195 Berry Street, Rutherford, Wisconsin, 9085", - "about": "Velit et consectetur adipisicing esse culpa consequat qui do ullamco occaecat. Quis nulla nisi ut aliqua. Ipsum consectetur eiusmod proident ex ipsum do qui in ipsum in. Excepteur dolor consectetur exercitation dolor do incididunt velit. Sunt in ut cillum enim labore voluptate ad labore nostrud.\r\n", - "registered": "2017-01-25T04:07:36 +05:00", - "latitude": 59.491205, - "longitude": 59.119193, - "tags": ["esse", "nulla", "labore", "aliqua", "aliquip", "incididunt", "id"], - "friends": [ - { - "id": 0, - "name": "Rhoda Duran" - }, - { - "id": 1, - "name": "Christi Carr" - }, - { - "id": 2, - "name": "Mariana Hebert" - } - ], - "greeting": "Hello, Slater Boyd! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de0e083daee93d8d2", - "index": 331, - "guid": "1ff0f7df-689c-4b18-89c6-f5d1737bff8e", - "isActive": true, - "balance": "$3,694.59", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Brittany Allen", - "gender": "female", - "company": "OPTIQUE", - "email": "brittanyallen@optique.com", - "phone": "+1 (969) 403-3063", - "address": "424 Fulton Street, Campo, Arizona, 6298", - "about": "Exercitation ipsum deserunt elit ea eiusmod anim et elit amet veniam nulla ad voluptate. Deserunt cillum qui eu consequat nisi consequat dolore eu sit veniam incididunt minim cupidatat. Dolor ad laboris nisi laborum cillum. Consectetur cupidatat ipsum sit ea reprehenderit ullamco fugiat dolore consequat minim velit minim reprehenderit. Id irure cillum deserunt et reprehenderit veniam elit Lorem.\r\n", - "registered": "2015-02-14T01:21:23 +05:00", - "latitude": -22.763975, - "longitude": 148.970602, - "tags": ["commodo", "esse", "esse", "eiusmod", "enim", "aliqua", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Roy Conrad" - }, - { - "id": 1, - "name": "Florence Ray" - }, - { - "id": 2, - "name": "Stark Charles" - } - ], - "greeting": "Hello, Brittany Allen! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8d4cc794e46289dd", - "index": 332, - "guid": "ef0cff0b-eca8-4477-b0a2-6cbd5a2deaec", - "isActive": false, - "balance": "$3,218.45", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Richard Vasquez", - "gender": "male", - "company": "ZILLACON", - "email": "richardvasquez@zillacon.com", - "phone": "+1 (935) 483-3982", - "address": "276 Verona Place, Oasis, Ohio, 3337", - "about": "Cillum aliquip adipisicing duis sint ea commodo occaecat tempor voluptate mollit ad commodo. Mollit esse consequat adipisicing mollit enim non anim pariatur enim ad dolor quis nostrud. Cupidatat fugiat aliquip minim commodo in nostrud aliqua duis nostrud eiusmod. Irure incididunt ipsum qui occaecat dolore aliqua pariatur Lorem sunt quis proident culpa voluptate.\r\n", - "registered": "2019-02-15T11:44:35 +05:00", - "latitude": 28.425484, - "longitude": -130.017119, - "tags": ["minim", "dolor", "excepteur", "officia", "incididunt", "culpa", "officia"], - "friends": [ - { - "id": 0, - "name": "Deloris Farley" - }, - { - "id": 1, - "name": "Leann Sellers" - }, - { - "id": 2, - "name": "Jennifer Herman" - } - ], - "greeting": "Hello, Richard Vasquez! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2072a4ae2d0f5c6b", - "index": 333, - "guid": "8ec0b54c-9147-44ba-9e11-7ae2c1e0fed1", - "isActive": true, - "balance": "$3,793.94", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Tracey Mcdowell", - "gender": "female", - "company": "XYQAG", - "email": "traceymcdowell@xyqag.com", - "phone": "+1 (904) 514-2246", - "address": "916 Seagate Avenue, Calverton, Arkansas, 5535", - "about": "Occaecat aute mollit sint ea occaecat laboris sunt duis tempor. Veniam dolore magna proident sunt ad qui laborum proident. Officia nostrud reprehenderit non voluptate labore aliqua est quis mollit nulla.\r\n", - "registered": "2015-10-13T04:04:41 +04:00", - "latitude": 72.462754, - "longitude": 145.73919, - "tags": ["aute", "cupidatat", "veniam", "veniam", "culpa", "aute", "magna"], - "friends": [ - { - "id": 0, - "name": "Bertie Jennings" - }, - { - "id": 1, - "name": "Woodard Arnold" - }, - { - "id": 2, - "name": "Josefa Downs" - } - ], - "greeting": "Hello, Tracey Mcdowell! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2335436b0cc20df7", - "index": 334, - "guid": "49a71ec0-deb0-48d3-b84d-cffba8a9e1fe", - "isActive": false, - "balance": "$2,095.67", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Porter Hickman", - "gender": "male", - "company": "ESCHOIR", - "email": "porterhickman@eschoir.com", - "phone": "+1 (800) 430-2362", - "address": "287 Euclid Avenue, Lloyd, Nevada, 1033", - "about": "Minim velit irure veniam voluptate dolor nulla non ullamco exercitation commodo et. Enim ut consectetur deserunt pariatur enim ipsum occaecat enim Lorem ipsum. Do consectetur consectetur deserunt nostrud ex consectetur aliquip enim enim nulla sunt est mollit. Enim eu excepteur mollit excepteur.\r\n", - "registered": "2015-02-22T05:35:16 +05:00", - "latitude": -7.921397, - "longitude": -122.616072, - "tags": ["adipisicing", "sunt", "aute", "ea", "deserunt", "qui", "magna"], - "friends": [ - { - "id": 0, - "name": "Curry Conner" - }, - { - "id": 1, - "name": "Lourdes Rojas" - }, - { - "id": 2, - "name": "Katy Vega" - } - ], - "greeting": "Hello, Porter Hickman! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df03344b044b19d60", - "index": 335, - "guid": "d8935b43-94ab-466b-8d96-8c2b7e9e1ebd", - "isActive": true, - "balance": "$3,896.63", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Yang Levy", - "gender": "male", - "company": "BEZAL", - "email": "yanglevy@bezal.com", - "phone": "+1 (810) 563-2428", - "address": "416 Veranda Place, Gilmore, Massachusetts, 901", - "about": "Dolor duis dolor elit incididunt excepteur dolor consectetur elit tempor non. Magna et pariatur ullamco ipsum dolor ipsum et eiusmod anim esse culpa. Occaecat tempor ea ex esse. Enim veniam magna nostrud tempor non mollit ad ea ipsum nulla velit aliquip ea eu. Dolor aliqua amet anim proident Lorem laboris ex enim deserunt reprehenderit velit voluptate eiusmod magna. Minim consectetur ut eu Lorem adipisicing do amet est tempor proident in magna labore.\r\n", - "registered": "2018-07-02T11:08:10 +04:00", - "latitude": 63.161686, - "longitude": -77.429571, - "tags": ["officia", "laborum", "adipisicing", "sunt", "pariatur", "laborum", "laborum"], - "friends": [ - { - "id": 0, - "name": "Jaime Albert" - }, - { - "id": 1, - "name": "Banks Bridges" - }, - { - "id": 2, - "name": "Hodges Bright" - } - ], - "greeting": "Hello, Yang Levy! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5c98bd44586564bd", - "index": 336, - "guid": "b3902752-1b04-486d-8328-c89c1763e760", - "isActive": false, - "balance": "$1,810.62", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Valerie Pratt", - "gender": "female", - "company": "SULTRAX", - "email": "valeriepratt@sultrax.com", - "phone": "+1 (855) 520-3762", - "address": "193 Argyle Road, Fresno, Marshall Islands, 3895", - "about": "Nisi tempor adipisicing cillum est. Deserunt do non elit veniam irure quis laborum anim enim aute pariatur consectetur deserunt. Cupidatat do aliquip ut eiusmod eiusmod consequat eiusmod aute adipisicing Lorem id voluptate elit. In enim sit excepteur proident et nisi proident est nulla fugiat ex ut occaecat laborum. Culpa duis laboris nisi ut irure. Tempor qui cillum nulla amet cillum eiusmod eiusmod elit. Quis consectetur aliqua culpa Lorem in velit aute ipsum ullamco proident exercitation aute in.\r\n", - "registered": "2014-06-24T04:23:36 +04:00", - "latitude": -78.540027, - "longitude": 109.820057, - "tags": ["in", "elit", "enim", "pariatur", "deserunt", "deserunt", "do"], - "friends": [ - { - "id": 0, - "name": "George Irwin" - }, - { - "id": 1, - "name": "Mejia Hays" - }, - { - "id": 2, - "name": "Etta Larson" - } - ], - "greeting": "Hello, Valerie Pratt! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dfe777593a905615e", - "index": 337, - "guid": "f865474f-d18d-4bd9-aabf-5d1fbc7dc4ee", - "isActive": false, - "balance": "$3,818.71", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Kemp Hoffman", - "gender": "male", - "company": "VENDBLEND", - "email": "kemphoffman@vendblend.com", - "phone": "+1 (808) 536-2212", - "address": "192 Prescott Place, Dyckesville, Puerto Rico, 7080", - "about": "Eiusmod veniam cillum culpa eu dolor culpa excepteur. Incididunt eiusmod et nulla deserunt do occaecat elit ex cupidatat duis. Elit sit ex cupidatat cillum adipisicing dolor mollit adipisicing minim eiusmod. Aliqua sunt et magna qui cillum magna cupidatat dolor irure magna. Cupidatat dolore cillum magna officia aliqua amet amet ullamco exercitation eiusmod aliquip id exercitation velit. Nostrud ea dolore anim velit nostrud incididunt amet anim do mollit sunt fugiat. Veniam consectetur consectetur qui ex mollit veniam laboris do culpa quis nostrud.\r\n", - "registered": "2019-11-17T04:05:22 +05:00", - "latitude": -43.34072, - "longitude": 76.698307, - "tags": [ - "exercitation", - "excepteur", - "culpa", - "adipisicing", - "consectetur", - "magna", - "laboris" - ], - "friends": [ - { - "id": 0, - "name": "Warner Barber" - }, - { - "id": 1, - "name": "Bowers Riley" - }, - { - "id": 2, - "name": "Cardenas Stanley" - } - ], - "greeting": "Hello, Kemp Hoffman! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db39f3357d0e8ae36", - "index": 338, - "guid": "c3fce7d5-9d70-484f-9596-7d7d224a6333", - "isActive": true, - "balance": "$2,081.50", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Camille Bush", - "gender": "female", - "company": "IPLAX", - "email": "camillebush@iplax.com", - "phone": "+1 (933) 580-2960", - "address": "242 Lancaster Avenue, Alamo, California, 2381", - "about": "Tempor tempor sunt labore Lorem consequat quis. Quis aliqua ut excepteur non ad Lorem consequat ullamco magna. Nostrud ullamco eiusmod commodo culpa aute eu incididunt. Ad aliqua quis magna dolor ipsum qui voluptate fugiat enim. Et voluptate enim do occaecat nulla.\r\n", - "registered": "2015-08-09T12:21:56 +04:00", - "latitude": 65.253583, - "longitude": -33.53789, - "tags": ["reprehenderit", "magna", "incididunt", "dolore", "aliquip", "voluptate", "esse"], - "friends": [ - { - "id": 0, - "name": "Carole Green" - }, - { - "id": 1, - "name": "Gilliam Huffman" - }, - { - "id": 2, - "name": "Stanley Atkinson" - } - ], - "greeting": "Hello, Camille Bush! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db5909605299cc6a8", - "index": 339, - "guid": "05c173ba-d4d4-4007-8f7b-6a1623e1ca99", - "isActive": false, - "balance": "$1,386.19", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Chrystal Weaver", - "gender": "female", - "company": "VERBUS", - "email": "chrystalweaver@verbus.com", - "phone": "+1 (895) 512-2207", - "address": "569 Elton Street, Eagleville, Tennessee, 1682", - "about": "Qui eu do ex exercitation culpa irure. Dolore id laborum eiusmod elit enim minim laborum eu sint. Qui et dolore ut cupidatat duis officia Lorem sint occaecat proident. Ad nisi minim duis duis magna sint nulla laboris et elit et velit occaecat consectetur.\r\n", - "registered": "2018-10-01T11:53:10 +04:00", - "latitude": 85.128431, - "longitude": -74.607982, - "tags": ["est", "eiusmod", "ea", "adipisicing", "consectetur", "dolore", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Gayle Bender" - }, - { - "id": 1, - "name": "Chelsea Burris" - }, - { - "id": 2, - "name": "Black Bell" - } - ], - "greeting": "Hello, Chrystal Weaver! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da377b17687e484f9", - "index": 340, - "guid": "1af6f596-ee59-4192-a07b-63a682c9579b", - "isActive": true, - "balance": "$2,841.88", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Nixon Craft", - "gender": "male", - "company": "OPPORTECH", - "email": "nixoncraft@opportech.com", - "phone": "+1 (815) 510-2363", - "address": "659 Hamilton Avenue, Wheatfields, Wyoming, 2766", - "about": "Sunt exercitation proident excepteur minim. Eu consectetur qui voluptate anim. Nisi culpa non qui id nisi magna pariatur esse consectetur fugiat nulla nulla reprehenderit. Exercitation incididunt laborum in dolor. Eu do officia aliqua commodo velit cupidatat fugiat. Duis dolor nisi labore occaecat pariatur laboris. Ullamco reprehenderit aliqua irure aliqua irure anim commodo.\r\n", - "registered": "2015-07-18T09:00:39 +04:00", - "latitude": 69.335639, - "longitude": -48.688166, - "tags": ["occaecat", "mollit", "nulla", "in", "exercitation", "qui", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Stuart Gallegos" - }, - { - "id": 1, - "name": "Case Norman" - }, - { - "id": 2, - "name": "Kristy Kennedy" - } - ], - "greeting": "Hello, Nixon Craft! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d79e65f75ceacfa1f", - "index": 341, - "guid": "8d33d7de-41cd-4ef1-82db-858f07044924", - "isActive": true, - "balance": "$3,467.14", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Isabel Frank", - "gender": "female", - "company": "FURNITECH", - "email": "isabelfrank@furnitech.com", - "phone": "+1 (884) 451-2097", - "address": "954 Franklin Street, Fedora, North Carolina, 8792", - "about": "Pariatur et sint nulla magna. Reprehenderit reprehenderit veniam proident non aute sint qui id incididunt tempor. Commodo qui culpa et mollit esse in minim magna dolore fugiat sunt cupidatat id cupidatat. Nisi aliqua qui laborum cupidatat deserunt dolore eiusmod eiusmod occaecat elit labore. Aute officia magna mollit adipisicing est consectetur dolore enim proident esse sunt esse.\r\n", - "registered": "2016-07-12T05:52:07 +04:00", - "latitude": 44.824444, - "longitude": 1.94451, - "tags": ["irure", "non", "aute", "velit", "pariatur", "ex", "nulla"], - "friends": [ - { - "id": 0, - "name": "Olive Lester" - }, - { - "id": 1, - "name": "Angelina Baker" - }, - { - "id": 2, - "name": "Shelley Shaffer" - } - ], - "greeting": "Hello, Isabel Frank! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3179b02ddf68c3ef", - "index": 342, - "guid": "f9a3795a-ff4e-4a5c-9460-a244d091ff1f", - "isActive": true, - "balance": "$2,276.48", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Sybil Byrd", - "gender": "female", - "company": "PHEAST", - "email": "sybilbyrd@pheast.com", - "phone": "+1 (921) 412-3595", - "address": "446 Norwood Avenue, Alden, Michigan, 9494", - "about": "Non et ullamco minim deserunt minim cupidatat veniam culpa ex proident. Nostrud occaecat sunt adipisicing eu elit proident id adipisicing Lorem anim et aute velit. Officia cillum ipsum veniam mollit aute occaecat consectetur adipisicing id et. Do dolore commodo velit non nulla ipsum laboris esse laboris. Est deserunt labore qui mollit exercitation fugiat enim ipsum id. Anim adipisicing eiusmod ex proident minim dolore ullamco deserunt nulla anim veniam. Sunt non aliqua sit sint adipisicing et nostrud dolore duis eu ex.\r\n", - "registered": "2014-11-13T06:34:31 +05:00", - "latitude": 52.303151, - "longitude": 60.215904, - "tags": ["ea", "nostrud", "sint", "sit", "officia", "exercitation", "amet"], - "friends": [ - { - "id": 0, - "name": "Cannon Adams" - }, - { - "id": 1, - "name": "Cleo Armstrong" - }, - { - "id": 2, - "name": "Sykes Kemp" - } - ], - "greeting": "Hello, Sybil Byrd! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0fc55d022fa07c8b", - "index": 343, - "guid": "c46c6fe4-1bdd-4874-bab5-5734c7abaa30", - "isActive": true, - "balance": "$2,709.10", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Della Stein", - "gender": "female", - "company": "QUALITEX", - "email": "dellastein@qualitex.com", - "phone": "+1 (915) 460-2955", - "address": "241 Seagate Terrace, Westwood, Oklahoma, 3785", - "about": "Anim Lorem sint deserunt nostrud. Et laboris tempor aute culpa Lorem laborum enim sit velit officia. Exercitation ut labore in incididunt elit et ullamco. Qui labore aliquip quis enim nostrud. Pariatur duis dolor laboris esse ut duis mollit consectetur culpa dolore deserunt est magna sunt. Tempor exercitation qui irure ex esse amet anim veniam veniam deserunt labore minim. Pariatur fugiat aliqua labore pariatur aliquip id culpa enim officia consectetur elit commodo.\r\n", - "registered": "2016-09-15T11:35:53 +04:00", - "latitude": -28.069509, - "longitude": 97.247757, - "tags": ["duis", "sint", "adipisicing", "tempor", "quis", "exercitation", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Beatrice Aguilar" - }, - { - "id": 1, - "name": "Jeanine Glass" - }, - { - "id": 2, - "name": "Matilda Allison" - } - ], - "greeting": "Hello, Della Stein! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcf6c93a49fd14126", - "index": 344, - "guid": "df0a6754-78a8-458f-9c9d-7d82a115f751", - "isActive": false, - "balance": "$3,763.16", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Susanna West", - "gender": "female", - "company": "DIGIPRINT", - "email": "susannawest@digiprint.com", - "phone": "+1 (870) 407-2700", - "address": "917 Tompkins Avenue, Jessie, Vermont, 6271", - "about": "Et ad ut incididunt in anim adipisicing elit culpa adipisicing commodo nulla. Lorem sunt velit tempor veniam aute in et ipsum adipisicing. Esse duis aliqua est ullamco dolore exercitation culpa. Aliqua est eu nulla proident nulla ullamco. Adipisicing officia esse amet magna.\r\n", - "registered": "2015-11-22T10:29:40 +05:00", - "latitude": 53.337832, - "longitude": -110.691519, - "tags": ["anim", "cupidatat", "sint", "cillum", "ipsum", "esse", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Watson Hammond" - }, - { - "id": 1, - "name": "Casey Blackburn" - }, - { - "id": 2, - "name": "Esmeralda Bernard" - } - ], - "greeting": "Hello, Susanna West! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d751e5b9a5816afd8", - "index": 345, - "guid": "98a6485a-9348-477e-9743-515200c1762d", - "isActive": true, - "balance": "$2,277.47", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Gay Parks", - "gender": "female", - "company": "XTH", - "email": "gayparks@xth.com", - "phone": "+1 (959) 523-3168", - "address": "934 Noble Street, Sedley, Utah, 3828", - "about": "Pariatur do elit in consequat do culpa non occaecat pariatur mollit Lorem eiusmod. Irure reprehenderit incididunt pariatur deserunt ullamco. Eiusmod labore labore reprehenderit dolor.\r\n", - "registered": "2019-01-07T03:17:47 +05:00", - "latitude": 7.592969, - "longitude": 84.532093, - "tags": ["exercitation", "qui", "esse", "do", "aute", "nulla", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Estelle Logan" - }, - { - "id": 1, - "name": "Gallegos Martin" - }, - { - "id": 2, - "name": "Melendez Davidson" - } - ], - "greeting": "Hello, Gay Parks! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3ef21a5570ba5ff8", - "index": 346, - "guid": "7dbca86b-52ab-424f-a21d-82c9704db847", - "isActive": false, - "balance": "$2,458.01", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Cherry Bartlett", - "gender": "male", - "company": "RECRITUBE", - "email": "cherrybartlett@recritube.com", - "phone": "+1 (906) 588-3449", - "address": "195 Strong Place, Takilma, Kansas, 8097", - "about": "Consequat ad exercitation consequat velit Lorem sint. Labore ipsum non in ex cillum. Esse cillum in irure quis tempor eu. Elit do amet id consectetur elit nisi.\r\n", - "registered": "2017-07-19T08:04:30 +04:00", - "latitude": -35.541236, - "longitude": 166.13269, - "tags": ["deserunt", "duis", "id", "excepteur", "amet", "nostrud", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Nolan Garrison" - }, - { - "id": 1, - "name": "Helga Newman" - }, - { - "id": 2, - "name": "Kim Brooks" - } - ], - "greeting": "Hello, Cherry Bartlett! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbc3769fe3a52d82a", - "index": 347, - "guid": "da628a7a-b254-4594-9018-e136091cdd00", - "isActive": false, - "balance": "$2,785.94", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Maggie Juarez", - "gender": "female", - "company": "XYLAR", - "email": "maggiejuarez@xylar.com", - "phone": "+1 (882) 492-3812", - "address": "230 Grattan Street, Dunbar, Delaware, 5135", - "about": "Aliquip consequat quis id mollit. Sint est quis qui fugiat. Veniam voluptate officia proident ut laborum ad ipsum minim fugiat eu cupidatat in voluptate labore. Sit id exercitation laborum veniam eu proident laborum cupidatat proident nisi consequat occaecat.\r\n", - "registered": "2014-12-20T11:04:47 +05:00", - "latitude": 70.606824, - "longitude": -112.784018, - "tags": ["commodo", "ipsum", "aliquip", "duis", "exercitation", "eu", "veniam"], - "friends": [ - { - "id": 0, - "name": "Thompson Humphrey" - }, - { - "id": 1, - "name": "Sampson Woodard" - }, - { - "id": 2, - "name": "Ronda Cole" - } - ], - "greeting": "Hello, Maggie Juarez! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc9b23a7dcdf3d31c", - "index": 348, - "guid": "01e7f0df-eb99-4a71-8973-86e014ec7f68", - "isActive": false, - "balance": "$3,988.26", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Margie Cobb", - "gender": "female", - "company": "CORMORAN", - "email": "margiecobb@cormoran.com", - "phone": "+1 (950) 498-3432", - "address": "730 Seba Avenue, Bethany, Guam, 5091", - "about": "Amet incididunt est laboris quis tempor exercitation duis sint mollit ea. Velit exercitation aute non eiusmod elit et deserunt qui. Esse qui velit labore ea nostrud. Ullamco nulla elit in ullamco ut in anim commodo do eu esse aute veniam dolor.\r\n", - "registered": "2018-07-26T01:09:39 +04:00", - "latitude": -56.980383, - "longitude": 28.268083, - "tags": ["fugiat", "eu", "est", "velit", "ut", "quis", "est"], - "friends": [ - { - "id": 0, - "name": "Lindsey Hopper" - }, - { - "id": 1, - "name": "Marilyn Sykes" - }, - { - "id": 2, - "name": "Contreras David" - } - ], - "greeting": "Hello, Margie Cobb! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d444ba11c19d35e30", - "index": 349, - "guid": "42c4e558-8e1d-4998-9786-368fcfa8ca01", - "isActive": true, - "balance": "$1,290.49", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Ryan Gardner", - "gender": "male", - "company": "PUSHCART", - "email": "ryangardner@pushcart.com", - "phone": "+1 (854) 505-3767", - "address": "306 Stoddard Place, Cassel, Oregon, 9098", - "about": "Commodo anim laboris eiusmod amet do et esse tempor esse commodo. Commodo sunt Lorem eiusmod minim magna. Sint non commodo commodo tempor pariatur adipisicing ea in culpa. Non deserunt minim ullamco excepteur dolor ad irure adipisicing magna voluptate. Cupidatat proident nostrud non laboris commodo.\r\n", - "registered": "2018-01-01T09:29:34 +05:00", - "latitude": -81.138655, - "longitude": -64.253207, - "tags": ["officia", "laboris", "irure", "nulla", "ullamco", "voluptate", "velit"], - "friends": [ - { - "id": 0, - "name": "Key Butler" - }, - { - "id": 1, - "name": "Branch Prince" - }, - { - "id": 2, - "name": "Sparks Riddle" - } - ], - "greeting": "Hello, Ryan Gardner! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd87f039c4a82524f", - "index": 350, - "guid": "71f0372b-8a35-4d82-b0d5-2118871db33d", - "isActive": true, - "balance": "$1,931.25", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Sophie Romero", - "gender": "female", - "company": "FLUMBO", - "email": "sophieromero@flumbo.com", - "phone": "+1 (942) 489-2644", - "address": "878 Kingsway Place, Datil, Missouri, 1445", - "about": "Cupidatat commodo culpa veniam deserunt pariatur. Esse dolor anim ex fugiat consequat ullamco voluptate enim fugiat fugiat duis. Excepteur commodo et culpa aute incididunt dolor aliqua sit. Ullamco cupidatat amet eiusmod irure anim nostrud aliqua ad nostrud est.\r\n", - "registered": "2017-05-09T09:31:43 +04:00", - "latitude": 78.419296, - "longitude": -76.572454, - "tags": ["amet", "eu", "et", "id", "nisi", "ex", "velit"], - "friends": [ - { - "id": 0, - "name": "Mcmillan Mccarthy" - }, - { - "id": 1, - "name": "Vicky Black" - }, - { - "id": 2, - "name": "Eva Bird" - } - ], - "greeting": "Hello, Sophie Romero! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dff45e6a34a1f1b32", - "index": 351, - "guid": "448ce4f7-d98a-4d79-b34a-30d25665e47d", - "isActive": false, - "balance": "$3,187.56", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Trudy Mccray", - "gender": "female", - "company": "OPTICON", - "email": "trudymccray@opticon.com", - "phone": "+1 (956) 593-2602", - "address": "750 Conover Street, Westboro, Montana, 2942", - "about": "Enim cupidatat est tempor excepteur sint deserunt magna nulla qui et. Incididunt veniam aliquip cupidatat aute minim duis consectetur proident cupidatat et aute velit. Et sint quis occaecat aute id id. Ea enim duis incididunt veniam dolore aliqua. Reprehenderit id sint ad commodo cupidatat qui cillum non est occaecat. Proident ad ullamco mollit laborum ex nostrud excepteur aute dolor labore non commodo irure officia.\r\n", - "registered": "2017-11-09T03:22:10 +05:00", - "latitude": 70.474306, - "longitude": -101.723175, - "tags": ["dolore", "in", "non", "consectetur", "id", "velit", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Brady Chang" - }, - { - "id": 1, - "name": "Keisha Doyle" - }, - { - "id": 2, - "name": "Le Joseph" - } - ], - "greeting": "Hello, Trudy Mccray! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d959800ee543dd993", - "index": 352, - "guid": "58d40039-df9d-47ae-9a72-cc15c77c68f1", - "isActive": false, - "balance": "$2,127.22", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Whitfield Simmons", - "gender": "male", - "company": "TERRASYS", - "email": "whitfieldsimmons@terrasys.com", - "phone": "+1 (924) 439-2432", - "address": "912 Chestnut Avenue, Mooresburg, Alaska, 8350", - "about": "Sint elit ullamco dolore est sunt magna Lorem consectetur veniam nisi. Laborum sunt sint aliqua incididunt. Culpa ex anim cillum veniam cillum. Ad quis laborum cupidatat id aute culpa fugiat cillum amet do pariatur ad qui ullamco. Voluptate aliqua velit et ex tempor eu laborum adipisicing qui quis. Occaecat ipsum anim officia sint.\r\n", - "registered": "2018-09-22T08:18:14 +04:00", - "latitude": 35.198025, - "longitude": -156.739752, - "tags": ["officia", "non", "fugiat", "sint", "est", "aliqua", "commodo"], - "friends": [ - { - "id": 0, - "name": "Cote Walton" - }, - { - "id": 1, - "name": "Ratliff Stevens" - }, - { - "id": 2, - "name": "Tasha Woods" - } - ], - "greeting": "Hello, Whitfield Simmons! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d832b147dc99375c3", - "index": 353, - "guid": "30e3368c-6c5d-49e4-b5ce-1a2e83fdf759", - "isActive": true, - "balance": "$3,878.43", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Hansen Knowles", - "gender": "male", - "company": "GYNK", - "email": "hansenknowles@gynk.com", - "phone": "+1 (925) 444-3398", - "address": "744 Sharon Street, Maybell, Kentucky, 260", - "about": "Deserunt minim incididunt sit fugiat ex occaecat quis dolor eu adipisicing cupidatat. Reprehenderit veniam consequat excepteur minim ea tempor ea in. Labore excepteur velit adipisicing enim sint proident. Incididunt ipsum mollit tempor eu magna incididunt exercitation voluptate laboris. Ipsum ad deserunt amet duis esse nulla anim eu anim qui adipisicing cillum.\r\n", - "registered": "2018-01-27T12:53:49 +05:00", - "latitude": 65.027633, - "longitude": 35.84349, - "tags": ["qui", "nulla", "amet", "aliquip", "et", "nulla", "ex"], - "friends": [ - { - "id": 0, - "name": "Ford Michael" - }, - { - "id": 1, - "name": "Rachael Velazquez" - }, - { - "id": 2, - "name": "Althea Cotton" - } - ], - "greeting": "Hello, Hansen Knowles! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d467c3c1860696f23", - "index": 354, - "guid": "9500692e-fb9b-4db4-ba00-f2deff2edb7f", - "isActive": true, - "balance": "$1,048.99", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Koch Richard", - "gender": "male", - "company": "BALUBA", - "email": "kochrichard@baluba.com", - "phone": "+1 (943) 568-2324", - "address": "288 Devon Avenue, Grill, Mississippi, 2370", - "about": "Eiusmod officia fugiat consectetur proident id nulla do ea mollit anim consequat. Nisi aute incididunt esse et fugiat et. Amet dolor reprehenderit ad velit qui enim ullamco velit aliquip. In adipisicing anim ullamco Lorem mollit minim amet ullamco.\r\n", - "registered": "2017-09-23T01:27:10 +04:00", - "latitude": -55.776531, - "longitude": -134.567345, - "tags": ["cillum", "nostrud", "dolore", "irure", "mollit", "labore", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Clare Barnes" - }, - { - "id": 1, - "name": "Melanie Lang" - }, - { - "id": 2, - "name": "Kathleen Harding" - } - ], - "greeting": "Hello, Koch Richard! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da9cd223a072ee114", - "index": 355, - "guid": "6e798587-9c8e-443d-bd4d-21cac5b1262c", - "isActive": false, - "balance": "$1,493.69", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Aisha Townsend", - "gender": "female", - "company": "ZILIDIUM", - "email": "aishatownsend@zilidium.com", - "phone": "+1 (911) 557-3839", - "address": "619 Poplar Avenue, Goldfield, North Dakota, 2045", - "about": "Ex quis commodo ullamco ipsum aliquip eu ut deserunt cupidatat aliquip irure. Ut ipsum non excepteur officia irure cillum do culpa deserunt Lorem id. Nisi dolore occaecat elit amet deserunt sint adipisicing nisi magna ut Lorem esse. Aute sint qui magna esse voluptate nostrud nisi esse commodo incididunt commodo exercitation.\r\n", - "registered": "2015-10-22T04:44:18 +04:00", - "latitude": -86.855161, - "longitude": 9.54153, - "tags": ["ullamco", "do", "amet", "irure", "cupidatat", "velit", "quis"], - "friends": [ - { - "id": 0, - "name": "Graves Dunn" - }, - { - "id": 1, - "name": "Buckner Rosa" - }, - { - "id": 2, - "name": "Bertha Savage" - } - ], - "greeting": "Hello, Aisha Townsend! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d791d3d51b4a0202e", - "index": 356, - "guid": "24f5406f-2b0b-4026-a176-87e61c79ee7a", - "isActive": true, - "balance": "$3,180.51", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Duncan Crane", - "gender": "male", - "company": "CODACT", - "email": "duncancrane@codact.com", - "phone": "+1 (820) 550-3372", - "address": "562 Grand Street, Glidden, Federated States Of Micronesia, 2848", - "about": "Duis dolore officia aliqua laboris adipisicing. Deserunt enim nostrud veniam minim. Aliquip magna anim anim laboris commodo nulla sint cupidatat sit fugiat mollit. Ipsum duis id et duis enim sunt quis sit eu quis sint consequat aute.\r\n", - "registered": "2018-05-24T12:16:23 +04:00", - "latitude": 9.634413, - "longitude": 95.746405, - "tags": ["eu", "eu", "id", "enim", "quis", "cupidatat", "enim"], - "friends": [ - { - "id": 0, - "name": "Rodriquez Phelps" - }, - { - "id": 1, - "name": "Myrna Boone" - }, - { - "id": 2, - "name": "Hudson Pope" - } - ], - "greeting": "Hello, Duncan Crane! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc15a0101558992bb", - "index": 357, - "guid": "be5374aa-6dbf-4d5f-a98d-68180e86de56", - "isActive": true, - "balance": "$2,530.12", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Latisha Bishop", - "gender": "female", - "company": "FANGOLD", - "email": "latishabishop@fangold.com", - "phone": "+1 (913) 526-2182", - "address": "819 Crystal Street, Delco, Maryland, 9510", - "about": "Ut excepteur labore veniam laboris consectetur. Cupidatat commodo sint quis occaecat aliquip fugiat ullamco ad anim ea. Est enim sint ullamco commodo amet velit ipsum cillum aliquip aliquip.\r\n", - "registered": "2017-11-22T05:35:22 +05:00", - "latitude": -68.875298, - "longitude": 93.290932, - "tags": ["consequat", "nulla", "occaecat", "quis", "minim", "culpa", "id"], - "friends": [ - { - "id": 0, - "name": "Tucker French" - }, - { - "id": 1, - "name": "Winters Gibbs" - }, - { - "id": 2, - "name": "Rice Holmes" - } - ], - "greeting": "Hello, Latisha Bishop! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d977b74645d334496", - "index": 358, - "guid": "0b20a4e0-a950-4a07-8777-ee488e198041", - "isActive": false, - "balance": "$2,591.13", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Noelle Sampson", - "gender": "female", - "company": "ZILENCIO", - "email": "noellesampson@zilencio.com", - "phone": "+1 (961) 589-2415", - "address": "641 Bancroft Place, Adelino, Virgin Islands, 6972", - "about": "Pariatur ut est sint occaecat nostrud ea occaecat consequat id dolor labore elit. Consequat ut irure eu elit adipisicing eu aliquip eiusmod proident eu nostrud. Dolor mollit duis deserunt veniam Lorem. Nulla amet commodo magna incididunt consectetur proident consequat id aliquip irure officia quis do nostrud. Anim voluptate nulla pariatur laborum. Consequat voluptate reprehenderit est irure nostrud deserunt elit et. Nostrud consectetur eiusmod Lorem mollit ad incididunt.\r\n", - "registered": "2020-07-25T09:00:06 +04:00", - "latitude": -79.562615, - "longitude": -162.990206, - "tags": ["nostrud", "nostrud", "pariatur", "anim", "tempor", "in", "mollit"], - "friends": [ - { - "id": 0, - "name": "Rodgers Marsh" - }, - { - "id": 1, - "name": "Doyle Estrada" - }, - { - "id": 2, - "name": "Dianne Greene" - } - ], - "greeting": "Hello, Noelle Sampson! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4392ef54accccff4", - "index": 359, - "guid": "fb1aa62c-2c6b-4636-b0e4-ea7f4db89b07", - "isActive": true, - "balance": "$1,327.20", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Lidia Leonard", - "gender": "female", - "company": "EARTHPURE", - "email": "lidialeonard@earthpure.com", - "phone": "+1 (803) 495-3901", - "address": "872 Metropolitan Avenue, Mansfield, Pennsylvania, 3599", - "about": "Et quis ad enim eu. Lorem eiusmod sunt exercitation esse eiusmod et non. Quis labore cillum eiusmod ullamco consequat tempor mollit id. Exercitation occaecat irure adipisicing sunt ad consequat esse non.\r\n", - "registered": "2018-08-05T09:49:01 +04:00", - "latitude": -44.22344, - "longitude": 155.352388, - "tags": ["sint", "sunt", "mollit", "voluptate", "tempor", "Lorem", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Ball Cortez" - }, - { - "id": 1, - "name": "Debbie Marquez" - }, - { - "id": 2, - "name": "Deidre Hall" - } - ], - "greeting": "Hello, Lidia Leonard! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd01498b141b8504b", - "index": 360, - "guid": "055bb289-1433-4766-9ad5-485ee8907096", - "isActive": false, - "balance": "$3,359.87", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Mcdaniel Cantrell", - "gender": "male", - "company": "OVOLO", - "email": "mcdanielcantrell@ovolo.com", - "phone": "+1 (807) 426-3263", - "address": "126 Lake Street, Kilbourne, Washington, 9804", - "about": "Pariatur proident Lorem occaecat do aliquip ipsum ipsum esse sunt mollit voluptate dolore deserunt adipisicing. Minim ipsum eu occaecat veniam aute dolore ipsum labore amet enim est eu. Officia officia magna nulla officia sint. Ex irure Lorem Lorem amet adipisicing ex.\r\n", - "registered": "2014-03-14T10:27:11 +04:00", - "latitude": -33.520957, - "longitude": -67.180924, - "tags": ["deserunt", "non", "exercitation", "elit", "aliquip", "non", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Potts Heath" - }, - { - "id": 1, - "name": "Polly Barker" - }, - { - "id": 2, - "name": "Billie Trujillo" - } - ], - "greeting": "Hello, Mcdaniel Cantrell! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dcf005493acf6d0b8", - "index": 361, - "guid": "f898cd72-8dbf-430b-90b5-2140e86e8c1e", - "isActive": false, - "balance": "$3,888.27", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Shelby Franco", - "gender": "female", - "company": "KINETICUT", - "email": "shelbyfranco@kineticut.com", - "phone": "+1 (805) 432-2386", - "address": "554 Harman Street, Naomi, Illinois, 1969", - "about": "Amet mollit adipisicing consectetur eiusmod irure elit dolore non do Lorem tempor minim anim ad. Incididunt nostrud ex excepteur labore sit pariatur exercitation commodo officia. Nulla qui adipisicing elit laboris minim proident incididunt dolore fugiat proident. Id fugiat exercitation pariatur consectetur enim. Quis labore est ut laboris elit ullamco tempor magna magna dolor officia id.\r\n", - "registered": "2019-05-09T12:31:20 +04:00", - "latitude": -32.081927, - "longitude": -91.170189, - "tags": ["consequat", "labore", "excepteur", "in", "excepteur", "laboris", "esse"], - "friends": [ - { - "id": 0, - "name": "Kathryn Wiggins" - }, - { - "id": 1, - "name": "Toni Harmon" - }, - { - "id": 2, - "name": "Marisa Koch" - } - ], - "greeting": "Hello, Shelby Franco! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25daabff2a5bb898cd9", - "index": 362, - "guid": "f09a7148-0fec-4f1c-9e29-f0d6c1661ca4", - "isActive": false, - "balance": "$1,035.02", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Catalina Blankenship", - "gender": "female", - "company": "COASH", - "email": "catalinablankenship@coash.com", - "phone": "+1 (943) 588-3948", - "address": "505 Corbin Place, Chelsea, New Hampshire, 6424", - "about": "Nulla amet voluptate ex Lorem sint. Veniam adipisicing incididunt tempor mollit esse occaecat dolor voluptate consectetur. Tempor anim consectetur amet laboris labore. Nostrud excepteur ut minim nulla officia. Cillum duis tempor non ut proident mollit ex enim.\r\n", - "registered": "2016-12-25T04:09:48 +05:00", - "latitude": 83.09348, - "longitude": -26.748452, - "tags": ["Lorem", "culpa", "excepteur", "enim", "ullamco", "sit", "eu"], - "friends": [ - { - "id": 0, - "name": "Hahn Wade" - }, - { - "id": 1, - "name": "House Ryan" - }, - { - "id": 2, - "name": "Jannie Wise" - } - ], - "greeting": "Hello, Catalina Blankenship! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d692cc4f27512d8ed", - "index": 363, - "guid": "528ba490-5517-4d24-bd79-f7ce30b337f9", - "isActive": true, - "balance": "$3,505.87", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Hannah Padilla", - "gender": "female", - "company": "EDECINE", - "email": "hannahpadilla@edecine.com", - "phone": "+1 (960) 518-3469", - "address": "700 Surf Avenue, Vernon, Colorado, 6321", - "about": "Ex nostrud cupidatat quis mollit. Culpa ullamco cupidatat nulla id commodo laborum. Ad minim duis esse id excepteur aliqua nostrud laboris. Ea amet voluptate et tempor irure officia aliqua mollit. Ex anim cupidatat fugiat duis pariatur eu occaecat deserunt duis ipsum dolor amet et fugiat.\r\n", - "registered": "2017-02-12T05:51:25 +05:00", - "latitude": -86.521326, - "longitude": 145.033075, - "tags": ["non", "excepteur", "mollit", "laborum", "in", "commodo", "culpa"], - "friends": [ - { - "id": 0, - "name": "Elisa Horne" - }, - { - "id": 1, - "name": "Mcconnell Leach" - }, - { - "id": 2, - "name": "Alta Phillips" - } - ], - "greeting": "Hello, Hannah Padilla! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d05912647dd33b4aa", - "index": 364, - "guid": "539d68aa-f418-4d31-b5f8-e35c41ade2e9", - "isActive": true, - "balance": "$2,843.50", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Sanders Schroeder", - "gender": "male", - "company": "KEEG", - "email": "sandersschroeder@keeg.com", - "phone": "+1 (819) 576-3088", - "address": "798 Bradford Street, Irwin, Maine, 5097", - "about": "Tempor et qui aute deserunt laborum amet tempor et ea ex nostrud. Deserunt exercitation laborum eu fugiat non sit. Quis minim proident magna minim ipsum pariatur eiusmod duis excepteur nostrud duis dolor non.\r\n", - "registered": "2014-10-02T07:49:31 +04:00", - "latitude": -74.707961, - "longitude": 143.491227, - "tags": ["non", "consequat", "elit", "aliquip", "deserunt", "duis", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Juliana Curtis" - }, - { - "id": 1, - "name": "Laverne Ewing" - }, - { - "id": 2, - "name": "Townsend Thornton" - } - ], - "greeting": "Hello, Sanders Schroeder! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9a05d4ad9ee5b88d", - "index": 365, - "guid": "e92843a8-61ed-4136-916e-d76bbd4b294a", - "isActive": false, - "balance": "$2,504.53", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Browning Rowe", - "gender": "male", - "company": "EXOSWITCH", - "email": "browningrowe@exoswitch.com", - "phone": "+1 (935) 512-2067", - "address": "394 Wythe Place, Garfield, South Carolina, 1187", - "about": "Minim ipsum reprehenderit laborum ea quis reprehenderit consectetur cillum in Lorem voluptate excepteur ea ullamco. Fugiat laborum aliqua qui anim do ut reprehenderit culpa sint minim tempor quis. Veniam pariatur ut ad veniam ea ipsum pariatur magna non culpa ullamco sint qui. Amet do et duis quis. Incididunt magna et officia Lorem elit quis ipsum minim aute et commodo Lorem. Culpa ipsum et magna cupidatat non do nostrud proident eu cillum. Pariatur id mollit cupidatat eiusmod nulla sit enim culpa reprehenderit minim consectetur pariatur laborum.\r\n", - "registered": "2016-09-07T11:42:42 +04:00", - "latitude": 87.583695, - "longitude": -127.69449, - "tags": ["enim", "in", "qui", "esse", "magna", "enim", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Elba Gutierrez" - }, - { - "id": 1, - "name": "Ross Burns" - }, - { - "id": 2, - "name": "Sasha Valdez" - } - ], - "greeting": "Hello, Browning Rowe! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d399341a6ddaf02b6", - "index": 366, - "guid": "da42cde7-9e50-40ca-a88d-d9161b730f45", - "isActive": false, - "balance": "$2,690.76", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Claudine Pruitt", - "gender": "female", - "company": "SNORUS", - "email": "claudinepruitt@snorus.com", - "phone": "+1 (893) 476-3543", - "address": "982 Moffat Street, Ferney, Connecticut, 7752", - "about": "Eiusmod do nulla laborum magna Lorem non occaecat magna culpa aute duis eu minim mollit. Cillum consectetur occaecat dolor exercitation officia deserunt. Mollit incididunt culpa ad Lorem commodo eiusmod commodo duis.\r\n", - "registered": "2014-10-09T06:28:06 +04:00", - "latitude": 3.400823, - "longitude": 100.94227, - "tags": [ - "consectetur", - "adipisicing", - "ipsum", - "exercitation", - "excepteur", - "consectetur", - "non" - ], - "friends": [ - { - "id": 0, - "name": "Sharon Welch" - }, - { - "id": 1, - "name": "Marquez Love" - }, - { - "id": 2, - "name": "Carey Christian" - } - ], - "greeting": "Hello, Claudine Pruitt! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd64b20b507b1faf4", - "index": 367, - "guid": "0cb40b54-3b2c-4bbe-bc6c-86f3de9b36ba", - "isActive": true, - "balance": "$1,663.48", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Marjorie Orr", - "gender": "female", - "company": "UTARA", - "email": "marjorieorr@utara.com", - "phone": "+1 (853) 508-2638", - "address": "797 Bergen Place, Avoca, Virginia, 7345", - "about": "Culpa id eiusmod aliqua laboris. Occaecat mollit cupidatat commodo sunt reprehenderit anim. Irure labore ea adipisicing consequat ipsum. Nulla Lorem est esse fugiat ea.\r\n", - "registered": "2020-09-03T01:16:52 +04:00", - "latitude": -13.331784, - "longitude": 131.968045, - "tags": ["aliquip", "non", "deserunt", "qui", "incididunt", "eiusmod", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Nona Hodges" - }, - { - "id": 1, - "name": "Blanca Dalton" - }, - { - "id": 2, - "name": "Nieves Sloan" - } - ], - "greeting": "Hello, Marjorie Orr! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3ef8a95934642638", - "index": 368, - "guid": "3bc1a98c-802e-44b5-9a84-62ec774e080e", - "isActive": false, - "balance": "$2,427.87", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Wooten Dillard", - "gender": "male", - "company": "ZIGGLES", - "email": "wootendillard@ziggles.com", - "phone": "+1 (981) 424-3900", - "address": "626 Rutledge Street, Sisquoc, Georgia, 9083", - "about": "Reprehenderit aute commodo ea elit culpa. Qui cupidatat aliqua commodo cupidatat officia Lorem nulla dolore occaecat. Ad amet sint occaecat nostrud cupidatat ea cupidatat adipisicing eiusmod. Voluptate do aliqua officia aliqua sit. Dolore ullamco deserunt mollit officia dolore deserunt ea minim.\r\n", - "registered": "2020-08-21T03:26:04 +04:00", - "latitude": -83.970581, - "longitude": -78.079074, - "tags": ["do", "tempor", "et", "fugiat", "minim", "enim", "sunt"], - "friends": [ - { - "id": 0, - "name": "Malinda Coleman" - }, - { - "id": 1, - "name": "Pruitt Gillespie" - }, - { - "id": 2, - "name": "Bryan Miles" - } - ], - "greeting": "Hello, Wooten Dillard! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2330eeca2bef8e41", - "index": 369, - "guid": "ce09cd07-6cf0-4a73-b264-fabdfb17eb3a", - "isActive": false, - "balance": "$1,279.48", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Edith Fletcher", - "gender": "female", - "company": "SQUISH", - "email": "edithfletcher@squish.com", - "phone": "+1 (825) 557-2095", - "address": "694 Bragg Street, Smeltertown, New Jersey, 4877", - "about": "Ex pariatur aliqua laborum sit sunt. Officia deserunt Lorem deserunt nostrud ut ad sit sunt enim qui. Enim excepteur id mollit veniam elit eiusmod adipisicing nisi proident culpa ipsum aute. Qui in cillum elit voluptate commodo pariatur fugiat Lorem. Voluptate aute elit incididunt voluptate officia. Quis culpa reprehenderit anim incididunt. Enim in tempor pariatur eiusmod enim commodo amet qui incididunt est tempor.\r\n", - "registered": "2020-02-26T03:21:15 +05:00", - "latitude": -88.801934, - "longitude": -161.629663, - "tags": ["exercitation", "qui", "aliqua", "sunt", "pariatur", "sunt", "nulla"], - "friends": [ - { - "id": 0, - "name": "Wiggins Jacobson" - }, - { - "id": 1, - "name": "Reilly Mejia" - }, - { - "id": 2, - "name": "Watts Terry" - } - ], - "greeting": "Hello, Edith Fletcher! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d413b2cd746f3cc54", - "index": 370, - "guid": "db11b71f-1153-4248-bd60-682b1e889c1f", - "isActive": true, - "balance": "$2,945.72", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Lynn Fry", - "gender": "male", - "company": "DANCERITY", - "email": "lynnfry@dancerity.com", - "phone": "+1 (884) 594-3309", - "address": "921 Centre Street, Roulette, Minnesota, 4195", - "about": "Non aliquip enim id officia velit occaecat. Magna irure nulla labore qui voluptate do labore cillum sit magna anim mollit veniam dolore. Voluptate pariatur officia irure exercitation in et aute elit eiusmod veniam. Pariatur duis occaecat qui adipisicing labore in sunt magna qui nulla culpa pariatur. Tempor duis commodo culpa laborum.\r\n", - "registered": "2014-09-12T03:11:48 +04:00", - "latitude": -26.637945, - "longitude": 39.060553, - "tags": ["ullamco", "deserunt", "incididunt", "consectetur", "commodo", "voluptate", "in"], - "friends": [ - { - "id": 0, - "name": "Burt Valencia" - }, - { - "id": 1, - "name": "Jeri Huber" - }, - { - "id": 2, - "name": "Roberta Nash" - } - ], - "greeting": "Hello, Lynn Fry! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc4767077fae8cc2c", - "index": 371, - "guid": "378422fe-0c9c-4f80-bc28-c5d39f6b46f5", - "isActive": false, - "balance": "$2,445.02", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Lois Weeks", - "gender": "female", - "company": "DOGNOST", - "email": "loisweeks@dognost.com", - "phone": "+1 (910) 407-2668", - "address": "993 Hendrix Street, National, Texas, 1618", - "about": "Dolore non excepteur dolor qui proident cupidatat ullamco ad laboris culpa laboris voluptate. Qui non id irure labore amet duis. Magna ullamco nisi laborum dolore adipisicing tempor laboris sint. Ut irure pariatur cupidatat non aliqua consectetur et non sint id cillum.\r\n", - "registered": "2017-12-19T06:43:48 +05:00", - "latitude": -71.567205, - "longitude": 23.785019, - "tags": ["culpa", "cillum", "duis", "aliqua", "culpa", "excepteur", "mollit"], - "friends": [ - { - "id": 0, - "name": "Hampton Mendoza" - }, - { - "id": 1, - "name": "Russell Rice" - }, - { - "id": 2, - "name": "Norman Bradshaw" - } - ], - "greeting": "Hello, Lois Weeks! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc4781ba5da9340ba", - "index": 372, - "guid": "b41748cc-2021-4d48-8457-abac76017d9f", - "isActive": false, - "balance": "$1,500.77", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Therese Mcdaniel", - "gender": "female", - "company": "TROLLERY", - "email": "theresemcdaniel@trollery.com", - "phone": "+1 (962) 500-3269", - "address": "875 Holly Street, Roosevelt, Alabama, 5087", - "about": "Eu enim sunt Lorem et dolore minim quis Lorem nisi enim ut ad. Quis reprehenderit voluptate qui excepteur duis pariatur consectetur anim. Culpa ullamco nisi ex sunt eiusmod nulla deserunt cupidatat qui aute. Irure exercitation consectetur duis ullamco consequat.\r\n", - "registered": "2016-02-20T07:15:33 +05:00", - "latitude": 55.639545, - "longitude": 144.903166, - "tags": ["Lorem", "ut", "ut", "sint", "et", "ut", "aute"], - "friends": [ - { - "id": 0, - "name": "Grimes Atkins" - }, - { - "id": 1, - "name": "Beck Ortiz" - }, - { - "id": 2, - "name": "Burton Bradley" - } - ], - "greeting": "Hello, Therese Mcdaniel! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d779af9d826437a74", - "index": 373, - "guid": "ae85d416-dd8e-41c5-be96-b4909dfe07d5", - "isActive": false, - "balance": "$2,027.97", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Sally Alvarado", - "gender": "female", - "company": "MIXERS", - "email": "sallyalvarado@mixers.com", - "phone": "+1 (839) 435-3511", - "address": "506 Nova Court, Berwind, Rhode Island, 2123", - "about": "Adipisicing enim ad irure irure laboris voluptate do dolore officia. Quis consequat velit voluptate amet qui ea proident cillum ipsum quis mollit minim sit. Pariatur amet exercitation veniam pariatur qui do dolore mollit. Dolor aliquip adipisicing dolore mollit aute deserunt dolor cillum velit incididunt ad. Elit minim dolor officia aliquip dolore proident mollit labore sunt.\r\n", - "registered": "2017-12-10T02:14:55 +05:00", - "latitude": 37.760863, - "longitude": -47.724932, - "tags": ["nulla", "anim", "amet", "aute", "excepteur", "laborum", "sit"], - "friends": [ - { - "id": 0, - "name": "Mendoza Hale" - }, - { - "id": 1, - "name": "Jennie Cohen" - }, - { - "id": 2, - "name": "Garrett Cash" - } - ], - "greeting": "Hello, Sally Alvarado! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d39691520d0149f70", - "index": 374, - "guid": "3d60215a-ca94-41ed-888b-a9234af657ed", - "isActive": false, - "balance": "$2,832.50", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Silva Wilkins", - "gender": "male", - "company": "GOLOGY", - "email": "silvawilkins@gology.com", - "phone": "+1 (922) 437-3250", - "address": "743 Story Court, Keyport, Florida, 8952", - "about": "Duis nulla nulla incididunt fugiat tempor in. Ad laboris non adipisicing aute ut exercitation velit laborum adipisicing. Ut nostrud in officia fugiat irure consectetur dolore ea ullamco. Enim qui minim in ad enim ex qui deserunt ipsum veniam veniam. In culpa nostrud enim non ea.\r\n", - "registered": "2019-11-22T08:38:19 +05:00", - "latitude": 38.736787, - "longitude": 109.638689, - "tags": ["et", "anim", "dolore", "adipisicing", "dolore", "ipsum", "enim"], - "friends": [ - { - "id": 0, - "name": "Alyce Lindsay" - }, - { - "id": 1, - "name": "Flores Hendricks" - }, - { - "id": 2, - "name": "Leta Davis" - } - ], - "greeting": "Hello, Silva Wilkins! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1311fd2a0b60f1bf", - "index": 375, - "guid": "c36a3c73-d35e-43ae-8372-ee4e81c1e750", - "isActive": true, - "balance": "$1,302.99", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Marshall Mcintyre", - "gender": "male", - "company": "PLASMOX", - "email": "marshallmcintyre@plasmox.com", - "phone": "+1 (907) 546-2291", - "address": "992 Willoughby Avenue, Lund, Indiana, 8501", - "about": "Labore velit non commodo consequat ullamco irure pariatur amet ex fugiat ea. Nisi laborum consectetur in exercitation commodo excepteur sunt id in laborum excepteur reprehenderit. Sit esse laboris voluptate non aute. Do aliquip minim qui consectetur dolor quis cillum aute amet cupidatat aliqua voluptate laborum exercitation.\r\n", - "registered": "2017-02-27T02:53:26 +05:00", - "latitude": 16.595999, - "longitude": 29.809405, - "tags": ["irure", "ullamco", "commodo", "elit", "cillum", "id", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Jamie Long" - }, - { - "id": 1, - "name": "Stout Joyce" - }, - { - "id": 2, - "name": "Elise Pacheco" - } - ], - "greeting": "Hello, Marshall Mcintyre! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d58f0c39cdb04a381", - "index": 376, - "guid": "2f09ef2d-421d-43d4-b342-2d886fb38fde", - "isActive": true, - "balance": "$2,177.59", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Kinney Frazier", - "gender": "male", - "company": "TROPOLI", - "email": "kinneyfrazier@tropoli.com", - "phone": "+1 (954) 587-3148", - "address": "248 Harwood Place, Shasta, Northern Mariana Islands, 1087", - "about": "Officia occaecat voluptate elit laborum veniam amet sint ipsum qui. Esse cupidatat magna veniam nostrud. Dolor nostrud enim esse quis elit eu aliqua. Amet ea aute consectetur voluptate non eiusmod irure ut.\r\n", - "registered": "2019-05-26T09:14:30 +04:00", - "latitude": 84.014473, - "longitude": -121.504196, - "tags": ["velit", "dolor", "exercitation", "mollit", "ullamco", "officia", "labore"], - "friends": [ - { - "id": 0, - "name": "Mara Payne" - }, - { - "id": 1, - "name": "Hoover Everett" - }, - { - "id": 2, - "name": "Marcia Klein" - } - ], - "greeting": "Hello, Kinney Frazier! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcc797c1aa4098b67", - "index": 377, - "guid": "87d0041e-336f-4384-8c7f-720108ede2f2", - "isActive": true, - "balance": "$3,683.50", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Joni Byers", - "gender": "female", - "company": "EVIDENDS", - "email": "jonibyers@evidends.com", - "phone": "+1 (902) 483-2529", - "address": "554 Fane Court, Brewster, Idaho, 9235", - "about": "Eiusmod consectetur deserunt minim incididunt magna quis. Proident culpa qui ipsum ea et officia laborum aliquip exercitation anim incididunt sint adipisicing. Incididunt reprehenderit dolore esse culpa amet duis deserunt commodo. Nostrud tempor anim ad sunt veniam non magna reprehenderit amet esse duis fugiat nisi mollit. Sit aliqua pariatur nostrud anim tempor commodo quis est. Do laboris veniam adipisicing nulla velit do ea magna cupidatat ipsum eu excepteur ex.\r\n", - "registered": "2018-01-16T06:49:47 +05:00", - "latitude": -76.824864, - "longitude": 111.651018, - "tags": ["ipsum", "dolor", "culpa", "sint", "ea", "cupidatat", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Blackwell Poole" - }, - { - "id": 1, - "name": "Rhodes Medina" - }, - { - "id": 2, - "name": "Duran Cross" - } - ], - "greeting": "Hello, Joni Byers! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d69525dad7cdc543b", - "index": 378, - "guid": "3c94cc33-2a0b-4002-9018-223d23461fbf", - "isActive": false, - "balance": "$3,866.61", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Angelica Foster", - "gender": "female", - "company": "MEDMEX", - "email": "angelicafoster@medmex.com", - "phone": "+1 (988) 493-3229", - "address": "689 Norfolk Street, Rew, District Of Columbia, 1973", - "about": "Esse fugiat tempor occaecat elit non consequat. Est ex commodo id cillum et laboris cillum ad enim sint id incididunt. Mollit non nulla do duis amet deserunt reprehenderit sit Lorem.\r\n", - "registered": "2019-05-07T09:19:41 +04:00", - "latitude": -30.325356, - "longitude": -32.173765, - "tags": ["est", "adipisicing", "eiusmod", "laborum", "reprehenderit", "irure", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Mercedes Ford" - }, - { - "id": 1, - "name": "Leblanc Giles" - }, - { - "id": 2, - "name": "Landry Clay" - } - ], - "greeting": "Hello, Angelica Foster! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4de611d1d23217c6", - "index": 379, - "guid": "46e4d439-dac9-425e-afd4-0b7e54a08be8", - "isActive": true, - "balance": "$1,748.47", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Velasquez Mayer", - "gender": "male", - "company": "PYRAMIS", - "email": "velasquezmayer@pyramis.com", - "phone": "+1 (998) 408-3829", - "address": "158 Royce Place, Ventress, New Mexico, 6613", - "about": "Aliquip deserunt ex ad ea incididunt irure proident laborum quis laborum nostrud. Ad nulla in voluptate nisi adipisicing veniam adipisicing amet occaecat sint deserunt proident exercitation. Veniam cupidatat velit pariatur enim sint laborum voluptate anim. Tempor ex magna mollit est et excepteur sint enim cupidatat occaecat. Amet irure aliqua consectetur cupidatat est esse labore. In ea occaecat commodo anim consectetur Lorem mollit aliquip dolore. Fugiat aute eiusmod voluptate sint est qui reprehenderit occaecat nulla minim in ut commodo anim.\r\n", - "registered": "2019-08-07T10:59:03 +04:00", - "latitude": -36.412607, - "longitude": -135.010064, - "tags": ["proident", "incididunt", "excepteur", "ipsum", "laborum", "commodo", "sunt"], - "friends": [ - { - "id": 0, - "name": "Griffin Dodson" - }, - { - "id": 1, - "name": "Strickland Garrett" - }, - { - "id": 2, - "name": "Madeline Middleton" - } - ], - "greeting": "Hello, Velasquez Mayer! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25ddcdba2b90a60a9f8", - "index": 380, - "guid": "e6f39be8-cca4-4a76-a47b-1c2e7ff4f5cc", - "isActive": false, - "balance": "$1,956.01", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Renee Strickland", - "gender": "female", - "company": "FURNAFIX", - "email": "reneestrickland@furnafix.com", - "phone": "+1 (830) 516-3950", - "address": "929 Pioneer Street, Leeper, South Dakota, 9606", - "about": "Labore consectetur fugiat exercitation aute fugiat voluptate aute laborum aliqua labore anim. Dolore aute exercitation duis nisi reprehenderit magna fugiat ullamco irure. Quis voluptate sunt aliquip occaecat adipisicing aliquip minim cupidatat cillum eu occaecat mollit. Commodo id occaecat fugiat ea est aliquip cupidatat exercitation eiusmod elit nostrud tempor. Irure ullamco consequat ea ex consectetur deserunt eu fugiat exercitation culpa. Sit anim ad deserunt proident qui eu aute minim velit occaecat id nisi.\r\n", - "registered": "2017-02-18T08:32:01 +05:00", - "latitude": 46.104234, - "longitude": -86.470259, - "tags": ["labore", "irure", "adipisicing", "duis", "in", "Lorem", "esse"], - "friends": [ - { - "id": 0, - "name": "Amalia Peterson" - }, - { - "id": 1, - "name": "Gaines Hogan" - }, - { - "id": 2, - "name": "Lara Gross" - } - ], - "greeting": "Hello, Renee Strickland! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d37ebc3828642d19b", - "index": 381, - "guid": "b2a3589d-3a5a-48d5-8394-602b6e635c91", - "isActive": true, - "balance": "$1,232.24", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Ginger Lawson", - "gender": "female", - "company": "TALKOLA", - "email": "gingerlawson@talkola.com", - "phone": "+1 (818) 491-3627", - "address": "722 Croton Loop, Brenton, American Samoa, 1488", - "about": "Veniam velit velit proident est sit tempor quis ea qui irure est. Quis anim cillum ut do aute ullamco culpa cupidatat fugiat. Dolore proident anim nulla ullamco occaecat voluptate. Non id voluptate irure consequat est ex excepteur mollit dolor. Ut duis magna fugiat cillum nisi culpa incididunt ex ad reprehenderit et id. Et fugiat eu excepteur incididunt nostrud eiusmod nostrud aliqua Lorem incididunt adipisicing adipisicing voluptate. Excepteur id cillum incididunt esse cillum incididunt exercitation in.\r\n", - "registered": "2014-12-19T07:43:02 +05:00", - "latitude": 35.453591, - "longitude": 105.29955, - "tags": ["nisi", "laborum", "exercitation", "elit", "commodo", "aliquip", "non"], - "friends": [ - { - "id": 0, - "name": "Riddle Campbell" - }, - { - "id": 1, - "name": "Franklin Langley" - }, - { - "id": 2, - "name": "Fry Reed" - } - ], - "greeting": "Hello, Ginger Lawson! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dae89e0716b9237e2", - "index": 382, - "guid": "fd9b6b02-d077-4a07-85bd-f1a1ace7c1bd", - "isActive": false, - "balance": "$3,332.24", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Lorna Rush", - "gender": "female", - "company": "CENTICE", - "email": "lornarush@centice.com", - "phone": "+1 (860) 537-2266", - "address": "830 Portal Street, Manila, Iowa, 3686", - "about": "Consectetur sunt cillum amet exercitation consequat nulla occaecat esse excepteur ex. Qui ex qui ad irure exercitation reprehenderit veniam. Sunt nisi labore magna nostrud excepteur pariatur ipsum adipisicing Lorem. Id tempor velit magna mollit laboris anim Lorem nulla ad et ut.\r\n", - "registered": "2019-09-03T03:31:17 +04:00", - "latitude": -22.601121, - "longitude": -67.771879, - "tags": ["quis", "eu", "pariatur", "deserunt", "mollit", "eu", "ex"], - "friends": [ - { - "id": 0, - "name": "Reid Buck" - }, - { - "id": 1, - "name": "Ora Pate" - }, - { - "id": 2, - "name": "Diana Maxwell" - } - ], - "greeting": "Hello, Lorna Rush! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25deab04a3598e369f3", - "index": 383, - "guid": "218a7a9e-8ca0-48ca-9645-cb74f20bca0e", - "isActive": true, - "balance": "$3,830.50", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Manning Schneider", - "gender": "male", - "company": "ZILLATIDE", - "email": "manningschneider@zillatide.com", - "phone": "+1 (950) 430-2970", - "address": "930 Coleman Street, Stewart, Palau, 5762", - "about": "Anim excepteur adipisicing labore occaecat. Sit veniam culpa cupidatat eiusmod. Exercitation nulla sunt culpa cillum laborum veniam. Esse deserunt nisi nostrud et fugiat qui ea aute.\r\n", - "registered": "2019-03-11T01:40:53 +04:00", - "latitude": -87.668307, - "longitude": -55.85687, - "tags": ["nisi", "id", "irure", "cillum", "ullamco", "ullamco", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Mccarthy Levine" - }, - { - "id": 1, - "name": "Paige Britt" - }, - { - "id": 2, - "name": "Flowers Holder" - } - ], - "greeting": "Hello, Manning Schneider! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc2cb506d6816056c", - "index": 384, - "guid": "69e51ed6-fa09-4592-939e-2eb7d0aa4768", - "isActive": true, - "balance": "$1,065.67", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Delacruz Cleveland", - "gender": "male", - "company": "RODEOMAD", - "email": "delacruzcleveland@rodeomad.com", - "phone": "+1 (866) 521-2841", - "address": "832 Greene Avenue, Watchtower, West Virginia, 6591", - "about": "Exercitation ex et esse anim ipsum occaecat eu exercitation non. Cillum reprehenderit ullamco officia sunt mollit. Adipisicing enim aliqua aliquip enim. Anim dolor ut cillum ea magna sunt laboris incididunt do.\r\n", - "registered": "2017-02-06T06:26:37 +05:00", - "latitude": -9.458473, - "longitude": -51.683663, - "tags": ["nostrud", "aliquip", "in", "reprehenderit", "velit", "id", "dolore"], - "friends": [ - { - "id": 0, - "name": "Queen Lopez" - }, - { - "id": 1, - "name": "Ola Mercado" - }, - { - "id": 2, - "name": "Geneva Cabrera" - } - ], - "greeting": "Hello, Delacruz Cleveland! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3bd59dab86c19515", - "index": 385, - "guid": "67052a90-7eca-484a-8248-7ca426db859f", - "isActive": true, - "balance": "$3,120.47", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Lisa Gray", - "gender": "female", - "company": "HINWAY", - "email": "lisagray@hinway.com", - "phone": "+1 (802) 521-2727", - "address": "947 Wortman Avenue, Richmond, New York, 2608", - "about": "Tempor exercitation sunt laborum aute incididunt laboris. Elit reprehenderit ut eu aute. Voluptate amet cillum enim pariatur. Proident reprehenderit do qui dolore labore esse mollit ex consectetur. Nostrud ex minim aliquip officia aliquip anim aliquip veniam ex sunt adipisicing enim nisi. Proident proident consequat anim proident adipisicing sit excepteur elit adipisicing laborum consectetur proident amet incididunt. Incididunt culpa proident et consequat aliqua fugiat incididunt incididunt est reprehenderit ullamco.\r\n", - "registered": "2015-12-23T08:39:21 +05:00", - "latitude": -84.926579, - "longitude": 33.455551, - "tags": ["dolore", "consectetur", "esse", "nostrud", "ad", "et", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Hull Hewitt" - }, - { - "id": 1, - "name": "Nita Thomas" - }, - { - "id": 2, - "name": "Selena Houston" - } - ], - "greeting": "Hello, Lisa Gray! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df64cb53cf21f9b0d", - "index": 386, - "guid": "820586d5-7d54-42e0-97c7-c6d612e023f7", - "isActive": false, - "balance": "$1,871.12", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Booker Wong", - "gender": "male", - "company": "APEX", - "email": "bookerwong@apex.com", - "phone": "+1 (954) 529-2296", - "address": "639 Troutman Street, Cliff, Hawaii, 2566", - "about": "Dolor irure commodo mollit voluptate Lorem labore consectetur anim est quis id amet labore reprehenderit. Quis ad adipisicing eiusmod laboris proident do Lorem in. Aliquip elit sint nisi duis est irure laboris aute mollit velit officia. Magna sunt ex reprehenderit in. Est anim adipisicing esse qui anim. Sunt anim elit et sint ea voluptate.\r\n", - "registered": "2019-04-21T11:51:19 +04:00", - "latitude": 50.23522, - "longitude": 75.903842, - "tags": ["aute", "labore", "velit", "laborum", "et", "sit", "ex"], - "friends": [ - { - "id": 0, - "name": "Arnold Conley" - }, - { - "id": 1, - "name": "Blanche Velez" - }, - { - "id": 2, - "name": "Marion May" - } - ], - "greeting": "Hello, Booker Wong! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0e30f21f79dff431", - "index": 387, - "guid": "51407e4e-029a-4602-9dc7-b48450921902", - "isActive": false, - "balance": "$2,314.79", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Elva Randall", - "gender": "female", - "company": "UNDERTAP", - "email": "elvarandall@undertap.com", - "phone": "+1 (955) 527-3954", - "address": "965 Miami Court, Taycheedah, Nebraska, 4447", - "about": "Aliquip duis velit laborum Lorem non esse voluptate commodo incididunt aliquip. Nisi aute exercitation fugiat enim ipsum. Eiusmod consectetur quis nostrud ut.\r\n", - "registered": "2018-09-16T08:36:14 +04:00", - "latitude": -25.846365, - "longitude": 156.212756, - "tags": ["est", "dolor", "eu", "magna", "commodo", "Lorem", "ut"], - "friends": [ - { - "id": 0, - "name": "Ana Jones" - }, - { - "id": 1, - "name": "Santiago Glover" - }, - { - "id": 2, - "name": "Battle Mcgee" - } - ], - "greeting": "Hello, Elva Randall! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc5bd2ce751f95859", - "index": 388, - "guid": "4cb83c25-891c-49fb-90eb-29bcf01183a3", - "isActive": false, - "balance": "$1,100.46", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Solis Singleton", - "gender": "male", - "company": "COLLAIRE", - "email": "solissingleton@collaire.com", - "phone": "+1 (873) 449-3613", - "address": "661 Murdock Court, Indio, Wisconsin, 2997", - "about": "Deserunt nostrud et consectetur labore sunt consequat nisi dolore voluptate eu. Dolor mollit tempor mollit aute. Exercitation et do qui eu deserunt laborum culpa consectetur. Dolor fugiat consequat dolor ex amet reprehenderit enim. Anim labore occaecat id culpa exercitation enim culpa labore et. Sit pariatur reprehenderit enim minim ipsum dolore mollit elit labore magna exercitation.\r\n", - "registered": "2019-07-20T10:02:46 +04:00", - "latitude": -18.025974, - "longitude": 111.322167, - "tags": ["duis", "dolore", "Lorem", "pariatur", "cupidatat", "sunt", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Claudia Hill" - }, - { - "id": 1, - "name": "Janell Schmidt" - }, - { - "id": 2, - "name": "Wolf Jensen" - } - ], - "greeting": "Hello, Solis Singleton! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d006c3d215cb69454", - "index": 389, - "guid": "0fa3890e-3981-471b-9803-ced4df68347f", - "isActive": false, - "balance": "$2,341.95", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Compton Murphy", - "gender": "male", - "company": "LUXURIA", - "email": "comptonmurphy@luxuria.com", - "phone": "+1 (924) 553-2204", - "address": "791 Boardwalk , Zeba, Arizona, 1711", - "about": "Adipisicing Lorem ullamco qui reprehenderit laboris qui adipisicing ut fugiat. Enim minim voluptate quis quis. Aute cupidatat deserunt exercitation excepteur cillum anim anim consequat exercitation sunt velit Lorem irure. Enim veniam id ea elit et laborum do amet reprehenderit.\r\n", - "registered": "2017-04-17T07:53:40 +04:00", - "latitude": -26.381437, - "longitude": -14.893414, - "tags": ["ex", "incididunt", "ullamco", "quis", "magna", "ut", "veniam"], - "friends": [ - { - "id": 0, - "name": "Melba Baxter" - }, - { - "id": 1, - "name": "Beach Henderson" - }, - { - "id": 2, - "name": "Ballard Lawrence" - } - ], - "greeting": "Hello, Compton Murphy! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9a8145d9aade2f09", - "index": 390, - "guid": "a86dd3c2-66ec-42f5-9fdb-c3caedfcdadd", - "isActive": false, - "balance": "$1,795.20", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Kristie Ward", - "gender": "female", - "company": "HYDROCOM", - "email": "kristieward@hydrocom.com", - "phone": "+1 (898) 594-2213", - "address": "231 Herkimer Street, Loveland, Ohio, 3657", - "about": "Id in est deserunt incididunt elit duis cupidatat officia elit voluptate est non. Mollit cillum cillum consequat reprehenderit nulla commodo excepteur nisi anim. Minim ea id qui tempor consequat amet. Ullamco occaecat velit dolore veniam ipsum occaecat nulla sit esse pariatur non in duis Lorem. Sint et sunt occaecat ad fugiat dolore cupidatat in. Ex ut cillum in laboris adipisicing velit aute quis cupidatat voluptate excepteur officia laborum.\r\n", - "registered": "2015-05-03T10:34:29 +04:00", - "latitude": -21.680193, - "longitude": -68.444176, - "tags": ["non", "consequat", "deserunt", "laboris", "nisi", "veniam", "sunt"], - "friends": [ - { - "id": 0, - "name": "Gardner Greer" - }, - { - "id": 1, - "name": "Castro Mcconnell" - }, - { - "id": 2, - "name": "Belinda Pugh" - } - ], - "greeting": "Hello, Kristie Ward! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6f08e6f2a94354fe", - "index": 391, - "guid": "c5b7322a-7e2d-4f38-8733-5712cbb3a5c1", - "isActive": false, - "balance": "$2,200.67", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Karyn Hartman", - "gender": "female", - "company": "EMERGENT", - "email": "karynhartman@emergent.com", - "phone": "+1 (853) 533-3078", - "address": "874 Sandford Street, Brantleyville, Arkansas, 8438", - "about": "Culpa reprehenderit labore occaecat minim laborum duis occaecat duis reprehenderit commodo. Dolor labore excepteur mollit nostrud culpa adipisicing id labore ipsum velit. Adipisicing ipsum quis ad labore reprehenderit nostrud. Irure esse deserunt nisi magna quis duis enim.\r\n", - "registered": "2015-08-24T08:36:46 +04:00", - "latitude": 38.819865, - "longitude": -115.333202, - "tags": ["quis", "sunt", "dolor", "id", "nulla", "sit", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Harvey Goodwin" - }, - { - "id": 1, - "name": "Felicia Sharpe" - }, - { - "id": 2, - "name": "Lawrence Mueller" - } - ], - "greeting": "Hello, Karyn Hartman! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da3d49f37003e5c72", - "index": 392, - "guid": "3c4d379f-2c44-47dc-b3b4-5263b6cdebc3", - "isActive": false, - "balance": "$3,001.69", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Marks Lott", - "gender": "male", - "company": "ZILLACOM", - "email": "markslott@zillacom.com", - "phone": "+1 (849) 506-3721", - "address": "650 Myrtle Avenue, Kieler, Nevada, 1026", - "about": "Magna quis mollit nulla fugiat amet. Aliqua tempor minim dolor elit ipsum proident nisi pariatur. Fugiat cupidatat deserunt duis laborum ipsum laborum magna labore fugiat labore. Aliqua exercitation fugiat exercitation aliqua fugiat eiusmod aliquip amet quis laboris est consequat excepteur adipisicing. Sit commodo proident labore irure cillum non proident et aute eu enim labore. Occaecat excepteur aliquip voluptate cupidatat velit anim mollit duis. Ea est laboris in cillum aute reprehenderit sint do excepteur Lorem et adipisicing.\r\n", - "registered": "2017-08-01T02:07:43 +04:00", - "latitude": 25.539461, - "longitude": 2.991915, - "tags": ["dolor", "laboris", "minim", "deserunt", "aliqua", "sint", "nisi"], - "friends": [ - { - "id": 0, - "name": "Rowland Casey" - }, - { - "id": 1, - "name": "Wise Oconnor" - }, - { - "id": 2, - "name": "Jeanette Stephens" - } - ], - "greeting": "Hello, Marks Lott! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0e3bce5ce447e9c3", - "index": 393, - "guid": "a7e75ecf-8533-49d7-9a93-8e8573317945", - "isActive": true, - "balance": "$1,620.93", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "brown", - "name": "Phelps Frost", - "gender": "male", - "company": "DIGIGENE", - "email": "phelpsfrost@digigene.com", - "phone": "+1 (819) 448-3653", - "address": "759 Jefferson Avenue, Eden, Massachusetts, 2277", - "about": "Tempor enim proident mollit elit pariatur proident non ullamco ex. Et elit in do ut dolor esse duis. Nostrud magna quis reprehenderit occaecat do duis non consectetur ullamco eiusmod. Qui in eu et exercitation velit id aute dolore consequat. Ipsum mollit pariatur do velit ad.\r\n", - "registered": "2016-05-21T11:09:17 +04:00", - "latitude": 25.889411, - "longitude": 26.727909, - "tags": ["adipisicing", "qui", "ullamco", "amet", "sunt", "aliqua", "mollit"], - "friends": [ - { - "id": 0, - "name": "Whitney Benson" - }, - { - "id": 1, - "name": "Cabrera Hatfield" - }, - { - "id": 2, - "name": "Neva Kelly" - } - ], - "greeting": "Hello, Phelps Frost! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfa4bed3fcedfeffe", - "index": 394, - "guid": "7bd5a24a-d309-4515-8d55-35bb6462ba46", - "isActive": false, - "balance": "$3,741.68", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Pace Delgado", - "gender": "male", - "company": "KOZGENE", - "email": "pacedelgado@kozgene.com", - "phone": "+1 (824) 405-3355", - "address": "559 Ruby Street, Woodruff, Marshall Islands, 7420", - "about": "Laboris reprehenderit qui ipsum duis sunt enim. Cillum ea labore nostrud ad et cillum ea eu reprehenderit occaecat tempor excepteur amet. Ad laborum esse pariatur aute duis ad.\r\n", - "registered": "2014-11-17T05:29:57 +05:00", - "latitude": -58.294637, - "longitude": 175.422132, - "tags": ["aute", "irure", "Lorem", "ad", "adipisicing", "laboris", "esse"], - "friends": [ - { - "id": 0, - "name": "Helen Avila" - }, - { - "id": 1, - "name": "Nelson Cannon" - }, - { - "id": 2, - "name": "Adkins Stark" - } - ], - "greeting": "Hello, Pace Delgado! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dee3c1e972245e1a9", - "index": 395, - "guid": "282919bf-158c-4819-8cd0-c2511f4fba9b", - "isActive": true, - "balance": "$1,157.56", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Mai Olson", - "gender": "female", - "company": "ISOPOP", - "email": "maiolson@isopop.com", - "phone": "+1 (822) 410-3140", - "address": "335 Blake Court, Beechmont, Puerto Rico, 6260", - "about": "Culpa exercitation culpa ut adipisicing minim. Nisi excepteur adipisicing ipsum veniam aute quis laboris ad incididunt exercitation. Culpa aliquip adipisicing nostrud id non irure veniam occaecat dolor pariatur ex veniam. Tempor fugiat deserunt non exercitation minim. Excepteur id commodo consectetur nostrud culpa commodo Lorem ullamco. Sunt nulla culpa et incididunt ullamco id. Eu proident laboris dolore voluptate proident.\r\n", - "registered": "2015-09-23T06:12:33 +04:00", - "latitude": 75.67388, - "longitude": -0.125492, - "tags": ["ipsum", "anim", "reprehenderit", "id", "incididunt", "duis", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Whitney Meyers" - }, - { - "id": 1, - "name": "Adele Deleon" - }, - { - "id": 2, - "name": "Maryann Harris" - } - ], - "greeting": "Hello, Mai Olson! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d5c2c4413a0ff9bde", - "index": 396, - "guid": "fd26325d-e9e3-474e-bc75-a1d464e4367f", - "isActive": true, - "balance": "$3,444.34", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Wilma Hutchinson", - "gender": "female", - "company": "VITRICOMP", - "email": "wilmahutchinson@vitricomp.com", - "phone": "+1 (806) 559-3369", - "address": "165 Schaefer Street, Kidder, California, 5560", - "about": "Velit excepteur velit adipisicing anim esse ut sint incididunt pariatur fugiat. Irure nulla voluptate proident anim. Deserunt enim id veniam Lorem. Magna proident magna ea officia enim aute labore.\r\n", - "registered": "2015-02-06T04:18:04 +05:00", - "latitude": 61.621487, - "longitude": 20.079207, - "tags": ["dolor", "Lorem", "ullamco", "non", "mollit", "ullamco", "culpa"], - "friends": [ - { - "id": 0, - "name": "Robertson Frederick" - }, - { - "id": 1, - "name": "Laurie Rodgers" - }, - { - "id": 2, - "name": "Hill Whitaker" - } - ], - "greeting": "Hello, Wilma Hutchinson! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5e1075b74e5c235b", - "index": 397, - "guid": "9c619351-5ff5-4fc6-9e13-f182ae4b46b2", - "isActive": false, - "balance": "$1,046.22", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Robyn Miller", - "gender": "female", - "company": "EMTRAK", - "email": "robynmiller@emtrak.com", - "phone": "+1 (998) 417-2557", - "address": "308 Canda Avenue, Makena, Tennessee, 6150", - "about": "Irure voluptate do non qui mollit in ipsum fugiat nisi eiusmod est fugiat. Lorem veniam quis laboris reprehenderit eu qui do do officia. Ea adipisicing dolor elit duis voluptate elit. Occaecat nulla dolore ut nulla veniam et aliqua eu qui nulla aute consectetur exercitation aute. Magna sint excepteur ullamco magna est elit.\r\n", - "registered": "2020-03-14T08:54:10 +04:00", - "latitude": -21.887752, - "longitude": 18.064098, - "tags": ["anim", "adipisicing", "anim", "ut", "adipisicing", "culpa", "non"], - "friends": [ - { - "id": 0, - "name": "Jolene Price" - }, - { - "id": 1, - "name": "Guzman Merritt" - }, - { - "id": 2, - "name": "Lupe Valentine" - } - ], - "greeting": "Hello, Robyn Miller! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d5c840c8ca4dc9f33", - "index": 398, - "guid": "c9d46a05-c1a6-4e89-a93a-84dec54ac7ec", - "isActive": false, - "balance": "$1,923.17", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Elinor Avery", - "gender": "female", - "company": "TERRAGO", - "email": "elinoravery@terrago.com", - "phone": "+1 (988) 580-2931", - "address": "395 Falmouth Street, Dexter, Wyoming, 3123", - "about": "Duis ea fugiat qui adipisicing sunt nostrud veniam anim eiusmod veniam. Voluptate consequat ea incididunt mollit ut voluptate Lorem in laboris veniam irure. Exercitation proident magna ea anim exercitation exercitation est laboris. Proident excepteur reprehenderit nisi proident incididunt incididunt enim quis et ea voluptate irure.\r\n", - "registered": "2020-05-01T10:34:05 +04:00", - "latitude": 21.161113, - "longitude": -64.052815, - "tags": ["consequat", "et", "consectetur", "aliquip", "eiusmod", "elit", "nulla"], - "friends": [ - { - "id": 0, - "name": "Doris Alston" - }, - { - "id": 1, - "name": "Bauer Quinn" - }, - { - "id": 2, - "name": "West Perry" - } - ], - "greeting": "Hello, Elinor Avery! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d797da669ea2ac8de", - "index": 399, - "guid": "5f715dc6-f330-4738-a8a5-0748ee82b88b", - "isActive": true, - "balance": "$1,677.48", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Louise Mclaughlin", - "gender": "female", - "company": "ENDIPIN", - "email": "louisemclaughlin@endipin.com", - "phone": "+1 (963) 403-3228", - "address": "213 Kane Street, Glenbrook, North Carolina, 6903", - "about": "Duis nulla incididunt deserunt consequat velit velit eiusmod occaecat. Mollit fugiat consectetur ad exercitation ex aliqua minim quis laborum aute qui nulla amet. Ad culpa et ea veniam et tempor ex deserunt ipsum elit proident minim id et. Esse consequat proident incididunt labore nisi do tempor nisi ad aute anim do in mollit. Excepteur qui nostrud elit veniam labore.\r\n", - "registered": "2019-05-11T12:23:38 +04:00", - "latitude": -66.400242, - "longitude": 173.282852, - "tags": ["deserunt", "sit", "duis", "eu", "velit", "nulla", "veniam"], - "friends": [ - { - "id": 0, - "name": "Marcella Strong" - }, - { - "id": 1, - "name": "Aimee Reid" - }, - { - "id": 2, - "name": "Molly Martinez" - } - ], - "greeting": "Hello, Louise Mclaughlin! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ddfb3eb9386bae4d9", - "index": 400, - "guid": "bea236c4-cfc5-4e65-aa25-a3e19cd40815", - "isActive": false, - "balance": "$3,420.14", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Mabel Daniels", - "gender": "female", - "company": "ARCHITAX", - "email": "mabeldaniels@architax.com", - "phone": "+1 (884) 599-3240", - "address": "841 Danforth Street, Leming, Michigan, 3100", - "about": "Cillum minim aliquip quis aliqua dolore culpa dolor mollit veniam non id velit minim. Adipisicing velit cillum consectetur nostrud duis mollit enim consectetur officia sint. Consequat eiusmod magna mollit est in quis sunt consequat duis nostrud ea quis sit.\r\n", - "registered": "2014-01-29T11:05:40 +05:00", - "latitude": 51.62948, - "longitude": -29.53809, - "tags": ["laboris", "dolor", "id", "dolor", "laborum", "commodo", "id"], - "friends": [ - { - "id": 0, - "name": "Pate Travis" - }, - { - "id": 1, - "name": "Jacobson Castaneda" - }, - { - "id": 2, - "name": "Bishop Cochran" - } - ], - "greeting": "Hello, Mabel Daniels! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddf068876737d632a", - "index": 401, - "guid": "625643df-a9c6-4632-9db0-101e819a2d88", - "isActive": false, - "balance": "$2,185.30", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Magdalena Battle", - "gender": "female", - "company": "CINESANCT", - "email": "magdalenabattle@cinesanct.com", - "phone": "+1 (920) 502-3704", - "address": "114 Baughman Place, Chaparrito, Oklahoma, 1429", - "about": "Incididunt labore sint duis minim reprehenderit enim eiusmod veniam sint ex nulla ut duis. Nulla occaecat quis magna non sunt elit cupidatat laboris consequat irure cupidatat velit amet esse. Laborum sit amet nisi ut magna aliqua id labore adipisicing.\r\n", - "registered": "2017-04-09T02:58:15 +04:00", - "latitude": -18.045815, - "longitude": 176.552178, - "tags": ["fugiat", "qui", "irure", "deserunt", "laboris", "nisi", "irure"], - "friends": [ - { - "id": 0, - "name": "Morin Castillo" - }, - { - "id": 1, - "name": "Savannah Oneal" - }, - { - "id": 2, - "name": "Lillian Fitzpatrick" - } - ], - "greeting": "Hello, Magdalena Battle! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6618ef73960c9150", - "index": 402, - "guid": "4a9b1fcd-2b52-469c-85c4-7eda792be2ed", - "isActive": true, - "balance": "$3,119.14", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Lesa Velasquez", - "gender": "female", - "company": "UNISURE", - "email": "lesavelasquez@unisure.com", - "phone": "+1 (959) 580-3992", - "address": "213 Kent Street, Harmon, Vermont, 3079", - "about": "Dolor deserunt ea mollit sit id. Officia velit sunt magna aute. Cillum adipisicing nostrud cillum veniam do. Commodo magna consectetur laborum aliquip do non laborum magna sint Lorem voluptate adipisicing. Officia ipsum laboris eu esse cupidatat nulla laborum Lorem cillum ex excepteur duis id cillum. Consectetur duis cupidatat proident in.\r\n", - "registered": "2019-03-30T08:11:40 +04:00", - "latitude": 11.413118, - "longitude": -64.508971, - "tags": ["ea", "deserunt", "nulla", "magna", "nostrud", "exercitation", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Byers Petty" - }, - { - "id": 1, - "name": "Martinez Pennington" - }, - { - "id": 2, - "name": "Bernard Reyes" - } - ], - "greeting": "Hello, Lesa Velasquez! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6261848e6376dfb9", - "index": 403, - "guid": "9fa73149-98de-4f48-8036-7967f1a3a885", - "isActive": true, - "balance": "$2,131.33", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Monique Roth", - "gender": "female", - "company": "AQUACINE", - "email": "moniqueroth@aquacine.com", - "phone": "+1 (945) 416-3600", - "address": "952 Post Court, Benson, Utah, 751", - "about": "Dolor nisi eiusmod elit anim eu aliquip sit. Consequat ea proident est Lorem sunt in laborum non qui exercitation est ex aliqua ut. Non voluptate velit eu est officia qui esse amet duis eiusmod do exercitation aute officia.\r\n", - "registered": "2015-07-21T04:03:25 +04:00", - "latitude": 26.971572, - "longitude": -162.775689, - "tags": ["et", "nulla", "labore", "minim", "esse", "enim", "do"], - "friends": [ - { - "id": 0, - "name": "Patrick Walker" - }, - { - "id": 1, - "name": "Lorraine Morrison" - }, - { - "id": 2, - "name": "Wilkerson Carney" - } - ], - "greeting": "Hello, Monique Roth! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7362c4fed00714bc", - "index": 404, - "guid": "cca4bd56-ae55-4b18-bdf2-be1a6e06d88c", - "isActive": true, - "balance": "$2,200.85", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Monroe Calderon", - "gender": "male", - "company": "FUTURITY", - "email": "monroecalderon@futurity.com", - "phone": "+1 (957) 473-2558", - "address": "585 Bouck Court, Emerald, Kansas, 1320", - "about": "Voluptate irure aliquip veniam do laborum mollit. Lorem ex aute sunt elit dolore. Nisi commodo labore reprehenderit irure cupidatat amet culpa cillum eu ipsum nisi ex dolore amet. Aute cupidatat nulla tempor laborum aliquip deserunt esse fugiat aliqua in irure minim.\r\n", - "registered": "2017-05-18T03:27:22 +04:00", - "latitude": -20.521897, - "longitude": -69.49987, - "tags": ["eu", "Lorem", "nisi", "labore", "aute", "ea", "consequat"], - "friends": [ - { - "id": 0, - "name": "Becky Daugherty" - }, - { - "id": 1, - "name": "Hebert Smith" - }, - { - "id": 2, - "name": "Mcintosh Ingram" - } - ], - "greeting": "Hello, Monroe Calderon! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8710d375a794d597", - "index": 405, - "guid": "93ca2906-a620-49eb-a094-43755d4545aa", - "isActive": false, - "balance": "$2,928.71", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Amie Randolph", - "gender": "female", - "company": "BRISTO", - "email": "amierandolph@bristo.com", - "phone": "+1 (842) 493-3327", - "address": "357 Llama Court, Wheaton, Delaware, 929", - "about": "Aute aliqua deserunt qui in. Laboris culpa veniam ad voluptate consectetur deserunt velit labore dolore excepteur. Non adipisicing nisi non eiusmod ea minim ex. Reprehenderit esse pariatur quis velit eu. Amet Lorem adipisicing ad aliquip Lorem irure proident magna commodo minim nulla officia duis velit.\r\n", - "registered": "2020-05-29T11:55:59 +04:00", - "latitude": 30.38985, - "longitude": -77.104022, - "tags": ["aliquip", "culpa", "reprehenderit", "quis", "deserunt", "excepteur", "sunt"], - "friends": [ - { - "id": 0, - "name": "Christine Potts" - }, - { - "id": 1, - "name": "Spence Delacruz" - }, - { - "id": 2, - "name": "Gill Head" - } - ], - "greeting": "Hello, Amie Randolph! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dfad3c5f3d1c0f5ac", - "index": 406, - "guid": "b18853d9-1574-4b00-ad8c-f9abaf5db195", - "isActive": true, - "balance": "$2,219.34", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Foreman Newton", - "gender": "male", - "company": "CYCLONICA", - "email": "foremannewton@cyclonica.com", - "phone": "+1 (925) 501-2252", - "address": "940 Quentin Road, Duryea, Guam, 2427", - "about": "Non voluptate enim mollit proident laborum laboris commodo officia esse tempor in et. Sunt incididunt culpa officia occaecat tempor. Sit quis cillum magna mollit Lorem eiusmod.\r\n", - "registered": "2020-07-29T10:44:00 +04:00", - "latitude": -75.001008, - "longitude": 100.529716, - "tags": ["non", "tempor", "nulla", "dolor", "exercitation", "velit", "in"], - "friends": [ - { - "id": 0, - "name": "Deana Elliott" - }, - { - "id": 1, - "name": "Lucas Sullivan" - }, - { - "id": 2, - "name": "Priscilla Montgomery" - } - ], - "greeting": "Hello, Foreman Newton! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dacac57fe964797a1", - "index": 407, - "guid": "dbb73191-9a2f-4f73-b0d7-6367449b4c5f", - "isActive": true, - "balance": "$3,419.46", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Hayes Nunez", - "gender": "male", - "company": "LETPRO", - "email": "hayesnunez@letpro.com", - "phone": "+1 (940) 481-2500", - "address": "347 Belmont Avenue, Wauhillau, Oregon, 2952", - "about": "Cupidatat nulla culpa est velit ex sint amet laboris eu. Commodo anim id dolore aliquip consectetur ullamco ullamco enim commodo ut ea ex dolore ad. Non sit elit nisi cupidatat ullamco. Ullamco et duis occaecat cillum laboris elit. Magna veniam veniam Lorem pariatur. Dolore esse ad incididunt velit excepteur eu tempor. Proident excepteur occaecat velit esse.\r\n", - "registered": "2016-12-03T08:53:48 +05:00", - "latitude": 81.242325, - "longitude": -0.22029, - "tags": ["officia", "aliqua", "voluptate", "fugiat", "id", "laborum", "dolore"], - "friends": [ - { - "id": 0, - "name": "Tabatha Mann" - }, - { - "id": 1, - "name": "Tameka Miranda" - }, - { - "id": 2, - "name": "Burks Rose" - } - ], - "greeting": "Hello, Hayes Nunez! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcf423b761046756e", - "index": 408, - "guid": "cd1040b4-3d62-440e-87e6-5549c3bd5df2", - "isActive": false, - "balance": "$1,929.56", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Trevino Rosales", - "gender": "male", - "company": "ENERVATE", - "email": "trevinorosales@enervate.com", - "phone": "+1 (848) 442-2069", - "address": "468 Ovington Avenue, Kerby, Missouri, 8174", - "about": "Velit occaecat mollit sint occaecat ex. Officia anim ipsum tempor veniam officia commodo aliqua minim sunt culpa dolor dolor deserunt adipisicing. Deserunt commodo amet esse ad pariatur in amet labore duis. Aliqua anim enim ullamco aliqua ullamco ullamco velit nostrud. Nulla dolor et mollit est deserunt laborum et pariatur mollit non do. Culpa pariatur non incididunt pariatur laborum do duis.\r\n", - "registered": "2016-09-03T05:52:06 +04:00", - "latitude": 29.053742, - "longitude": -16.553919, - "tags": ["nostrud", "culpa", "exercitation", "enim", "ea", "qui", "nulla"], - "friends": [ - { - "id": 0, - "name": "Milagros Vincent" - }, - { - "id": 1, - "name": "Kelsey Burke" - }, - { - "id": 2, - "name": "Roslyn Booker" - } - ], - "greeting": "Hello, Trevino Rosales! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0358cff2ff033a63", - "index": 409, - "guid": "0acc5d01-8878-444b-837f-597db66b054f", - "isActive": true, - "balance": "$2,377.13", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Jensen Hardy", - "gender": "male", - "company": "PROWASTE", - "email": "jensenhardy@prowaste.com", - "phone": "+1 (998) 537-3258", - "address": "234 Stryker Court, Norfolk, Montana, 9089", - "about": "Qui aute cupidatat nulla nisi. Fugiat proident qui incididunt quis reprehenderit fugiat sit elit quis anim. Reprehenderit commodo magna commodo exercitation nulla sit veniam quis laboris labore proident. Sunt enim enim sit nostrud tempor.\r\n", - "registered": "2014-01-04T03:07:23 +05:00", - "latitude": -20.877618, - "longitude": 113.908383, - "tags": ["pariatur", "ut", "est", "magna", "voluptate", "officia", "sit"], - "friends": [ - { - "id": 0, - "name": "Fay James" - }, - { - "id": 1, - "name": "Bethany Sheppard" - }, - { - "id": 2, - "name": "Lilly Meadows" - } - ], - "greeting": "Hello, Jensen Hardy! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dd8614c60d182e9d0", - "index": 410, - "guid": "80744eec-fe0e-477c-bede-1857a2d7bc33", - "isActive": true, - "balance": "$2,778.87", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Burris Banks", - "gender": "male", - "company": "NITRACYR", - "email": "burrisbanks@nitracyr.com", - "phone": "+1 (840) 441-2494", - "address": "775 Emerson Place, Blanford, Alaska, 7244", - "about": "Aliqua occaecat cillum consectetur do. Duis voluptate aliquip in eu adipisicing dolor amet anim culpa aliqua exercitation commodo ex. Enim qui qui cillum do pariatur tempor exercitation commodo nulla reprehenderit. Mollit laborum deserunt deserunt laboris commodo deserunt minim nulla proident sit proident laborum sunt.\r\n", - "registered": "2018-12-12T04:20:53 +05:00", - "latitude": 43.445754, - "longitude": 92.448868, - "tags": ["laboris", "nulla", "tempor", "est", "in", "eiusmod", "labore"], - "friends": [ - { - "id": 0, - "name": "Lorena Sears" - }, - { - "id": 1, - "name": "Melissa Rivera" - }, - { - "id": 2, - "name": "Hancock Kinney" - } - ], - "greeting": "Hello, Burris Banks! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d99bc091c6cd66f94", - "index": 411, - "guid": "b0f2ca6e-aed1-41d1-a1b7-9a6f6c4181d2", - "isActive": true, - "balance": "$2,085.88", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Adeline Justice", - "gender": "female", - "company": "BUGSALL", - "email": "adelinejustice@bugsall.com", - "phone": "+1 (814) 494-2847", - "address": "774 Ditmas Avenue, Darlington, Kentucky, 1245", - "about": "Sunt id pariatur cupidatat qui adipisicing occaecat nostrud. Cupidatat incididunt veniam consectetur elit aliquip. Et nulla adipisicing incididunt anim est magna ullamco incididunt ipsum. Qui duis cillum labore elit voluptate est duis ea ea sint anim labore. Ea magna excepteur in fugiat occaecat proident nisi eu consequat. Excepteur anim et ipsum nostrud fugiat nostrud cupidatat eiusmod consequat sit incididunt eu. Anim anim exercitation in quis exercitation ipsum.\r\n", - "registered": "2015-10-10T11:09:15 +04:00", - "latitude": -8.726563, - "longitude": -91.019495, - "tags": ["minim", "elit", "cupidatat", "ut", "ad", "fugiat", "aute"], - "friends": [ - { - "id": 0, - "name": "Wanda Anderson" - }, - { - "id": 1, - "name": "Wilder Landry" - }, - { - "id": 2, - "name": "Evans Young" - } - ], - "greeting": "Hello, Adeline Justice! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6e9a6bff29d7f334", - "index": 412, - "guid": "9d50bc11-a67b-4533-96fb-786116d56d2f", - "isActive": true, - "balance": "$1,103.71", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Julie Harvey", - "gender": "female", - "company": "OBONES", - "email": "julieharvey@obones.com", - "phone": "+1 (841) 568-3612", - "address": "124 Monument Walk, Ruckersville, Mississippi, 4684", - "about": "Irure eu duis pariatur est officia cillum irure nisi ullamco dolor veniam ex. In ut voluptate sunt dolore culpa enim consequat nulla. In excepteur ut esse dolor dolor veniam cupidatat nostrud tempor aute commodo veniam.\r\n", - "registered": "2016-02-02T10:17:15 +05:00", - "latitude": 9.945528, - "longitude": 38.458129, - "tags": ["laboris", "minim", "nisi", "sint", "duis", "incididunt", "sunt"], - "friends": [ - { - "id": 0, - "name": "Pearlie Guthrie" - }, - { - "id": 1, - "name": "Dominguez Mcintosh" - }, - { - "id": 2, - "name": "Hines Wall" - } - ], - "greeting": "Hello, Julie Harvey! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0b75fdf22a331255", - "index": 413, - "guid": "858728aa-dd91-4bc9-acab-da33f8eff163", - "isActive": true, - "balance": "$2,760.37", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Terrell Moss", - "gender": "male", - "company": "BLUEGRAIN", - "email": "terrellmoss@bluegrain.com", - "phone": "+1 (983) 410-2661", - "address": "606 Saratoga Avenue, Norris, North Dakota, 3933", - "about": "Dolore sit ipsum sunt laboris exercitation cupidatat consequat voluptate Lorem proident tempor. Eu culpa ex nostrud aute. Eiusmod esse tempor exercitation sit voluptate. Aliqua sit deserunt est deserunt culpa culpa minim elit et voluptate. Incididunt voluptate ex amet minim.\r\n", - "registered": "2015-08-28T01:53:08 +04:00", - "latitude": -3.217903, - "longitude": 59.271065, - "tags": ["duis", "reprehenderit", "anim", "exercitation", "adipisicing", "labore", "ex"], - "friends": [ - { - "id": 0, - "name": "Jimenez Holland" - }, - { - "id": 1, - "name": "Carla Bauer" - }, - { - "id": 2, - "name": "Ursula Burton" - } - ], - "greeting": "Hello, Terrell Moss! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d21de3693e703c664", - "index": 414, - "guid": "d376e2f9-5cab-4067-b598-3cf3523f8444", - "isActive": false, - "balance": "$3,333.01", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Graciela Haney", - "gender": "female", - "company": "ZIDANT", - "email": "gracielahaney@zidant.com", - "phone": "+1 (885) 520-3235", - "address": "911 Oxford Street, Geyserville, Federated States Of Micronesia, 4459", - "about": "Culpa mollit voluptate laborum est adipisicing labore culpa irure. Reprehenderit magna cupidatat ea ullamco Lorem fugiat eiusmod ad mollit veniam consectetur. Id culpa minim Lorem do ullamco dolore. Nulla consequat cupidatat anim ullamco aute nisi irure nostrud velit.\r\n", - "registered": "2017-11-10T09:17:33 +05:00", - "latitude": -44.58595, - "longitude": 42.045549, - "tags": ["eiusmod", "amet", "quis", "dolore", "proident", "eiusmod", "et"], - "friends": [ - { - "id": 0, - "name": "Figueroa Key" - }, - { - "id": 1, - "name": "Copeland Gill" - }, - { - "id": 2, - "name": "Snider Rivas" - } - ], - "greeting": "Hello, Graciela Haney! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d46944309e6c9a9b3", - "index": 415, - "guid": "81d0075c-d809-45cc-8ada-9d4a045a3cf7", - "isActive": false, - "balance": "$2,769.44", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Jana Whitley", - "gender": "female", - "company": "FURNIGEER", - "email": "janawhitley@furnigeer.com", - "phone": "+1 (892) 499-3609", - "address": "267 Seaview Avenue, Hall, Maryland, 9114", - "about": "Deserunt enim consectetur deserunt ullamco incididunt ea aliquip veniam cupidatat sunt. Officia nisi laborum laborum velit commodo eiusmod enim occaecat excepteur elit proident magna. Minim quis anim culpa nisi.\r\n", - "registered": "2020-09-03T02:05:55 +04:00", - "latitude": 54.108237, - "longitude": -128.989961, - "tags": ["et", "in", "ut", "consequat", "et", "dolor", "amet"], - "friends": [ - { - "id": 0, - "name": "Karen Harrell" - }, - { - "id": 1, - "name": "Lily Case" - }, - { - "id": 2, - "name": "Amber Gamble" - } - ], - "greeting": "Hello, Jana Whitley! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5053c0d6a403fbbe", - "index": 416, - "guid": "33a5e34e-86ac-4194-a2d7-a347c00ba3e6", - "isActive": false, - "balance": "$2,980.63", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Eve Hahn", - "gender": "female", - "company": "KIDSTOCK", - "email": "evehahn@kidstock.com", - "phone": "+1 (828) 429-2602", - "address": "530 Oakland Place, Hanover, Virgin Islands, 891", - "about": "Exercitation aliquip nisi non in eu culpa cillum irure cupidatat eiusmod nisi incididunt consequat. Ex amet est cupidatat irure. Aute amet consectetur nisi veniam veniam. Consectetur cillum non commodo incididunt voluptate nostrud ut officia Lorem fugiat laboris. Sit incididunt id in enim reprehenderit.\r\n", - "registered": "2017-07-23T05:09:56 +04:00", - "latitude": 85.268853, - "longitude": 152.202299, - "tags": ["labore", "quis", "ullamco", "aute", "cupidatat", "id", "sit"], - "friends": [ - { - "id": 0, - "name": "Kirkland Stone" - }, - { - "id": 1, - "name": "Schmidt Ramirez" - }, - { - "id": 2, - "name": "Ilene Carver" - } - ], - "greeting": "Hello, Eve Hahn! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3f910cc649badad5", - "index": 417, - "guid": "61da10ea-f635-4e70-b687-45ba680e13d1", - "isActive": false, - "balance": "$3,070.48", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Lindsay Ayala", - "gender": "female", - "company": "BIFLEX", - "email": "lindsayayala@biflex.com", - "phone": "+1 (996) 503-3653", - "address": "444 Columbia Street, Holtville, Pennsylvania, 5259", - "about": "Sint culpa proident elit anim ex cupidatat aliqua ad sint. Veniam sit magna aute est aute culpa nisi incididunt sint sint sint sit id consequat. Dolor anim cupidatat amet incididunt. Quis nulla nulla cillum eu qui reprehenderit ipsum ex in consectetur nulla.\r\n", - "registered": "2016-10-31T07:14:33 +04:00", - "latitude": -63.139868, - "longitude": 113.186714, - "tags": ["enim", "ad", "mollit", "reprehenderit", "sit", "veniam", "ad"], - "friends": [ - { - "id": 0, - "name": "Vivian Nicholson" - }, - { - "id": 1, - "name": "Daphne Faulkner" - }, - { - "id": 2, - "name": "Jarvis Hobbs" - } - ], - "greeting": "Hello, Lindsay Ayala! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9acdd1eff1b2a8c2", - "index": 418, - "guid": "da5b1ce2-22a6-4ea0-9756-9e6743eee368", - "isActive": true, - "balance": "$3,003.75", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Harrell Munoz", - "gender": "male", - "company": "COWTOWN", - "email": "harrellmunoz@cowtown.com", - "phone": "+1 (803) 519-3209", - "address": "314 Bergen Street, Camino, Washington, 1046", - "about": "Proident in fugiat eiusmod velit et do ea tempor quis Lorem sit laboris. Occaecat occaecat eiusmod laboris dolor deserunt culpa. Voluptate Lorem mollit proident ut consectetur proident ut Lorem voluptate id eiusmod. Sit in elit excepteur ipsum laborum dolore quis enim nulla. Officia velit exercitation anim id consequat aute fugiat dolore tempor aliqua excepteur do. Ex minim occaecat aute incididunt reprehenderit minim consectetur excepteur irure ullamco.\r\n", - "registered": "2015-06-01T11:29:36 +04:00", - "latitude": 79.250311, - "longitude": 134.658913, - "tags": ["anim", "magna", "in", "culpa", "consequat", "pariatur", "esse"], - "friends": [ - { - "id": 0, - "name": "Maynard Workman" - }, - { - "id": 1, - "name": "Franks Kent" - }, - { - "id": 2, - "name": "Gutierrez Henson" - } - ], - "greeting": "Hello, Harrell Munoz! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25def47bc8791f5856b", - "index": 419, - "guid": "492c082d-ce1b-475d-8c4c-3b48b9f099df", - "isActive": true, - "balance": "$1,205.98", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Acevedo Huff", - "gender": "male", - "company": "CEDWARD", - "email": "acevedohuff@cedward.com", - "phone": "+1 (839) 574-2340", - "address": "381 Ocean Parkway, Glenville, Illinois, 3388", - "about": "Nisi magna nulla non ea adipisicing excepteur ullamco exercitation pariatur in. Tempor exercitation nulla incididunt aute ipsum ea minim excepteur sit est adipisicing veniam anim. Cupidatat laborum tempor excepteur laborum eu ut nulla dolore aliquip sint anim mollit. Aute pariatur esse aliquip et nisi cillum.\r\n", - "registered": "2018-02-04T09:27:27 +05:00", - "latitude": 7.06642, - "longitude": -65.006393, - "tags": ["commodo", "mollit", "do", "consequat", "laboris", "adipisicing", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Waller Hines" - }, - { - "id": 1, - "name": "Ida Molina" - }, - { - "id": 2, - "name": "Janet Anthony" - } - ], - "greeting": "Hello, Acevedo Huff! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2a16c16bfcd94d41", - "index": 420, - "guid": "1e0f23ef-7053-474c-a459-cc5bffe89363", - "isActive": false, - "balance": "$1,312.52", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Hammond Church", - "gender": "male", - "company": "MULTRON", - "email": "hammondchurch@multron.com", - "phone": "+1 (879) 408-3292", - "address": "428 Bryant Street, Walton, New Hampshire, 1739", - "about": "Quis deserunt eu elit magna nostrud aute consequat. Exercitation Lorem minim Lorem dolor labore occaecat amet proident mollit Lorem ex laborum. Exercitation esse amet irure duis cillum ea et consequat. Quis aliqua sit tempor ut id. Sit veniam duis consequat occaecat excepteur irure aliqua.\r\n", - "registered": "2019-02-08T06:33:29 +05:00", - "latitude": -81.381919, - "longitude": -24.795215, - "tags": ["et", "officia", "deserunt", "elit", "consectetur", "Lorem", "consequat"], - "friends": [ - { - "id": 0, - "name": "Angelia Lee" - }, - { - "id": 1, - "name": "Osborn Williamson" - }, - { - "id": 2, - "name": "Thornton Brennan" - } - ], - "greeting": "Hello, Hammond Church! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3096a2cf5c5c01ad", - "index": 421, - "guid": "5432b9c0-5e53-4dd4-9d44-58157565ed97", - "isActive": true, - "balance": "$2,517.54", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Farley Knapp", - "gender": "male", - "company": "FLYBOYZ", - "email": "farleyknapp@flyboyz.com", - "phone": "+1 (868) 437-2504", - "address": "691 Fenimore Street, Spokane, Colorado, 7230", - "about": "In ipsum ea duis dolor aliquip in duis enim. Aliqua culpa fugiat ullamco culpa reprehenderit qui. Qui sint aliquip et veniam adipisicing ex deserunt consequat nostrud proident nulla Lorem. Eiusmod et aute deserunt Lorem quis minim esse deserunt aliqua consectetur amet cillum. In incididunt nisi sunt deserunt commodo qui elit labore ad voluptate esse duis culpa.\r\n", - "registered": "2019-10-04T07:30:12 +04:00", - "latitude": -74.749285, - "longitude": 147.596689, - "tags": ["ex", "dolore", "adipisicing", "eiusmod", "sit", "duis", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Lolita Bowers" - }, - { - "id": 1, - "name": "Kidd Kirkland" - }, - { - "id": 2, - "name": "Jeannine Mack" - } - ], - "greeting": "Hello, Farley Knapp! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d5658d42491708738", - "index": 422, - "guid": "0bf6a8c4-661c-46f8-8db1-cfbad2120fcd", - "isActive": false, - "balance": "$2,148.05", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Rocha Powers", - "gender": "male", - "company": "ESSENSIA", - "email": "rochapowers@essensia.com", - "phone": "+1 (907) 554-2318", - "address": "977 Stuart Street, Deercroft, Maine, 3618", - "about": "Ipsum aute nulla laborum aliquip nulla cupidatat. Proident pariatur dolor ut magna magna labore proident veniam id dolore do reprehenderit sunt. Adipisicing consectetur cupidatat nostrud minim. Nulla nulla mollit est velit velit mollit aliquip cillum.\r\n", - "registered": "2018-01-26T01:06:33 +05:00", - "latitude": -45.11708, - "longitude": -105.39856, - "tags": ["dolore", "est", "mollit", "anim", "velit", "nostrud", "officia"], - "friends": [ - { - "id": 0, - "name": "Skinner Chandler" - }, - { - "id": 1, - "name": "Little Kane" - }, - { - "id": 2, - "name": "Annabelle Kramer" - } - ], - "greeting": "Hello, Rocha Powers! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d526d75582c7d3be5", - "index": 423, - "guid": "2f41b339-42f2-44e1-a721-a203df285dd7", - "isActive": true, - "balance": "$1,867.04", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Lilia Ruiz", - "gender": "female", - "company": "ZORK", - "email": "liliaruiz@zork.com", - "phone": "+1 (840) 442-3445", - "address": "933 Provost Street, Springville, South Carolina, 3557", - "about": "Labore non laborum mollit sunt sint. Aute nulla veniam mollit deserunt laboris laboris laborum reprehenderit. Irure reprehenderit consectetur reprehenderit cillum cillum cillum nostrud do consequat tempor ex. Officia est mollit id Lorem minim proident do cillum dolore. Magna et anim laborum ut excepteur labore magna elit. Occaecat id nostrud consequat esse ex dolore nulla do dolor elit aliqua pariatur magna. Cupidatat commodo tempor consequat et officia amet dolor proident ex est et.\r\n", - "registered": "2015-07-10T03:16:59 +04:00", - "latitude": 12.314188, - "longitude": -152.858547, - "tags": ["et", "consectetur", "cillum", "eiusmod", "proident", "ullamco", "laboris"], - "friends": [ - { - "id": 0, - "name": "Larsen Snow" - }, - { - "id": 1, - "name": "Garner Lane" - }, - { - "id": 2, - "name": "Sanchez Douglas" - } - ], - "greeting": "Hello, Lilia Ruiz! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0f1b11a621d1c1cc", - "index": 424, - "guid": "3c6fdf07-5ab6-4fe4-9423-47cccc23fae5", - "isActive": false, - "balance": "$3,146.62", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Miles Figueroa", - "gender": "male", - "company": "COMFIRM", - "email": "milesfigueroa@comfirm.com", - "phone": "+1 (916) 489-3463", - "address": "906 Johnson Street, Longoria, Connecticut, 9775", - "about": "Dolore officia enim laboris nulla et exercitation commodo id dolore. Deserunt occaecat irure sint irure reprehenderit. Veniam consequat mollit laboris ex sint aliquip in aute Lorem excepteur sit occaecat. Ullamco aliqua eiusmod proident quis adipisicing Lorem enim sunt elit minim. Aute proident id irure dolor aliqua ea ut minim duis labore duis et nostrud minim. Veniam laborum ex sint culpa consectetur nulla tempor elit. Culpa ut do et deserunt.\r\n", - "registered": "2019-12-26T10:48:20 +05:00", - "latitude": -41.684091, - "longitude": -178.000549, - "tags": ["nulla", "laboris", "enim", "laboris", "nostrud", "est", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Garza Rios" - }, - { - "id": 1, - "name": "Barnett Stuart" - }, - { - "id": 2, - "name": "Lancaster Mercer" - } - ], - "greeting": "Hello, Miles Figueroa! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0aa1639003ec6f17", - "index": 425, - "guid": "abba8d3f-245e-4ac3-b90c-1fef319fa269", - "isActive": true, - "balance": "$1,022.42", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Barbara Flynn", - "gender": "female", - "company": "RENOVIZE", - "email": "barbaraflynn@renovize.com", - "phone": "+1 (883) 460-3847", - "address": "665 Portland Avenue, Movico, Virginia, 2831", - "about": "Non sunt ea qui nisi est cupidatat in dolore culpa nulla dolore aliquip sit dolore. Nulla incididunt dolore aliqua occaecat exercitation ea mollit ipsum adipisicing velit excepteur laboris id aliqua. Deserunt irure nisi exercitation eu consectetur non qui.\r\n", - "registered": "2019-10-04T01:27:30 +04:00", - "latitude": 5.607588, - "longitude": 2.316606, - "tags": ["in", "ullamco", "irure", "sint", "non", "id", "anim"], - "friends": [ - { - "id": 0, - "name": "Delaney Carroll" - }, - { - "id": 1, - "name": "Jacquelyn Mccarty" - }, - { - "id": 2, - "name": "Marylou Blair" - } - ], - "greeting": "Hello, Barbara Flynn! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25deb53d7e3e3db412a", - "index": 426, - "guid": "f1580a97-4865-4d3f-9aca-d5acfebf5e45", - "isActive": false, - "balance": "$1,053.99", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Lorene Carson", - "gender": "female", - "company": "RODEOCEAN", - "email": "lorenecarson@rodeocean.com", - "phone": "+1 (925) 490-2377", - "address": "196 Bush Street, Loma, Georgia, 9017", - "about": "Commodo in ea magna mollit sunt sunt ut incididunt ut tempor ullamco sint deserunt cillum. Ea esse culpa Lorem sint laborum. Aute consequat nulla magna ipsum deserunt magna minim id pariatur commodo. Non officia amet esse eiusmod. Commodo consectetur minim cupidatat laborum et non dolor reprehenderit duis.\r\n", - "registered": "2017-05-29T06:14:11 +04:00", - "latitude": -35.210721, - "longitude": -118.281947, - "tags": ["enim", "ullamco", "nisi", "incididunt", "tempor", "mollit", "excepteur"], - "friends": [ - { - "id": 0, - "name": "James Torres" - }, - { - "id": 1, - "name": "Tamra Alford" - }, - { - "id": 2, - "name": "Wiley Bowman" - } - ], - "greeting": "Hello, Lorene Carson! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d432f033c4713af05", - "index": 427, - "guid": "ba464b21-0f3b-41ec-9eae-2ad905ce7ed3", - "isActive": false, - "balance": "$1,745.25", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Clarice Diaz", - "gender": "female", - "company": "KRAG", - "email": "claricediaz@krag.com", - "phone": "+1 (801) 543-3269", - "address": "379 Pacific Street, Hollymead, New Jersey, 780", - "about": "Aliquip tempor nisi excepteur aliqua dolor qui. Anim pariatur cupidatat eu duis dolore veniam excepteur dolor adipisicing. Aute adipisicing incididunt laborum tempor culpa esse. Amet adipisicing laboris enim et do ad. Quis culpa exercitation ad sit ipsum nisi labore aute ad consequat laborum aliqua. Duis adipisicing nisi quis eiusmod consectetur amet. Consequat id velit sunt do nostrud laboris elit irure non nulla et officia.\r\n", - "registered": "2020-01-02T10:27:12 +05:00", - "latitude": 17.910777, - "longitude": 137.074168, - "tags": ["occaecat", "qui", "excepteur", "sint", "ut", "incididunt", "non"], - "friends": [ - { - "id": 0, - "name": "Nanette Morton" - }, - { - "id": 1, - "name": "Janis Sherman" - }, - { - "id": 2, - "name": "Angeline Bean" - } - ], - "greeting": "Hello, Clarice Diaz! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d99af923eac5aa149", - "index": 428, - "guid": "15cfade0-15f2-4a24-aef5-f6a0dbbd9a44", - "isActive": true, - "balance": "$3,512.11", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Brittney Galloway", - "gender": "female", - "company": "TETAK", - "email": "brittneygalloway@tetak.com", - "phone": "+1 (941) 413-3132", - "address": "472 Laurel Avenue, Ryderwood, Minnesota, 7442", - "about": "Laboris ipsum amet consectetur tempor aliqua esse. Consectetur fugiat ipsum culpa culpa mollit aliquip nisi aute officia nisi. Et velit laborum et enim. Non ut quis anim dolore occaecat dolore officia mollit anim labore voluptate. Eu culpa irure qui in veniam reprehenderit magna.\r\n", - "registered": "2014-04-22T04:33:11 +04:00", - "latitude": 69.03556, - "longitude": 75.452787, - "tags": ["Lorem", "dolore", "adipisicing", "id", "sunt", "tempor", "aute"], - "friends": [ - { - "id": 0, - "name": "Willie Mcneil" - }, - { - "id": 1, - "name": "Elaine Yates" - }, - { - "id": 2, - "name": "Solomon Reeves" - } - ], - "greeting": "Hello, Brittney Galloway! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d854784439ba0fa5b", - "index": 429, - "guid": "186c7e3c-f629-42e2-94d4-add0c1f59411", - "isActive": true, - "balance": "$3,893.25", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Hutchinson Brown", - "gender": "male", - "company": "SIGNIDYNE", - "email": "hutchinsonbrown@signidyne.com", - "phone": "+1 (819) 413-2810", - "address": "473 Garden Street, Kingstowne, Texas, 3188", - "about": "Nulla est pariatur est excepteur esse laborum veniam aute commodo do dolore do. Voluptate fugiat eu nisi amet do. Commodo ullamco eiusmod nulla aute. Cupidatat est commodo ad magna officia commodo aliqua ad.\r\n", - "registered": "2017-01-15T03:16:16 +05:00", - "latitude": 73.206188, - "longitude": -69.142894, - "tags": ["elit", "ex", "et", "in", "commodo", "Lorem", "quis"], - "friends": [ - { - "id": 0, - "name": "Glenda Joyner" - }, - { - "id": 1, - "name": "Celia Spears" - }, - { - "id": 2, - "name": "Bernice Gilliam" - } - ], - "greeting": "Hello, Hutchinson Brown! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1f0acd4d2280bea7", - "index": 430, - "guid": "65669cd9-83fd-4095-98be-a2525eeabe74", - "isActive": false, - "balance": "$2,249.40", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Gentry Rowland", - "gender": "male", - "company": "MYOPIUM", - "email": "gentryrowland@myopium.com", - "phone": "+1 (890) 546-2972", - "address": "576 Porter Avenue, Martell, Alabama, 8155", - "about": "Ipsum amet qui anim ut culpa fugiat sunt. Laboris incididunt qui proident nulla deserunt et laboris aliquip. Non Lorem nulla veniam ex consectetur deserunt officia nisi sit in. Incididunt sunt dolor id nostrud ipsum ipsum labore eu. Ullamco deserunt est cupidatat esse ut officia culpa cupidatat cupidatat nostrud exercitation voluptate culpa id.\r\n", - "registered": "2016-09-14T03:43:47 +04:00", - "latitude": -52.489133, - "longitude": -175.43328, - "tags": ["ea", "et", "est", "reprehenderit", "laborum", "tempor", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Bessie Solomon" - }, - { - "id": 1, - "name": "Rebekah Manning" - }, - { - "id": 2, - "name": "Peterson Patterson" - } - ], - "greeting": "Hello, Gentry Rowland! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d11d748c3ba7c9eb2", - "index": 431, - "guid": "5c13f360-d866-4884-a296-fe9d8654fd49", - "isActive": false, - "balance": "$1,059.05", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Chandra Daniel", - "gender": "female", - "company": "COMVEY", - "email": "chandradaniel@comvey.com", - "phone": "+1 (974) 536-2203", - "address": "926 Dinsmore Place, Tyhee, Rhode Island, 5538", - "about": "Est aliqua sint quis consequat. Commodo qui velit nostrud voluptate. Est consectetur ex sunt enim elit laborum. Proident occaecat labore commodo nulla nisi nulla quis consectetur incididunt elit ex ullamco id. Anim in deserunt adipisicing enim aute commodo pariatur sint. Ipsum sunt adipisicing incididunt non commodo do proident aute veniam duis elit anim labore anim. Proident officia elit nisi eu occaecat non.\r\n", - "registered": "2020-01-03T03:52:09 +05:00", - "latitude": -34.108149, - "longitude": -135.45835, - "tags": ["esse", "eu", "consectetur", "minim", "esse", "occaecat", "sint"], - "friends": [ - { - "id": 0, - "name": "William Vaughn" - }, - { - "id": 1, - "name": "Gomez Cardenas" - }, - { - "id": 2, - "name": "Rita Wells" - } - ], - "greeting": "Hello, Chandra Daniel! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7803aed2fad247b1", - "index": 432, - "guid": "7bae36db-1ff0-4c1d-814c-bd50083cf6a7", - "isActive": true, - "balance": "$2,717.50", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Lauri Buckner", - "gender": "female", - "company": "PATHWAYS", - "email": "lauribuckner@pathways.com", - "phone": "+1 (833) 426-2857", - "address": "708 Losee Terrace, Stollings, Florida, 875", - "about": "Proident occaecat esse nisi adipisicing nisi ipsum laboris officia in irure. Esse ea fugiat aute Lorem commodo fugiat sit commodo amet exercitation ea deserunt mollit tempor. Aliquip tempor voluptate do nulla exercitation Lorem. Ullamco culpa proident ad enim cillum est qui consectetur ullamco cupidatat aliquip anim. Sunt qui consequat commodo proident exercitation duis aliqua aute consequat duis ex labore. Aliqua proident dolore cupidatat sint id aute sunt.\r\n", - "registered": "2015-02-09T07:37:38 +05:00", - "latitude": -31.940441, - "longitude": 170.479682, - "tags": ["veniam", "nulla", "officia", "quis", "aliquip", "sunt", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Bush Scott" - }, - { - "id": 1, - "name": "Scott Hansen" - }, - { - "id": 2, - "name": "Heidi Osborn" - } - ], - "greeting": "Hello, Lauri Buckner! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dbbf8a09d513b20de", - "index": 433, - "guid": "dc64d6f0-ab9c-4f8c-bb9b-688d8281f1c4", - "isActive": true, - "balance": "$2,128.45", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Jennings Barr", - "gender": "male", - "company": "DARWINIUM", - "email": "jenningsbarr@darwinium.com", - "phone": "+1 (914) 514-3137", - "address": "833 Essex Street, Stevens, Indiana, 8090", - "about": "Ullamco exercitation anim qui deserunt incididunt minim fugiat cupidatat anim anim. Exercitation anim nisi Lorem ex consequat ad eiusmod esse. Enim culpa et non qui occaecat minim consectetur aliquip pariatur veniam dolor officia laborum anim. Ad deserunt excepteur cillum proident officia do dolore. Duis do minim amet Lorem.\r\n", - "registered": "2020-07-27T07:33:23 +04:00", - "latitude": -76.968511, - "longitude": -82.981253, - "tags": ["ut", "nulla", "veniam", "amet", "et", "in", "enim"], - "friends": [ - { - "id": 0, - "name": "Hazel Mcclure" - }, - { - "id": 1, - "name": "Villarreal Bolton" - }, - { - "id": 2, - "name": "Joy Roy" - } - ], - "greeting": "Hello, Jennings Barr! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1f807a22d06c5c36", - "index": 434, - "guid": "083c4429-e01d-49a1-bda9-027f7a79fc64", - "isActive": false, - "balance": "$2,471.71", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Reyes Drake", - "gender": "male", - "company": "MONDICIL", - "email": "reyesdrake@mondicil.com", - "phone": "+1 (997) 575-2341", - "address": "202 Village Road, Edgewater, Northern Mariana Islands, 369", - "about": "Lorem consequat do consequat incididunt. Ex aliquip ex adipisicing nulla ea veniam reprehenderit irure. Dolor sit eiusmod id laboris sunt magna quis velit culpa laborum elit aliquip magna sit.\r\n", - "registered": "2014-12-06T01:23:58 +05:00", - "latitude": 22.134776, - "longitude": 156.733289, - "tags": ["culpa", "eu", "deserunt", "commodo", "culpa", "do", "ex"], - "friends": [ - { - "id": 0, - "name": "Macias Dean" - }, - { - "id": 1, - "name": "Wilda Nichols" - }, - { - "id": 2, - "name": "Dickson Flowers" - } - ], - "greeting": "Hello, Reyes Drake! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25daad60a3500b6fc31", - "index": 435, - "guid": "73584aed-dc03-4248-88df-aacb678a9f24", - "isActive": true, - "balance": "$3,664.61", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Tammy Wallace", - "gender": "female", - "company": "TINGLES", - "email": "tammywallace@tingles.com", - "phone": "+1 (987) 441-3610", - "address": "479 Adler Place, Urbana, Idaho, 771", - "about": "Incididunt culpa amet excepteur amet. Ex duis mollit sint quis quis ad in ullamco minim. Nisi quis labore consequat et laborum. Aliquip cupidatat pariatur elit proident aliqua id dolor consequat nulla nulla.\r\n", - "registered": "2016-11-18T01:27:20 +05:00", - "latitude": -44.017206, - "longitude": 82.540823, - "tags": ["ex", "excepteur", "consequat", "pariatur", "laborum", "veniam", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Ashlee Gregory" - }, - { - "id": 1, - "name": "Meyers Ellison" - }, - { - "id": 2, - "name": "York Walters" - } - ], - "greeting": "Hello, Tammy Wallace! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9b93751f9393d595", - "index": 436, - "guid": "c7289eb0-896a-4794-8fd7-50272c9431a5", - "isActive": false, - "balance": "$1,123.09", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Good Watts", - "gender": "male", - "company": "SLAX", - "email": "goodwatts@slax.com", - "phone": "+1 (861) 422-2517", - "address": "313 Bedell Lane, Clinton, District Of Columbia, 542", - "about": "Elit mollit pariatur dolor reprehenderit nisi duis ex consequat voluptate enim non nulla fugiat. Culpa irure excepteur nisi dolor. Esse fugiat anim fugiat reprehenderit occaecat occaecat commodo ea voluptate.\r\n", - "registered": "2018-01-20T11:20:44 +05:00", - "latitude": -42.781124, - "longitude": -66.889808, - "tags": ["ullamco", "dolore", "aliqua", "anim", "consectetur", "proident", "elit"], - "friends": [ - { - "id": 0, - "name": "Penelope Crawford" - }, - { - "id": 1, - "name": "Huffman Hampton" - }, - { - "id": 2, - "name": "Payne Duke" - } - ], - "greeting": "Hello, Good Watts! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d30aa7bae4f37b83a", - "index": 437, - "guid": "ff268a42-5d86-477e-b2de-4b2ea35c5982", - "isActive": false, - "balance": "$3,948.35", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Agnes Boyer", - "gender": "female", - "company": "QUILCH", - "email": "agnesboyer@quilch.com", - "phone": "+1 (843) 447-2119", - "address": "498 Oriental Boulevard, Brownsville, New Mexico, 6087", - "about": "In aute dolore mollit sint ex ut nulla dolore est. Veniam nulla incididunt nostrud culpa tempor est qui. Tempor quis aliquip mollit fugiat ex pariatur. Fugiat id consequat voluptate irure consequat occaecat.\r\n", - "registered": "2017-08-02T03:26:40 +04:00", - "latitude": -44.766927, - "longitude": -169.809461, - "tags": ["mollit", "nostrud", "et", "ut", "amet", "nulla", "magna"], - "friends": [ - { - "id": 0, - "name": "Camacho Le" - }, - { - "id": 1, - "name": "Daniels Best" - }, - { - "id": 2, - "name": "Page Sanchez" - } - ], - "greeting": "Hello, Agnes Boyer! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db7e6e592da30189d", - "index": 438, - "guid": "04444f03-d335-4819-a4c0-c958e44e1ced", - "isActive": true, - "balance": "$1,061.18", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Kline Ratliff", - "gender": "male", - "company": "ZAJ", - "email": "klineratliff@zaj.com", - "phone": "+1 (837) 525-2580", - "address": "411 Division Avenue, Courtland, South Dakota, 4047", - "about": "Id est ut amet eu nostrud non officia. Aute commodo consectetur labore ut cillum mollit labore elit elit esse dolor cupidatat. Aute eu quis deserunt cillum ullamco reprehenderit ex aliquip duis fugiat est esse labore esse. Voluptate fugiat voluptate officia eu dolor consectetur ea sit nostrud ex. Aliqua est do veniam labore commodo ipsum laborum. Ad reprehenderit veniam excepteur non excepteur deserunt.\r\n", - "registered": "2014-02-12T03:27:50 +05:00", - "latitude": 13.984666, - "longitude": 131.571077, - "tags": ["non", "deserunt", "consequat", "commodo", "dolore", "esse", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Gordon Jimenez" - }, - { - "id": 1, - "name": "Walter Hurley" - }, - { - "id": 2, - "name": "Nicole Bryan" - } - ], - "greeting": "Hello, Kline Ratliff! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d532a9b85c158e44e", - "index": 439, - "guid": "5ef5098d-588a-48a7-b1dc-4ae172b6c191", - "isActive": true, - "balance": "$3,345.01", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Carroll Colon", - "gender": "male", - "company": "BALOOBA", - "email": "carrollcolon@balooba.com", - "phone": "+1 (965) 577-2833", - "address": "490 Doscher Street, Dowling, American Samoa, 4177", - "about": "Sit minim aliquip id dolor magna fugiat aliqua exercitation quis. Nisi quis laborum enim occaecat dolore cillum anim laborum aute amet duis. Sit consectetur do eu cillum excepteur aliqua sint et adipisicing nisi non anim. Mollit commodo occaecat ex in ad non quis magna minim nisi. Id consectetur minim reprehenderit minim esse aliqua velit consequat.\r\n", - "registered": "2016-02-17T04:16:13 +05:00", - "latitude": 80.149267, - "longitude": -135.575164, - "tags": ["duis", "qui", "anim", "pariatur", "irure", "ad", "laborum"], - "friends": [ - { - "id": 0, - "name": "Wilson Sharp" - }, - { - "id": 1, - "name": "Glass Navarro" - }, - { - "id": 2, - "name": "Reba Russell" - } - ], - "greeting": "Hello, Carroll Colon! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2bb46d8a5e0b0d4d", - "index": 440, - "guid": "47306b69-ad8d-4a1d-b71d-46d4c1c31938", - "isActive": true, - "balance": "$2,654.87", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Gilda Fields", - "gender": "female", - "company": "TELLIFLY", - "email": "gildafields@tellifly.com", - "phone": "+1 (845) 432-3473", - "address": "606 Sackett Street, Cotopaxi, Iowa, 6882", - "about": "Fugiat labore id cillum commodo est nulla sit non ipsum eiusmod. Cillum Lorem ullamco duis incididunt anim reprehenderit ipsum pariatur eu laboris eiusmod eiusmod. Enim voluptate eiusmod ex commodo do. Pariatur esse excepteur sint laborum mollit tempor. Nulla fugiat adipisicing ullamco deserunt officia sint Lorem.\r\n", - "registered": "2016-04-17T08:32:29 +04:00", - "latitude": -35.276188, - "longitude": -169.567148, - "tags": ["est", "sit", "ipsum", "qui", "tempor", "nulla", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Dorothea Hayes" - }, - { - "id": 1, - "name": "Tammie Copeland" - }, - { - "id": 2, - "name": "White Pittman" - } - ], - "greeting": "Hello, Gilda Fields! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d25ebd510b88b8e55", - "index": 441, - "guid": "9879c4ba-9a7b-43db-8daf-3b39a54bf3fc", - "isActive": false, - "balance": "$3,829.13", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Sylvia Dawson", - "gender": "female", - "company": "KINDALOO", - "email": "sylviadawson@kindaloo.com", - "phone": "+1 (941) 421-2278", - "address": "194 Homecrest Court, Efland, Palau, 145", - "about": "Dolor irure anim voluptate eu nostrud. Occaecat exercitation cillum proident ea laborum deserunt nulla. Esse id dolore adipisicing velit esse. Mollit officia Lorem mollit non mollit ipsum minim cillum ut tempor veniam adipisicing. Cupidatat magna mollit minim mollit sunt duis. Magna in esse mollit in enim aute ad sint nisi ad minim esse esse cupidatat. Nostrud id in velit exercitation cupidatat et dolore aute cupidatat Lorem consequat.\r\n", - "registered": "2014-11-05T06:02:04 +05:00", - "latitude": -72.689044, - "longitude": 126.683989, - "tags": ["proident", "dolore", "occaecat", "mollit", "anim", "eu", "elit"], - "friends": [ - { - "id": 0, - "name": "Eleanor Perkins" - }, - { - "id": 1, - "name": "Lopez Cervantes" - }, - { - "id": 2, - "name": "Suzette Rosario" - } - ], - "greeting": "Hello, Sylvia Dawson! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc9cc2507f0f1ebd4", - "index": 442, - "guid": "30e10cb7-2ac1-4953-9ead-a67c231d0fc9", - "isActive": true, - "balance": "$3,852.60", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Sweet Baird", - "gender": "male", - "company": "PREMIANT", - "email": "sweetbaird@premiant.com", - "phone": "+1 (830) 457-2427", - "address": "229 Oxford Walk, Wintersburg, West Virginia, 7479", - "about": "Incididunt cupidatat aliqua voluptate dolore laborum deserunt duis consectetur officia cillum proident fugiat. Irure qui magna eiusmod nostrud nisi Lorem ex excepteur aliquip amet anim. Labore irure dolore anim cupidatat consequat. Commodo anim voluptate amet id.\r\n", - "registered": "2019-12-22T11:05:26 +05:00", - "latitude": -4.173499, - "longitude": -143.726342, - "tags": ["proident", "cupidatat", "anim", "dolor", "officia", "quis", "cillum"], - "friends": [ - { - "id": 0, - "name": "Susanne Hunt" - }, - { - "id": 1, - "name": "Gibbs Chaney" - }, - { - "id": 2, - "name": "Celeste Mullins" - } - ], - "greeting": "Hello, Sweet Baird! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d86b758e84879d6e9", - "index": 443, - "guid": "6bedc514-2699-43ee-ae8f-dc66c5c8b7a8", - "isActive": true, - "balance": "$3,071.60", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Welch Roberts", - "gender": "male", - "company": "BILLMED", - "email": "welchroberts@billmed.com", - "phone": "+1 (807) 506-3458", - "address": "364 Denton Place, Crayne, New York, 117", - "about": "Cupidatat pariatur aliqua esse quis aute amet in consequat culpa quis elit elit nostrud exercitation. Lorem ad sit minim culpa pariatur do esse ipsum labore do nisi nostrud eu. Deserunt nostrud aute elit anim labore magna labore ea. Ea dolor dolore et excepteur consectetur ex fugiat. Id aliquip fugiat esse in ad ut ea non sunt reprehenderit sint.\r\n", - "registered": "2017-01-01T01:45:03 +05:00", - "latitude": -77.827606, - "longitude": -144.100866, - "tags": ["quis", "nulla", "cupidatat", "enim", "mollit", "est", "amet"], - "friends": [ - { - "id": 0, - "name": "Mcbride Schwartz" - }, - { - "id": 1, - "name": "Tonya Swanson" - }, - { - "id": 2, - "name": "Jerri Gomez" - } - ], - "greeting": "Hello, Welch Roberts! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d359ac8dbc2d5e640", - "index": 444, - "guid": "025b1137-8965-466a-ae5e-16ef13fa6e5c", - "isActive": false, - "balance": "$1,831.87", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Minerva Guzman", - "gender": "female", - "company": "ZBOO", - "email": "minervaguzman@zboo.com", - "phone": "+1 (850) 414-3035", - "address": "634 Brighton Avenue, Hannasville, Hawaii, 4289", - "about": "Nulla consectetur ipsum eiusmod consectetur veniam eu non dolor deserunt non culpa id officia. Anim exercitation voluptate proident in non labore nulla fugiat consequat exercitation consequat esse sunt. Nisi ut cillum anim ex sunt voluptate amet esse dolor aliquip velit. Laboris dolore id Lorem tempor in est amet.\r\n", - "registered": "2019-09-27T01:36:36 +04:00", - "latitude": -74.387638, - "longitude": 91.421272, - "tags": ["enim", "fugiat", "tempor", "ad", "eiusmod", "officia", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Lynnette Hancock" - }, - { - "id": 1, - "name": "Maxine Morse" - }, - { - "id": 2, - "name": "Doreen Hicks" - } - ], - "greeting": "Hello, Minerva Guzman! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbc642b72cae164c5", - "index": 445, - "guid": "f4443e45-0fcb-46ec-ac47-fb1b75a6603f", - "isActive": false, - "balance": "$3,626.94", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Cherie Mcguire", - "gender": "female", - "company": "ZOLARITY", - "email": "cheriemcguire@zolarity.com", - "phone": "+1 (800) 569-2831", - "address": "262 Front Street, Roberts, Nebraska, 7546", - "about": "Deserunt quis consectetur officia sint pariatur. Commodo incididunt ullamco magna laborum ut laboris fugiat nulla cillum laboris dolore dolore adipisicing. In sint laborum sunt cillum eu est nisi est officia.\r\n", - "registered": "2018-10-19T12:38:11 +04:00", - "latitude": -86.359548, - "longitude": 47.11706, - "tags": ["excepteur", "fugiat", "labore", "mollit", "sit", "dolor", "elit"], - "friends": [ - { - "id": 0, - "name": "Tamara Olsen" - }, - { - "id": 1, - "name": "Owen Puckett" - }, - { - "id": 2, - "name": "Erna York" - } - ], - "greeting": "Hello, Cherie Mcguire! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df7f515a0622ac778", - "index": 446, - "guid": "13e7e975-906a-462f-b62a-808b4e76de21", - "isActive": true, - "balance": "$2,071.35", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Connie Hart", - "gender": "female", - "company": "INDEXIA", - "email": "conniehart@indexia.com", - "phone": "+1 (803) 468-3115", - "address": "100 Eldert Street, Kula, Wisconsin, 2721", - "about": "Laborum fugiat tempor enim sint culpa aliqua cillum tempor voluptate in pariatur ipsum qui. Anim sint tempor aute tempor quis amet quis nostrud incididunt culpa deserunt. Eiusmod veniam minim tempor laboris incididunt est ut. Minim aute nulla eiusmod commodo aute reprehenderit. Minim et cupidatat labore fugiat quis nulla ut tempor culpa exercitation adipisicing aliquip. Anim cupidatat dolor mollit consequat anim.\r\n", - "registered": "2019-01-12T05:52:48 +05:00", - "latitude": 73.954109, - "longitude": -131.480855, - "tags": ["sunt", "qui", "irure", "aute", "exercitation", "aliquip", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Benita Reese" - }, - { - "id": 1, - "name": "Mueller Mooney" - }, - { - "id": 2, - "name": "Dawson Odom" - } - ], - "greeting": "Hello, Connie Hart! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6dd2477b15233960", - "index": 447, - "guid": "3a880cf0-63f8-47b8-85d1-2f38c9c5c36a", - "isActive": false, - "balance": "$2,961.68", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Tiffany Kirby", - "gender": "female", - "company": "MIRACULA", - "email": "tiffanykirby@miracula.com", - "phone": "+1 (905) 577-2883", - "address": "646 Legion Street, Boomer, Arizona, 9988", - "about": "Elit eiusmod nostrud fugiat proident incididunt do. Occaecat mollit adipisicing aute id consectetur Lorem proident et deserunt pariatur. Fugiat quis est culpa aute exercitation anim tempor deserunt magna cillum et non laborum anim. Ipsum deserunt eu aliquip esse veniam quis anim laboris exercitation cupidatat qui. Pariatur laborum laboris ut laborum et exercitation consequat consequat nostrud reprehenderit ex commodo dolor aute. Ipsum minim commodo occaecat officia occaecat consequat excepteur ad. Nostrud nisi Lorem dolore sunt qui do velit aute Lorem.\r\n", - "registered": "2020-02-12T01:01:51 +05:00", - "latitude": 87.529934, - "longitude": -16.395405, - "tags": ["ipsum", "aliqua", "ipsum", "cillum", "fugiat", "culpa", "sit"], - "friends": [ - { - "id": 0, - "name": "Caitlin Fowler" - }, - { - "id": 1, - "name": "Brigitte Little" - }, - { - "id": 2, - "name": "Giles Tanner" - } - ], - "greeting": "Hello, Tiffany Kirby! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9533db37878bf0a2", - "index": 448, - "guid": "3de71dff-3e61-4066-b9f8-efd6701f07a3", - "isActive": false, - "balance": "$2,059.79", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Summers Kline", - "gender": "male", - "company": "COMBOGENE", - "email": "summerskline@combogene.com", - "phone": "+1 (854) 460-3990", - "address": "353 Catherine Street, Gardiner, Ohio, 8888", - "about": "Sit id ex commodo occaecat commodo aliquip ut. Esse deserunt exercitation anim nisi Lorem eu sunt aute exercitation culpa. Labore aute eiusmod id aute. Tempor ut dolore sint nulla. Aliqua non consectetur magna nisi occaecat consequat culpa do ad.\r\n", - "registered": "2017-04-30T05:40:58 +04:00", - "latitude": -47.749131, - "longitude": 87.090726, - "tags": ["mollit", "occaecat", "pariatur", "est", "ipsum", "laboris", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Mays Baldwin" - }, - { - "id": 1, - "name": "Joanna Morgan" - }, - { - "id": 2, - "name": "Maryellen Mckay" - } - ], - "greeting": "Hello, Summers Kline! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7ccd4961b2a54efa", - "index": 449, - "guid": "b6fe6661-f511-4371-9856-b69f1ee0a8f8", - "isActive": false, - "balance": "$1,463.42", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Bridges Craig", - "gender": "male", - "company": "DAIDO", - "email": "bridgescraig@daido.com", - "phone": "+1 (879) 473-3528", - "address": "342 Monroe Street, Wilsonia, Arkansas, 2836", - "about": "Et duis do aliquip sint cillum non ad. Ipsum non veniam ex velit. Velit pariatur aliquip nostrud in dolor sit. Nulla aute eiusmod esse nisi eiusmod aliquip dolore.\r\n", - "registered": "2016-06-19T12:47:01 +04:00", - "latitude": -22.331119, - "longitude": 24.965172, - "tags": ["in", "irure", "voluptate", "nulla", "consequat", "consectetur", "aute"], - "friends": [ - { - "id": 0, - "name": "Betty Carey" - }, - { - "id": 1, - "name": "Schwartz Mendez" - }, - { - "id": 2, - "name": "Aurora Dillon" - } - ], - "greeting": "Hello, Bridges Craig! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1516902d635a005b", - "index": 450, - "guid": "815adce5-2730-42ca-9789-ba648a9b3533", - "isActive": false, - "balance": "$2,390.22", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Mable Caldwell", - "gender": "female", - "company": "VIXO", - "email": "mablecaldwell@vixo.com", - "phone": "+1 (991) 513-3983", - "address": "148 Montauk Avenue, Caroleen, Nevada, 9777", - "about": "Enim eu irure aliqua proident amet cillum Lorem magna. Mollit culpa fugiat esse occaecat magna Lorem pariatur eu adipisicing. Aliquip cillum sit Lorem tempor consectetur commodo amet reprehenderit nostrud excepteur esse adipisicing. Minim est incididunt cillum do ea elit exercitation exercitation dolore ea ut anim. Elit elit exercitation deserunt aliqua exercitation commodo ex.\r\n", - "registered": "2015-07-04T10:34:17 +04:00", - "latitude": 71.909953, - "longitude": -60.866939, - "tags": ["laborum", "ipsum", "enim", "sit", "proident", "mollit", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Huber Mathews" - }, - { - "id": 1, - "name": "Eileen Solis" - }, - { - "id": 2, - "name": "Odonnell Lara" - } - ], - "greeting": "Hello, Mable Caldwell! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ddb22fbd2dd43f9bd", - "index": 451, - "guid": "5c8353f1-82a9-48bc-ae4c-a3bef67aec5a", - "isActive": true, - "balance": "$1,193.22", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Elvia Raymond", - "gender": "female", - "company": "EVENTAGE", - "email": "elviaraymond@eventage.com", - "phone": "+1 (984) 557-2308", - "address": "866 Richardson Street, Conestoga, Massachusetts, 6278", - "about": "Eiusmod qui magna sit commodo ipsum exercitation nostrud cupidatat consectetur. Mollit incididunt aliquip dolore mollit in sit culpa et esse aute fugiat consequat. Est dolor nisi esse consequat laborum est est amet. Et minim consectetur cupidatat minim. Occaecat enim magna consectetur ullamco. Anim ea sint dolore commodo nulla fugiat culpa consequat labore sint exercitation in ad consequat.\r\n", - "registered": "2020-02-22T11:54:04 +05:00", - "latitude": 36.970527, - "longitude": 122.278885, - "tags": ["ad", "nostrud", "ut", "est", "mollit", "enim", "nulla"], - "friends": [ - { - "id": 0, - "name": "Luella Chavez" - }, - { - "id": 1, - "name": "Barlow Rocha" - }, - { - "id": 2, - "name": "Marguerite Larsen" - } - ], - "greeting": "Hello, Elvia Raymond! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dfb70e3265aa7b160", - "index": 452, - "guid": "02a5d211-124e-4b48-a284-f86442811598", - "isActive": false, - "balance": "$3,470.09", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Tanya Beard", - "gender": "female", - "company": "FLEXIGEN", - "email": "tanyabeard@flexigen.com", - "phone": "+1 (838) 490-2472", - "address": "823 Newkirk Placez, Templeton, Marshall Islands, 1034", - "about": "Nostrud enim mollit sunt sit ut ullamco do exercitation ut exercitation elit Lorem nisi Lorem. Officia veniam aute cillum consequat amet commodo proident mollit. Laboris proident ut ea ullamco non qui ea anim. Deserunt ipsum minim cillum dolor ad deserunt consequat consequat.\r\n", - "registered": "2016-02-14T03:32:51 +05:00", - "latitude": 47.11806, - "longitude": 123.700874, - "tags": ["in", "adipisicing", "irure", "occaecat", "est", "esse", "quis"], - "friends": [ - { - "id": 0, - "name": "Petty Benjamin" - }, - { - "id": 1, - "name": "Elsie Oliver" - }, - { - "id": 2, - "name": "Salas Fuller" - } - ], - "greeting": "Hello, Tanya Beard! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0f26e76a389aa22a", - "index": 453, - "guid": "55839442-8618-43b2-92e6-079284c2a2b6", - "isActive": true, - "balance": "$3,470.07", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Richardson Hood", - "gender": "male", - "company": "PYRAMAX", - "email": "richardsonhood@pyramax.com", - "phone": "+1 (879) 489-3567", - "address": "424 Townsend Street, Floriston, Puerto Rico, 670", - "about": "Quis officia est nisi velit ea magna laboris adipisicing exercitation. Elit aliquip enim reprehenderit amet duis velit Lorem ut voluptate et Lorem. Aute amet laborum adipisicing qui culpa commodo nulla dolore id eiusmod sunt exercitation Lorem.\r\n", - "registered": "2019-05-20T06:30:59 +04:00", - "latitude": 20.890391, - "longitude": 145.924604, - "tags": ["non", "commodo", "non", "deserunt", "irure", "labore", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Shauna Ferrell" - }, - { - "id": 1, - "name": "Melinda Rasmussen" - }, - { - "id": 2, - "name": "Edwina Wolfe" - } - ], - "greeting": "Hello, Richardson Hood! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dcc015bac93dd1b58", - "index": 454, - "guid": "c4db6cbe-d7ff-4adb-9e76-6eca05fe239f", - "isActive": false, - "balance": "$1,263.86", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Linda Goff", - "gender": "female", - "company": "FUELTON", - "email": "lindagoff@fuelton.com", - "phone": "+1 (904) 510-2828", - "address": "369 Montauk Court, Wattsville, California, 2772", - "about": "Nisi eu reprehenderit nisi quis enim mollit commodo ipsum non aliquip excepteur cillum mollit ullamco. Dolor adipisicing exercitation laborum est minim. Id tempor proident deserunt ut id laborum quis in amet sint Lorem.\r\n", - "registered": "2019-06-25T07:53:33 +04:00", - "latitude": -23.361417, - "longitude": 171.973949, - "tags": ["laborum", "in", "non", "velit", "irure", "labore", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Margo Powell" - }, - { - "id": 1, - "name": "Janelle Morrow" - }, - { - "id": 2, - "name": "Noreen Wilcox" - } - ], - "greeting": "Hello, Linda Goff! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc04d131be3bd599f", - "index": 455, - "guid": "46a5dadb-2c2e-4562-8f01-33a4ef943bec", - "isActive": false, - "balance": "$2,124.03", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Duke Simpson", - "gender": "male", - "company": "CONJURICA", - "email": "dukesimpson@conjurica.com", - "phone": "+1 (940) 458-2948", - "address": "586 President Street, Westmoreland, Tennessee, 4924", - "about": "Mollit id officia aliquip pariatur nisi pariatur laboris nulla anim occaecat duis excepteur. Sunt anim deserunt irure commodo sunt eiusmod consequat aliquip est labore aliquip velit. Dolore enim nulla excepteur quis quis.\r\n", - "registered": "2018-04-28T11:17:33 +04:00", - "latitude": -47.883992, - "longitude": 143.218224, - "tags": ["elit", "nulla", "pariatur", "amet", "tempor", "ut", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Rich Oneil" - }, - { - "id": 1, - "name": "Sabrina English" - }, - { - "id": 2, - "name": "Whitaker Vazquez" - } - ], - "greeting": "Hello, Duke Simpson! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25ddf1965c13f4f8790", - "index": 456, - "guid": "a1bbe059-8c82-4cd6-a97d-fa3c3932de0c", - "isActive": false, - "balance": "$2,790.67", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Kitty Walter", - "gender": "female", - "company": "GEEKWAGON", - "email": "kittywalter@geekwagon.com", - "phone": "+1 (887) 582-3342", - "address": "415 Brooklyn Road, Klagetoh, Wyoming, 8078", - "about": "Pariatur pariatur ea Lorem exercitation qui proident quis reprehenderit veniam. Sunt minim et cillum do voluptate fugiat culpa ipsum cupidatat fugiat reprehenderit consectetur. Cillum irure enim fugiat excepteur cupidatat.\r\n", - "registered": "2016-05-14T01:16:18 +04:00", - "latitude": 36.621119, - "longitude": -147.482059, - "tags": ["anim", "esse", "sunt", "consequat", "sint", "excepteur", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Elnora Carter" - }, - { - "id": 1, - "name": "Serena Stephenson" - }, - { - "id": 2, - "name": "Hogan Santana" - } - ], - "greeting": "Hello, Kitty Walter! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4e44c475f3be6141", - "index": 457, - "guid": "8e87703c-e4e5-4a01-af1f-f03c2844f934", - "isActive": false, - "balance": "$2,813.59", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Blackburn Moore", - "gender": "male", - "company": "PRIMORDIA", - "email": "blackburnmoore@primordia.com", - "phone": "+1 (869) 464-3668", - "address": "817 Kathleen Court, Strong, North Carolina, 4790", - "about": "Quis voluptate labore cupidatat incididunt velit commodo ea adipisicing veniam magna labore. Sint incididunt ipsum consequat exercitation nisi sunt ullamco fugiat dolor est est quis nisi. Voluptate quis velit magna esse qui do. Aute deserunt laboris non veniam elit reprehenderit veniam nostrud.\r\n", - "registered": "2016-02-04T01:30:00 +05:00", - "latitude": -1.412762, - "longitude": 87.363433, - "tags": ["labore", "aute", "nisi", "eiusmod", "reprehenderit", "laboris", "nisi"], - "friends": [ - { - "id": 0, - "name": "Phyllis Frye" - }, - { - "id": 1, - "name": "Erin Hughes" - }, - { - "id": 2, - "name": "Vincent Valenzuela" - } - ], - "greeting": "Hello, Blackburn Moore! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d05c05e1709e5b8ee", - "index": 458, - "guid": "c1af10dc-0313-4620-82f4-52c35f33b994", - "isActive": false, - "balance": "$3,904.02", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Nola Glenn", - "gender": "female", - "company": "PROFLEX", - "email": "nolaglenn@proflex.com", - "phone": "+1 (860) 568-2235", - "address": "873 Ide Court, Wedgewood, Michigan, 917", - "about": "Non amet consequat commodo eiusmod excepteur aliquip eu aute consequat et. Do duis sint sunt elit amet mollit consequat. Quis aliqua proident id laborum ullamco excepteur reprehenderit voluptate nulla est id mollit. Elit est enim non ut irure dolore sunt ipsum laboris irure. Sit tempor aliquip velit labore tempor quis sint enim anim minim dolore irure aliquip officia. Incididunt exercitation qui elit consectetur nostrud ipsum officia est labore elit tempor ut. Non sit consequat magna irure consequat deserunt labore ea laboris proident consectetur proident veniam pariatur.\r\n", - "registered": "2018-04-30T12:26:09 +04:00", - "latitude": -22.845893, - "longitude": 35.313852, - "tags": ["culpa", "laborum", "proident", "occaecat", "laboris", "officia", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Chan Zamora" - }, - { - "id": 1, - "name": "Goff Mckee" - }, - { - "id": 2, - "name": "Pearson Maynard" - } - ], - "greeting": "Hello, Nola Glenn! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6bf4e709d35bf834", - "index": 459, - "guid": "04adf660-ecc3-4ab4-868b-0866bc256d5b", - "isActive": true, - "balance": "$1,133.21", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Hernandez Leon", - "gender": "male", - "company": "SPACEWAX", - "email": "hernandezleon@spacewax.com", - "phone": "+1 (962) 555-3841", - "address": "233 Chester Street, Washington, Oklahoma, 2005", - "about": "Incididunt id consectetur officia pariatur officia magna non. Magna ipsum duis pariatur ullamco labore ipsum dolor do quis proident deserunt. Aliqua ut officia ad occaecat quis ad adipisicing aliquip nostrud. Commodo veniam consequat excepteur aute enim ea dolor fugiat laborum officia ea pariatur. Minim quis cupidatat minim occaecat cupidatat ut nostrud.\r\n", - "registered": "2018-12-13T10:23:57 +05:00", - "latitude": 34.810218, - "longitude": -56.408343, - "tags": ["enim", "velit", "velit", "qui", "est", "ea", "ut"], - "friends": [ - { - "id": 0, - "name": "Blanchard Porter" - }, - { - "id": 1, - "name": "Rodriguez Bonner" - }, - { - "id": 2, - "name": "Pansy Cote" - } - ], - "greeting": "Hello, Hernandez Leon! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d662982029cfd7af6", - "index": 460, - "guid": "efeb6dc1-78d2-4f67-8d7d-95cd62aa31c1", - "isActive": true, - "balance": "$3,166.77", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Talley Tate", - "gender": "male", - "company": "POLARIA", - "email": "talleytate@polaria.com", - "phone": "+1 (973) 566-2322", - "address": "341 Stockholm Street, Idamay, Vermont, 1293", - "about": "Labore ex et nisi officia laborum commodo commodo ad laboris deserunt occaecat. Culpa laborum dolor adipisicing et mollit non. Velit deserunt laborum fugiat id excepteur. Voluptate commodo officia occaecat eiusmod ea. Ex consequat dolore ea consequat ipsum ea anim ex deserunt voluptate. Cupidatat magna cillum amet sit occaecat pariatur aliquip nostrud enim fugiat irure laboris laboris cillum. Minim exercitation ex adipisicing occaecat.\r\n", - "registered": "2015-03-01T01:39:15 +05:00", - "latitude": 15.49686, - "longitude": 97.056162, - "tags": ["officia", "mollit", "aute", "nulla", "ullamco", "culpa", "amet"], - "friends": [ - { - "id": 0, - "name": "Christie Carpenter" - }, - { - "id": 1, - "name": "Yesenia Sexton" - }, - { - "id": 2, - "name": "Marcie Mason" - } - ], - "greeting": "Hello, Talley Tate! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d84cf2b284b2f9282", - "index": 461, - "guid": "44caccfd-c160-425b-ad18-3c33362bba5d", - "isActive": false, - "balance": "$2,702.69", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Herminia Gonzales", - "gender": "female", - "company": "XUMONK", - "email": "herminiagonzales@xumonk.com", - "phone": "+1 (830) 574-3589", - "address": "584 Furman Street, Draper, Utah, 2986", - "about": "Velit cillum consectetur velit cillum. Ullamco sunt deserunt excepteur incididunt mollit officia consequat pariatur est do ullamco adipisicing. Velit ut eu nostrud tempor culpa reprehenderit officia ad sunt duis cillum qui anim. Pariatur culpa elit pariatur et. Nisi irure voluptate sint mollit sit ipsum sit consequat irure culpa.\r\n", - "registered": "2018-05-27T03:21:19 +04:00", - "latitude": 7.878142, - "longitude": -23.196761, - "tags": ["qui", "occaecat", "ipsum", "veniam", "in", "nulla", "veniam"], - "friends": [ - { - "id": 0, - "name": "Kasey Fuentes" - }, - { - "id": 1, - "name": "Kristen Montoya" - }, - { - "id": 2, - "name": "Riley Stafford" - } - ], - "greeting": "Hello, Herminia Gonzales! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dfb73a97913b44a51", - "index": 462, - "guid": "3b986044-044d-4113-a742-b1990d861704", - "isActive": true, - "balance": "$2,367.93", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Jackson Curry", - "gender": "male", - "company": "EYEWAX", - "email": "jacksoncurry@eyewax.com", - "phone": "+1 (979) 598-2421", - "address": "308 Ainslie Street, Bancroft, Kansas, 6075", - "about": "Esse enim et sunt sint reprehenderit sint magna adipisicing. Consectetur incididunt ullamco consectetur dolore veniam veniam amet laborum ipsum do esse. Exercitation est occaecat proident incididunt esse ullamco amet aute adipisicing.\r\n", - "registered": "2018-01-17T10:38:52 +05:00", - "latitude": -71.198413, - "longitude": -53.412659, - "tags": ["officia", "est", "sint", "deserunt", "consectetur", "esse", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Velma Johns" - }, - { - "id": 1, - "name": "Simone Santos" - }, - { - "id": 2, - "name": "Marlene Keller" - } - ], - "greeting": "Hello, Jackson Curry! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d076b14600ba0fb5b", - "index": 463, - "guid": "305e9947-b224-4820-859f-ca7995bb1c5e", - "isActive": true, - "balance": "$1,021.28", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Marie Haynes", - "gender": "female", - "company": "MANTRIX", - "email": "mariehaynes@mantrix.com", - "phone": "+1 (849) 437-3916", - "address": "963 Rapelye Street, Barronett, Delaware, 5150", - "about": "Proident cillum tempor adipisicing minim amet ad cillum nostrud quis cupidatat tempor ex. Amet officia nostrud amet est esse. Culpa Lorem officia cupidatat culpa laboris irure. Velit commodo anim excepteur proident commodo ex quis aute eu consectetur anim amet consectetur qui. Ullamco elit occaecat adipisicing ullamco irure laborum nulla veniam. Amet aute quis Lorem voluptate.\r\n", - "registered": "2018-10-26T09:03:12 +04:00", - "latitude": -14.583274, - "longitude": 55.328284, - "tags": ["irure", "deserunt", "sunt", "ea", "eiusmod", "cillum", "dolore"], - "friends": [ - { - "id": 0, - "name": "Hurst Lyons" - }, - { - "id": 1, - "name": "Mercer Bruce" - }, - { - "id": 2, - "name": "Cooke Talley" - } - ], - "greeting": "Hello, Marie Haynes! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1abe67dce4f43910", - "index": 464, - "guid": "d6d60fa2-19a3-4481-acdc-d7c0609d6b45", - "isActive": false, - "balance": "$2,875.48", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Roberson Castro", - "gender": "male", - "company": "GLUKGLUK", - "email": "robersoncastro@glukgluk.com", - "phone": "+1 (970) 440-2119", - "address": "417 Mill Lane, Hatteras, Guam, 1724", - "about": "Mollit ex aute ea tempor est dolor adipisicing deserunt officia. Mollit amet et nostrud adipisicing anim. Cillum sint mollit nisi voluptate adipisicing laboris consectetur anim. Dolor labore quis aliquip deserunt consequat eu. Consectetur elit magna irure tempor et occaecat exercitation velit cillum mollit cillum pariatur excepteur. Et aliqua sunt dolor do magna in laborum veniam.\r\n", - "registered": "2015-09-21T01:25:56 +04:00", - "latitude": -11.652421, - "longitude": -55.501366, - "tags": ["amet", "consectetur", "non", "ut", "est", "aliquip", "quis"], - "friends": [ - { - "id": 0, - "name": "Joyce Griffin" - }, - { - "id": 1, - "name": "Sosa Kim" - }, - { - "id": 2, - "name": "Cornelia Moses" - } - ], - "greeting": "Hello, Roberson Castro! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d29078f62a7ee26f6", - "index": 465, - "guid": "7c9ac9b2-9d6b-46ea-ab57-de8ed7dd7951", - "isActive": false, - "balance": "$3,351.43", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Vickie Meyer", - "gender": "female", - "company": "IDEGO", - "email": "vickiemeyer@idego.com", - "phone": "+1 (928) 412-2448", - "address": "472 Bridge Street, Reno, Oregon, 8762", - "about": "Voluptate irure veniam cillum commodo enim quis adipisicing quis ea aliquip eiusmod excepteur adipisicing dolor. Exercitation proident consectetur in magna aliquip pariatur occaecat nostrud culpa sit ea incididunt. Aliquip fugiat dolore fugiat ea officia ullamco irure. Minim ipsum do sunt in eiusmod in in exercitation nostrud voluptate nostrud anim non. Id adipisicing ullamco pariatur nostrud ad quis aute. Minim dolor et sint id cillum esse veniam.\r\n", - "registered": "2016-05-12T01:55:53 +04:00", - "latitude": -56.710127, - "longitude": 130.37115, - "tags": ["ipsum", "ullamco", "aliquip", "aliqua", "qui", "fugiat", "esse"], - "friends": [ - { - "id": 0, - "name": "Mills Cunningham" - }, - { - "id": 1, - "name": "Gonzalez Gay" - }, - { - "id": 2, - "name": "Pat Snyder" - } - ], - "greeting": "Hello, Vickie Meyer! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d434575eeb4c34625", - "index": 466, - "guid": "c3d6eeed-66f2-4891-8e41-7a37f6f292cc", - "isActive": false, - "balance": "$3,103.56", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Corinne Kaufman", - "gender": "female", - "company": "QUILTIGEN", - "email": "corinnekaufman@quiltigen.com", - "phone": "+1 (808) 440-2007", - "address": "531 Reed Street, Herbster, Missouri, 1932", - "about": "Cillum esse elit pariatur ullamco sint. Ipsum sit occaecat incididunt qui aliqua. Excepteur sint et labore adipisicing aliqua veniam enim deserunt nostrud est. Enim aute exercitation veniam mollit occaecat eiusmod nulla tempor incididunt laborum aliquip id eu magna. Culpa magna ea cupidatat voluptate ut. Labore minim enim enim nulla adipisicing anim anim minim deserunt aliqua.\r\n", - "registered": "2018-04-06T06:43:18 +04:00", - "latitude": 87.159569, - "longitude": 136.122096, - "tags": ["ad", "nulla", "nulla", "dolor", "sint", "officia", "consequat"], - "friends": [ - { - "id": 0, - "name": "Chang Delaney" - }, - { - "id": 1, - "name": "Anne Chan" - }, - { - "id": 2, - "name": "Nannie Buckley" - } - ], - "greeting": "Hello, Corinne Kaufman! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d04cfc7c635f71705", - "index": 467, - "guid": "aaf662fb-b1e2-44e0-bd11-60038bc04712", - "isActive": false, - "balance": "$2,182.86", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Alberta Stevenson", - "gender": "female", - "company": "COFINE", - "email": "albertastevenson@cofine.com", - "phone": "+1 (997) 565-3825", - "address": "153 Suydam Street, Osage, Montana, 7882", - "about": "Ex aliquip est deserunt elit culpa eiusmod nostrud cillum nisi ipsum anim reprehenderit. Do laboris laboris proident cupidatat exercitation irure quis. Deserunt velit reprehenderit ipsum labore nulla culpa velit consequat laborum nostrud elit laboris incididunt sunt.\r\n", - "registered": "2018-05-15T06:25:34 +04:00", - "latitude": -86.643523, - "longitude": -105.396199, - "tags": ["quis", "qui", "adipisicing", "aute", "quis", "irure", "elit"], - "friends": [ - { - "id": 0, - "name": "Buchanan Sparks" - }, - { - "id": 1, - "name": "Pamela Spencer" - }, - { - "id": 2, - "name": "Josefina Silva" - } - ], - "greeting": "Hello, Alberta Stevenson! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc36e945ac1132345", - "index": 468, - "guid": "7281fd44-6033-4f88-bda8-774701402000", - "isActive": true, - "balance": "$2,981.75", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Bright Ferguson", - "gender": "male", - "company": "MANTRO", - "email": "brightferguson@mantro.com", - "phone": "+1 (849) 460-2568", - "address": "357 Himrod Street, Wyoming, Alaska, 6032", - "about": "Anim ex elit eiusmod sint. Deserunt qui mollit qui sunt nulla reprehenderit duis anim nisi velit consequat eiusmod cupidatat. Nulla voluptate magna tempor do est veniam ut ipsum dolore adipisicing proident.\r\n", - "registered": "2016-12-15T12:57:09 +05:00", - "latitude": 77.325003, - "longitude": 6.883368, - "tags": ["amet", "voluptate", "nisi", "voluptate", "id", "est", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Leslie Walsh" - }, - { - "id": 1, - "name": "Coleen Tyler" - }, - { - "id": 2, - "name": "Gallagher Harper" - } - ], - "greeting": "Hello, Bright Ferguson! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ddce173aa7bbc5f71", - "index": 469, - "guid": "1e358374-77a0-4e21-b9d2-3fbb1c86382c", - "isActive": false, - "balance": "$1,485.31", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Thelma Estes", - "gender": "female", - "company": "UTARIAN", - "email": "thelmaestes@utarian.com", - "phone": "+1 (854) 447-3728", - "address": "952 Bulwer Place, Crown, Kentucky, 9897", - "about": "Aliqua culpa consequat nisi est enim amet ipsum culpa laborum in consequat veniam. Enim ipsum laborum sunt laborum labore esse qui magna. Irure eiusmod incididunt irure laboris amet sit voluptate. In sunt anim sint anim do officia sunt incididunt tempor pariatur ut proident id elit. Consectetur duis aute dolore ex cillum minim irure ullamco. Id reprehenderit eiusmod ad nostrud ex anim nisi commodo. Elit mollit Lorem officia ipsum laborum.\r\n", - "registered": "2019-09-05T08:06:10 +04:00", - "latitude": 25.613978, - "longitude": 101.022237, - "tags": ["est", "anim", "exercitation", "in", "ipsum", "qui", "proident"], - "friends": [ - { - "id": 0, - "name": "Bonita Mcbride" - }, - { - "id": 1, - "name": "Bryant Hernandez" - }, - { - "id": 2, - "name": "Henderson Garcia" - } - ], - "greeting": "Hello, Thelma Estes! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de523e5815b818fd2", - "index": 470, - "guid": "564d3dba-5fed-45d0-8e40-5c245d24e425", - "isActive": true, - "balance": "$3,097.22", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Winnie Burgess", - "gender": "female", - "company": "EWAVES", - "email": "winnieburgess@ewaves.com", - "phone": "+1 (826) 600-3640", - "address": "204 Tapscott Street, Whipholt, Mississippi, 2853", - "about": "Tempor proident fugiat eu aute nisi nostrud officia fugiat elit anim excepteur tempor deserunt. Do officia exercitation aliquip pariatur pariatur pariatur reprehenderit sit enim eiusmod. Nisi incididunt labore duis elit.\r\n", - "registered": "2016-10-12T02:38:34 +04:00", - "latitude": 24.368204, - "longitude": -20.088685, - "tags": ["occaecat", "ipsum", "ea", "minim", "consequat", "eiusmod", "aute"], - "friends": [ - { - "id": 0, - "name": "Beverly Parker" - }, - { - "id": 1, - "name": "Mendez Richmond" - }, - { - "id": 2, - "name": "Traci Mccormick" - } - ], - "greeting": "Hello, Winnie Burgess! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3afa329a5c3ad377", - "index": 471, - "guid": "c8417996-77c2-4d4b-9c2b-c99051580666", - "isActive": true, - "balance": "$1,945.12", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Dodson Beasley", - "gender": "male", - "company": "WAAB", - "email": "dodsonbeasley@waab.com", - "phone": "+1 (980) 590-2228", - "address": "553 Brightwater Court, Wilmington, North Dakota, 6792", - "about": "Cillum Lorem incididunt exercitation et consectetur laborum. Do ea ex occaecat reprehenderit eiusmod. Laborum labore ex esse sint magna do. Ad mollit excepteur esse qui ut voluptate aliquip amet sint amet sint magna in voluptate. Amet qui amet veniam fugiat excepteur commodo excepteur ullamco in irure. Incididunt laboris exercitation culpa adipisicing occaecat ullamco irure enim. Labore commodo ea nulla non voluptate nulla consectetur aute dolor ullamco pariatur nostrud.\r\n", - "registered": "2020-02-16T07:41:54 +05:00", - "latitude": 9.076442, - "longitude": -94.94761, - "tags": ["consequat", "proident", "est", "et", "occaecat", "id", "esse"], - "friends": [ - { - "id": 0, - "name": "Harris Barrera" - }, - { - "id": 1, - "name": "Kari Hess" - }, - { - "id": 2, - "name": "Waters Johnson" - } - ], - "greeting": "Hello, Dodson Beasley! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0086cd9eb06c1d87", - "index": 472, - "guid": "9a9caf0c-b8e7-4089-bdcf-b61fc6238668", - "isActive": true, - "balance": "$1,832.04", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Short Branch", - "gender": "male", - "company": "WATERBABY", - "email": "shortbranch@waterbaby.com", - "phone": "+1 (932) 550-3894", - "address": "404 Howard Avenue, Hasty, Federated States Of Micronesia, 5574", - "about": "Et minim proident aliquip incididunt ut ea. Aliqua reprehenderit labore duis laboris ex do tempor occaecat proident anim. Nisi occaecat nisi pariatur ullamco et ipsum cillum.\r\n", - "registered": "2018-08-16T01:06:46 +04:00", - "latitude": 79.181265, - "longitude": -62.141931, - "tags": ["culpa", "ad", "reprehenderit", "veniam", "labore", "esse", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Atkins Mcleod" - }, - { - "id": 1, - "name": "Jo Noel" - }, - { - "id": 2, - "name": "Simon Tyson" - } - ], - "greeting": "Hello, Short Branch! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddf02c033bf2033db", - "index": 473, - "guid": "44d5d293-757d-4aee-9cff-c7861023ba77", - "isActive": false, - "balance": "$2,095.57", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Parsons Leblanc", - "gender": "male", - "company": "EXODOC", - "email": "parsonsleblanc@exodoc.com", - "phone": "+1 (994) 445-3571", - "address": "889 Grace Court, Thomasville, Maryland, 3585", - "about": "Nisi magna anim proident adipisicing culpa aute minim ullamco magna cupidatat et in est amet. Qui elit exercitation irure do incididunt mollit labore. Deserunt consequat esse nostrud magna ex culpa ullamco incididunt. Lorem pariatur elit excepteur sint aliqua occaecat incididunt ullamco excepteur elit reprehenderit quis tempor. Qui excepteur commodo fugiat velit culpa laborum ex reprehenderit Lorem.\r\n", - "registered": "2017-01-23T01:38:16 +05:00", - "latitude": 87.691886, - "longitude": 104.669077, - "tags": ["adipisicing", "enim", "do", "anim", "dolore", "ex", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Harriet Bennett" - }, - { - "id": 1, - "name": "Sarah Page" - }, - { - "id": 2, - "name": "Mclaughlin Franklin" - } - ], - "greeting": "Hello, Parsons Leblanc! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d72826fd14f41d361", - "index": 474, - "guid": "32ddecb2-d8e7-4039-ab3e-aea4b149126e", - "isActive": true, - "balance": "$2,972.50", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Leah Mitchell", - "gender": "female", - "company": "LIMOZEN", - "email": "leahmitchell@limozen.com", - "phone": "+1 (839) 541-2707", - "address": "890 Lois Avenue, Camptown, Virgin Islands, 5173", - "about": "Id reprehenderit eu esse dolore culpa pariatur. Deserunt exercitation aute aliquip Lorem adipisicing et. Labore consectetur nostrud occaecat proident laboris. Et sint ex labore cupidatat officia reprehenderit deserunt culpa qui pariatur reprehenderit dolore. Ut dolore labore aute est est qui ut eiusmod irure ipsum. Aliqua non excepteur ex eu nisi Lorem eiusmod nostrud.\r\n", - "registered": "2017-08-24T03:01:38 +04:00", - "latitude": -66.025815, - "longitude": 27.355838, - "tags": ["dolor", "qui", "nisi", "adipisicing", "nulla", "ullamco", "anim"], - "friends": [ - { - "id": 0, - "name": "Jackie Bowen" - }, - { - "id": 1, - "name": "Vance Hodge" - }, - { - "id": 2, - "name": "Lynn Taylor" - } - ], - "greeting": "Hello, Leah Mitchell! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d84ddf61f3f8d1002", - "index": 475, - "guid": "33b5de0f-aae3-4851-b0f8-1fb3e706f64e", - "isActive": true, - "balance": "$2,549.63", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Leanna Neal", - "gender": "female", - "company": "COMBOT", - "email": "leannaneal@combot.com", - "phone": "+1 (887) 490-2361", - "address": "641 Bills Place, Masthope, Pennsylvania, 4964", - "about": "Tempor excepteur consectetur magna anim dolor. Minim quis eu adipisicing aliquip ullamco nisi. Laboris eu culpa do ut adipisicing esse. Fugiat nostrud sunt nostrud ut sit est. Cupidatat cupidatat aliquip commodo aute exercitation mollit do ex occaecat. Cupidatat exercitation non consectetur ad aliquip eiusmod non id sint.\r\n", - "registered": "2019-02-11T05:08:50 +05:00", - "latitude": 62.851577, - "longitude": 87.536901, - "tags": ["consectetur", "ut", "culpa", "irure", "incididunt", "exercitation", "mollit"], - "friends": [ - { - "id": 0, - "name": "Jodie Reynolds" - }, - { - "id": 1, - "name": "Sheree Tillman" - }, - { - "id": 2, - "name": "Ayala Wilson" - } - ], - "greeting": "Hello, Leanna Neal! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0a0728492c2a5a33", - "index": 476, - "guid": "31d29e9a-1978-4e60-b653-598d30615322", - "isActive": false, - "balance": "$2,692.00", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Gilmore Conway", - "gender": "male", - "company": "JETSILK", - "email": "gilmoreconway@jetsilk.com", - "phone": "+1 (990) 459-2664", - "address": "633 Bleecker Street, Nogal, Washington, 7466", - "about": "Enim fugiat sint ea aliquip cupidatat sit nostrud. Fugiat eiusmod excepteur est aute. Consectetur cillum in ullamco dolor nulla. Excepteur amet non laborum exercitation eiusmod do aute eu minim do consectetur nostrud.\r\n", - "registered": "2018-01-31T01:03:14 +05:00", - "latitude": -61.248028, - "longitude": -160.558847, - "tags": ["velit", "sit", "fugiat", "irure", "magna", "anim", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Boyle Potter" - }, - { - "id": 1, - "name": "Ingram Mcgowan" - }, - { - "id": 2, - "name": "Sharp Lancaster" - } - ], - "greeting": "Hello, Gilmore Conway! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d82dceb9ed8c44c9b", - "index": 477, - "guid": "03e464f7-d3d2-4a05-8027-9e557d9032a2", - "isActive": true, - "balance": "$1,900.66", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Lakeisha Boyle", - "gender": "female", - "company": "LOCAZONE", - "email": "lakeishaboyle@locazone.com", - "phone": "+1 (811) 598-3490", - "address": "315 Troy Avenue, Starks, Illinois, 7194", - "about": "Nisi aute consectetur dolore labore in consectetur elit. Minim sint velit aliqua eu. Dolore est dolor sunt adipisicing proident irure non veniam sunt ullamco proident nulla. In labore non elit est sint amet amet. Sint irure proident nulla officia dolore minim officia occaecat Lorem eu laborum. Excepteur magna sunt ad sit est consequat amet. Deserunt enim ullamco do eiusmod pariatur nisi.\r\n", - "registered": "2019-12-26T10:49:56 +05:00", - "latitude": 35.513541, - "longitude": 170.508915, - "tags": ["dolor", "nostrud", "veniam", "veniam", "adipisicing", "occaecat", "cillum"], - "friends": [ - { - "id": 0, - "name": "Rosa Grant" - }, - { - "id": 1, - "name": "Laura Nieves" - }, - { - "id": 2, - "name": "Millie Sawyer" - } - ], - "greeting": "Hello, Lakeisha Boyle! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db7a0082d91df955e", - "index": 478, - "guid": "f06c0a35-190f-4f36-91fc-606a718bd823", - "isActive": false, - "balance": "$2,320.84", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "French Booth", - "gender": "male", - "company": "COMVEYER", - "email": "frenchbooth@comveyer.com", - "phone": "+1 (958) 544-3393", - "address": "652 Newport Street, Sanford, New Hampshire, 2550", - "about": "Mollit cillum ut pariatur qui ullamco. Eu cupidatat laborum eiusmod non eiusmod reprehenderit et sunt est magna. Minim veniam labore exercitation eu pariatur laborum minim incididunt.\r\n", - "registered": "2016-06-28T08:10:53 +04:00", - "latitude": -33.102611, - "longitude": 59.031328, - "tags": ["non", "id", "labore", "sint", "ullamco", "anim", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Crosby Edwards" - }, - { - "id": 1, - "name": "Ellis Malone" - }, - { - "id": 2, - "name": "Nadia Spence" - } - ], - "greeting": "Hello, French Booth! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc2de6e5bfd0ecfbc", - "index": 479, - "guid": "575bf85a-2685-4407-892e-f10b5cd2a7ec", - "isActive": false, - "balance": "$2,290.06", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Gina Hunter", - "gender": "female", - "company": "AQUASURE", - "email": "ginahunter@aquasure.com", - "phone": "+1 (955) 474-3964", - "address": "611 Halsey Street, Munjor, Colorado, 4620", - "about": "Fugiat occaecat aliquip irure ea ut. Ipsum tempor dolore amet excepteur dolor est. Aliqua elit exercitation mollit ullamco voluptate occaecat mollit dolor occaecat. Occaecat ex excepteur aute deserunt ad elit exercitation laborum ea nostrud ex. Occaecat est cupidatat dolor sit culpa. Incididunt pariatur duis laborum sunt do adipisicing dolore ea duis dolore aute.\r\n", - "registered": "2018-12-21T04:50:56 +05:00", - "latitude": 41.925311, - "longitude": 168.527997, - "tags": ["occaecat", "nisi", "magna", "id", "magna", "duis", "ex"], - "friends": [ - { - "id": 0, - "name": "Tommie Wiley" - }, - { - "id": 1, - "name": "Rutledge Vargas" - }, - { - "id": 2, - "name": "Lorie Howe" - } - ], - "greeting": "Hello, Gina Hunter! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd354829046d28707", - "index": 480, - "guid": "9cfff0ce-fd09-4b17-bf3b-466aa567f555", - "isActive": true, - "balance": "$3,072.91", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Latonya Bradford", - "gender": "female", - "company": "INRT", - "email": "latonyabradford@inrt.com", - "phone": "+1 (931) 496-3346", - "address": "567 Colonial Court, Nutrioso, Maine, 3389", - "about": "Occaecat sunt voluptate anim enim ea cupidatat ullamco aute amet fugiat cupidatat pariatur. Pariatur incididunt officia cillum anim tempor sint voluptate voluptate est. Enim occaecat exercitation adipisicing exercitation proident reprehenderit ut consectetur aliquip elit. Sunt culpa cupidatat ut laboris exercitation ad ut fugiat reprehenderit.\r\n", - "registered": "2015-12-10T05:39:42 +05:00", - "latitude": -81.162839, - "longitude": -112.183981, - "tags": ["magna", "cillum", "cupidatat", "qui", "aliqua", "reprehenderit", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Fernandez Blanchard" - }, - { - "id": 1, - "name": "Dillard Benton" - }, - { - "id": 2, - "name": "Dejesus Wilkerson" - } - ], - "greeting": "Hello, Latonya Bradford! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d709651f7390ba59b", - "index": 481, - "guid": "9096cf5b-a242-4b1e-994d-4f27833a9537", - "isActive": true, - "balance": "$1,831.49", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Nora Pearson", - "gender": "female", - "company": "DEVILTOE", - "email": "norapearson@deviltoe.com", - "phone": "+1 (967) 542-2165", - "address": "177 Virginia Place, Roderfield, South Carolina, 3854", - "about": "Sint amet esse nisi ex adipisicing cillum officia enim nulla. Duis minim deserunt ipsum Lorem minim. Ipsum magna ad qui consectetur eiusmod.\r\n", - "registered": "2020-05-26T06:43:38 +04:00", - "latitude": 75.298176, - "longitude": -22.925187, - "tags": ["occaecat", "duis", "commodo", "aliqua", "proident", "voluptate", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Sandra Underwood" - }, - { - "id": 1, - "name": "Moses Mays" - }, - { - "id": 2, - "name": "Annmarie Kirk" - } - ], - "greeting": "Hello, Nora Pearson! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da6c8527828de0dfb", - "index": 482, - "guid": "49eb52d6-5b42-4e00-8444-3f9f4ee0fd0b", - "isActive": false, - "balance": "$3,820.81", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Patel Burnett", - "gender": "male", - "company": "ANDRYX", - "email": "patelburnett@andryx.com", - "phone": "+1 (959) 565-3897", - "address": "119 Evergreen Avenue, Gibbsville, Connecticut, 9154", - "about": "Proident culpa cupidatat reprehenderit non aliqua nisi ut duis ex magna aliqua. Velit duis commodo laborum veniam irure enim et cillum ut commodo reprehenderit. Sunt id ea ipsum amet fugiat voluptate est incididunt voluptate et mollit mollit esse. Cillum amet sit enim nostrud id quis nulla mollit magna ut mollit non.\r\n", - "registered": "2014-03-17T05:06:28 +04:00", - "latitude": 54.733103, - "longitude": 74.507539, - "tags": ["ex", "non", "sit", "irure", "culpa", "tempor", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "English Rollins" - }, - { - "id": 1, - "name": "Tabitha Hopkins" - }, - { - "id": 2, - "name": "Earlene Alexander" - } - ], - "greeting": "Hello, Patel Burnett! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1c5483ef26d9439d", - "index": 483, - "guid": "0f3ef9fb-ba45-4139-b555-4b5f4228da25", - "isActive": true, - "balance": "$3,550.06", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Rosales Snider", - "gender": "male", - "company": "QUANTALIA", - "email": "rosalessnider@quantalia.com", - "phone": "+1 (952) 560-3543", - "address": "659 Nassau Avenue, Welch, Virginia, 1871", - "about": "Anim dolore nulla sunt amet in enim laborum fugiat id magna culpa culpa. Non incididunt dolore veniam ea esse eu velit irure ad proident ullamco. Voluptate non deserunt consequat nisi qui eu culpa irure aute proident sunt enim duis.\r\n", - "registered": "2019-07-02T09:24:01 +04:00", - "latitude": 59.015042, - "longitude": 33.446699, - "tags": ["magna", "id", "in", "irure", "amet", "mollit", "laboris"], - "friends": [ - { - "id": 0, - "name": "Juliet Fleming" - }, - { - "id": 1, - "name": "Cole Lindsey" - }, - { - "id": 2, - "name": "Hardin Mckenzie" - } - ], - "greeting": "Hello, Rosales Snider! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d361c3eb05f0d1de4", - "index": 484, - "guid": "a2d758ca-2986-4c2d-998f-deb8d6127f6d", - "isActive": true, - "balance": "$2,589.14", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Frazier Sandoval", - "gender": "male", - "company": "ZEDALIS", - "email": "fraziersandoval@zedalis.com", - "phone": "+1 (860) 524-2078", - "address": "555 Sedgwick Street, Williamson, Georgia, 6511", - "about": "Sint minim labore sint eiusmod enim ullamco eiusmod occaecat fugiat laborum commodo. Dolore ut ullamco magna anim. Minim minim enim ad elit deserunt proident.\r\n", - "registered": "2015-08-05T08:50:58 +04:00", - "latitude": -66.764393, - "longitude": 3.017233, - "tags": ["est", "eu", "officia", "amet", "quis", "exercitation", "quis"], - "friends": [ - { - "id": 0, - "name": "Knapp Campos" - }, - { - "id": 1, - "name": "Clark Preston" - }, - { - "id": 2, - "name": "Cantrell Cruz" - } - ], - "greeting": "Hello, Frazier Sandoval! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd07246f8ba0a70fb", - "index": 485, - "guid": "e5a147a1-848a-4224-a3d8-983587bde5c9", - "isActive": false, - "balance": "$2,940.67", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Ramsey Weiss", - "gender": "male", - "company": "OPTICOM", - "email": "ramseyweiss@opticom.com", - "phone": "+1 (952) 558-2460", - "address": "562 Brighton Court, Watrous, New Jersey, 9117", - "about": "Tempor ipsum commodo proident dolore ex minim et labore reprehenderit irure. Dolore mollit irure non id nisi. Deserunt aliquip ad deserunt veniam sunt sint est nostrud.\r\n", - "registered": "2019-03-30T07:30:00 +04:00", - "latitude": 82.45822, - "longitude": -155.225738, - "tags": ["consequat", "duis", "laborum", "nisi", "enim", "proident", "minim"], - "friends": [ - { - "id": 0, - "name": "Coffey House" - }, - { - "id": 1, - "name": "Tamika Whitney" - }, - { - "id": 2, - "name": "Tamera Herrera" - } - ], - "greeting": "Hello, Ramsey Weiss! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d91f4bd53b346ed5b", - "index": 486, - "guid": "3f3d29bc-9c3b-46aa-bc2c-50ed9216703e", - "isActive": false, - "balance": "$2,585.62", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Dixon Mcknight", - "gender": "male", - "company": "ZOID", - "email": "dixonmcknight@zoid.com", - "phone": "+1 (928) 543-2509", - "address": "139 Sheffield Avenue, Ernstville, Minnesota, 1764", - "about": "Pariatur occaecat nostrud reprehenderit proident cupidatat ipsum in magna. Enim culpa minim eu non voluptate non commodo aliqua. Ex dolore ea culpa cupidatat mollit et proident aliquip nulla magna qui minim nulla Lorem. Exercitation occaecat amet minim minim elit. Commodo sit incididunt est quis dolor amet.\r\n", - "registered": "2020-03-25T04:16:13 +04:00", - "latitude": -80.652805, - "longitude": 2.091495, - "tags": ["ex", "ipsum", "esse", "Lorem", "minim", "quis", "nulla"], - "friends": [ - { - "id": 0, - "name": "Alfreda Day" - }, - { - "id": 1, - "name": "Francisca Fox" - }, - { - "id": 2, - "name": "Johnston Gibson" - } - ], - "greeting": "Hello, Dixon Mcknight! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dda5ddafde9bcebfa", - "index": 487, - "guid": "243a80e3-8d11-4f80-80ce-9cb6ccab9b51", - "isActive": true, - "balance": "$1,264.56", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Nelda Wilder", - "gender": "female", - "company": "DATAGEN", - "email": "neldawilder@datagen.com", - "phone": "+1 (871) 553-2839", - "address": "885 Paerdegat Avenue, Outlook, Texas, 9651", - "about": "Non velit nulla deserunt et labore sunt est incididunt cillum exercitation minim. Ex incididunt sit veniam magna labore amet cillum qui. Consectetur ut cillum exercitation occaecat fugiat ea occaecat sunt mollit. Laboris aliquip do nostrud cillum. Commodo voluptate excepteur cillum veniam aliquip commodo sit ullamco fugiat irure consectetur sit pariatur. Occaecat qui elit excepteur incididunt nisi. Dolore cupidatat commodo consequat quis laborum culpa deserunt officia veniam sint cillum.\r\n", - "registered": "2015-11-24T11:52:26 +05:00", - "latitude": 49.495137, - "longitude": -3.222988, - "tags": ["Lorem", "veniam", "sunt", "ipsum", "ad", "et", "veniam"], - "friends": [ - { - "id": 0, - "name": "Mann Knox" - }, - { - "id": 1, - "name": "Grant Myers" - }, - { - "id": 2, - "name": "Jasmine Salinas" - } - ], - "greeting": "Hello, Nelda Wilder! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7a9d75deaa852544", - "index": 488, - "guid": "98d93b71-ea3d-4d6c-9d09-5f6c5b5d642d", - "isActive": false, - "balance": "$3,278.25", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Oneill Ellis", - "gender": "male", - "company": "ERSUM", - "email": "oneillellis@ersum.com", - "phone": "+1 (810) 500-2438", - "address": "192 Borinquen Pl, Choctaw, Alabama, 8239", - "about": "Velit enim duis voluptate amet voluptate exercitation dolore. Voluptate labore proident id aute ea cupidatat irure. Nostrud ea qui veniam elit adipisicing laborum et ex ullamco est aliquip duis.\r\n", - "registered": "2019-02-03T11:05:24 +05:00", - "latitude": -9.680759, - "longitude": 13.18841, - "tags": ["qui", "culpa", "velit", "consectetur", "nostrud", "esse", "id"], - "friends": [ - { - "id": 0, - "name": "June Eaton" - }, - { - "id": 1, - "name": "Rena Fitzgerald" - }, - { - "id": 2, - "name": "Leigh Hendrix" - } - ], - "greeting": "Hello, Oneill Ellis! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d5be068740f71b81b", - "index": 489, - "guid": "5cf0dc20-60e3-4424-83a4-d054498f2feb", - "isActive": true, - "balance": "$2,761.09", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Petra Holloway", - "gender": "female", - "company": "RECOGNIA", - "email": "petraholloway@recognia.com", - "phone": "+1 (836) 416-3482", - "address": "895 Bergen Court, Weogufka, Rhode Island, 2986", - "about": "Reprehenderit est eu in laborum. Dolor sint nulla sit laboris sint deserunt non do fugiat sunt dolor culpa pariatur qui. Eiusmod esse dolor pariatur reprehenderit quis velit voluptate aute cupidatat voluptate dolore id. Deserunt dolor excepteur ut elit non commodo adipisicing consectetur ipsum ipsum do ad. Ex consectetur ea fugiat ipsum reprehenderit velit. Id officia aliqua laboris veniam excepteur pariatur aute qui culpa incididunt reprehenderit ullamco aute.\r\n", - "registered": "2016-04-25T01:14:53 +04:00", - "latitude": -80.327821, - "longitude": 152.590516, - "tags": ["sint", "nostrud", "adipisicing", "eu", "ipsum", "veniam", "laborum"], - "friends": [ - { - "id": 0, - "name": "Marietta Morin" - }, - { - "id": 1, - "name": "Lindsay Abbott" - }, - { - "id": 2, - "name": "Courtney Rhodes" - } - ], - "greeting": "Hello, Petra Holloway! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df69dc524d64ab51b", - "index": 490, - "guid": "385e83ee-00c3-42ad-b7b4-f5f93ae37571", - "isActive": true, - "balance": "$2,072.57", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Mcpherson Dale", - "gender": "male", - "company": "ACRUEX", - "email": "mcphersondale@acruex.com", - "phone": "+1 (908) 561-3236", - "address": "488 Box Street, Bellamy, Florida, 1867", - "about": "Ea culpa mollit esse ea do Lorem magna enim irure veniam et adipisicing cillum incididunt. Magna magna ullamco qui mollit do irure dolore nisi sit quis ad. Eu enim laboris incididunt proident anim sunt anim sit sit. Cupidatat eu sunt incididunt ipsum ad est. Fugiat voluptate pariatur consectetur sit amet. Officia qui exercitation aliquip incididunt velit cupidatat sit labore fugiat exercitation pariatur anim.\r\n", - "registered": "2017-07-29T09:37:46 +04:00", - "latitude": 89.209358, - "longitude": -164.154648, - "tags": ["pariatur", "consequat", "incididunt", "velit", "ad", "labore", "commodo"], - "friends": [ - { - "id": 0, - "name": "Head Peters" - }, - { - "id": 1, - "name": "Moon Ochoa" - }, - { - "id": 2, - "name": "Leonard Ayers" - } - ], - "greeting": "Hello, Mcpherson Dale! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4d7247b49e0db27d", - "index": 491, - "guid": "fa7328dc-8b42-45d5-9bac-795a3cd69b37", - "isActive": true, - "balance": "$1,437.38", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Rosella Brock", - "gender": "female", - "company": "PROGENEX", - "email": "rosellabrock@progenex.com", - "phone": "+1 (812) 563-2944", - "address": "979 Fillmore Avenue, Biddle, Indiana, 3969", - "about": "Laboris ipsum nostrud culpa eu enim veniam excepteur eu veniam tempor sit. Deserunt proident minim ea laborum et sit veniam quis eiusmod velit. Proident deserunt nostrud ipsum sit. Aliqua ad ea cillum magna non commodo.\r\n", - "registered": "2015-10-23T05:05:33 +04:00", - "latitude": 33.056526, - "longitude": 149.815021, - "tags": ["nulla", "id", "id", "occaecat", "eiusmod", "consequat", "magna"], - "friends": [ - { - "id": 0, - "name": "Allison Waller" - }, - { - "id": 1, - "name": "Morgan Jefferson" - }, - { - "id": 2, - "name": "Brandi Higgins" - } - ], - "greeting": "Hello, Rosella Brock! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db246e9ed6c44e62f", - "index": 492, - "guid": "a7db7e5d-c1f0-46f6-92cd-c2af3bd74b18", - "isActive": true, - "balance": "$1,484.75", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Montoya Knight", - "gender": "male", - "company": "INFOTRIPS", - "email": "montoyaknight@infotrips.com", - "phone": "+1 (921) 565-2413", - "address": "637 Kiely Place, Clarktown, Northern Mariana Islands, 6085", - "about": "Ea reprehenderit duis incididunt in anim eiusmod occaecat labore dolor amet eu. Id elit id irure aliqua Lorem tempor Lorem anim excepteur sit enim consectetur culpa. Mollit enim eu ad anim quis.\r\n", - "registered": "2015-07-06T11:43:36 +04:00", - "latitude": -89.954663, - "longitude": -138.297138, - "tags": ["pariatur", "duis", "duis", "sint", "id", "aliqua", "minim"], - "friends": [ - { - "id": 0, - "name": "Luz Emerson" - }, - { - "id": 1, - "name": "Cassandra Dyer" - }, - { - "id": 2, - "name": "Janette Ballard" - } - ], - "greeting": "Hello, Montoya Knight! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dbd3ea2d628714904", - "index": 493, - "guid": "ae314fcf-2b3c-4208-9763-b3fdc8624239", - "isActive": false, - "balance": "$1,294.26", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Frye Gonzalez", - "gender": "male", - "company": "LINGOAGE", - "email": "fryegonzalez@lingoage.com", - "phone": "+1 (969) 429-3116", - "address": "804 Ellery Street, Cataract, Idaho, 6616", - "about": "Aliquip nisi ex dolor aute amet consequat in veniam. Minim enim tempor cupidatat elit magna. Officia exercitation nisi enim quis.\r\n", - "registered": "2016-08-30T03:39:49 +04:00", - "latitude": -20.485258, - "longitude": -156.114905, - "tags": ["et", "qui", "Lorem", "ad", "quis", "consequat", "officia"], - "friends": [ - { - "id": 0, - "name": "Sara Jordan" - }, - { - "id": 1, - "name": "Cox Richardson" - }, - { - "id": 2, - "name": "Mccoy Browning" - } - ], - "greeting": "Hello, Frye Gonzalez! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d630b304168453167", - "index": 494, - "guid": "66a0a88c-9089-47f7-adea-cc794470b701", - "isActive": false, - "balance": "$3,435.08", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Kirk Shepard", - "gender": "male", - "company": "MOBILDATA", - "email": "kirkshepard@mobildata.com", - "phone": "+1 (883) 584-3253", - "address": "777 Otsego Street, Wakarusa, District Of Columbia, 5041", - "about": "Duis ad enim amet quis nisi officia incididunt anim ex tempor magna ullamco. Eu labore est ea esse. Pariatur laboris tempor officia aliqua ad quis aute sint. Culpa do Lorem est incididunt esse magna deserunt ad ex ut do. Nulla incididunt eu aliqua elit eu consequat ut nulla. Tempor labore dolore reprehenderit anim voluptate reprehenderit elit enim dolore.\r\n", - "registered": "2015-04-27T11:04:00 +04:00", - "latitude": -61.712495, - "longitude": 34.831703, - "tags": ["deserunt", "dolor", "aute", "eiusmod", "voluptate", "ad", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Murphy Herring" - }, - { - "id": 1, - "name": "Mclean Carrillo" - }, - { - "id": 2, - "name": "Hattie Short" - } - ], - "greeting": "Hello, Kirk Shepard! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8ff6c78ea3cc1fdb", - "index": 495, - "guid": "3c12bdfe-c43a-432c-a2a8-50ccdf20bd63", - "isActive": true, - "balance": "$2,403.89", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Betsy Patton", - "gender": "female", - "company": "DOGTOWN", - "email": "betsypatton@dogtown.com", - "phone": "+1 (995) 547-3453", - "address": "254 Harbor Lane, Cucumber, New Mexico, 8226", - "about": "Ad commodo labore nisi eu dolore ea. Velit enim magna sint laborum aliqua ex cillum anim duis nulla velit consectetur nulla nostrud. Magna occaecat incididunt officia aliqua.\r\n", - "registered": "2018-01-22T09:13:26 +05:00", - "latitude": 66.952471, - "longitude": -37.345486, - "tags": ["ex", "sint", "aute", "consequat", "consequat", "labore", "sint"], - "friends": [ - { - "id": 0, - "name": "Grace Kelley" - }, - { - "id": 1, - "name": "Pollard Odonnell" - }, - { - "id": 2, - "name": "Bowman Cherry" - } - ], - "greeting": "Hello, Betsy Patton! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0fc1d17b24c8b77d", - "index": 496, - "guid": "7bf03591-1420-4177-85c4-e7d8c7a1963c", - "isActive": false, - "balance": "$2,942.84", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Patricia Ashley", - "gender": "female", - "company": "ORBIN", - "email": "patriciaashley@orbin.com", - "phone": "+1 (833) 543-2313", - "address": "269 Bowery Street, Belva, South Dakota, 5972", - "about": "Enim Lorem nisi incididunt enim aliqua in ullamco dolor. Ea aliqua do laboris adipisicing est in ea amet est consectetur nostrud dolor. Ipsum ad incididunt laborum non labore anim consectetur ex et do mollit cillum. Duis nulla culpa sit sit irure nostrud veniam in fugiat occaecat.\r\n", - "registered": "2014-10-29T03:37:58 +04:00", - "latitude": -32.470382, - "longitude": -147.884632, - "tags": ["voluptate", "eu", "nulla", "consequat", "qui", "consequat", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Vanessa Beach" - }, - { - "id": 1, - "name": "Buck Slater" - }, - { - "id": 2, - "name": "Cummings Davenport" - } - ], - "greeting": "Hello, Patricia Ashley! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5a1c7c80f5c77f46", - "index": 497, - "guid": "ca9c889e-881f-42ea-ab3b-4b76a17bd3d8", - "isActive": false, - "balance": "$3,489.37", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Neal Monroe", - "gender": "male", - "company": "ZEAM", - "email": "nealmonroe@zeam.com", - "phone": "+1 (845) 493-2580", - "address": "738 Berkeley Place, Greenock, American Samoa, 7315", - "about": "Aute excepteur mollit quis labore sunt culpa labore est reprehenderit sint dolore dolore. Aliqua dolore ad aute id anim esse pariatur velit incididunt ullamco aliqua consectetur. Cupidatat cillum laborum occaecat qui reprehenderit id irure proident incididunt elit magna labore proident. Dolore officia commodo irure quis dolore aliqua consectetur in ut eiusmod officia eu aliquip pariatur. Eu minim irure excepteur reprehenderit non ullamco.\r\n", - "registered": "2015-11-02T01:48:32 +05:00", - "latitude": -88.274748, - "longitude": -175.613956, - "tags": ["quis", "mollit", "dolore", "laboris", "officia", "consequat", "laborum"], - "friends": [ - { - "id": 0, - "name": "Ewing Sutton" - }, - { - "id": 1, - "name": "Tessa Russo" - }, - { - "id": 2, - "name": "Kaye Clayton" - } - ], - "greeting": "Hello, Neal Monroe! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9b4703af8f3f5320", - "index": 498, - "guid": "c4459b20-2402-4bc0-b120-bb656afebd24", - "isActive": false, - "balance": "$3,901.05", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Stephanie Crosby", - "gender": "female", - "company": "NEOCENT", - "email": "stephaniecrosby@neocent.com", - "phone": "+1 (915) 463-3310", - "address": "344 Herkimer Court, Dragoon, Iowa, 1779", - "about": "Commodo id tempor elit ex non labore cillum. Qui tempor voluptate consequat ad minim veniam eiusmod aliqua minim deserunt. Occaecat aute ea eiusmod elit aute. Amet occaecat tempor occaecat non deserunt nisi. Proident ipsum ullamco veniam do excepteur eiusmod aliquip veniam. Dolore qui cupidatat ad Lorem exercitation.\r\n", - "registered": "2016-06-26T10:25:27 +04:00", - "latitude": 11.745473, - "longitude": 0.180729, - "tags": ["eu", "aliqua", "occaecat", "est", "exercitation", "irure", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Howard Wooten" - }, - { - "id": 1, - "name": "Dora Duffy" - }, - { - "id": 2, - "name": "Melton Moon" - } - ], - "greeting": "Hello, Stephanie Crosby! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2c3774a3bfcf18d4", - "index": 499, - "guid": "d63dc559-7d37-4e13-9c74-de39c8092b8d", - "isActive": true, - "balance": "$3,599.60", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Nancy Dixon", - "gender": "female", - "company": "DEEPENDS", - "email": "nancydixon@deepends.com", - "phone": "+1 (971) 486-2320", - "address": "706 Lefferts Place, Salunga, Palau, 6126", - "about": "Enim consequat occaecat cillum duis dolore excepteur laborum aliquip laborum officia non id et dolore. Cupidatat quis culpa eiusmod eiusmod enim duis nulla voluptate esse eu. Quis culpa consectetur nulla elit ea commodo enim occaecat mollit aute sint consequat in.\r\n", - "registered": "2019-06-07T01:20:57 +04:00", - "latitude": -4.320971, - "longitude": 67.988292, - "tags": ["ex", "excepteur", "amet", "est", "ipsum", "sint", "ad"], - "friends": [ - { - "id": 0, - "name": "Leona Rodriguez" - }, - { - "id": 1, - "name": "Wong Garner" - }, - { - "id": 2, - "name": "Mckay Parsons" - } - ], - "greeting": "Hello, Nancy Dixon! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d69c9df4ad95644ab", - "index": 500, - "guid": "6e52fba5-563c-4c3c-8984-066bdb7c56e0", - "isActive": false, - "balance": "$1,401.96", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Curtis Bullock", - "gender": "male", - "company": "VIRXO", - "email": "curtisbullock@virxo.com", - "phone": "+1 (881) 556-2611", - "address": "115 Willow Street, Concho, West Virginia, 1641", - "about": "Commodo ad id anim incididunt do minim qui ullamco. Magna nulla cupidatat velit deserunt pariatur. Qui qui mollit eiusmod quis qui ullamco tempor ut anim consectetur commodo aute et dolore. Anim eu ea elit sint sunt nulla occaecat anim occaecat est non sint.\r\n", - "registered": "2015-02-07T01:39:32 +05:00", - "latitude": -18.275059, - "longitude": -90.185033, - "tags": ["officia", "amet", "labore", "velit", "occaecat", "voluptate", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Jan Foley" - }, - { - "id": 1, - "name": "Victoria Brady" - }, - { - "id": 2, - "name": "Wilkinson Mcfadden" - } - ], - "greeting": "Hello, Curtis Bullock! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da82f0376f775ff91", - "index": 501, - "guid": "763abf39-d827-4259-bf9e-8aa6669ace13", - "isActive": true, - "balance": "$1,671.12", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Terry Holman", - "gender": "female", - "company": "CINCYR", - "email": "terryholman@cincyr.com", - "phone": "+1 (896) 440-3871", - "address": "256 Kansas Place, Gracey, New York, 9280", - "about": "Pariatur qui velit culpa dolor id cupidatat anim est ut exercitation sint dolore magna. Commodo Lorem reprehenderit anim culpa nulla quis do officia sit aliqua sint amet. Velit consectetur amet ipsum ad duis non labore nisi cillum ea sunt voluptate. Non ex nostrud quis esse minim qui minim consequat qui fugiat ut incididunt magna. Fugiat elit cupidatat quis ex in et. Eiusmod amet consectetur Lorem Lorem irure esse voluptate nulla.\r\n", - "registered": "2017-09-16T01:19:17 +04:00", - "latitude": -72.596603, - "longitude": -17.756443, - "tags": ["nulla", "cupidatat", "minim", "ex", "nostrud", "adipisicing", "laborum"], - "friends": [ - { - "id": 0, - "name": "Harrington Shepherd" - }, - { - "id": 1, - "name": "Bentley Stewart" - }, - { - "id": 2, - "name": "Sallie Richards" - } - ], - "greeting": "Hello, Terry Holman! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4a00cbd215549d38", - "index": 502, - "guid": "0c736196-cccb-4b23-bc51-ae84842ef54b", - "isActive": false, - "balance": "$2,698.67", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Burgess Paul", - "gender": "male", - "company": "COREPAN", - "email": "burgesspaul@corepan.com", - "phone": "+1 (864) 559-3196", - "address": "168 Lake Place, Catharine, Hawaii, 1051", - "about": "Ex fugiat cupidatat culpa fugiat nostrud elit voluptate. Laborum magna esse exercitation pariatur pariatur nostrud deserunt ad duis ut incididunt ullamco. Veniam eu sit elit anim dolor sit tempor nisi anim nisi in. Ex commodo exercitation quis cupidatat ullamco eiusmod ea id nulla tempor eu commodo. Labore est aliquip irure mollit in occaecat Lorem commodo amet enim incididunt quis quis irure. Reprehenderit pariatur ex commodo aliquip mollit culpa. Culpa ullamco tempor dolore exercitation do ipsum cupidatat magna irure consectetur laboris est laboris.\r\n", - "registered": "2016-09-08T08:05:15 +04:00", - "latitude": 56.919182, - "longitude": -3.878355, - "tags": ["incididunt", "Lorem", "duis", "do", "amet", "laborum", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Herrera Parrish" - }, - { - "id": 1, - "name": "Dunlap Mathis" - }, - { - "id": 2, - "name": "Lucinda Coffey" - } - ], - "greeting": "Hello, Burgess Paul! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dafcd5a19b744e519", - "index": 503, - "guid": "ac5102e7-aeb7-489e-bbd3-4b34032c3ca5", - "isActive": true, - "balance": "$2,253.12", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Snyder Gordon", - "gender": "male", - "company": "UNI", - "email": "snydergordon@uni.com", - "phone": "+1 (988) 522-3272", - "address": "872 Hinsdale Street, Allendale, Nebraska, 6722", - "about": "Irure eiusmod sunt do sit exercitation. Non deserunt labore culpa mollit. Cupidatat ipsum aliqua esse elit culpa et ullamco reprehenderit id. Fugiat ullamco commodo non ut Lorem excepteur in tempor enim dolore ipsum culpa. Excepteur veniam esse anim nisi pariatur eu in sint elit ea dolor.\r\n", - "registered": "2017-08-04T08:20:11 +04:00", - "latitude": 89.872334, - "longitude": 77.629427, - "tags": ["officia", "esse", "cupidatat", "Lorem", "eiusmod", "velit", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Christy Cline" - }, - { - "id": 1, - "name": "Leila Sims" - }, - { - "id": 2, - "name": "Boyer Lynn" - } - ], - "greeting": "Hello, Snyder Gordon! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25de09d2bb58fed8081", - "index": 504, - "guid": "0910ae2b-3ff6-408b-bc58-03e3503d873b", - "isActive": false, - "balance": "$2,016.83", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Lyons Pickett", - "gender": "male", - "company": "ZIPAK", - "email": "lyonspickett@zipak.com", - "phone": "+1 (875) 590-3608", - "address": "880 George Street, Alderpoint, Wisconsin, 4560", - "about": "Ex aliquip excepteur minim aliquip reprehenderit eiusmod magna proident. Excepteur consequat officia dolor incididunt aliquip culpa ex fugiat magna occaecat labore ea. Ullamco sunt elit pariatur aliquip deserunt et esse. Et cupidatat consectetur consequat tempor sit consequat sit dolore nostrud anim. Culpa velit deserunt pariatur officia proident deserunt. Fugiat incididunt consectetur nostrud occaecat do enim duis consequat.\r\n", - "registered": "2014-04-23T01:33:45 +04:00", - "latitude": 58.802647, - "longitude": -81.293181, - "tags": ["aliquip", "mollit", "eiusmod", "esse", "ea", "nisi", "proident"], - "friends": [ - { - "id": 0, - "name": "Berta Brewer" - }, - { - "id": 1, - "name": "Justine Chase" - }, - { - "id": 2, - "name": "Imogene Willis" - } - ], - "greeting": "Hello, Lyons Pickett! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db63958c5e1761385", - "index": 505, - "guid": "595fbe06-66cc-4f0f-a686-63ad9277f184", - "isActive": true, - "balance": "$1,047.52", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Kim Golden", - "gender": "male", - "company": "OCTOCORE", - "email": "kimgolden@octocore.com", - "phone": "+1 (921) 508-3712", - "address": "519 Lott Place, Savannah, Arizona, 1407", - "about": "Ut deserunt officia labore tempor amet proident elit aliquip eu esse eiusmod esse. Incididunt anim cillum dolore consequat culpa. Elit minim labore reprehenderit reprehenderit quis enim proident ea nisi fugiat. Est mollit officia pariatur quis reprehenderit esse duis exercitation nisi ex. Tempor cupidatat ex ex minim voluptate et qui consequat anim esse cupidatat veniam elit consequat. Occaecat ut eu ex nulla non dolore tempor fugiat. Aliquip dolor do ex ex magna deserunt sit ex commodo deserunt proident labore est magna.\r\n", - "registered": "2015-11-14T02:47:03 +05:00", - "latitude": 0.364874, - "longitude": 103.837326, - "tags": ["amet", "eiusmod", "tempor", "ea", "sint", "sit", "veniam"], - "friends": [ - { - "id": 0, - "name": "Michele Graham" - }, - { - "id": 1, - "name": "Constance Rich" - }, - { - "id": 2, - "name": "Frankie Freeman" - } - ], - "greeting": "Hello, Kim Golden! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d768fd87db402213b", - "index": 506, - "guid": "890052cb-1fbd-4ced-927b-0e116a22aaaa", - "isActive": true, - "balance": "$1,959.22", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Wheeler Wyatt", - "gender": "male", - "company": "BLANET", - "email": "wheelerwyatt@blanet.com", - "phone": "+1 (927) 460-2520", - "address": "800 Verona Street, Croom, Ohio, 6617", - "about": "Labore qui velit nostrud commodo. Consequat ut ullamco labore Lorem laboris consectetur officia cillum eu adipisicing eu voluptate elit. Qui officia sunt amet in voluptate aliqua ut cupidatat. Et excepteur deserunt esse esse commodo reprehenderit. Et sit culpa exercitation proident est fugiat qui ad magna tempor.\r\n", - "registered": "2015-06-08T07:11:08 +04:00", - "latitude": -3.042491, - "longitude": -160.223269, - "tags": ["pariatur", "nulla", "Lorem", "proident", "exercitation", "ex", "laborum"], - "friends": [ - { - "id": 0, - "name": "Francis Dennis" - }, - { - "id": 1, - "name": "Nguyen Contreras" - }, - { - "id": 2, - "name": "Latasha Sargent" - } - ], - "greeting": "Hello, Wheeler Wyatt! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1db22f77ecb51d31", - "index": 507, - "guid": "53673634-ae07-47ae-ad15-70ded1809c52", - "isActive": true, - "balance": "$1,112.33", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Marianne Hester", - "gender": "female", - "company": "MAKINGWAY", - "email": "mariannehester@makingway.com", - "phone": "+1 (979) 416-2120", - "address": "576 Furman Avenue, Allensworth, Arkansas, 2448", - "about": "Ullamco mollit ullamco qui officia laboris aliqua consequat qui. Magna aliqua qui elit do deserunt est anim magna incididunt enim tempor dolor. Aliqua ea culpa dolore aute esse id excepteur deserunt proident minim occaecat. Mollit nulla sint magna ex aliquip proident elit excepteur nostrud et. Labore quis mollit commodo do aute aliqua sit in dolor sunt qui aute dolore. Reprehenderit aliqua fugiat do in aliquip sit magna aute qui laboris commodo deserunt dolore veniam. Deserunt dolore aliqua quis mollit exercitation.\r\n", - "registered": "2014-02-06T12:02:34 +05:00", - "latitude": 25.730448, - "longitude": -119.583455, - "tags": ["adipisicing", "amet", "mollit", "laborum", "dolore", "cupidatat", "amet"], - "friends": [ - { - "id": 0, - "name": "Lewis Hanson" - }, - { - "id": 1, - "name": "Juliette Mccoy" - }, - { - "id": 2, - "name": "Mavis Rivers" - } - ], - "greeting": "Hello, Marianne Hester! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc22c524f7bbc7956", - "index": 508, - "guid": "c1db026f-4e02-4228-ab46-0ffb09c29718", - "isActive": false, - "balance": "$1,163.76", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Rosalyn Dorsey", - "gender": "female", - "company": "QUARX", - "email": "rosalyndorsey@quarx.com", - "phone": "+1 (978) 404-3181", - "address": "431 McDonald Avenue, Grantville, Nevada, 5610", - "about": "Fugiat anim ex eiusmod ad nulla est. Ex commodo elit occaecat voluptate esse minim minim occaecat ad dolore aliquip ea elit. Ad amet consequat amet mollit ipsum. Ex nostrud velit labore elit. Sit ad quis deserunt fugiat nisi dolor mollit.\r\n", - "registered": "2015-03-01T09:53:23 +05:00", - "latitude": -86.68157, - "longitude": 142.74737, - "tags": ["qui", "qui", "est", "et", "sit", "ipsum", "anim"], - "friends": [ - { - "id": 0, - "name": "Spencer Nixon" - }, - { - "id": 1, - "name": "Hunter Hensley" - }, - { - "id": 2, - "name": "Madeleine Livingston" - } - ], - "greeting": "Hello, Rosalyn Dorsey! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dca621ed61497fde5", - "index": 509, - "guid": "b316aae0-9a12-4b6b-be50-8c0f75fc50a9", - "isActive": false, - "balance": "$2,811.92", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Leonor Cameron", - "gender": "female", - "company": "SOLGAN", - "email": "leonorcameron@solgan.com", - "phone": "+1 (800) 530-3428", - "address": "626 Just Court, Idledale, Massachusetts, 2101", - "about": "Lorem sit elit nostrud excepteur do occaecat qui labore incididunt ipsum proident. Ex cupidatat deserunt ad Lorem ad proident incididunt fugiat sit eiusmod laborum. Dolore sint adipisicing sint sunt culpa duis velit id. Tempor veniam officia mollit occaecat labore qui laboris non duis mollit id est velit. Proident in aliqua deserunt dolor voluptate veniam occaecat et. Eiusmod et veniam fugiat sit labore adipisicing pariatur id cupidatat minim.\r\n", - "registered": "2020-09-06T11:27:39 +04:00", - "latitude": -76.732931, - "longitude": 52.601349, - "tags": ["consectetur", "labore", "ea", "amet", "aliqua", "elit", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Sims Whitehead" - }, - { - "id": 1, - "name": "Sofia Suarez" - }, - { - "id": 2, - "name": "Norma Reilly" - } - ], - "greeting": "Hello, Leonor Cameron! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d21501a8a3a8ea68b", - "index": 510, - "guid": "b60a94b0-4471-470b-ae85-e21445d09ef3", - "isActive": true, - "balance": "$3,476.13", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Mosley Watkins", - "gender": "male", - "company": "TRIPSCH", - "email": "mosleywatkins@tripsch.com", - "phone": "+1 (968) 565-2319", - "address": "670 Sunnyside Avenue, Cascades, Marshall Islands, 6509", - "about": "Nostrud laborum do dolore duis exercitation. Consequat irure laborum ullamco nostrud cillum proident elit deserunt occaecat culpa cupidatat officia. Aliqua qui id nostrud adipisicing occaecat Lorem proident in in.\r\n", - "registered": "2017-06-23T05:52:18 +04:00", - "latitude": -70.968245, - "longitude": 119.249953, - "tags": ["officia", "culpa", "adipisicing", "labore", "elit", "irure", "id"], - "friends": [ - { - "id": 0, - "name": "Baxter Villarreal" - }, - { - "id": 1, - "name": "Maribel Salas" - }, - { - "id": 2, - "name": "Emerson Mckinney" - } - ], - "greeting": "Hello, Mosley Watkins! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db80c02ef2b617e11", - "index": 511, - "guid": "09e11ff7-a73c-46d3-99eb-7580a10cdc6e", - "isActive": false, - "balance": "$2,300.19", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Flynn Owen", - "gender": "male", - "company": "ANIXANG", - "email": "flynnowen@anixang.com", - "phone": "+1 (974) 477-2285", - "address": "450 Apollo Street, Alfarata, Puerto Rico, 9050", - "about": "Sint pariatur laborum deserunt pariatur enim excepteur fugiat. Ad in commodo fugiat ut quis sit dolor pariatur incididunt laboris eu. Do nulla consequat dolore sunt velit aliquip occaecat voluptate sint eiusmod.\r\n", - "registered": "2017-10-04T07:58:12 +04:00", - "latitude": 51.710846, - "longitude": 167.070924, - "tags": ["voluptate", "eu", "sit", "et", "officia", "non", "quis"], - "friends": [ - { - "id": 0, - "name": "Hoffman Durham" - }, - { - "id": 1, - "name": "Stephens Adkins" - }, - { - "id": 2, - "name": "Lynne Barton" - } - ], - "greeting": "Hello, Flynn Owen! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd0dbac8496392bd5", - "index": 512, - "guid": "b2e1d5a9-c3ac-4b1c-916f-8311be2f553b", - "isActive": false, - "balance": "$3,438.65", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Lou Morales", - "gender": "female", - "company": "APPLIDECK", - "email": "loumorales@applideck.com", - "phone": "+1 (827) 507-3658", - "address": "680 Elmwood Avenue, Eagletown, California, 4054", - "about": "Nostrud est nulla occaecat incididunt cillum eiusmod quis fugiat aute sit in ullamco cupidatat ad. Reprehenderit ad consectetur adipisicing mollit pariatur reprehenderit. Adipisicing anim dolore sint elit pariatur laboris do sunt occaecat. Enim laboris irure voluptate veniam laborum ut consectetur velit voluptate nostrud et aute. Labore cupidatat ex proident ipsum magna.\r\n", - "registered": "2018-06-19T07:52:38 +04:00", - "latitude": 83.518539, - "longitude": -151.692642, - "tags": ["ullamco", "aute", "commodo", "minim", "eu", "eiusmod", "sit"], - "friends": [ - { - "id": 0, - "name": "Peck Kerr" - }, - { - "id": 1, - "name": "Delia Duncan" - }, - { - "id": 2, - "name": "Eula Foreman" - } - ], - "greeting": "Hello, Lou Morales! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0d62480da17fe683", - "index": 513, - "guid": "00fbe9a0-b1ef-4d00-ac30-08a3307429ad", - "isActive": true, - "balance": "$1,260.07", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Katherine White", - "gender": "female", - "company": "NETILITY", - "email": "katherinewhite@netility.com", - "phone": "+1 (908) 419-2220", - "address": "196 Tehama Street, Mayfair, Tennessee, 1770", - "about": "Aliqua nostrud labore magna esse quis ipsum amet commodo. Qui dolore officia qui nostrud occaecat deserunt aute est duis. Excepteur aute eu nisi aliqua eiusmod laborum commodo dolor. Exercitation aute excepteur sit aliqua sunt magna occaecat minim sit in nulla. Aute anim incididunt ea cupidatat qui ullamco minim laboris id aliqua excepteur magna enim. Laboris deserunt proident ut do amet ad minim anim. Elit qui velit quis exercitation tempor nulla officia Lorem quis cillum in amet et excepteur.\r\n", - "registered": "2017-04-27T08:57:50 +04:00", - "latitude": 83.199527, - "longitude": 103.833429, - "tags": ["eu", "cupidatat", "enim", "pariatur", "duis", "ex", "cillum"], - "friends": [ - { - "id": 0, - "name": "Donaldson Stanton" - }, - { - "id": 1, - "name": "Craft Wheeler" - }, - { - "id": 2, - "name": "Monica Cain" - } - ], - "greeting": "Hello, Katherine White! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d498c0ed639526753", - "index": 514, - "guid": "0017eac5-4081-4df5-ba7e-078c627ed758", - "isActive": true, - "balance": "$1,505.11", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Ferguson Guerra", - "gender": "male", - "company": "SURELOGIC", - "email": "fergusonguerra@surelogic.com", - "phone": "+1 (850) 477-2948", - "address": "376 Crescent Street, Dixonville, Wyoming, 2501", - "about": "Irure ullamco dolor do dolor qui consequat sunt minim irure qui ad non cupidatat duis. Consequat enim ad velit sit officia nisi proident anim proident culpa irure anim anim cillum. Commodo velit veniam in laboris ipsum voluptate cupidatat eiusmod deserunt labore do aliqua.\r\n", - "registered": "2020-01-11T07:12:51 +05:00", - "latitude": -83.609179, - "longitude": -20.088303, - "tags": ["consequat", "irure", "eu", "ipsum", "esse", "voluptate", "veniam"], - "friends": [ - { - "id": 0, - "name": "Tanner Donaldson" - }, - { - "id": 1, - "name": "Meyer Marshall" - }, - { - "id": 2, - "name": "Clemons Small" - } - ], - "greeting": "Hello, Ferguson Guerra! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25ddf4786d1dbf66941", - "index": 515, - "guid": "e735e476-172f-4f22-8c53-205eb5f04427", - "isActive": false, - "balance": "$1,782.16", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Lane Winters", - "gender": "male", - "company": "PEARLESEX", - "email": "lanewinters@pearlesex.com", - "phone": "+1 (932) 500-3674", - "address": "163 Hampton Avenue, Collins, North Carolina, 4205", - "about": "Anim consectetur aute ullamco nisi esse incididunt occaecat anim eu. Fugiat nostrud ex aliquip sit eu eiusmod exercitation ea ipsum aute exercitation. Non labore ullamco magna id officia sint qui eiusmod. Id tempor consequat aute non ad adipisicing veniam. Occaecat aute cupidatat voluptate culpa.\r\n", - "registered": "2019-06-03T02:24:12 +04:00", - "latitude": -40.285221, - "longitude": -136.341123, - "tags": ["nostrud", "tempor", "et", "culpa", "enim", "aliqua", "est"], - "friends": [ - { - "id": 0, - "name": "Oconnor Johnston" - }, - { - "id": 1, - "name": "Burnett Maddox" - }, - { - "id": 2, - "name": "Minnie Lamb" - } - ], - "greeting": "Hello, Lane Winters! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dfa84a7d009b5ed43", - "index": 516, - "guid": "2032dea1-5387-4c09-b2b2-7b314e3e3207", - "isActive": true, - "balance": "$3,862.78", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Mildred Evans", - "gender": "female", - "company": "FANFARE", - "email": "mildredevans@fanfare.com", - "phone": "+1 (908) 517-3848", - "address": "977 Stockton Street, Coinjock, Michigan, 6453", - "about": "Ut voluptate occaecat pariatur amet sunt culpa culpa voluptate labore esse dolor adipisicing proident cillum. Minim eiusmod pariatur ad elit mollit ea ullamco anim consectetur esse qui consequat incididunt. Enim labore do proident id adipisicing est magna nisi in eu occaecat nostrud. Reprehenderit mollit sint proident nulla reprehenderit deserunt exercitation. Officia fugiat mollit est enim adipisicing cupidatat consequat anim ullamco sint et nostrud. Reprehenderit exercitation ea adipisicing voluptate proident adipisicing incididunt ullamco reprehenderit sint proident proident. Pariatur magna non ipsum eu incididunt ex ad irure occaecat do sit qui sunt tempor.\r\n", - "registered": "2018-05-07T05:07:59 +04:00", - "latitude": -51.258808, - "longitude": -76.272676, - "tags": ["laboris", "quis", "amet", "ut", "veniam", "ex", "non"], - "friends": [ - { - "id": 0, - "name": "Allyson Petersen" - }, - { - "id": 1, - "name": "Susana Thompson" - }, - { - "id": 2, - "name": "Alison Nolan" - } - ], - "greeting": "Hello, Mildred Evans! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d05ac630bc9f4e33f", - "index": 517, - "guid": "e0ae8044-0833-4f17-9c27-429dc9809dbc", - "isActive": false, - "balance": "$3,480.14", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Hester Moreno", - "gender": "male", - "company": "BEADZZA", - "email": "hestermoreno@beadzza.com", - "phone": "+1 (873) 442-3324", - "address": "678 Sumner Place, Ellerslie, Oklahoma, 4418", - "about": "Id sit reprehenderit ullamco id eu magna aliquip do mollit aute cupidatat sint. Amet proident Lorem commodo voluptate reprehenderit dolor do. Enim voluptate quis id eu eiusmod laboris proident quis in aute culpa enim. In esse dolor tempor voluptate exercitation duis irure ullamco. Sunt nostrud anim eu eu mollit tempor quis aliqua amet ut.\r\n", - "registered": "2014-03-24T01:55:48 +04:00", - "latitude": 49.106897, - "longitude": 148.239218, - "tags": ["et", "do", "consectetur", "culpa", "dolor", "enim", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Juarez Austin" - }, - { - "id": 1, - "name": "Hilary Santiago" - }, - { - "id": 2, - "name": "Benton Perez" - } - ], - "greeting": "Hello, Hester Moreno! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3be04a54a407d792", - "index": 518, - "guid": "e3ee87e9-66ff-4cf1-8854-3e41358cadd2", - "isActive": true, - "balance": "$1,741.68", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Gonzales Donovan", - "gender": "male", - "company": "TWIGGERY", - "email": "gonzalesdonovan@twiggery.com", - "phone": "+1 (994) 506-2447", - "address": "216 Landis Court, Suitland, Vermont, 2358", - "about": "Deserunt dolore consequat eiusmod nulla laboris Lorem mollit aliqua dolor tempor culpa. In in esse cillum exercitation eu cupidatat amet ea Lorem. Enim nisi eiusmod cupidatat commodo cillum culpa ex anim. Cupidatat do nisi adipisicing officia ad aliquip incididunt mollit magna aliquip sunt. Et veniam aute fugiat excepteur ipsum esse ullamco velit dolore nulla officia incididunt sunt. Occaecat duis minim fugiat ut ad consequat commodo ex dolore. Labore tempor veniam enim do.\r\n", - "registered": "2014-07-16T03:22:49 +04:00", - "latitude": 84.611654, - "longitude": 0.982135, - "tags": ["dolor", "dolor", "incididunt", "Lorem", "eu", "ad", "proident"], - "friends": [ - { - "id": 0, - "name": "Murray Cooley" - }, - { - "id": 1, - "name": "Goodwin Matthews" - }, - { - "id": 2, - "name": "Aida Rodriquez" - } - ], - "greeting": "Hello, Gonzales Donovan! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1205a0081eb03350", - "index": 519, - "guid": "2089f967-e145-4ac9-892c-7339895278ea", - "isActive": false, - "balance": "$3,298.09", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Jenny Franks", - "gender": "female", - "company": "EXOBLUE", - "email": "jennyfranks@exoblue.com", - "phone": "+1 (945) 437-2329", - "address": "186 Bushwick Place, Robinette, Utah, 4329", - "about": "Mollit non veniam proident proident et. Do exercitation ad excepteur irure. Consectetur nostrud eu est incididunt duis duis eiusmod exercitation Lorem. In occaecat eiusmod ullamco reprehenderit esse ex dolor in sunt ex. Duis ipsum mollit sit occaecat labore nisi labore tempor eiusmod adipisicing in minim labore. Labore amet cillum est sunt magna dolor cupidatat occaecat ut occaecat Lorem amet.\r\n", - "registered": "2016-03-08T04:32:36 +05:00", - "latitude": -71.480542, - "longitude": -106.303047, - "tags": ["nisi", "duis", "esse", "fugiat", "velit", "velit", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Sherry Guerrero" - }, - { - "id": 1, - "name": "Caldwell Marks" - }, - { - "id": 2, - "name": "Mccormick Merrill" - } - ], - "greeting": "Hello, Jenny Franks! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d163d60dcba0d3fd7", - "index": 520, - "guid": "8d05970a-76f4-441a-8279-36b0d6ecfe69", - "isActive": true, - "balance": "$1,702.45", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Esther Guy", - "gender": "female", - "company": "ISOTERNIA", - "email": "estherguy@isoternia.com", - "phone": "+1 (931) 503-2025", - "address": "515 Suydam Place, Tooleville, Kansas, 3465", - "about": "Id ex dolor veniam do aute dolore eu minim. Duis eu culpa ex duis ea mollit adipisicing irure adipisicing mollit. Enim ex nostrud ut est nisi commodo. Proident aute Lorem laborum ipsum aute velit aute tempor sit aliqua ad occaecat mollit ea. Excepteur aliqua sunt aliqua qui sint incididunt dolore officia do. Officia cillum fugiat laboris reprehenderit.\r\n", - "registered": "2014-07-25T03:47:48 +04:00", - "latitude": -44.901005, - "longitude": 26.804227, - "tags": ["nisi", "dolor", "officia", "est", "ipsum", "esse", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Austin Salazar" - }, - { - "id": 1, - "name": "Sophia Rutledge" - }, - { - "id": 2, - "name": "Hart Mosley" - } - ], - "greeting": "Hello, Esther Guy! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d24b0e1faf1a328be", - "index": 521, - "guid": "8502e1fc-7aec-419b-8172-b721cb68c12e", - "isActive": false, - "balance": "$3,599.78", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Gena Bates", - "gender": "female", - "company": "ANACHO", - "email": "genabates@anacho.com", - "phone": "+1 (901) 530-3607", - "address": "288 Newton Street, Carrsville, Delaware, 2581", - "about": "Irure labore amet duis do ut elit amet elit occaecat ullamco nostrud dolore aliquip. Elit non duis dolor minim. Quis duis dolor sit excepteur ad reprehenderit dolore sit eu nulla irure eu velit. Et consectetur incididunt consequat deserunt eu adipisicing nostrud incididunt ullamco. Consectetur culpa reprehenderit nostrud commodo duis quis id aliquip qui cupidatat velit. Anim anim cillum commodo reprehenderit.\r\n", - "registered": "2018-01-11T11:05:06 +05:00", - "latitude": -83.022347, - "longitude": -160.750898, - "tags": ["ad", "pariatur", "exercitation", "adipisicing", "sit", "elit", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Vera Barry" - }, - { - "id": 1, - "name": "Puckett Gilmore" - }, - { - "id": 2, - "name": "Jenkins Fischer" - } - ], - "greeting": "Hello, Gena Bates! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcab81e88f29907fe", - "index": 522, - "guid": "ef532d80-aeb8-4c13-8b9f-08d41bb45d90", - "isActive": true, - "balance": "$3,681.22", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Day Mclean", - "gender": "male", - "company": "APPLICA", - "email": "daymclean@applica.com", - "phone": "+1 (990) 529-2068", - "address": "754 Elliott Walk, Iola, Guam, 2756", - "about": "Mollit tempor laborum consequat duis consectetur voluptate incididunt ullamco consequat. Commodo sit consectetur anim nisi ullamco nulla aute exercitation eu elit elit. Ex cupidatat non ipsum adipisicing nostrud ea. Sunt eu fugiat quis esse elit eiusmod cupidatat mollit qui aute. Ad reprehenderit adipisicing pariatur in. Sunt ut velit consectetur dolore ipsum eiusmod aliquip nisi incididunt tempor consectetur.\r\n", - "registered": "2016-10-10T01:12:24 +04:00", - "latitude": 59.772655, - "longitude": -111.563908, - "tags": ["nostrud", "magna", "culpa", "sunt", "id", "aute", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Terrie Aguirre" - }, - { - "id": 1, - "name": "Lydia Blevins" - }, - { - "id": 2, - "name": "Sullivan Hoover" - } - ], - "greeting": "Hello, Day Mclean! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db7875f66c26e1318", - "index": 523, - "guid": "8a2c9249-481b-44f8-b677-0c7170c2b287", - "isActive": false, - "balance": "$2,831.74", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Liliana Blake", - "gender": "female", - "company": "KATAKANA", - "email": "lilianablake@katakana.com", - "phone": "+1 (810) 424-2519", - "address": "634 Nevins Street, Wanamie, Oregon, 2397", - "about": "Duis nulla dolor laborum minim eiusmod magna nostrud fugiat reprehenderit pariatur enim sint quis. Aliquip elit eiusmod ipsum et occaecat aute do. Mollit reprehenderit voluptate qui eiusmod consequat consequat. Pariatur eu in culpa proident enim nostrud quis anim in amet et.\r\n", - "registered": "2015-03-20T10:39:26 +04:00", - "latitude": -5.971923, - "longitude": 15.670873, - "tags": ["Lorem", "fugiat", "officia", "sunt", "esse", "tempor", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Sears Watson" - }, - { - "id": 1, - "name": "Hyde Berry" - }, - { - "id": 2, - "name": "Corina William" - } - ], - "greeting": "Hello, Liliana Blake! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d17a5349bfb34bb96", - "index": 524, - "guid": "e83455fc-5bb5-4ed7-9acd-c03ac3d82e2b", - "isActive": false, - "balance": "$1,038.59", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Fern Berg", - "gender": "female", - "company": "ZYTRAC", - "email": "fernberg@zytrac.com", - "phone": "+1 (802) 588-3131", - "address": "214 Kenmore Court, Avalon, Missouri, 2160", - "about": "Dolore anim exercitation fugiat dolore veniam eiusmod consectetur id ad dolor ipsum. Proident officia deserunt aliquip esse est reprehenderit proident non qui anim quis occaecat magna. Ullamco excepteur et voluptate nostrud sint. Ut commodo ipsum excepteur aliquip cupidatat id adipisicing aute eiusmod eu. Dolor in eu sit pariatur. Incididunt duis duis sit commodo veniam cupidatat voluptate deserunt incididunt. Est ipsum irure ad sint ullamco quis deserunt voluptate in non enim.\r\n", - "registered": "2014-06-21T08:12:29 +04:00", - "latitude": 60.958105, - "longitude": -157.819515, - "tags": ["eu", "deserunt", "laboris", "in", "sit", "deserunt", "est"], - "friends": [ - { - "id": 0, - "name": "Chambers Collier" - }, - { - "id": 1, - "name": "Augusta Todd" - }, - { - "id": 2, - "name": "Nichole Pollard" - } - ], - "greeting": "Hello, Fern Berg! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7540c71b62fc6567", - "index": 525, - "guid": "568c2808-9e2c-4aa8-8f45-ed4634ac5d90", - "isActive": false, - "balance": "$2,282.83", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Cathy Francis", - "gender": "female", - "company": "RAMJOB", - "email": "cathyfrancis@ramjob.com", - "phone": "+1 (841) 466-2934", - "address": "439 Bogart Street, Russellville, Montana, 2519", - "about": "Et ea non adipisicing quis ut. Elit eiusmod labore aute dolore minim Lorem anim reprehenderit in do adipisicing amet. Fugiat aliquip esse duis commodo do minim consequat commodo fugiat labore ullamco minim ex elit. Ut est consequat Lorem laborum commodo laborum velit nulla veniam magna cupidatat.\r\n", - "registered": "2014-08-12T07:59:46 +04:00", - "latitude": 88.991895, - "longitude": 135.349633, - "tags": ["do", "eiusmod", "nulla", "nostrud", "sint", "anim", "dolor"], - "friends": [ - { - "id": 0, - "name": "Downs Camacho" - }, - { - "id": 1, - "name": "Dillon Lynch" - }, - { - "id": 2, - "name": "Collier Howell" - } - ], - "greeting": "Hello, Cathy Francis! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25def99355a1fbe9e71", - "index": 526, - "guid": "7cc09b6f-bdb4-408b-90fb-316945072dc6", - "isActive": true, - "balance": "$3,512.17", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Ernestine Ware", - "gender": "female", - "company": "NIQUENT", - "email": "ernestineware@niquent.com", - "phone": "+1 (854) 457-3755", - "address": "409 Williamsburg Street, Loomis, Alaska, 5410", - "about": "Labore qui mollit minim adipisicing aliquip ut consequat elit. Ex nulla cupidatat aliqua do. Officia eiusmod in aliqua amet quis velit voluptate est enim non adipisicing. Dolore dolore commodo ullamco enim. Commodo cillum duis exercitation enim. Nostrud sint commodo nulla ad et occaecat ea amet est aute ea ea duis ex. Anim adipisicing officia qui reprehenderit irure magna.\r\n", - "registered": "2020-04-19T04:33:09 +04:00", - "latitude": 33.98483, - "longitude": -84.888912, - "tags": ["nisi", "minim", "enim", "ut", "pariatur", "exercitation", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Annie Bentley" - }, - { - "id": 1, - "name": "Dorthy Robertson" - }, - { - "id": 2, - "name": "Mia George" - } - ], - "greeting": "Hello, Ernestine Ware! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc4bc1a96f435fb4b", - "index": 527, - "guid": "4c3a36f9-e950-4235-a40c-3c04b474d6c1", - "isActive": true, - "balance": "$2,646.79", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Woodward Chambers", - "gender": "male", - "company": "BIOLIVE", - "email": "woodwardchambers@biolive.com", - "phone": "+1 (924) 475-3365", - "address": "732 Hart Place, Abiquiu, Kentucky, 2152", - "about": "Nisi aliquip cillum duis culpa enim. Eu sint qui ea aliquip voluptate excepteur nulla ad ullamco consequat id. Voluptate sint veniam ullamco dolor. Ut in mollit nulla quis. Enim nostrud anim sint aute anim enim ex esse consequat sunt est tempor. Magna ad irure velit laboris commodo Lorem fugiat. Non excepteur anim et voluptate tempor esse deserunt eu ex.\r\n", - "registered": "2019-02-08T08:36:21 +05:00", - "latitude": 2.459288, - "longitude": -16.806075, - "tags": ["excepteur", "aliquip", "culpa", "culpa", "nisi", "adipisicing", "commodo"], - "friends": [ - { - "id": 0, - "name": "Kirby Skinner" - }, - { - "id": 1, - "name": "Sandoval Hudson" - }, - { - "id": 2, - "name": "Bailey Barrett" - } - ], - "greeting": "Hello, Woodward Chambers! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dab55f1ca56eae345", - "index": 528, - "guid": "03ef7b64-5eb3-4103-b898-eb56506dffec", - "isActive": true, - "balance": "$3,123.44", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Dale Pace", - "gender": "female", - "company": "CORECOM", - "email": "dalepace@corecom.com", - "phone": "+1 (903) 596-3340", - "address": "378 Calder Place, Shawmut, Mississippi, 7182", - "about": "Nulla mollit exercitation non qui dolor minim adipisicing laborum ut officia ipsum veniam tempor. Labore Lorem ad eiusmod sit eiusmod nulla labore ex cillum Lorem. Ullamco veniam quis eu pariatur ipsum sit aliqua.\r\n", - "registered": "2016-08-30T03:32:10 +04:00", - "latitude": 1.21815, - "longitude": -24.676858, - "tags": ["velit", "ullamco", "consectetur", "eu", "officia", "exercitation", "mollit"], - "friends": [ - { - "id": 0, - "name": "Iris Jacobs" - }, - { - "id": 1, - "name": "Arline Jackson" - }, - { - "id": 2, - "name": "Tammi Henry" - } - ], - "greeting": "Hello, Dale Pace! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d495af98f38de9169", - "index": 529, - "guid": "191a1702-291f-4196-970a-495650afc15d", - "isActive": true, - "balance": "$3,167.27", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Ericka Wright", - "gender": "female", - "company": "COSMOSIS", - "email": "erickawright@cosmosis.com", - "phone": "+1 (821) 535-2237", - "address": "208 Prospect Place, Harrodsburg, North Dakota, 3636", - "about": "Aliqua laboris veniam deserunt pariatur id proident incididunt. Voluptate reprehenderit proident proident nulla nostrud laborum commodo commodo id irure. In voluptate mollit ea laboris sint. Sunt ipsum dolor in sit ad.\r\n", - "registered": "2018-04-07T07:36:27 +04:00", - "latitude": -57.288927, - "longitude": -121.05459, - "tags": ["ipsum", "tempor", "quis", "laboris", "magna", "nisi", "qui"], - "friends": [ - { - "id": 0, - "name": "Ramos Stout" - }, - { - "id": 1, - "name": "Underwood Acosta" - }, - { - "id": 2, - "name": "Lang Wood" - } - ], - "greeting": "Hello, Ericka Wright! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7e189c2fd11448e4", - "index": 530, - "guid": "fc58179a-16ff-45b7-a7a1-02bd40264b3e", - "isActive": false, - "balance": "$3,543.81", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Hawkins Collins", - "gender": "male", - "company": "SNOWPOKE", - "email": "hawkinscollins@snowpoke.com", - "phone": "+1 (954) 528-3047", - "address": "939 Merit Court, Sehili, Federated States Of Micronesia, 9938", - "about": "Et dolore culpa eiusmod quis qui ipsum adipisicing nisi enim aliqua. Sunt pariatur et ut minim ad laboris. Ad exercitation excepteur cillum officia ut do sit.\r\n", - "registered": "2015-11-29T03:29:24 +05:00", - "latitude": 61.650606, - "longitude": -110.910731, - "tags": ["laboris", "tempor", "Lorem", "minim", "in", "nulla", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Finch Melendez" - }, - { - "id": 1, - "name": "Angela Fernandez" - }, - { - "id": 2, - "name": "Juanita Cummings" - } - ], - "greeting": "Hello, Hawkins Collins! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc821878e21a71009", - "index": 531, - "guid": "d1bf114b-e6c3-4ffe-97b3-ca60164196a5", - "isActive": false, - "balance": "$3,103.82", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "May Saunders", - "gender": "male", - "company": "GRONK", - "email": "maysaunders@gronk.com", - "phone": "+1 (984) 410-3723", - "address": "373 Wythe Avenue, Healy, Maryland, 9645", - "about": "Reprehenderit exercitation ut et mollit mollit ipsum in. Occaecat veniam et ea Lorem reprehenderit eu in non veniam et laborum mollit aute reprehenderit. Do in sunt laboris irure. Fugiat fugiat id laborum culpa ex occaecat adipisicing laborum.\r\n", - "registered": "2016-09-19T07:14:42 +04:00", - "latitude": -11.630519, - "longitude": 70.622637, - "tags": ["eu", "ad", "velit", "laboris", "voluptate", "aute", "anim"], - "friends": [ - { - "id": 0, - "name": "Wright Vang" - }, - { - "id": 1, - "name": "Mack Compton" - }, - { - "id": 2, - "name": "Fulton Webb" - } - ], - "greeting": "Hello, May Saunders! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d242c4cf6fe3de8eb", - "index": 532, - "guid": "f42ea9d3-bab4-487e-b8f2-3ebac10e3a01", - "isActive": false, - "balance": "$2,929.94", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Valenzuela Dejesus", - "gender": "male", - "company": "DIGITALUS", - "email": "valenzueladejesus@digitalus.com", - "phone": "+1 (929) 513-2725", - "address": "850 Anchorage Place, Soham, Virgin Islands, 3783", - "about": "Reprehenderit eiusmod fugiat et sint velit culpa irure et in Lorem sit Lorem in. Aliqua nisi incididunt eu ullamco Lorem excepteur in non nisi veniam. Est culpa laborum excepteur exercitation nulla commodo. Et ea fugiat proident veniam esse. Irure sunt exercitation minim duis duis.\r\n", - "registered": "2016-07-11T12:54:47 +04:00", - "latitude": -36.518697, - "longitude": -1.148787, - "tags": ["veniam", "aute", "reprehenderit", "eu", "quis", "in", "sint"], - "friends": [ - { - "id": 0, - "name": "Nina Vaughan" - }, - { - "id": 1, - "name": "Stanton Woodward" - }, - { - "id": 2, - "name": "Candice Lloyd" - } - ], - "greeting": "Hello, Valenzuela Dejesus! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1bcc0b967fe20d42", - "index": 533, - "guid": "53d19e45-dae6-4109-b230-299e00eb19e9", - "isActive": false, - "balance": "$1,939.80", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Sellers Simon", - "gender": "male", - "company": "KAGE", - "email": "sellerssimon@kage.com", - "phone": "+1 (828) 580-2079", - "address": "479 Chauncey Street, Dotsero, Pennsylvania, 7025", - "about": "Id amet id nulla laborum. Elit consequat dolor ea nostrud eiusmod dolor cillum eiusmod occaecat voluptate velit dolore commodo duis. Sint nostrud adipisicing cupidatat ea qui laboris ipsum minim minim consequat eu id velit reprehenderit.\r\n", - "registered": "2016-12-07T09:16:34 +05:00", - "latitude": -46.214385, - "longitude": 60.439606, - "tags": ["velit", "minim", "veniam", "anim", "nostrud", "duis", "duis"], - "friends": [ - { - "id": 0, - "name": "Davis Burks" - }, - { - "id": 1, - "name": "Avery Garza" - }, - { - "id": 2, - "name": "Misty Zimmerman" - } - ], - "greeting": "Hello, Sellers Simon! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d554f25ff1729a983", - "index": 534, - "guid": "1e681c6c-3c0d-423f-8e39-2c0771f23ba0", - "isActive": false, - "balance": "$1,230.67", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Dionne Patrick", - "gender": "female", - "company": "BIOHAB", - "email": "dionnepatrick@biohab.com", - "phone": "+1 (955) 447-2940", - "address": "274 Alton Place, Comptche, Washington, 118", - "about": "Lorem non ea mollit occaecat id nisi qui duis velit. Duis enim minim nisi tempor sunt sunt ea duis nostrud adipisicing proident do id veniam. Consectetur cupidatat ex deserunt nostrud nulla eu exercitation aute. Consequat excepteur tempor Lorem velit non cillum exercitation. Minim qui ex veniam quis amet ea exercitation reprehenderit laboris nisi officia qui Lorem. Qui est ut sunt sit.\r\n", - "registered": "2015-05-16T06:15:32 +04:00", - "latitude": -61.774971, - "longitude": -23.361035, - "tags": ["dolore", "ipsum", "labore", "consequat", "ad", "et", "non"], - "friends": [ - { - "id": 0, - "name": "Janine Gilbert" - }, - { - "id": 1, - "name": "Ochoa Hamilton" - }, - { - "id": 2, - "name": "Bridgett Hawkins" - } - ], - "greeting": "Hello, Dionne Patrick! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbdd299a8c7659866", - "index": 535, - "guid": "782f0c00-e844-4434-8cf1-d13c06923771", - "isActive": false, - "balance": "$2,213.26", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Lott Erickson", - "gender": "male", - "company": "ENJOLA", - "email": "lotterickson@enjola.com", - "phone": "+1 (969) 418-3583", - "address": "218 Seigel Court, Herald, Illinois, 1650", - "about": "Quis exercitation non reprehenderit excepteur laboris aliquip pariatur tempor excepteur et duis ad. Officia amet eiusmod cillum proident excepteur laborum mollit enim nostrud magna consectetur consectetur aliqua. Lorem anim ex qui enim fugiat sint ea. Et minim dolore dolore pariatur Lorem proident non elit ullamco. Sunt voluptate reprehenderit irure ipsum. Nisi cupidatat magna ullamco et ullamco sit cillum ut cupidatat magna. Reprehenderit commodo labore amet ad veniam non exercitation ad Lorem ullamco magna ipsum duis minim.\r\n", - "registered": "2018-02-27T07:50:33 +05:00", - "latitude": -70.678938, - "longitude": -30.413765, - "tags": ["ut", "cupidatat", "do", "proident", "quis", "veniam", "laborum"], - "friends": [ - { - "id": 0, - "name": "Nash Clements" - }, - { - "id": 1, - "name": "Nikki Rogers" - }, - { - "id": 2, - "name": "Flossie Shields" - } - ], - "greeting": "Hello, Lott Erickson! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db63b864b1901611b", - "index": 536, - "guid": "70cde2bc-258d-44ca-af5f-c87783265830", - "isActive": false, - "balance": "$2,131.26", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Paula Serrano", - "gender": "female", - "company": "FOSSIEL", - "email": "paulaserrano@fossiel.com", - "phone": "+1 (954) 431-3734", - "address": "179 Glenwood Road, Vale, New Hampshire, 662", - "about": "Sint nostrud consectetur elit irure do proident pariatur. Occaecat elit eu deserunt occaecat sunt officia ullamco commodo qui sint in. Lorem et anim exercitation cillum ea incididunt laboris aliquip ut ut aliquip. Est non sunt nisi deserunt. Ex amet consequat ullamco elit laboris cillum fugiat mollit pariatur do.\r\n", - "registered": "2016-02-13T12:56:53 +05:00", - "latitude": -30.57941, - "longitude": -38.828974, - "tags": ["irure", "ut", "quis", "eiusmod", "reprehenderit", "incididunt", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Hendrix Burch" - }, - { - "id": 1, - "name": "Lacey Gates" - }, - { - "id": 2, - "name": "Sharron Burt" - } - ], - "greeting": "Hello, Paula Serrano! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db33916a29ccba467", - "index": 537, - "guid": "f2b8b5ed-2dcd-4eed-8573-1494970bb909", - "isActive": true, - "balance": "$1,787.98", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Lynette Walls", - "gender": "female", - "company": "GREEKER", - "email": "lynettewalls@greeker.com", - "phone": "+1 (888) 418-3278", - "address": "474 Varick Street, Alafaya, Colorado, 8529", - "about": "Pariatur ullamco sint anim anim culpa enim dolor laborum est. Sunt proident incididunt id aute commodo elit ut eiusmod sit voluptate et cillum non irure. Mollit sunt sit sint sint anim elit sit excepteur.\r\n", - "registered": "2017-07-08T05:10:32 +04:00", - "latitude": 28.615595, - "longitude": 59.293278, - "tags": ["est", "culpa", "incididunt", "commodo", "proident", "laboris", "anim"], - "friends": [ - { - "id": 0, - "name": "Patti Calhoun" - }, - { - "id": 1, - "name": "Dickerson Gentry" - }, - { - "id": 2, - "name": "Moore Yang" - } - ], - "greeting": "Hello, Lynette Walls! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d10d8b6cfc6c6b7d0", - "index": 538, - "guid": "8a8e816b-52dc-4e7b-91a0-078390f94adb", - "isActive": true, - "balance": "$1,990.52", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Mckinney Summers", - "gender": "male", - "company": "AUTOMON", - "email": "mckinneysummers@automon.com", - "phone": "+1 (866) 453-3130", - "address": "882 Withers Street, Norvelt, Maine, 1605", - "about": "Cillum quis officia esse aliquip enim elit occaecat minim ad do. Incididunt ea incididunt duis elit Lorem culpa. Est dolore dolore aliquip quis exercitation minim amet dolore. Voluptate sunt tempor anim qui incididunt non quis elit ea. Occaecat est ipsum aliquip quis laborum. Culpa laboris pariatur Lorem nulla laboris duis proident tempor aliquip cillum ut. Exercitation in aliqua quis mollit pariatur aute eu eu amet anim dolore tempor cillum.\r\n", - "registered": "2017-09-17T08:04:43 +04:00", - "latitude": 27.706816, - "longitude": -85.39727, - "tags": ["non", "mollit", "nisi", "amet", "tempor", "cillum", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Pitts Farrell" - }, - { - "id": 1, - "name": "Concepcion Warren" - }, - { - "id": 2, - "name": "Roxie Park" - } - ], - "greeting": "Hello, Mckinney Summers! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1bf30048554ea955", - "index": 539, - "guid": "0aba9993-cfde-4ab4-ad13-07c82798a78b", - "isActive": false, - "balance": "$1,339.05", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Anderson Mills", - "gender": "male", - "company": "PROXSOFT", - "email": "andersonmills@proxsoft.com", - "phone": "+1 (998) 544-2927", - "address": "607 Canton Court, Marion, South Carolina, 2528", - "about": "Occaecat occaecat voluptate tempor sint mollit commodo. Velit laboris duis nulla ipsum duis ut dolore nostrud eu ex excepteur excepteur. Minim veniam ipsum ad exercitation.\r\n", - "registered": "2014-06-19T01:40:02 +04:00", - "latitude": 47.986407, - "longitude": -162.33837, - "tags": ["qui", "consequat", "laboris", "aliqua", "amet", "est", "laboris"], - "friends": [ - { - "id": 0, - "name": "Jessica Buchanan" - }, - { - "id": 1, - "name": "Zelma Floyd" - }, - { - "id": 2, - "name": "Lowe Barlow" - } - ], - "greeting": "Hello, Anderson Mills! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4b910c33c46faa9c", - "index": 540, - "guid": "3b95ea78-fdc1-486a-9805-5adb5eb8f0fa", - "isActive": true, - "balance": "$1,020.72", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Crane Mccall", - "gender": "male", - "company": "DATACATOR", - "email": "cranemccall@datacator.com", - "phone": "+1 (894) 545-2295", - "address": "972 Clinton Avenue, Ebro, Connecticut, 490", - "about": "Adipisicing sunt anim ea id aliqua aute et pariatur sit nulla voluptate aliqua quis id. Voluptate tempor ipsum voluptate sit aliquip cillum velit mollit sit sint ut labore. Duis magna ipsum anim nostrud eiusmod deserunt commodo eu in. Non eiusmod et cillum ad. Est dolore consequat duis id non laborum in minim et aliqua anim.\r\n", - "registered": "2014-11-20T10:36:24 +05:00", - "latitude": 24.180363, - "longitude": -166.665837, - "tags": ["ad", "ullamco", "consectetur", "deserunt", "ullamco", "qui", "sit"], - "friends": [ - { - "id": 0, - "name": "Carney Ramos" - }, - { - "id": 1, - "name": "Alston Horn" - }, - { - "id": 2, - "name": "Angel Blackwell" - } - ], - "greeting": "Hello, Crane Mccall! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4739784ea41daf97", - "index": 541, - "guid": "36142dc2-7d07-4260-845d-b4d6073e50cc", - "isActive": false, - "balance": "$3,716.01", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Nettie Nielsen", - "gender": "female", - "company": "COMTEST", - "email": "nettienielsen@comtest.com", - "phone": "+1 (807) 592-2496", - "address": "236 Bayview Place, Conway, Virginia, 5376", - "about": "Magna do veniam non aute duis aliqua fugiat incididunt. Eiusmod officia ullamco amet laborum veniam aliqua est commodo do in duis proident incididunt et. Minim esse sit duis ullamco ipsum eiusmod. Quis pariatur in aliquip anim commodo ullamco mollit culpa minim deserunt ipsum. Et ut voluptate laboris reprehenderit cupidatat ad laborum duis consequat excepteur pariatur. Fugiat dolor laboris mollit aliquip cillum voluptate elit cupidatat duis et. Ex duis ullamco anim non officia enim reprehenderit sit ea.\r\n", - "registered": "2020-04-20T08:06:56 +04:00", - "latitude": -28.422599, - "longitude": -159.845554, - "tags": ["qui", "duis", "ad", "id", "occaecat", "ullamco", "sit"], - "friends": [ - { - "id": 0, - "name": "Katrina Lucas" - }, - { - "id": 1, - "name": "Erma Alvarez" - }, - { - "id": 2, - "name": "Paul Hyde" - } - ], - "greeting": "Hello, Nettie Nielsen! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4a4dbce236cdfeac", - "index": 542, - "guid": "e0d634a7-6e29-4bbc-9f25-034344272d1e", - "isActive": true, - "balance": "$1,984.58", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Marta Flores", - "gender": "female", - "company": "XLEEN", - "email": "martaflores@xleen.com", - "phone": "+1 (961) 559-3106", - "address": "819 Langham Street, Gerber, Georgia, 9924", - "about": "Amet deserunt cillum proident cupidatat consequat sit quis non fugiat ex aute deserunt. Excepteur consequat irure veniam officia commodo proident cillum consequat do esse aliquip deserunt. Id proident voluptate voluptate ut. Qui ad in irure id irure duis enim aute ullamco ex do et magna mollit. Aliqua reprehenderit ipsum minim mollit ullamco id culpa esse qui mollit.\r\n", - "registered": "2019-10-05T11:01:37 +04:00", - "latitude": -27.113826, - "longitude": -126.045172, - "tags": ["fugiat", "culpa", "aliqua", "occaecat", "tempor", "veniam", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Mccall Mcmahon" - }, - { - "id": 1, - "name": "Maxwell Fulton" - }, - { - "id": 2, - "name": "Jillian Vance" - } - ], - "greeting": "Hello, Marta Flores! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc84666ae09a42841", - "index": 543, - "guid": "172cd57f-964c-4fb3-829e-3dd45137304b", - "isActive": false, - "balance": "$2,086.45", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Georgette Wilkinson", - "gender": "female", - "company": "ACCEL", - "email": "georgettewilkinson@accel.com", - "phone": "+1 (930) 432-2082", - "address": "389 Hill Street, Cecilia, New Jersey, 1332", - "about": "Nostrud eu sint velit fugiat nostrud tempor ipsum ad eu sunt aliqua. Aute cupidatat ex esse adipisicing adipisicing Lorem duis proident eu Lorem culpa sint. Minim in duis et quis commodo qui labore ex esse magna Lorem officia proident. Aliquip labore minim nulla aliqua. Ut aute quis proident reprehenderit quis aliquip cillum aute adipisicing amet excepteur quis ex. Incididunt sit cupidatat ex sunt cillum eu magna consectetur ut qui reprehenderit sunt.\r\n", - "registered": "2017-02-25T05:11:39 +05:00", - "latitude": 62.712563, - "longitude": 163.660255, - "tags": ["culpa", "anim", "consequat", "enim", "eiusmod", "ipsum", "ut"], - "friends": [ - { - "id": 0, - "name": "Margarita Beck" - }, - { - "id": 1, - "name": "Fletcher Ball" - }, - { - "id": 2, - "name": "Larson Callahan" - } - ], - "greeting": "Hello, Georgette Wilkinson! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7e4f59d64fe16b8f", - "index": 544, - "guid": "b8610115-47c9-48c1-9d0a-9731d076d89b", - "isActive": true, - "balance": "$3,259.74", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Angie Finch", - "gender": "female", - "company": "HONOTRON", - "email": "angiefinch@honotron.com", - "phone": "+1 (896) 566-3096", - "address": "801 Quay Street, Gibsonia, Minnesota, 7890", - "about": "Cupidatat dolor aliquip esse occaecat. Laborum deserunt quis et veniam amet. Aliquip in incididunt adipisicing non officia voluptate nulla laborum fugiat pariatur aute est eu exercitation. Esse non labore nisi deserunt fugiat proident labore ea cupidatat qui et. Nostrud velit nostrud nisi veniam magna ea sit pariatur consectetur. Sint amet quis minim do.\r\n", - "registered": "2020-02-18T09:28:40 +05:00", - "latitude": 55.727766, - "longitude": -91.809179, - "tags": ["dolore", "ullamco", "occaecat", "officia", "eu", "exercitation", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Wyatt Lowery" - }, - { - "id": 1, - "name": "Katheryn Vinson" - }, - { - "id": 2, - "name": "Holland Becker" - } - ], - "greeting": "Hello, Angie Finch! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d21d0e2ab15d0e5a8", - "index": 545, - "guid": "a6b78dfa-fedc-4081-87ab-7392f3166499", - "isActive": true, - "balance": "$1,889.20", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Beasley Nelson", - "gender": "male", - "company": "MIRACLIS", - "email": "beasleynelson@miraclis.com", - "phone": "+1 (863) 540-3799", - "address": "787 Juliana Place, Gadsden, Texas, 4280", - "about": "Commodo tempor et culpa consectetur ad nisi aute enim exercitation ex irure dolore. Esse eiusmod et in elit dolore minim enim. Commodo laboris amet ut eiusmod proident. Excepteur eiusmod cupidatat fugiat sint irure duis laboris dolore.\r\n", - "registered": "2020-05-20T06:28:40 +04:00", - "latitude": 38.94353, - "longitude": 6.13697, - "tags": ["elit", "ad", "ut", "deserunt", "veniam", "amet", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Fischer Mcpherson" - }, - { - "id": 1, - "name": "Kaufman Jenkins" - }, - { - "id": 2, - "name": "Mcleod Robbins" - } - ], - "greeting": "Hello, Beasley Nelson! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8f782271911009b5", - "index": 546, - "guid": "e96cc57c-ec00-4070-a411-1e4254456504", - "isActive": true, - "balance": "$3,878.71", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Calderon Norton", - "gender": "male", - "company": "LYRICHORD", - "email": "calderonnorton@lyrichord.com", - "phone": "+1 (903) 426-2328", - "address": "376 Lewis Place, Enlow, Alabama, 9488", - "about": "In anim veniam voluptate Lorem laboris adipisicing esse nostrud consequat ea ipsum labore nisi. Sint sit proident excepteur id. Id dolore eiusmod est ea do ea et id ea voluptate nulla minim. Reprehenderit do mollit cillum labore mollit consectetur amet deserunt minim quis ex non excepteur. Cupidatat quis ex amet incididunt do pariatur et ipsum qui cillum ipsum cupidatat mollit. Ad ea deserunt enim quis do culpa magna magna irure laboris.\r\n", - "registered": "2019-07-27T04:15:36 +04:00", - "latitude": 71.922612, - "longitude": -105.591059, - "tags": ["laboris", "nulla", "ad", "ex", "elit", "non", "qui"], - "friends": [ - { - "id": 0, - "name": "Cobb Bond" - }, - { - "id": 1, - "name": "Carol Roman" - }, - { - "id": 2, - "name": "Young Carlson" - } - ], - "greeting": "Hello, Calderon Norton! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbc88f5b67d0fe291", - "index": 547, - "guid": "92c1807f-46a3-4f0b-b147-f8e4852d8bb6", - "isActive": false, - "balance": "$2,465.89", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Norton Sweeney", - "gender": "male", - "company": "CENTREXIN", - "email": "nortonsweeney@centrexin.com", - "phone": "+1 (839) 565-2716", - "address": "307 Ivan Court, Malo, Rhode Island, 6776", - "about": "Labore exercitation reprehenderit quis dolor dolore aute id. Ipsum incididunt nisi laboris labore. Pariatur veniam ea esse qui ut est. Minim ut magna velit aliquip excepteur officia magna. Enim reprehenderit proident labore proident eu enim qui eu laborum eiusmod consequat eiusmod velit.\r\n", - "registered": "2014-08-27T12:22:18 +04:00", - "latitude": -56.001267, - "longitude": 178.354619, - "tags": ["voluptate", "proident", "ullamco", "in", "duis", "nisi", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Patty Roberson" - }, - { - "id": 1, - "name": "Cherry Trevino" - }, - { - "id": 2, - "name": "Bell Macias" - } - ], - "greeting": "Hello, Norton Sweeney! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d14fec062aad02664", - "index": 548, - "guid": "f1c835eb-1dd5-4ab0-80d9-ff91691b1f3f", - "isActive": true, - "balance": "$1,546.43", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Rhonda Finley", - "gender": "female", - "company": "ENERSOL", - "email": "rhondafinley@enersol.com", - "phone": "+1 (941) 546-3872", - "address": "450 Pineapple Street, Onton, Florida, 8089", - "about": "Labore sit nisi ex voluptate consectetur qui adipisicing elit. Lorem et enim aute deserunt ex ex consequat enim pariatur quis nostrud nostrud in reprehenderit. Nulla exercitation quis Lorem ea culpa magna. Amet aute sunt elit fugiat adipisicing irure ipsum voluptate deserunt cupidatat enim anim voluptate eu.\r\n", - "registered": "2020-02-08T09:24:49 +05:00", - "latitude": 60.978012, - "longitude": -34.418349, - "tags": ["ut", "eu", "ex", "nisi", "amet", "consectetur", "do"], - "friends": [ - { - "id": 0, - "name": "Lawanda Wynn" - }, - { - "id": 1, - "name": "Mckee Bray" - }, - { - "id": 2, - "name": "Dolly Ross" - } - ], - "greeting": "Hello, Rhonda Finley! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d34e2ff1e92e634e4", - "index": 549, - "guid": "e9044c08-cc1c-4c4a-834d-29410b57bbc8", - "isActive": false, - "balance": "$3,121.22", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Gibson Schultz", - "gender": "male", - "company": "KINETICA", - "email": "gibsonschultz@kinetica.com", - "phone": "+1 (978) 466-3279", - "address": "119 Polar Street, Emory, Indiana, 1852", - "about": "Laboris et ut ullamco ad elit aute exercitation. Irure quis sunt eiusmod ipsum esse. Exercitation elit eu irure ullamco adipisicing aliquip veniam. Exercitation non cupidatat exercitation et elit officia et. Aute veniam in cupidatat velit aliquip anim deserunt officia voluptate do aliquip. Enim qui exercitation aliquip minim quis sint.\r\n", - "registered": "2015-02-09T02:19:34 +05:00", - "latitude": -76.891082, - "longitude": 12.036753, - "tags": ["mollit", "magna", "sit", "mollit", "minim", "ullamco", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Decker Warner" - }, - { - "id": 1, - "name": "Galloway Mullen" - }, - { - "id": 2, - "name": "Brewer Soto" - } - ], - "greeting": "Hello, Gibson Schultz! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6e0dae4030841b03", - "index": 550, - "guid": "2be699b5-e489-4cf1-a10e-50893ac8e946", - "isActive": false, - "balance": "$2,822.43", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Ortega Forbes", - "gender": "male", - "company": "ISOSTREAM", - "email": "ortegaforbes@isostream.com", - "phone": "+1 (834) 492-3339", - "address": "121 Bond Street, Dalton, Northern Mariana Islands, 5712", - "about": "Consectetur aliquip culpa velit eiusmod. Ipsum nisi velit irure aliqua anim tempor magna ullamco cillum sint. Ea veniam fugiat aute culpa consequat exercitation minim.\r\n", - "registered": "2014-08-27T07:20:50 +04:00", - "latitude": -46.025945, - "longitude": -73.919002, - "tags": ["dolore", "in", "sit", "ut", "nostrud", "eu", "in"], - "friends": [ - { - "id": 0, - "name": "Rowena Hubbard" - }, - { - "id": 1, - "name": "Kane Owens" - }, - { - "id": 2, - "name": "Angelique Sosa" - } - ], - "greeting": "Hello, Ortega Forbes! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc7fb5656115e041e", - "index": 551, - "guid": "345b289e-e422-48b9-8279-8169b8327eff", - "isActive": true, - "balance": "$3,669.54", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Georgia Espinoza", - "gender": "female", - "company": "OPTYK", - "email": "georgiaespinoza@optyk.com", - "phone": "+1 (895) 445-3931", - "address": "122 Battery Avenue, Gilgo, Idaho, 226", - "about": "Amet officia pariatur eiusmod do officia officia proident dolore pariatur occaecat occaecat sint duis. Mollit amet sit ut nostrud nisi sit adipisicing et ullamco ullamco. Amet velit sunt ullamco adipisicing. Quis aliquip sit dolor et. Dolore ut eiusmod veniam dolore veniam commodo minim. Ea dolor dolore nisi cillum qui voluptate voluptate amet nulla occaecat.\r\n", - "registered": "2019-10-19T08:08:02 +04:00", - "latitude": 14.559501, - "longitude": -52.520354, - "tags": ["nulla", "reprehenderit", "ipsum", "esse", "cillum", "minim", "esse"], - "friends": [ - { - "id": 0, - "name": "Enid Dudley" - }, - { - "id": 1, - "name": "Diane Robles" - }, - { - "id": 2, - "name": "Shepherd Mcmillan" - } - ], - "greeting": "Hello, Georgia Espinoza! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d865158e2aa24eb33", - "index": 552, - "guid": "8be25220-1daa-49a8-a533-310de7e0a7a8", - "isActive": true, - "balance": "$1,965.05", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Dalton Dickerson", - "gender": "male", - "company": "DANCITY", - "email": "daltondickerson@dancity.com", - "phone": "+1 (997) 550-2399", - "address": "422 Decatur Street, Grazierville, District Of Columbia, 4360", - "about": "Pariatur fugiat pariatur duis officia dolore voluptate. Elit aliqua ea veniam id ex excepteur aliqua pariatur magna veniam. Esse sunt do esse occaecat anim consectetur sint qui consequat duis Lorem. Ea laborum ut excepteur amet officia voluptate enim. Culpa laboris excepteur ipsum culpa aliquip velit deserunt velit proident. Proident et elit eiusmod sit nostrud fugiat ullamco velit minim nostrud irure occaecat incididunt laborum. In exercitation incididunt velit nisi aliquip anim culpa labore deserunt ullamco.\r\n", - "registered": "2017-02-21T05:36:37 +05:00", - "latitude": 17.743372, - "longitude": -177.804157, - "tags": ["commodo", "fugiat", "proident", "incididunt", "laborum", "esse", "do"], - "friends": [ - { - "id": 0, - "name": "Abbott Gould" - }, - { - "id": 1, - "name": "Morse Moody" - }, - { - "id": 2, - "name": "Saunders Hayden" - } - ], - "greeting": "Hello, Dalton Dickerson! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d996a09dc49de3a04", - "index": 553, - "guid": "3dc4cc48-323d-4297-a1f0-4d91d471f128", - "isActive": false, - "balance": "$3,852.76", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Pugh Washington", - "gender": "male", - "company": "KENGEN", - "email": "pughwashington@kengen.com", - "phone": "+1 (803) 526-3993", - "address": "372 Seigel Street, Williston, New Mexico, 3564", - "about": "Duis sunt do ullamco non mollit laborum occaecat aute qui officia proident aute Lorem. Nisi pariatur aliqua veniam proident fugiat sit labore consequat ad. Consectetur eu minim occaecat veniam cillum officia enim eu do. Ad exercitation dolore mollit consequat ipsum in adipisicing qui ad Lorem. Adipisicing dolor dolor tempor ut consectetur aute commodo.\r\n", - "registered": "2018-03-11T08:56:20 +04:00", - "latitude": -15.99292, - "longitude": 71.993557, - "tags": ["sunt", "duis", "non", "voluptate", "adipisicing", "cillum", "magna"], - "friends": [ - { - "id": 0, - "name": "Guthrie Howard" - }, - { - "id": 1, - "name": "Desiree Williams" - }, - { - "id": 2, - "name": "Lelia Combs" - } - ], - "greeting": "Hello, Pugh Washington! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db7fc7a7563d831cf", - "index": 554, - "guid": "16b71a8c-ca52-4d59-bf26-9a5226a4fe8a", - "isActive": true, - "balance": "$3,667.19", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Marina Pierce", - "gender": "female", - "company": "ZIORE", - "email": "marinapierce@ziore.com", - "phone": "+1 (962) 466-2807", - "address": "898 Kingston Avenue, Spelter, South Dakota, 7837", - "about": "Ullamco sit sunt consequat exercitation enim nulla in labore quis nisi et. Ullamco eiusmod in aliqua mollit dolor mollit est elit laboris minim. Laborum nostrud fugiat esse ut exercitation ipsum consequat eiusmod. Cupidatat nostrud magna excepteur non ullamco veniam aute voluptate qui minim.\r\n", - "registered": "2017-01-19T12:50:26 +05:00", - "latitude": -55.829046, - "longitude": 48.891216, - "tags": ["sint", "culpa", "quis", "nostrud", "elit", "mollit", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Carlson Christensen" - }, - { - "id": 1, - "name": "Colleen Sweet" - }, - { - "id": 2, - "name": "Gail Roach" - } - ], - "greeting": "Hello, Marina Pierce! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d53c4c32bf82263cb", - "index": 555, - "guid": "4c2695e8-12a2-42da-a169-e367f3c9b5db", - "isActive": true, - "balance": "$2,531.17", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Darla Shannon", - "gender": "female", - "company": "JOVIOLD", - "email": "darlashannon@joviold.com", - "phone": "+1 (936) 576-2588", - "address": "713 Union Street, Breinigsville, American Samoa, 3029", - "about": "Nostrud ex nostrud ex ut esse tempor in officia non velit ut pariatur. Cillum deserunt veniam culpa consequat ullamco incididunt Lorem. Lorem aute commodo eu proident officia eiusmod sunt. Excepteur duis anim ullamco enim quis pariatur sint Lorem fugiat ipsum. Aliqua quis ipsum ea in elit pariatur reprehenderit consectetur excepteur in. Sint do velit sunt in do reprehenderit laborum laboris reprehenderit aute. Duis pariatur anim cupidatat proident.\r\n", - "registered": "2018-12-18T12:40:01 +05:00", - "latitude": -59.377728, - "longitude": -156.400316, - "tags": ["esse", "eiusmod", "aute", "nulla", "culpa", "ipsum", "nulla"], - "friends": [ - { - "id": 0, - "name": "Vilma Andrews" - }, - { - "id": 1, - "name": "Miller Pena" - }, - { - "id": 2, - "name": "Evangeline Hardin" - } - ], - "greeting": "Hello, Darla Shannon! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2321b2f6602b8cfa", - "index": 556, - "guid": "c3922408-727c-4eaf-9eb1-48cee5e4ffa3", - "isActive": false, - "balance": "$1,418.15", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Klein Haley", - "gender": "male", - "company": "INVENTURE", - "email": "kleinhaley@inventure.com", - "phone": "+1 (961) 433-2259", - "address": "239 Noll Street, Joes, Iowa, 6725", - "about": "Pariatur est deserunt ea tempor exercitation adipisicing occaecat sit est voluptate dolore culpa. Magna exercitation amet nulla commodo. Exercitation anim exercitation excepteur et fugiat occaecat pariatur tempor cillum id ut in. Veniam eiusmod culpa nostrud commodo dolore labore ea consequat.\r\n", - "registered": "2015-05-26T09:02:55 +04:00", - "latitude": 1.229988, - "longitude": -28.699342, - "tags": ["eiusmod", "quis", "laborum", "enim", "occaecat", "eu", "non"], - "friends": [ - { - "id": 0, - "name": "Kerri Massey" - }, - { - "id": 1, - "name": "Shana Briggs" - }, - { - "id": 2, - "name": "Melva Wolf" - } - ], - "greeting": "Hello, Klein Haley! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d871cf2926be77cae", - "index": 557, - "guid": "5628dd40-47d9-48d5-8856-d1d05d8a02bf", - "isActive": true, - "balance": "$3,626.84", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Mcmahon Good", - "gender": "male", - "company": "NIKUDA", - "email": "mcmahongood@nikuda.com", - "phone": "+1 (847) 542-3514", - "address": "524 Amherst Street, Escondida, Palau, 4207", - "about": "Proident do mollit velit in laboris. Ex nisi eiusmod veniam eu laborum pariatur id cupidatat. Elit esse cupidatat dolor dolor consectetur exercitation. Ex in enim exercitation excepteur. Est dolor est Lorem sint magna voluptate proident incididunt. Commodo ex voluptate cupidatat aliquip ea fugiat voluptate dolor enim consectetur sunt officia tempor. Fugiat excepteur aliquip quis cillum aliquip esse labore eiusmod.\r\n", - "registered": "2016-10-27T11:45:42 +04:00", - "latitude": 46.920483, - "longitude": -157.693393, - "tags": ["aliquip", "voluptate", "in", "fugiat", "laboris", "elit", "in"], - "friends": [ - { - "id": 0, - "name": "Jean Weber" - }, - { - "id": 1, - "name": "Jayne Holden" - }, - { - "id": 2, - "name": "Bird Moran" - } - ], - "greeting": "Hello, Mcmahon Good! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcf71f87f691f058b", - "index": 558, - "guid": "ee0b4a50-ab88-4de0-8386-d9cee736eb26", - "isActive": false, - "balance": "$3,981.57", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Odessa Terrell", - "gender": "female", - "company": "PAPRIKUT", - "email": "odessaterrell@paprikut.com", - "phone": "+1 (926) 546-3746", - "address": "922 Pine Street, Bloomington, West Virginia, 8241", - "about": "Non elit mollit tempor do esse occaecat. Ad eiusmod adipisicing ullamco laborum irure dolor do eu Lorem occaecat duis. Sit nisi nisi officia laborum nulla ad minim. Id nisi pariatur aliquip labore laborum sint sit culpa. Velit Lorem tempor irure mollit mollit ut sunt commodo dolor anim ipsum voluptate velit reprehenderit. Do adipisicing aliquip tempor ullamco amet ex nisi aute ad.\r\n", - "registered": "2020-01-01T04:26:07 +05:00", - "latitude": 18.335673, - "longitude": -3.085236, - "tags": ["excepteur", "enim", "consequat", "qui", "officia", "dolore", "veniam"], - "friends": [ - { - "id": 0, - "name": "Luisa Holcomb" - }, - { - "id": 1, - "name": "Perry Hurst" - }, - { - "id": 2, - "name": "Alyson Lowe" - } - ], - "greeting": "Hello, Odessa Terrell! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc5fb9d697ff83cac", - "index": 559, - "guid": "0cf0610f-0023-4c63-818f-01be79a6e64d", - "isActive": false, - "balance": "$3,993.79", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Taylor Luna", - "gender": "male", - "company": "MAGNAFONE", - "email": "taylorluna@magnafone.com", - "phone": "+1 (943) 412-2507", - "address": "516 Union Avenue, Sexton, New York, 7583", - "about": "Pariatur sint reprehenderit nulla culpa commodo elit eiusmod aute ipsum et consequat officia adipisicing nostrud. Deserunt duis voluptate occaecat laborum esse ex laboris sunt magna consequat veniam anim. Consectetur duis ullamco do occaecat cillum.\r\n", - "registered": "2018-05-24T03:59:08 +04:00", - "latitude": 22.996062, - "longitude": -148.22449, - "tags": ["magna", "enim", "est", "Lorem", "est", "sit", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Liz Sanford" - }, - { - "id": 1, - "name": "Harper Maldonado" - }, - { - "id": 2, - "name": "Patterson Lewis" - } - ], - "greeting": "Hello, Taylor Luna! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc5f21a8054276408", - "index": 560, - "guid": "211506fc-0238-4cdc-afd1-19c303f05510", - "isActive": false, - "balance": "$2,538.10", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Katie Clarke", - "gender": "female", - "company": "YOGASM", - "email": "katieclarke@yogasm.com", - "phone": "+1 (994) 439-3532", - "address": "240 Havens Place, Brandermill, Hawaii, 4846", - "about": "Laborum eu ullamco cillum ex velit aute cupidatat. Ut do sint veniam ex velit culpa cillum duis incididunt. Ipsum qui ea Lorem qui commodo sunt excepteur.\r\n", - "registered": "2015-01-13T07:29:38 +05:00", - "latitude": -63.919801, - "longitude": -141.58188, - "tags": ["magna", "in", "proident", "deserunt", "commodo", "culpa", "laborum"], - "friends": [ - { - "id": 0, - "name": "Hicks Chen" - }, - { - "id": 1, - "name": "Charity Cantu" - }, - { - "id": 2, - "name": "Estela Cook" - } - ], - "greeting": "Hello, Katie Clarke! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0392aa5bde03e3ea", - "index": 561, - "guid": "a3591a13-2a0e-41a1-85f8-3fd811480bdb", - "isActive": true, - "balance": "$3,299.26", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Letha Murray", - "gender": "female", - "company": "NETPLODE", - "email": "lethamurray@netplode.com", - "phone": "+1 (895) 573-3962", - "address": "159 Billings Place, Fairforest, Nebraska, 3541", - "about": "Quis in magna reprehenderit elit. Aute dolore nostrud amet veniam esse proident non eiusmod. Nostrud dolore nulla qui esse eu. Consequat anim do ad laborum deserunt aliquip esse anim consequat cupidatat reprehenderit dolor. Irure enim duis enim amet. Non ex mollit labore esse ad consectetur dolor anim.\r\n", - "registered": "2017-11-24T04:21:16 +05:00", - "latitude": 57.124321, - "longitude": -47.176362, - "tags": ["est", "commodo", "pariatur", "laborum", "duis", "ullamco", "et"], - "friends": [ - { - "id": 0, - "name": "Hamilton Webster" - }, - { - "id": 1, - "name": "Mcintyre Mcfarland" - }, - { - "id": 2, - "name": "Lloyd Stokes" - } - ], - "greeting": "Hello, Letha Murray! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da2e51cb24567dea2", - "index": 562, - "guid": "9126f0a0-e251-4f68-ab40-8d764883abcd", - "isActive": true, - "balance": "$2,401.91", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Selma Obrien", - "gender": "female", - "company": "DYMI", - "email": "selmaobrien@dymi.com", - "phone": "+1 (962) 546-3105", - "address": "779 Coffey Street, Wollochet, Wisconsin, 8891", - "about": "Culpa anim reprehenderit velit tempor magna eiusmod quis officia labore officia nisi laboris minim eiusmod. Dolore ex voluptate elit adipisicing velit. Esse reprehenderit incididunt adipisicing excepteur do labore exercitation aliqua. Commodo cillum id laborum cillum sit magna exercitation nisi. Dolore id in proident aute nostrud esse quis. Adipisicing Lorem consectetur Lorem reprehenderit excepteur amet excepteur eu elit incididunt aliqua irure qui ex. Incididunt ea occaecat dolor mollit.\r\n", - "registered": "2018-04-26T05:56:04 +04:00", - "latitude": -63.301611, - "longitude": 103.002289, - "tags": ["commodo", "aute", "ad", "sint", "exercitation", "dolor", "officia"], - "friends": [ - { - "id": 0, - "name": "Pierce Decker" - }, - { - "id": 1, - "name": "Deborah Mcdonald" - }, - { - "id": 2, - "name": "Beulah Berger" - } - ], - "greeting": "Hello, Selma Obrien! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d60053bd5e741d027", - "index": 563, - "guid": "8078f39f-29da-40e8-bcd3-e21fcf28f574", - "isActive": true, - "balance": "$1,226.45", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Valencia Riggs", - "gender": "male", - "company": "COMTREK", - "email": "valenciariggs@comtrek.com", - "phone": "+1 (846) 510-3811", - "address": "284 Lincoln Road, Bakersville, Arizona, 680", - "about": "Voluptate eu minim ut ad dolore consequat reprehenderit amet. Commodo cupidatat cupidatat fugiat consequat qui velit sunt Lorem do labore mollit labore. Ea aute et cupidatat ad ea mollit. Pariatur enim non et non eiusmod ullamco. Aute duis voluptate id minim consequat officia. Proident do duis et consectetur nulla sunt mollit id officia deserunt mollit fugiat do. Ad ex do ea enim ex labore nisi magna proident fugiat laboris Lorem sint non.\r\n", - "registered": "2015-04-27T07:40:30 +04:00", - "latitude": -36.430905, - "longitude": -140.89651, - "tags": ["in", "proident", "sint", "ea", "ipsum", "et", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Santos Dominguez" - }, - { - "id": 1, - "name": "Washington Cooke" - }, - { - "id": 2, - "name": "Diaz Melton" - } - ], - "greeting": "Hello, Valencia Riggs! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ddbea4b08518c0c35", - "index": 564, - "guid": "05d750c2-683e-4722-861f-098b2c674518", - "isActive": false, - "balance": "$3,426.36", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Charlene Steele", - "gender": "female", - "company": "ZAPHIRE", - "email": "charlenesteele@zaphire.com", - "phone": "+1 (946) 578-2238", - "address": "217 Thomas Street, Biehle, Ohio, 1497", - "about": "Quis ex dolor sunt consequat nisi ipsum est ullamco eiusmod nulla in aliqua deserunt. Sit quis id officia dolore enim anim consequat sint dolore pariatur sunt consequat. Ex labore eiusmod proident proident cillum dolor sint ipsum dolor ipsum labore aute irure non.\r\n", - "registered": "2014-07-24T07:46:41 +04:00", - "latitude": 24.044759, - "longitude": -42.382687, - "tags": ["eu", "ea", "culpa", "consectetur", "eiusmod", "elit", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Marissa Clark" - }, - { - "id": 1, - "name": "Freda Sanders" - }, - { - "id": 2, - "name": "Schneider Witt" - } - ], - "greeting": "Hello, Charlene Steele! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3d344e63cad9d867", - "index": 565, - "guid": "059d71f1-a397-46e3-8bf5-1e7003e6ac5c", - "isActive": false, - "balance": "$3,341.33", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Conner Grimes", - "gender": "male", - "company": "ACUSAGE", - "email": "connergrimes@acusage.com", - "phone": "+1 (921) 591-3539", - "address": "250 Schermerhorn Street, Succasunna, Arkansas, 8840", - "about": "Magna fugiat labore excepteur laborum cupidatat. In incididunt nostrud culpa elit ad deserunt. Cupidatat sit nostrud laboris commodo fugiat irure ex excepteur non tempor. Ullamco ipsum fugiat culpa ad anim. Aute magna adipisicing laborum laboris laboris eiusmod amet elit culpa nisi excepteur anim eiusmod.\r\n", - "registered": "2017-08-04T11:43:39 +04:00", - "latitude": -29.964105, - "longitude": -89.733556, - "tags": ["in", "cillum", "ipsum", "labore", "ipsum", "ullamco", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Levine Bass" - }, - { - "id": 1, - "name": "Irwin Jarvis" - }, - { - "id": 2, - "name": "Debora Peck" - } - ], - "greeting": "Hello, Conner Grimes! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df13661419454d978", - "index": 566, - "guid": "de74d0b5-2738-41a4-b93f-039c86e7077b", - "isActive": false, - "balance": "$2,206.81", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Patsy Barron", - "gender": "female", - "company": "OTHERWAY", - "email": "patsybarron@otherway.com", - "phone": "+1 (959) 483-3866", - "address": "633 Columbus Place, Wiscon, Nevada, 5680", - "about": "Eiusmod enim eiusmod sit ullamco veniam nisi tempor laboris qui duis minim. Id consectetur veniam nulla pariatur proident. Officia enim Lorem pariatur Lorem mollit qui consequat laboris aute fugiat irure ut.\r\n", - "registered": "2019-01-02T04:00:53 +05:00", - "latitude": -23.874342, - "longitude": -46.752159, - "tags": ["deserunt", "cupidatat", "occaecat", "quis", "ex", "non", "dolore"], - "friends": [ - { - "id": 0, - "name": "Georgina Mcclain" - }, - { - "id": 1, - "name": "Cathleen Osborne" - }, - { - "id": 2, - "name": "Ingrid Shelton" - } - ], - "greeting": "Hello, Patsy Barron! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df0c4e617dc14f3a3", - "index": 567, - "guid": "f63961fb-db08-4837-9544-551c05b43ec0", - "isActive": false, - "balance": "$1,265.31", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Vargas Oneill", - "gender": "male", - "company": "ORBALIX", - "email": "vargasoneill@orbalix.com", - "phone": "+1 (909) 596-2859", - "address": "974 Rewe Street, Holcombe, Massachusetts, 8752", - "about": "Ipsum deserunt eiusmod eu minim. Anim consequat reprehenderit dolor labore reprehenderit sint. Ut sit in veniam id sunt aute qui. Aliquip amet adipisicing sint nostrud sint dolor. Ex sint qui id exercitation proident nulla officia est exercitation cupidatat velit. Fugiat elit ipsum cillum aute officia sit labore sit esse.\r\n", - "registered": "2019-09-25T02:50:38 +04:00", - "latitude": -55.399725, - "longitude": -114.241902, - "tags": ["veniam", "aliquip", "adipisicing", "non", "adipisicing", "exercitation", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Baird Turner" - }, - { - "id": 1, - "name": "Felecia Goodman" - }, - { - "id": 2, - "name": "Trina Bailey" - } - ], - "greeting": "Hello, Vargas Oneill! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd70f16428c61e2ed", - "index": 568, - "guid": "a91fca9a-233b-4e2c-b2f6-f24d5b778faf", - "isActive": false, - "balance": "$1,652.68", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Powers Cox", - "gender": "male", - "company": "APEXTRI", - "email": "powerscox@apextri.com", - "phone": "+1 (873) 532-2876", - "address": "226 Montana Place, Kaka, Marshall Islands, 4312", - "about": "Elit occaecat adipisicing irure irure excepteur excepteur irure adipisicing velit. Occaecat labore sint officia enim incididunt cupidatat voluptate esse et laboris ullamco. Mollit culpa duis irure aliqua laboris duis ut commodo.\r\n", - "registered": "2018-08-25T06:30:53 +04:00", - "latitude": 13.19076, - "longitude": 24.700943, - "tags": ["deserunt", "veniam", "amet", "culpa", "consectetur", "nostrud", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Cleveland Gallagher" - }, - { - "id": 1, - "name": "Winifred Keith" - }, - { - "id": 2, - "name": "Evangelina Harrington" - } - ], - "greeting": "Hello, Powers Cox! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d895e8d1d5bfdf532", - "index": 569, - "guid": "6e0a8714-f68c-432d-87b8-d90c79c179ba", - "isActive": true, - "balance": "$3,888.96", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Chris Kidd", - "gender": "female", - "company": "BESTO", - "email": "chriskidd@besto.com", - "phone": "+1 (820) 474-3960", - "address": "328 Neptune Avenue, Florence, Puerto Rico, 4169", - "about": "Excepteur elit labore occaecat laborum fugiat culpa. Sit minim enim duis sunt minim anim dolore in. Exercitation non quis eu deserunt duis. Est in et excepteur et proident commodo ut in proident qui tempor irure. Labore velit nostrud eiusmod eiusmod dolore eiusmod aute in culpa. Anim veniam culpa Lorem aute cupidatat nulla cupidatat nisi.\r\n", - "registered": "2017-09-01T07:20:24 +04:00", - "latitude": -5.277853, - "longitude": -162.654565, - "tags": ["velit", "culpa", "voluptate", "aute", "sit", "ullamco", "dolore"], - "friends": [ - { - "id": 0, - "name": "Stafford Morris" - }, - { - "id": 1, - "name": "Rosalind Hull" - }, - { - "id": 2, - "name": "Garrison Ortega" - } - ], - "greeting": "Hello, Chris Kidd! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4989907b052d1751", - "index": 570, - "guid": "1fff1a37-244a-4ee8-a1ec-6b8fbfa06550", - "isActive": false, - "balance": "$3,923.68", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Anthony Shaw", - "gender": "male", - "company": "GEOFARM", - "email": "anthonyshaw@geofarm.com", - "phone": "+1 (900) 503-2269", - "address": "730 Montrose Avenue, Defiance, California, 8715", - "about": "Culpa consectetur adipisicing minim incididunt dolore elit excepteur. Esse et ea culpa esse laboris dolor ex duis dolor dolore ex. Excepteur laboris qui ad ullamco consequat consectetur culpa do pariatur consectetur elit. Aliqua nisi fugiat sit occaecat Lorem aliqua voluptate.\r\n", - "registered": "2016-11-11T07:11:57 +05:00", - "latitude": 6.480626, - "longitude": 144.688311, - "tags": ["anim", "duis", "fugiat", "laboris", "labore", "et", "velit"], - "friends": [ - { - "id": 0, - "name": "Becker Farmer" - }, - { - "id": 1, - "name": "Cara Wagner" - }, - { - "id": 2, - "name": "Hardy Macdonald" - } - ], - "greeting": "Hello, Anthony Shaw! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25deef564e4cf04cf8a", - "index": 571, - "guid": "02a7ab84-5258-4a31-9ecf-532d7407970f", - "isActive": false, - "balance": "$2,960.04", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Essie Madden", - "gender": "female", - "company": "LUNCHPOD", - "email": "essiemadden@lunchpod.com", - "phone": "+1 (813) 446-2878", - "address": "620 Osborn Street, Gloucester, Tennessee, 2447", - "about": "Ullamco in laboris nostrud velit. Commodo do cillum Lorem anim esse voluptate eu laboris anim proident et irure adipisicing. Non labore est dolore est sit nisi laboris voluptate ea mollit enim. Labore ut deserunt ea mollit irure velit nostrud deserunt voluptate pariatur nulla incididunt quis.\r\n", - "registered": "2018-12-15T09:33:43 +05:00", - "latitude": 59.90282, - "longitude": 35.535876, - "tags": ["do", "ad", "sit", "mollit", "veniam", "occaecat", "amet"], - "friends": [ - { - "id": 0, - "name": "Lula Dickson" - }, - { - "id": 1, - "name": "Brennan Tran" - }, - { - "id": 2, - "name": "Walker Patel" - } - ], - "greeting": "Hello, Essie Madden! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dedc649f441cc3bb2", - "index": 572, - "guid": "86154f61-eb27-4534-b836-c26647fcda83", - "isActive": false, - "balance": "$3,759.63", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Laurel England", - "gender": "female", - "company": "XSPORTS", - "email": "laurelengland@xsports.com", - "phone": "+1 (806) 547-3035", - "address": "786 Campus Place, Manitou, Wyoming, 441", - "about": "Veniam ipsum do consequat sunt voluptate eiusmod reprehenderit Lorem. Dolor aliqua consequat excepteur ipsum quis veniam dolore. Sit laborum qui laborum aliquip enim anim adipisicing quis. Labore anim elit pariatur incididunt sit quis quis. Eiusmod ipsum mollit duis veniam Lorem Lorem. Commodo quis anim do nulla et excepteur irure enim laborum fugiat non aliquip est consectetur.\r\n", - "registered": "2014-01-17T08:21:10 +05:00", - "latitude": 79.621951, - "longitude": -22.931917, - "tags": ["quis", "quis", "occaecat", "consectetur", "voluptate", "consequat", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Lavonne Chapman" - }, - { - "id": 1, - "name": "Cooper Gaines" - }, - { - "id": 2, - "name": "Levy Pitts" - } - ], - "greeting": "Hello, Laurel England! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1bb4181c257ef0c3", - "index": 573, - "guid": "25203ac0-443b-4438-8be8-eb871309f685", - "isActive": true, - "balance": "$2,123.63", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "brown", - "name": "Rebecca Lambert", - "gender": "female", - "company": "ZYPLE", - "email": "rebeccalambert@zyple.com", - "phone": "+1 (978) 488-2437", - "address": "919 Tampa Court, Bagtown, North Carolina, 9197", - "about": "Quis commodo tempor consequat consequat ut minim in. Sunt occaecat aliquip qui adipisicing in minim sunt velit officia occaecat aliqua amet aliquip aute. Esse irure non nisi mollit sint pariatur elit deserunt aliqua sunt ea commodo quis. Magna adipisicing occaecat consequat est proident ut sunt dolore consequat ipsum in sit laboris. Aliqua ad dolor sint et dolore tempor veniam magna aute. Esse est ut id reprehenderit occaecat et aliqua adipisicing eiusmod.\r\n", - "registered": "2017-03-12T01:48:24 +04:00", - "latitude": -71.777048, - "longitude": 135.953558, - "tags": ["in", "aliqua", "sunt", "Lorem", "duis", "ut", "et"], - "friends": [ - { - "id": 0, - "name": "Barrera Holt" - }, - { - "id": 1, - "name": "Mary Mayo" - }, - { - "id": 2, - "name": "Workman Noble" - } - ], - "greeting": "Hello, Rebecca Lambert! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db3ae296ccbcbca9d", - "index": 574, - "guid": "a3cd615d-0428-4d0b-82b6-494260fa724d", - "isActive": false, - "balance": "$1,925.98", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Mandy Hooper", - "gender": "female", - "company": "STREZZO", - "email": "mandyhooper@strezzo.com", - "phone": "+1 (890) 464-2942", - "address": "230 Montgomery Place, Fairmount, Michigan, 4261", - "about": "Cupidatat laborum dolor in irure nostrud fugiat. Mollit proident nisi reprehenderit velit est sint aute elit exercitation anim dolor pariatur nostrud. Dolor fugiat elit adipisicing id laboris aute reprehenderit exercitation. Eu labore consequat culpa cupidatat sit pariatur elit.\r\n", - "registered": "2018-09-04T04:05:13 +04:00", - "latitude": -6.596184, - "longitude": 31.553392, - "tags": ["nisi", "aliquip", "pariatur", "aliqua", "sit", "quis", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Lillie Waters" - }, - { - "id": 1, - "name": "Sexton Ramsey" - }, - { - "id": 2, - "name": "Bettie Horton" - } - ], - "greeting": "Hello, Mandy Hooper! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d55ef128803194219", - "index": 575, - "guid": "54ddf19b-4869-4be8-87cb-2cf5a4bbbc73", - "isActive": false, - "balance": "$3,368.29", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Veronica Bryant", - "gender": "female", - "company": "OLUCORE", - "email": "veronicabryant@olucore.com", - "phone": "+1 (923) 403-3624", - "address": "880 Chester Avenue, Morgandale, Oklahoma, 4863", - "about": "Dolor aliqua eu ad id laboris est. Laboris minim est tempor et sint ea voluptate minim cupidatat nulla quis occaecat labore in. Laboris nulla irure dolor adipisicing dolor dolore excepteur. Do anim sit voluptate aliqua et amet ad excepteur nulla esse. Do commodo dolor reprehenderit nulla eiusmod. Eu reprehenderit voluptate reprehenderit tempor amet magna sint. Ex cupidatat consectetur excepteur Lorem ea duis dolor ullamco anim consequat adipisicing ipsum.\r\n", - "registered": "2016-02-17T05:09:18 +05:00", - "latitude": 61.657142, - "longitude": 169.31629, - "tags": ["esse", "nulla", "ipsum", "eu", "pariatur", "ut", "dolor"], - "friends": [ - { - "id": 0, - "name": "Shelton Dotson" - }, - { - "id": 1, - "name": "Clements Griffith" - }, - { - "id": 2, - "name": "Brooks Fisher" - } - ], - "greeting": "Hello, Veronica Bryant! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d906e8b3a68fdbd32", - "index": 576, - "guid": "2ed6b98f-b947-48a5-91bd-a796990db966", - "isActive": true, - "balance": "$1,540.38", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Hilda Tucker", - "gender": "female", - "company": "SPHERIX", - "email": "hildatucker@spherix.com", - "phone": "+1 (831) 439-3091", - "address": "911 Hinckley Place, Johnsonburg, Vermont, 3410", - "about": "Laborum consequat consequat occaecat occaecat irure laborum duis anim commodo. Ex eu sunt sunt ea ullamco eu laborum minim. Exercitation proident dolore quis ad ex laborum et nostrud ut. Pariatur ad ea eiusmod quis dolore eu anim cillum deserunt adipisicing magna. Exercitation anim veniam enim commodo cupidatat commodo excepteur esse. Sint fugiat est voluptate do laboris pariatur nostrud aliquip anim nostrud ea anim.\r\n", - "registered": "2017-11-23T02:31:28 +05:00", - "latitude": 17.092883, - "longitude": 80.696756, - "tags": ["irure", "id", "laboris", "et", "proident", "in", "dolore"], - "friends": [ - { - "id": 0, - "name": "Maureen Palmer" - }, - { - "id": 1, - "name": "David Harrison" - }, - { - "id": 2, - "name": "Gretchen Clemons" - } - ], - "greeting": "Hello, Hilda Tucker! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0297e97349ddcfe0", - "index": 577, - "guid": "f47d961c-0b56-42b2-b471-2900d768a1ec", - "isActive": false, - "balance": "$1,516.95", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Shelia Mccullough", - "gender": "female", - "company": "XANIDE", - "email": "sheliamccullough@xanide.com", - "phone": "+1 (920) 556-2564", - "address": "918 Clinton Street, Volta, Utah, 1377", - "about": "Nisi sunt et ex laboris duis. Voluptate aute laborum eu minim voluptate esse dolore veniam ut officia duis dolore deserunt. Reprehenderit aute pariatur occaecat adipisicing incididunt deserunt.\r\n", - "registered": "2017-04-14T11:51:09 +04:00", - "latitude": 27.977949, - "longitude": -49.811346, - "tags": ["dolore", "consequat", "nisi", "officia", "cupidatat", "non", "aute"], - "friends": [ - { - "id": 0, - "name": "Valarie Barnett" - }, - { - "id": 1, - "name": "Barry King" - }, - { - "id": 2, - "name": "Alexandra Robinson" - } - ], - "greeting": "Hello, Shelia Mccullough! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0c5f7aaa55d80e63", - "index": 578, - "guid": "7020c223-d2d2-4b7f-be10-a9303e92321c", - "isActive": false, - "balance": "$2,681.17", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Benjamin Nguyen", - "gender": "male", - "company": "XIIX", - "email": "benjaminnguyen@xiix.com", - "phone": "+1 (950) 506-3831", - "address": "315 Granite Street, Thatcher, Kansas, 5312", - "about": "Commodo nostrud laborum commodo eiusmod non officia. Sunt magna duis mollit ex adipisicing dolor reprehenderit aliquip nostrud eiusmod irure ut dolore cillum. Excepteur aute consequat do quis. Consectetur ex consequat nisi nulla exercitation velit laborum. Laborum minim ullamco in occaecat amet aute consectetur.\r\n", - "registered": "2019-04-02T12:15:03 +04:00", - "latitude": -81.011449, - "longitude": 110.062925, - "tags": ["deserunt", "id", "nulla", "laborum", "ea", "anim", "est"], - "friends": [ - { - "id": 0, - "name": "Moody Norris" - }, - { - "id": 1, - "name": "Williams Acevedo" - }, - { - "id": 2, - "name": "Golden Hinton" - } - ], - "greeting": "Hello, Benjamin Nguyen! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de4cebc5f1fd67871", - "index": 579, - "guid": "013ee740-8b4f-4a5c-9c48-a9b609db1a1a", - "isActive": true, - "balance": "$2,437.47", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Simpson Whitfield", - "gender": "male", - "company": "NURPLEX", - "email": "simpsonwhitfield@nurplex.com", - "phone": "+1 (807) 548-2299", - "address": "619 Butler Street, Balm, Delaware, 1494", - "about": "Qui consequat est dolor cillum eiusmod labore aliqua consectetur voluptate id sint. Dolore commodo deserunt reprehenderit nostrud quis eu labore aute ex anim esse eiusmod. Esse sunt tempor laborum esse.\r\n", - "registered": "2017-01-11T01:45:17 +05:00", - "latitude": 60.786431, - "longitude": 178.002307, - "tags": ["deserunt", "cillum", "nisi", "cupidatat", "velit", "adipisicing", "cillum"], - "friends": [ - { - "id": 0, - "name": "Dean Dunlap" - }, - { - "id": 1, - "name": "Maria Graves" - }, - { - "id": 2, - "name": "Irene Boyd" - } - ], - "greeting": "Hello, Simpson Whitfield! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbb104429dadfefa3", - "index": 580, - "guid": "eba6aa97-3b37-47bb-babd-725d8699c183", - "isActive": true, - "balance": "$2,815.84", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Virgie Duran", - "gender": "female", - "company": "MUSAPHICS", - "email": "virgieduran@musaphics.com", - "phone": "+1 (923) 591-3595", - "address": "222 Atlantic Avenue, Cobbtown, Guam, 8871", - "about": "Voluptate tempor tempor proident minim elit laborum labore eiusmod nisi ut irure cupidatat. In sit cupidatat sit dolore duis adipisicing labore culpa. Minim elit reprehenderit voluptate dolor voluptate. Dolore adipisicing dolore exercitation proident tempor eiusmod amet reprehenderit aliqua officia anim fugiat Lorem.\r\n", - "registered": "2015-09-27T01:10:43 +04:00", - "latitude": 25.8735, - "longitude": 108.322499, - "tags": ["anim", "irure", "irure", "deserunt", "voluptate", "sunt", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Darcy Carr" - }, - { - "id": 1, - "name": "Snow Hebert" - }, - { - "id": 2, - "name": "Kimberly Allen" - } - ], - "greeting": "Hello, Virgie Duran! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1c91fe29cb8180ac", - "index": 581, - "guid": "9a9988e0-516a-483a-95b2-4d5098e632d0", - "isActive": true, - "balance": "$3,397.71", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Alana Conrad", - "gender": "female", - "company": "COMTRACT", - "email": "alanaconrad@comtract.com", - "phone": "+1 (984) 572-3234", - "address": "184 Varanda Place, Beyerville, Oregon, 3777", - "about": "Eu qui magna laboris sunt magna velit minim minim occaecat eiusmod. Voluptate aute mollit sint elit. Aute labore irure velit velit quis ex Lorem fugiat eu pariatur. Do anim duis eiusmod minim non mollit. Sunt sunt consequat in ea.\r\n", - "registered": "2019-05-27T10:47:29 +04:00", - "latitude": 89.729687, - "longitude": 88.356109, - "tags": ["id", "qui", "laboris", "esse", "dolor", "officia", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Megan Ray" - }, - { - "id": 1, - "name": "Peggy Charles" - }, - { - "id": 2, - "name": "Daniel Vasquez" - } - ], - "greeting": "Hello, Alana Conrad! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6a64f9408573dd57", - "index": 582, - "guid": "21ec3235-98ce-486e-96c6-9ff593ee3b8d", - "isActive": true, - "balance": "$3,827.79", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Blevins Farley", - "gender": "male", - "company": "CALCU", - "email": "blevinsfarley@calcu.com", - "phone": "+1 (973) 524-3242", - "address": "419 King Street, Greenbush, Missouri, 4348", - "about": "Aliqua laboris consectetur nulla proident pariatur velit duis Lorem anim do incididunt. Tempor consequat magna minim est sint ex nisi excepteur est irure pariatur ea nulla. Mollit occaecat aliquip quis sunt. Cillum consectetur aute est ad ad cupidatat cillum sit aliquip enim ex enim. Aliqua deserunt elit minim deserunt mollit aliqua id ipsum.\r\n", - "registered": "2019-03-26T07:02:21 +04:00", - "latitude": 12.648973, - "longitude": 155.109732, - "tags": ["velit", "consectetur", "aliqua", "labore", "eiusmod", "dolore", "ex"], - "friends": [ - { - "id": 0, - "name": "Buckley Sellers" - }, - { - "id": 1, - "name": "Marsha Herman" - }, - { - "id": 2, - "name": "Lynch Mcdowell" - } - ], - "greeting": "Hello, Blevins Farley! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d44d3f349759e6289", - "index": 583, - "guid": "618945df-8a3c-4103-8531-3266b74e69b8", - "isActive": true, - "balance": "$3,445.53", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Estes Jennings", - "gender": "male", - "company": "VERTON", - "email": "estesjennings@verton.com", - "phone": "+1 (866) 473-2410", - "address": "461 Knight Court, Hiko, Montana, 968", - "about": "Non amet consectetur est non excepteur. Magna duis amet deserunt adipisicing. Est nostrud eu non culpa id ex laborum aute id aliquip laborum consectetur elit.\r\n", - "registered": "2019-07-01T03:18:22 +04:00", - "latitude": 24.628733, - "longitude": -49.19029, - "tags": ["cillum", "adipisicing", "non", "occaecat", "esse", "irure", "mollit"], - "friends": [ - { - "id": 0, - "name": "Jodi Arnold" - }, - { - "id": 1, - "name": "Delores Downs" - }, - { - "id": 2, - "name": "Jenna Hickman" - } - ], - "greeting": "Hello, Estes Jennings! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc09f27238d6b742b", - "index": 584, - "guid": "58866e08-80a3-4302-a2a1-5f1effc828b1", - "isActive": false, - "balance": "$1,808.03", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Fitzpatrick Conner", - "gender": "male", - "company": "EGYPTO", - "email": "fitzpatrickconner@egypto.com", - "phone": "+1 (904) 587-3577", - "address": "722 Seaview Court, Baden, Alaska, 3423", - "about": "Excepteur nulla labore cillum ex exercitation nostrud ad ad. Laboris veniam exercitation velit eu minim fugiat. Qui ex sunt in esse excepteur consequat culpa tempor fugiat. Velit nostrud ipsum Lorem officia ex. Excepteur eiusmod ut velit aliqua enim eiusmod nulla dolore sit culpa quis qui ex occaecat. Consequat fugiat labore nostrud ullamco reprehenderit aliqua tempor pariatur velit. Tempor occaecat officia exercitation excepteur irure esse fugiat voluptate adipisicing nisi.\r\n", - "registered": "2019-06-30T01:13:46 +04:00", - "latitude": -72.975195, - "longitude": 95.165722, - "tags": ["cillum", "enim", "laboris", "ipsum", "fugiat", "ullamco", "tempor"], - "friends": [ - { - "id": 0, - "name": "Colon Rojas" - }, - { - "id": 1, - "name": "Myrtle Vega" - }, - { - "id": 2, - "name": "Faye Levy" - } - ], - "greeting": "Hello, Fitzpatrick Conner! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc9c940db2775ee91", - "index": 585, - "guid": "2ffff56b-0477-4575-bac7-f1fd5ebb07fc", - "isActive": true, - "balance": "$2,076.80", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Barnes Albert", - "gender": "male", - "company": "ZENOLUX", - "email": "barnesalbert@zenolux.com", - "phone": "+1 (886) 458-2836", - "address": "377 Lenox Road, Orick, Kentucky, 3566", - "about": "Exercitation fugiat ea culpa est. Aute mollit qui ad dolore enim qui minim non irure. Sunt eu reprehenderit veniam anim elit in nostrud esse est anim Lorem esse exercitation culpa. In cupidatat nulla pariatur labore sint fugiat sit consectetur ad sunt in. Reprehenderit consequat cupidatat in nulla esse aliquip nulla qui.\r\n", - "registered": "2015-10-14T04:16:16 +04:00", - "latitude": -86.096324, - "longitude": 26.831266, - "tags": ["proident", "laborum", "sit", "dolor", "magna", "anim", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Lee Bridges" - }, - { - "id": 1, - "name": "Julianne Bright" - }, - { - "id": 2, - "name": "Everett Pratt" - } - ], - "greeting": "Hello, Barnes Albert! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dfed6b14f6cb1f45b", - "index": 586, - "guid": "c2fea68e-653b-4724-83a4-6c92c82bb5ae", - "isActive": true, - "balance": "$2,873.45", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Orr Irwin", - "gender": "male", - "company": "ASSISTIA", - "email": "orrirwin@assistia.com", - "phone": "+1 (803) 524-3662", - "address": "555 Dahill Road, Sharon, Mississippi, 9726", - "about": "Cillum consectetur dolor cupidatat commodo. Qui amet ut labore reprehenderit fugiat occaecat magna est veniam irure ut sit esse labore. Nostrud Lorem ea et nulla nostrud eiusmod elit officia reprehenderit fugiat excepteur deserunt aliqua. Et sunt culpa est duis ullamco. Laboris enim incididunt anim labore labore id do ex fugiat non qui. Esse id sit consequat incididunt officia ut incididunt.\r\n", - "registered": "2017-05-07T11:33:37 +04:00", - "latitude": -36.081254, - "longitude": 179.209405, - "tags": ["laborum", "et", "tempor", "voluptate", "reprehenderit", "ipsum", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Mcguire Hays" - }, - { - "id": 1, - "name": "Dixie Larson" - }, - { - "id": 2, - "name": "Soto Hoffman" - } - ], - "greeting": "Hello, Orr Irwin! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9f4e89dc9707ec76", - "index": 587, - "guid": "dd65a013-1bad-465d-b6e0-ef54a858df05", - "isActive": false, - "balance": "$2,081.38", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Molina Barber", - "gender": "male", - "company": "PHUEL", - "email": "molinabarber@phuel.com", - "phone": "+1 (816) 554-2991", - "address": "257 Lamont Court, Dellview, North Dakota, 5599", - "about": "Incididunt eu officia eu mollit id tempor in deserunt incididunt labore duis veniam. Id consequat eu anim et esse voluptate cupidatat ea nulla anim magna. Adipisicing ipsum minim laborum fugiat quis sint aliquip veniam ad excepteur anim irure esse anim. Non minim sit quis do esse. Ad consectetur est fugiat ut ea non excepteur in proident pariatur dolor officia amet.\r\n", - "registered": "2015-08-24T08:52:16 +04:00", - "latitude": -34.711125, - "longitude": -3.44713, - "tags": ["deserunt", "in", "laborum", "reprehenderit", "cupidatat", "exercitation", "amet"], - "friends": [ - { - "id": 0, - "name": "Odom Riley" - }, - { - "id": 1, - "name": "Dorothy Stanley" - }, - { - "id": 2, - "name": "Eugenia Bush" - } - ], - "greeting": "Hello, Molina Barber! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3848ef030b68c928", - "index": 588, - "guid": "76d3d556-110b-4bd1-b764-2e159588b3ec", - "isActive": false, - "balance": "$1,579.08", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Francesca Green", - "gender": "female", - "company": "BOILICON", - "email": "francescagreen@boilicon.com", - "phone": "+1 (929) 492-2428", - "address": "619 Halleck Street, Coventry, Federated States Of Micronesia, 1982", - "about": "Ut consectetur officia esse tempor consequat reprehenderit pariatur culpa qui ut cillum amet enim exercitation. Ad irure adipisicing mollit nostrud sit labore. Ad culpa est officia culpa aute dolore elit nulla eu.\r\n", - "registered": "2018-09-21T12:21:21 +04:00", - "latitude": 23.781548, - "longitude": 161.219469, - "tags": ["sit", "ex", "aute", "eu", "exercitation", "ipsum", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Geraldine Huffman" - }, - { - "id": 1, - "name": "Britney Atkinson" - }, - { - "id": 2, - "name": "Roach Weaver" - } - ], - "greeting": "Hello, Francesca Green! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1696f6e8b51df05c", - "index": 589, - "guid": "047ce9c3-6504-48c8-9db4-cfdee36fa28a", - "isActive": false, - "balance": "$1,393.39", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Mooney Bender", - "gender": "male", - "company": "MUSIX", - "email": "mooneybender@musix.com", - "phone": "+1 (995) 420-2245", - "address": "812 Johnson Avenue, Castleton, Maryland, 4924", - "about": "Exercitation laborum veniam adipisicing veniam id reprehenderit veniam incididunt pariatur sint irure deserunt. Culpa occaecat Lorem Lorem dolor esse ex ex do cillum proident. Voluptate commodo fugiat quis consequat labore.\r\n", - "registered": "2018-08-07T01:30:51 +04:00", - "latitude": 3.26613, - "longitude": -51.077138, - "tags": ["enim", "anim", "occaecat", "sunt", "consequat", "do", "commodo"], - "friends": [ - { - "id": 0, - "name": "Todd Burris" - }, - { - "id": 1, - "name": "Trisha Bell" - }, - { - "id": 2, - "name": "Janice Craft" - } - ], - "greeting": "Hello, Mooney Bender! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d223b964a395d67be", - "index": 590, - "guid": "1f38e3e2-5109-471b-9e42-89c2558b8620", - "isActive": true, - "balance": "$1,569.07", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Mcclure Gallegos", - "gender": "male", - "company": "ACRODANCE", - "email": "mccluregallegos@acrodance.com", - "phone": "+1 (939) 460-2162", - "address": "477 Arion Place, Blue, Virgin Islands, 1057", - "about": "Consectetur non nostrud non aute labore nisi cillum nulla culpa officia proident. Minim officia duis cupidatat laboris ad. Pariatur ad in cillum ea ipsum consequat aliqua est anim eu. Ullamco consectetur ullamco cupidatat voluptate duis enim. Voluptate adipisicing aliqua adipisicing voluptate dolore eu officia exercitation.\r\n", - "registered": "2019-06-03T07:58:09 +04:00", - "latitude": 85.518764, - "longitude": -165.766731, - "tags": ["ad", "cillum", "ea", "nulla", "nisi", "ea", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Jacklyn Norman" - }, - { - "id": 1, - "name": "Carver Kennedy" - }, - { - "id": 2, - "name": "Joanne Frank" - } - ], - "greeting": "Hello, Mcclure Gallegos! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da634879fc8a1cf49", - "index": 591, - "guid": "5767d607-b87f-4349-8b4e-5f22badd4c2c", - "isActive": false, - "balance": "$2,945.59", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Goldie Lester", - "gender": "female", - "company": "VIRVA", - "email": "goldielester@virva.com", - "phone": "+1 (888) 591-3949", - "address": "414 Sedgwick Place, Innsbrook, Pennsylvania, 7328", - "about": "Sit exercitation non consectetur minim quis. Est commodo adipisicing nulla adipisicing est anim qui exercitation non anim. Eiusmod anim enim esse laborum id deserunt eiusmod sunt enim nulla. Sit occaecat ipsum velit Lorem. Lorem cupidatat et sit tempor aliquip fugiat consectetur quis amet dolor ex.\r\n", - "registered": "2020-05-18T08:50:59 +04:00", - "latitude": 39.493299, - "longitude": -96.12456, - "tags": ["dolor", "non", "sit", "laborum", "enim", "aute", "cillum"], - "friends": [ - { - "id": 0, - "name": "Williamson Baker" - }, - { - "id": 1, - "name": "Maldonado Shaffer" - }, - { - "id": 2, - "name": "Martin Byrd" - } - ], - "greeting": "Hello, Goldie Lester! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1995b2ba272b5d16", - "index": 592, - "guid": "aa7e91dd-22cf-4fcd-829e-03644a7b43e0", - "isActive": true, - "balance": "$1,798.73", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Eliza Adams", - "gender": "female", - "company": "OMNIGOG", - "email": "elizaadams@omnigog.com", - "phone": "+1 (927) 453-2975", - "address": "396 Wyona Street, Marne, Washington, 344", - "about": "Cupidatat esse reprehenderit ea esse dolor anim ad anim dolore fugiat adipisicing. Ex aute adipisicing pariatur exercitation labore amet velit ad ipsum dolore. Nostrud veniam est quis commodo ea ea aliqua fugiat. Fugiat incididunt duis laborum officia. Qui nulla ea occaecat proident esse veniam.\r\n", - "registered": "2018-01-23T11:49:27 +05:00", - "latitude": 28.745659, - "longitude": -82.757287, - "tags": ["voluptate", "commodo", "Lorem", "fugiat", "non", "minim", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Adrian Armstrong" - }, - { - "id": 1, - "name": "Tyson Kemp" - }, - { - "id": 2, - "name": "Cameron Stein" - } - ], - "greeting": "Hello, Eliza Adams! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d56c2dbb071424501", - "index": 593, - "guid": "0746ce79-0ea7-4966-b359-6e4ea48ee313", - "isActive": true, - "balance": "$1,024.14", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Rosanna Aguilar", - "gender": "female", - "company": "MINGA", - "email": "rosannaaguilar@minga.com", - "phone": "+1 (861) 569-3666", - "address": "567 Richards Street, Why, Illinois, 829", - "about": "Esse consequat eu sint proident reprehenderit. Laboris officia fugiat sit Lorem ad Lorem esse anim aliqua. Qui qui excepteur laboris ut Lorem laborum anim occaecat occaecat ipsum nisi. Mollit deserunt anim cupidatat commodo in. Occaecat laboris excepteur nulla dolore cillum dolor pariatur esse deserunt consectetur incididunt consectetur reprehenderit. Sunt duis ullamco ad nostrud mollit est occaecat pariatur. Et eu elit sit cupidatat.\r\n", - "registered": "2015-10-29T01:25:13 +04:00", - "latitude": 61.170709, - "longitude": -104.610416, - "tags": ["elit", "qui", "est", "id", "nostrud", "esse", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Haley Glass" - }, - { - "id": 1, - "name": "Patrica Allison" - }, - { - "id": 2, - "name": "Randolph West" - } - ], - "greeting": "Hello, Rosanna Aguilar! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d96560ee3fe7fabcf", - "index": 594, - "guid": "27f5ecee-ea26-472d-8fcf-4e4c5e486e22", - "isActive": true, - "balance": "$1,330.79", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Earnestine Hammond", - "gender": "female", - "company": "REPETWIRE", - "email": "earnestinehammond@repetwire.com", - "phone": "+1 (964) 525-2324", - "address": "243 Glendale Court, Curtice, New Hampshire, 6801", - "about": "Exercitation labore esse exercitation nisi eu Lorem consequat et duis sit consequat sint consectetur. Eiusmod nulla cillum ad elit occaecat ullamco pariatur pariatur pariatur do sit velit ut. Cillum ex non anim pariatur. Incididunt mollit incididunt incididunt minim enim Lorem sit voluptate nulla.\r\n", - "registered": "2018-04-12T11:28:37 +04:00", - "latitude": -32.358271, - "longitude": -90.566192, - "tags": ["minim", "labore", "exercitation", "proident", "elit", "minim", "ea"], - "friends": [ - { - "id": 0, - "name": "Effie Blackburn" - }, - { - "id": 1, - "name": "Bean Bernard" - }, - { - "id": 2, - "name": "Mamie Parks" - } - ], - "greeting": "Hello, Earnestine Hammond! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc4bf15ff1acfbd01", - "index": 595, - "guid": "6402b533-cdb1-4420-ae2c-aed5332af9f6", - "isActive": true, - "balance": "$3,535.07", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Katelyn Logan", - "gender": "female", - "company": "DELPHIDE", - "email": "katelynlogan@delphide.com", - "phone": "+1 (948) 443-3461", - "address": "249 Clarendon Road, Waterford, Colorado, 4109", - "about": "Pariatur reprehenderit est mollit elit. Aliqua tempor proident reprehenderit nostrud deserunt culpa qui magna irure. Excepteur adipisicing adipisicing officia incididunt amet. Qui fugiat ea adipisicing adipisicing laborum amet. Eiusmod pariatur dolor laboris velit deserunt mollit est voluptate id occaecat proident nisi.\r\n", - "registered": "2015-01-11T12:33:39 +05:00", - "latitude": 11.970658, - "longitude": 107.124187, - "tags": ["ipsum", "est", "ea", "sit", "et", "aliqua", "duis"], - "friends": [ - { - "id": 0, - "name": "Hensley Martin" - }, - { - "id": 1, - "name": "Knight Davidson" - }, - { - "id": 2, - "name": "Rose Bartlett" - } - ], - "greeting": "Hello, Katelyn Logan! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25daa38217b02aab67f", - "index": 596, - "guid": "672e3ad2-ea2e-4279-9749-5697e7383bd8", - "isActive": true, - "balance": "$2,515.17", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Marla Garrison", - "gender": "female", - "company": "FROLIX", - "email": "marlagarrison@frolix.com", - "phone": "+1 (969) 409-3746", - "address": "238 Ryder Avenue, Rose, Maine, 3844", - "about": "Sint occaecat exercitation veniam excepteur. Aliquip nostrud ea voluptate sint duis sit nostrud tempor dolore mollit. Aute quis dolore adipisicing aute ullamco occaecat labore. Consequat eiusmod tempor laborum id quis irure consectetur proident enim ullamco irure voluptate. Adipisicing Lorem velit adipisicing veniam laborum minim fugiat fugiat magna elit quis dolor ea fugiat. Lorem quis sit sit officia ipsum tempor aliquip laboris. Fugiat cillum ipsum non officia voluptate nisi tempor amet.\r\n", - "registered": "2017-04-24T12:17:18 +04:00", - "latitude": 66.185518, - "longitude": -154.273467, - "tags": ["sit", "nostrud", "pariatur", "aliquip", "dolor", "qui", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Daisy Newman" - }, - { - "id": 1, - "name": "Kris Brooks" - }, - { - "id": 2, - "name": "Briggs Juarez" - } - ], - "greeting": "Hello, Marla Garrison! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d027bac77eea496f8", - "index": 597, - "guid": "0d83cf5e-7972-4787-8e3f-faa500a7ad73", - "isActive": true, - "balance": "$1,045.81", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Erica Humphrey", - "gender": "female", - "company": "LOTRON", - "email": "ericahumphrey@lotron.com", - "phone": "+1 (818) 511-2454", - "address": "932 Clifton Place, Saddlebrooke, South Carolina, 4266", - "about": "Aute officia duis aute magna aliqua anim ullamco duis cupidatat. Quis cillum irure Lorem do aute reprehenderit culpa fugiat voluptate ea laboris. Mollit nostrud nulla est irure ea nisi sit. Dolor est do sint duis ex Lorem non anim.\r\n", - "registered": "2014-12-06T11:15:52 +05:00", - "latitude": -60.085257, - "longitude": -68.236631, - "tags": ["deserunt", "sint", "laborum", "sunt", "minim", "reprehenderit", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Butler Woodard" - }, - { - "id": 1, - "name": "Alvarado Cole" - }, - { - "id": 2, - "name": "Bonner Cobb" - } - ], - "greeting": "Hello, Erica Humphrey! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2647e769b47f318c", - "index": 598, - "guid": "41eb4e07-10bc-4354-96dc-bc88f6bfe68d", - "isActive": false, - "balance": "$1,596.19", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Fran Hopper", - "gender": "female", - "company": "FUELWORKS", - "email": "franhopper@fuelworks.com", - "phone": "+1 (809) 443-2504", - "address": "572 Java Street, Torboy, Connecticut, 9759", - "about": "Laborum ad nisi nostrud anim dolor ex in eu et anim aute ea. Irure duis non exercitation veniam consequat reprehenderit eiusmod do officia magna. Tempor nulla pariatur fugiat nisi. Do pariatur aliquip et voluptate non eiusmod id.\r\n", - "registered": "2018-03-06T03:45:07 +05:00", - "latitude": 30.69379, - "longitude": -6.44334, - "tags": ["est", "culpa", "in", "nulla", "tempor", "culpa", "culpa"], - "friends": [ - { - "id": 0, - "name": "Bobbi Sykes" - }, - { - "id": 1, - "name": "Farmer David" - }, - { - "id": 2, - "name": "Ramirez Gardner" - } - ], - "greeting": "Hello, Fran Hopper! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d279e472729652c52", - "index": 599, - "guid": "bbea1a6b-e38b-47be-a673-ab0435eb890c", - "isActive": false, - "balance": "$1,037.76", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Joseph Butler", - "gender": "male", - "company": "BITTOR", - "email": "josephbutler@bittor.com", - "phone": "+1 (890) 576-2020", - "address": "605 Mayfair Drive, Crisman, Virginia, 9679", - "about": "Adipisicing incididunt fugiat proident reprehenderit amet mollit eu do cillum nostrud qui. Aliqua magna sint do ex proident minim ipsum adipisicing ut dolor anim excepteur cillum. Amet id nisi do aliqua laboris nisi cupidatat esse tempor reprehenderit. Elit excepteur minim esse deserunt tempor quis incididunt irure sit ea cupidatat dolore. Et cillum sunt voluptate eiusmod tempor aute ea adipisicing nulla tempor anim incididunt minim. Reprehenderit cupidatat ipsum eiusmod cillum incididunt.\r\n", - "registered": "2017-04-05T04:36:52 +04:00", - "latitude": 17.966967, - "longitude": 72.73427, - "tags": ["mollit", "deserunt", "ipsum", "culpa", "est", "do", "commodo"], - "friends": [ - { - "id": 0, - "name": "Spears Prince" - }, - { - "id": 1, - "name": "Chen Riddle" - }, - { - "id": 2, - "name": "Morgan Romero" - } - ], - "greeting": "Hello, Joseph Butler! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df6898c63aabd0c1f", - "index": 600, - "guid": "80947097-8857-4ae1-9ead-3dd4fec41bd4", - "isActive": false, - "balance": "$2,242.17", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Gilbert Mccarthy", - "gender": "male", - "company": "ZOINAGE", - "email": "gilbertmccarthy@zoinage.com", - "phone": "+1 (970) 447-3498", - "address": "402 Macon Street, Dubois, Georgia, 3651", - "about": "Anim occaecat veniam minim incididunt pariatur ullamco veniam ea cillum. Tempor excepteur tempor est culpa tempor commodo duis eu velit. Ex exercitation duis officia nostrud reprehenderit deserunt in incididunt aute.\r\n", - "registered": "2020-08-14T11:34:50 +04:00", - "latitude": 19.459415, - "longitude": -42.043562, - "tags": ["nisi", "nisi", "quis", "in", "dolore", "excepteur", "proident"], - "friends": [ - { - "id": 0, - "name": "Maura Black" - }, - { - "id": 1, - "name": "Campbell Bird" - }, - { - "id": 2, - "name": "Dena Mccray" - } - ], - "greeting": "Hello, Gilbert Mccarthy! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25daf98c3e9805bf6ef", - "index": 601, - "guid": "293173f2-df82-4fe6-b486-8e0365a6c09e", - "isActive": false, - "balance": "$3,525.07", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Alice Chang", - "gender": "female", - "company": "ZOXY", - "email": "alicechang@zoxy.com", - "phone": "+1 (973) 510-2873", - "address": "896 Dennett Place, Bergoo, New Jersey, 3028", - "about": "Incididunt consectetur incididunt esse officia deserunt Lorem incididunt exercitation aute veniam est. Lorem veniam incididunt sunt irure non do proident ipsum. Sint sunt ullamco est eu non quis irure nostrud deserunt. Dolor mollit adipisicing amet deserunt et nostrud anim exercitation nostrud aute.\r\n", - "registered": "2016-05-16T04:08:31 +04:00", - "latitude": -49.670596, - "longitude": -13.461983, - "tags": ["aliquip", "sunt", "elit", "consectetur", "ut", "enim", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Kerry Doyle" - }, - { - "id": 1, - "name": "Kendra Joseph" - }, - { - "id": 2, - "name": "Elma Simmons" - } - ], - "greeting": "Hello, Alice Chang! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7f8cd61d78881483", - "index": 602, - "guid": "017d542c-0bf6-4994-8ece-60a4c3f6721c", - "isActive": false, - "balance": "$3,020.12", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Joan Walton", - "gender": "female", - "company": "ANIMALIA", - "email": "joanwalton@animalia.com", - "phone": "+1 (961) 523-3613", - "address": "602 Interborough Parkway, Lavalette, Minnesota, 5371", - "about": "Nostrud consectetur ut ex consequat cupidatat. Velit magna proident et in ipsum velit laborum voluptate exercitation et consequat do mollit anim. Ut nostrud est velit esse consectetur dolor cillum esse laboris mollit in mollit id. Eu in nostrud consequat elit. Ad commodo nulla mollit minim ipsum sint duis enim cupidatat non enim excepteur fugiat magna.\r\n", - "registered": "2014-08-25T07:05:10 +04:00", - "latitude": -15.48371, - "longitude": -7.060388, - "tags": ["Lorem", "laboris", "laboris", "ex", "ullamco", "id", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Mullins Stevens" - }, - { - "id": 1, - "name": "Velazquez Woods" - }, - { - "id": 2, - "name": "Millicent Knowles" - } - ], - "greeting": "Hello, Joan Walton! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7db461e9457c32cb", - "index": 603, - "guid": "58666a07-89e6-4242-b9f8-1b8595bc023e", - "isActive": true, - "balance": "$2,257.01", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Natalie Michael", - "gender": "female", - "company": "NEPTIDE", - "email": "nataliemichael@neptide.com", - "phone": "+1 (876) 497-3323", - "address": "347 Roosevelt Place, Vowinckel, Texas, 4562", - "about": "Officia velit ut ea commodo laboris veniam eiusmod tempor ut sunt veniam elit. Nulla mollit do sit sunt aute tempor sit aliquip labore commodo. Ipsum do sunt sint reprehenderit tempor officia. Deserunt irure laboris enim voluptate proident laboris reprehenderit aliquip consequat officia sint sunt est. Aliqua sint velit elit excepteur veniam enim enim qui officia sunt sunt labore aliquip ad. Ullamco ut voluptate tempor veniam in quis exercitation cupidatat. Elit ea consectetur anim dolore enim ipsum sunt veniam sunt anim do.\r\n", - "registered": "2014-03-22T04:10:30 +04:00", - "latitude": -20.369161, - "longitude": -148.044743, - "tags": ["qui", "incididunt", "deserunt", "do", "voluptate", "veniam", "anim"], - "friends": [ - { - "id": 0, - "name": "Avila Velazquez" - }, - { - "id": 1, - "name": "Amy Cotton" - }, - { - "id": 2, - "name": "Hopkins Richard" - } - ], - "greeting": "Hello, Natalie Michael! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcc4a633f2031f381", - "index": 604, - "guid": "03d5949e-1cb0-48e3-a8e3-80b0687f7e04", - "isActive": true, - "balance": "$1,945.71", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Cline Barnes", - "gender": "male", - "company": "QUOTEZART", - "email": "clinebarnes@quotezart.com", - "phone": "+1 (832) 504-2929", - "address": "175 Linwood Street, Highland, Alabama, 9315", - "about": "Sunt culpa deserunt nisi excepteur. Qui exercitation fugiat cupidatat Lorem eiusmod eu minim consectetur anim nulla. Sint fugiat irure velit voluptate incididunt sint enim Lorem eu eu qui nisi aliquip labore. Ad anim id id anim adipisicing fugiat nostrud est consequat ullamco ea. Id dolore cillum Lorem mollit ad mollit fugiat. Irure quis occaecat dolore ut Lorem labore proident anim velit magna esse ipsum commodo id. Non est adipisicing sunt pariatur consectetur velit duis anim non ea incididunt eu culpa.\r\n", - "registered": "2017-02-05T06:46:15 +05:00", - "latitude": 34.348175, - "longitude": -175.533468, - "tags": ["ex", "id", "laboris", "aliquip", "exercitation", "veniam", "culpa"], - "friends": [ - { - "id": 0, - "name": "Thomas Lang" - }, - { - "id": 1, - "name": "Crystal Harding" - }, - { - "id": 2, - "name": "Mitchell Townsend" - } - ], - "greeting": "Hello, Cline Barnes! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d16ca68ddef99f486", - "index": 605, - "guid": "cad53a49-731c-487b-be86-92e0f73b58b9", - "isActive": false, - "balance": "$3,430.88", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Holden Dunn", - "gender": "male", - "company": "EXOTERIC", - "email": "holdendunn@exoteric.com", - "phone": "+1 (898) 410-3140", - "address": "985 Ferry Place, Wanship, Rhode Island, 1540", - "about": "Ipsum amet Lorem eu reprehenderit magna est ullamco dolor do duis. Do amet culpa ipsum velit est. Id reprehenderit deserunt anim cillum officia quis veniam consequat voluptate commodo Lorem minim mollit. Incididunt ullamco tempor fugiat sunt fugiat sunt irure est eu amet ad esse velit. Esse cupidatat incididunt et adipisicing officia exercitation ullamco ut laboris.\r\n", - "registered": "2015-06-08T08:15:43 +04:00", - "latitude": -35.048492, - "longitude": 41.723537, - "tags": ["amet", "consequat", "sit", "sunt", "elit", "proident", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Bolton Rosa" - }, - { - "id": 1, - "name": "Miranda Savage" - }, - { - "id": 2, - "name": "Singleton Crane" - } - ], - "greeting": "Hello, Holden Dunn! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dde10e4426b2cc8f5", - "index": 606, - "guid": "c51c414b-e511-4978-9b81-2717cce5801f", - "isActive": false, - "balance": "$1,492.74", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Collins Phelps", - "gender": "male", - "company": "OVIUM", - "email": "collinsphelps@ovium.com", - "phone": "+1 (878) 416-3575", - "address": "704 Everit Street, Cetronia, Florida, 6623", - "about": "Incididunt culpa velit labore ex fugiat mollit irure consectetur cupidatat. Irure pariatur veniam esse voluptate fugiat eu. Occaecat dolor reprehenderit esse ex ullamco dolor id aute excepteur voluptate commodo culpa.\r\n", - "registered": "2016-06-27T05:58:32 +04:00", - "latitude": 38.124851, - "longitude": -13.029501, - "tags": ["qui", "laborum", "anim", "id", "veniam", "aliqua", "veniam"], - "friends": [ - { - "id": 0, - "name": "Schroeder Boone" - }, - { - "id": 1, - "name": "Knowles Pope" - }, - { - "id": 2, - "name": "Tyler Bishop" - } - ], - "greeting": "Hello, Collins Phelps! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dab0692dbd0c18393", - "index": 607, - "guid": "6a7a43c8-1bc7-497d-ab42-e6cd84c0300a", - "isActive": true, - "balance": "$3,574.94", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Hobbs French", - "gender": "male", - "company": "MANGELICA", - "email": "hobbsfrench@mangelica.com", - "phone": "+1 (924) 525-3469", - "address": "427 Everett Avenue, Day, Indiana, 8657", - "about": "Sunt deserunt in ea Lorem reprehenderit consectetur incididunt velit ullamco incididunt nostrud cupidatat eu. Enim labore et qui officia non consequat dolor aliqua et. Quis mollit sunt est aliquip consequat qui non aute aute nostrud dolore qui. Incididunt ea magna eiusmod ipsum. Enim pariatur voluptate esse esse est deserunt pariatur ea aute sint ex deserunt nostrud consequat. Qui qui anim dolore pariatur velit eiusmod velit voluptate amet. Eiusmod adipisicing commodo nostrud labore laboris nisi veniam fugiat.\r\n", - "registered": "2015-02-08T03:23:39 +05:00", - "latitude": 15.582621, - "longitude": 53.935837, - "tags": ["elit", "Lorem", "do", "deserunt", "tempor", "amet", "cillum"], - "friends": [ - { - "id": 0, - "name": "Espinoza Gibbs" - }, - { - "id": 1, - "name": "Allison Holmes" - }, - { - "id": 2, - "name": "Franco Sampson" - } - ], - "greeting": "Hello, Hobbs French! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2fbe572fb9a811fd", - "index": 608, - "guid": "0d51d6f1-7c34-4f51-a320-d03b61d8c1b4", - "isActive": true, - "balance": "$1,640.85", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Lina Marsh", - "gender": "female", - "company": "BUNGA", - "email": "linamarsh@bunga.com", - "phone": "+1 (971) 405-2054", - "address": "310 Sullivan Street, Saticoy, Northern Mariana Islands, 5228", - "about": "Sit culpa irure occaecat commodo ex eu amet aliqua mollit ipsum minim aute ex enim. Excepteur veniam et mollit veniam cupidatat adipisicing commodo pariatur. Eu esse sit incididunt velit deserunt culpa sint quis excepteur mollit incididunt. Eiusmod duis cillum irure ut irure esse magna. Sunt duis amet officia in irure aliquip id amet occaecat enim nulla cupidatat. Reprehenderit eiusmod nulla nulla laborum voluptate. Sunt quis ipsum enim eiusmod cupidatat dolore tempor.\r\n", - "registered": "2014-05-28T02:55:38 +04:00", - "latitude": -19.456283, - "longitude": -114.310459, - "tags": ["minim", "incididunt", "ut", "proident", "in", "est", "do"], - "friends": [ - { - "id": 0, - "name": "Vazquez Estrada" - }, - { - "id": 1, - "name": "Maryanne Greene" - }, - { - "id": 2, - "name": "Karina Leonard" - } - ], - "greeting": "Hello, Lina Marsh! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d463ba11262aa963b", - "index": 609, - "guid": "f3b39835-67b3-422e-b2e1-0699890aea3d", - "isActive": true, - "balance": "$2,543.53", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Mayo Cortez", - "gender": "male", - "company": "ZORROMOP", - "email": "mayocortez@zorromop.com", - "phone": "+1 (881) 404-2565", - "address": "312 Coleridge Street, Silkworth, Idaho, 4197", - "about": "Dolore esse est exercitation aute nulla nostrud id velit amet excepteur deserunt consequat. Ad culpa sunt eiusmod qui ad Lorem enim nulla aliquip ut tempor sint do ullamco. Lorem adipisicing esse magna esse anim incididunt incididunt est qui excepteur. Amet commodo minim duis aute non laborum aute commodo cillum tempor. Incididunt qui ea ex magna dolore consequat et laboris exercitation amet sunt. Dolore commodo in ullamco ad eu cupidatat anim tempor fugiat.\r\n", - "registered": "2015-07-16T05:11:27 +04:00", - "latitude": -64.087021, - "longitude": -107.188576, - "tags": ["ad", "incididunt", "incididunt", "ea", "duis", "anim", "magna"], - "friends": [ - { - "id": 0, - "name": "Caroline Marquez" - }, - { - "id": 1, - "name": "Robbins Hall" - }, - { - "id": 2, - "name": "Clay Cantrell" - } - ], - "greeting": "Hello, Mayo Cortez! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddb6a6607f7cef0d1", - "index": 610, - "guid": "0273638d-3f57-421c-8a24-e5b11f2bbdb6", - "isActive": false, - "balance": "$2,994.73", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Iva Heath", - "gender": "female", - "company": "LIQUICOM", - "email": "ivaheath@liquicom.com", - "phone": "+1 (901) 493-2241", - "address": "732 Cedar Street, Hiseville, District Of Columbia, 3902", - "about": "Nostrud anim ipsum cillum ullamco aliquip consectetur incididunt excepteur occaecat et Lorem occaecat. Ad aliqua duis aliqua ad ut cupidatat qui esse dolore officia. Laborum dolor sit duis et aliquip aliqua ullamco laborum veniam excepteur eu esse id eiusmod.\r\n", - "registered": "2014-10-25T11:43:58 +04:00", - "latitude": -62.622556, - "longitude": 36.856798, - "tags": ["ut", "cillum", "dolore", "id", "enim", "commodo", "laboris"], - "friends": [ - { - "id": 0, - "name": "Higgins Barker" - }, - { - "id": 1, - "name": "Cindy Trujillo" - }, - { - "id": 2, - "name": "Brock Franco" - } - ], - "greeting": "Hello, Iva Heath! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1327fcb1dcda1406", - "index": 611, - "guid": "b16f0096-f8bf-4fa2-b739-c4eabe6696dc", - "isActive": false, - "balance": "$1,115.35", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Tanisha Wiggins", - "gender": "female", - "company": "UNCORP", - "email": "tanishawiggins@uncorp.com", - "phone": "+1 (839) 479-2729", - "address": "572 Dobbin Street, Edinburg, New Mexico, 9917", - "about": "Dolore dolore est enim ea excepteur enim tempor aliqua. Elit fugiat nostrud ex voluptate occaecat culpa ipsum laborum. Consequat aute laborum laboris dolore cillum commodo adipisicing consequat dolore culpa. Duis deserunt voluptate dolor incididunt esse qui veniam fugiat duis do consequat id. Aliquip duis excepteur exercitation anim cillum proident enim irure voluptate non.\r\n", - "registered": "2016-04-07T09:37:29 +04:00", - "latitude": 6.106283, - "longitude": -91.357891, - "tags": ["enim", "labore", "minim", "aute", "aliquip", "occaecat", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Gladys Harmon" - }, - { - "id": 1, - "name": "John Koch" - }, - { - "id": 2, - "name": "Tia Blankenship" - } - ], - "greeting": "Hello, Tanisha Wiggins! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df16bbbb22e37e74c", - "index": 612, - "guid": "dad145a0-5b9f-478d-bc1f-7d423b437c84", - "isActive": false, - "balance": "$3,663.04", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Bernadine Wade", - "gender": "female", - "company": "OPTICALL", - "email": "bernadinewade@opticall.com", - "phone": "+1 (942) 546-3637", - "address": "340 Highland Avenue, Freelandville, South Dakota, 8528", - "about": "Nulla labore excepteur elit cillum sunt tempor irure. Aliqua qui qui laboris laboris laborum et anim occaecat ut sit esse. Pariatur tempor adipisicing commodo exercitation nulla non amet.\r\n", - "registered": "2020-06-01T06:11:02 +04:00", - "latitude": -2.022759, - "longitude": 150.003994, - "tags": ["mollit", "non", "enim", "quis", "anim", "aliqua", "laboris"], - "friends": [ - { - "id": 0, - "name": "Gay Ryan" - }, - { - "id": 1, - "name": "Christian Wise" - }, - { - "id": 2, - "name": "Jones Padilla" - } - ], - "greeting": "Hello, Bernadine Wade! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de4650ba21ffdba90", - "index": 613, - "guid": "a0aa70cd-32de-4b25-872b-7191bfd7536c", - "isActive": true, - "balance": "$1,507.91", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Ruiz Horne", - "gender": "male", - "company": "PLEXIA", - "email": "ruizhorne@plexia.com", - "phone": "+1 (934) 432-2006", - "address": "126 Greenwood Avenue, Stewartville, American Samoa, 2857", - "about": "Ea nostrud velit consectetur voluptate incididunt quis mollit occaecat commodo ea. Qui consequat elit ipsum est eiusmod dolore ut ullamco laboris sint. Nostrud elit cillum exercitation et tempor dolor nulla dolor mollit reprehenderit aliquip incididunt ad.\r\n", - "registered": "2017-08-14T10:33:26 +04:00", - "latitude": 50.0146, - "longitude": -58.503438, - "tags": ["occaecat", "sint", "eu", "proident", "deserunt", "excepteur", "nisi"], - "friends": [ - { - "id": 0, - "name": "Cohen Leach" - }, - { - "id": 1, - "name": "Maddox Phillips" - }, - { - "id": 2, - "name": "Cotton Schroeder" - } - ], - "greeting": "Hello, Ruiz Horne! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3a5ba068b2e94e30", - "index": 614, - "guid": "cae35fdf-8d18-4216-a90b-88975b368a5d", - "isActive": true, - "balance": "$2,527.86", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Carpenter Curtis", - "gender": "male", - "company": "CALCULA", - "email": "carpentercurtis@calcula.com", - "phone": "+1 (969) 559-2162", - "address": "113 Mill Avenue, Riverton, Iowa, 1554", - "about": "Consectetur commodo incididunt qui non proident deserunt proident ullamco nulla ad adipisicing. Laboris do laborum ullamco magna. Ullamco commodo consectetur aliqua minim. Dolore ea incididunt veniam elit laborum ut excepteur est enim ullamco consectetur sint elit deserunt.\r\n", - "registered": "2014-06-11T11:21:52 +04:00", - "latitude": 87.392332, - "longitude": -34.718705, - "tags": ["ut", "ex", "dolore", "esse", "culpa", "quis", "et"], - "friends": [ - { - "id": 0, - "name": "Cortez Ewing" - }, - { - "id": 1, - "name": "Craig Thornton" - }, - { - "id": 2, - "name": "Sherrie Rowe" - } - ], - "greeting": "Hello, Carpenter Curtis! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d6377e6d411764462", - "index": 615, - "guid": "9f3c2c35-4a25-46cc-a861-e0daf97d251d", - "isActive": true, - "balance": "$2,312.90", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Allen Gutierrez", - "gender": "male", - "company": "ECLIPSENT", - "email": "allengutierrez@eclipsent.com", - "phone": "+1 (926) 411-2351", - "address": "700 Jewel Street, Cresaptown, Palau, 6121", - "about": "Esse nostrud nisi officia veniam. Ad nisi id tempor mollit ut enim. Ex ullamco nulla occaecat aute ea sunt ex officia esse veniam laboris sit. Culpa voluptate commodo occaecat qui Lorem adipisicing. Sint enim minim ex eu magna velit et sint sit adipisicing ullamco nostrud qui. Duis est velit laboris voluptate occaecat fugiat minim exercitation. Sint sint magna non enim duis eiusmod sunt velit enim laboris irure Lorem mollit.\r\n", - "registered": "2015-11-22T03:40:35 +05:00", - "latitude": 46.932138, - "longitude": 129.962483, - "tags": ["cillum", "cillum", "dolore", "velit", "est", "irure", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Kathy Burns" - }, - { - "id": 1, - "name": "Aurelia Valdez" - }, - { - "id": 2, - "name": "Kara Pruitt" - } - ], - "greeting": "Hello, Allen Gutierrez! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7066c21740f70c29", - "index": 616, - "guid": "929261dd-fbd1-47da-a2ff-7e7e708eeaa2", - "isActive": false, - "balance": "$1,904.50", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Carr Welch", - "gender": "male", - "company": "MUSANPOLY", - "email": "carrwelch@musanpoly.com", - "phone": "+1 (845) 409-3464", - "address": "123 Prospect Street, Wright, West Virginia, 8825", - "about": "Proident sunt incididunt nulla nulla. Sunt ipsum magna do laborum nisi aute magna nulla elit. In aute tempor minim consequat reprehenderit ex magna esse ullamco elit nostrud ut. Eiusmod sunt ex eiusmod excepteur velit adipisicing dolor. Dolore labore fugiat in fugiat sit sunt pariatur aliqua deserunt veniam laborum. Excepteur do magna occaecat ullamco voluptate.\r\n", - "registered": "2015-06-28T03:35:55 +04:00", - "latitude": -11.596206, - "longitude": 83.89267, - "tags": ["dolore", "amet", "labore", "in", "elit", "ut", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Delgado Love" - }, - { - "id": 1, - "name": "Park Christian" - }, - { - "id": 2, - "name": "Brooke Orr" - } - ], - "greeting": "Hello, Carr Welch! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1c1607b4a537e9ea", - "index": 617, - "guid": "861cb787-f95f-421e-b270-726e31f4a561", - "isActive": false, - "balance": "$2,875.82", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Reeves Hodges", - "gender": "male", - "company": "BRAINCLIP", - "email": "reeveshodges@brainclip.com", - "phone": "+1 (936) 439-3343", - "address": "783 Fleet Place, Buxton, New York, 3567", - "about": "Dolore anim elit deserunt quis officia non culpa esse. Culpa adipisicing qui labore nisi. Adipisicing pariatur nostrud nulla consectetur.\r\n", - "registered": "2015-06-21T10:15:40 +04:00", - "latitude": -30.631702, - "longitude": -170.301631, - "tags": ["consequat", "et", "esse", "incididunt", "incididunt", "aliquip", "ad"], - "friends": [ - { - "id": 0, - "name": "Anastasia Dalton" - }, - { - "id": 1, - "name": "Kelli Sloan" - }, - { - "id": 2, - "name": "Drake Dillard" - } - ], - "greeting": "Hello, Reeves Hodges! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dcbdaf5f2e282566f", - "index": 618, - "guid": "71ebc70a-9d6a-4044-9c22-796e2791e50a", - "isActive": true, - "balance": "$1,769.80", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Haley Coleman", - "gender": "male", - "company": "POLARIUM", - "email": "haleycoleman@polarium.com", - "phone": "+1 (962) 446-3478", - "address": "971 Batchelder Street, Davenport, Hawaii, 2043", - "about": "Adipisicing mollit magna laborum fugiat ex amet qui. Veniam est aliquip excepteur deserunt eu reprehenderit pariatur ipsum pariatur cillum nostrud. Laborum quis ad pariatur nisi velit.\r\n", - "registered": "2014-02-02T07:45:03 +05:00", - "latitude": -11.715255, - "longitude": -42.792691, - "tags": ["cupidatat", "duis", "laboris", "nisi", "culpa", "velit", "et"], - "friends": [ - { - "id": 0, - "name": "Stephenson Gillespie" - }, - { - "id": 1, - "name": "Johnnie Miles" - }, - { - "id": 2, - "name": "Bernadette Fletcher" - } - ], - "greeting": "Hello, Haley Coleman! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da8f9611fce3c356f", - "index": 619, - "guid": "4dc8e975-0820-4623-9f45-7ecc0fd30032", - "isActive": false, - "balance": "$3,983.42", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Bettye Jacobson", - "gender": "female", - "company": "SCENTRIC", - "email": "bettyejacobson@scentric.com", - "phone": "+1 (883) 597-3836", - "address": "326 Duffield Street, Centerville, Nebraska, 3510", - "about": "Laborum consequat commodo deserunt reprehenderit elit aute nostrud excepteur consequat ut. Qui consectetur occaecat ad voluptate ex consectetur consectetur et voluptate culpa ullamco aliqua laborum do. Eu incididunt culpa officia anim excepteur irure deserunt. Reprehenderit deserunt duis mollit laboris Lorem amet labore velit et ad.\r\n", - "registered": "2020-04-25T01:48:42 +04:00", - "latitude": 7.912462, - "longitude": 65.846679, - "tags": ["officia", "qui", "eiusmod", "adipisicing", "sint", "mollit", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Christensen Mejia" - }, - { - "id": 1, - "name": "Kelly Terry" - }, - { - "id": 2, - "name": "Kayla Fry" - } - ], - "greeting": "Hello, Bettye Jacobson! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0aa71343a9fcda12", - "index": 620, - "guid": "6b4062df-b12f-472d-aebe-7ff12389472d", - "isActive": true, - "balance": "$2,643.40", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Shawna Valencia", - "gender": "female", - "company": "SUPREMIA", - "email": "shawnavalencia@supremia.com", - "phone": "+1 (974) 427-2905", - "address": "570 Hastings Street, Goochland, Wisconsin, 5648", - "about": "Occaecat commodo sunt minim nostrud laborum nulla ex incididunt. Reprehenderit laborum pariatur esse aute proident labore. Nostrud in nulla culpa nulla fugiat ipsum labore elit aliqua elit.\r\n", - "registered": "2019-08-10T01:53:44 +04:00", - "latitude": 59.640663, - "longitude": -22.649371, - "tags": ["aute", "labore", "laboris", "deserunt", "mollit", "amet", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Tillman Huber" - }, - { - "id": 1, - "name": "Travis Nash" - }, - { - "id": 2, - "name": "Stacie Weeks" - } - ], - "greeting": "Hello, Shawna Valencia! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d40ef8b43604635d3", - "index": 621, - "guid": "07f6fe68-d497-4bfb-ad5d-78726aca4367", - "isActive": false, - "balance": "$2,125.53", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Marsh Mendoza", - "gender": "male", - "company": "ACUMENTOR", - "email": "marshmendoza@acumentor.com", - "phone": "+1 (902) 427-3615", - "address": "930 Bergen Avenue, Rehrersburg, Arizona, 1445", - "about": "Dolore irure ipsum do eu do sit nulla ex ex. Aliquip fugiat tempor cupidatat commodo magna eu. Cillum deserunt ullamco laboris in. Lorem ullamco id incididunt eu deserunt tempor ea. Eiusmod pariatur duis Lorem ea mollit quis cillum ut minim ex irure est duis aute. Eiusmod in ullamco ex voluptate velit sunt ut sint ea laboris reprehenderit. In non veniam pariatur adipisicing do laboris voluptate sunt consectetur ex consectetur reprehenderit.\r\n", - "registered": "2019-05-21T10:19:13 +04:00", - "latitude": -0.150624, - "longitude": -31.030075, - "tags": ["incididunt", "ullamco", "reprehenderit", "adipisicing", "veniam", "mollit", "labore"], - "friends": [ - { - "id": 0, - "name": "Marisol Rice" - }, - { - "id": 1, - "name": "Isabella Bradshaw" - }, - { - "id": 2, - "name": "Guy Mcdaniel" - } - ], - "greeting": "Hello, Marsh Mendoza! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d52f931507c22a512", - "index": 622, - "guid": "22f4708b-6347-42f8-9cd5-0f6e66db0a6b", - "isActive": false, - "balance": "$3,182.44", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Ivy Atkins", - "gender": "female", - "company": "PHARMEX", - "email": "ivyatkins@pharmex.com", - "phone": "+1 (877) 418-3280", - "address": "376 Evans Street, Chesapeake, Ohio, 231", - "about": "Veniam reprehenderit commodo cillum dolore et. Fugiat non qui in labore cillum incididunt culpa aliquip esse labore non. Laboris sint eiusmod et velit occaecat reprehenderit elit excepteur est elit. Deserunt sit aute nisi aute exercitation pariatur exercitation voluptate occaecat. Occaecat nostrud et aliqua enim reprehenderit ad incididunt officia nisi adipisicing ea proident.\r\n", - "registered": "2020-06-28T11:22:04 +04:00", - "latitude": -60.007731, - "longitude": 16.841455, - "tags": ["officia", "consequat", "voluptate", "aliqua", "velit", "adipisicing", "dolor"], - "friends": [ - { - "id": 0, - "name": "Young Ortiz" - }, - { - "id": 1, - "name": "Ophelia Bradley" - }, - { - "id": 2, - "name": "Matthews Alvarado" - } - ], - "greeting": "Hello, Ivy Atkins! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dafa99be331db28ea", - "index": 623, - "guid": "d04ece98-5688-49a4-9be7-366df0cf1eff", - "isActive": false, - "balance": "$1,446.23", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Earline Hale", - "gender": "female", - "company": "ASSURITY", - "email": "earlinehale@assurity.com", - "phone": "+1 (875) 564-2576", - "address": "326 Conselyea Street, Eureka, Arkansas, 1550", - "about": "Ex Lorem anim ullamco est reprehenderit pariatur fugiat duis ex sit sint cupidatat. Fugiat esse commodo magna tempor irure. Et cillum enim irure adipisicing qui cupidatat cupidatat laborum irure enim ullamco ex anim. Deserunt in qui proident amet ad amet irure non dolore in reprehenderit duis aute. Ut deserunt anim quis deserunt. Anim non voluptate do ullamco.\r\n", - "registered": "2019-07-16T06:35:53 +04:00", - "latitude": 46.267225, - "longitude": 45.606938, - "tags": ["dolore", "dolore", "aute", "occaecat", "duis", "excepteur", "labore"], - "friends": [ - { - "id": 0, - "name": "Fuller Cohen" - }, - { - "id": 1, - "name": "Stewart Cash" - }, - { - "id": 2, - "name": "Boone Wilkins" - } - ], - "greeting": "Hello, Earline Hale! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d849abdb2f53ee4be", - "index": 624, - "guid": "47b196c8-1bb5-4baf-a954-8736ef9b4779", - "isActive": true, - "balance": "$3,206.14", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Tara Lindsay", - "gender": "female", - "company": "TECHADE", - "email": "taralindsay@techade.com", - "phone": "+1 (941) 440-2088", - "address": "812 Crown Street, Detroit, Nevada, 7284", - "about": "Aliqua ullamco nulla velit magna excepteur duis minim. Sint ex laboris veniam culpa reprehenderit aute deserunt quis. Cillum adipisicing sint elit elit aute elit.\r\n", - "registered": "2019-09-07T03:26:45 +04:00", - "latitude": 13.206084, - "longitude": -8.730218, - "tags": ["ex", "ut", "sunt", "id", "adipisicing", "ipsum", "dolor"], - "friends": [ - { - "id": 0, - "name": "Weiss Hendricks" - }, - { - "id": 1, - "name": "Deirdre Davis" - }, - { - "id": 2, - "name": "Florine Mcintyre" - } - ], - "greeting": "Hello, Tara Lindsay! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6f85c9b940692fdc", - "index": 625, - "guid": "a5ab19b5-1402-40a6-937b-fe9b94472138", - "isActive": true, - "balance": "$1,191.17", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Kathrine Long", - "gender": "female", - "company": "DOGSPA", - "email": "kathrinelong@dogspa.com", - "phone": "+1 (835) 452-2097", - "address": "922 Irving Street, Keller, Massachusetts, 154", - "about": "Exercitation est voluptate aliquip duis veniam cupidatat officia duis ad et. Adipisicing enim ullamco tempor consequat. Quis ex est proident ut duis in. Proident elit dolore mollit ea excepteur aliquip eiusmod. Magna nulla elit laborum voluptate velit cupidatat ut. Veniam nisi aliquip Lorem duis.\r\n", - "registered": "2016-10-24T10:16:34 +04:00", - "latitude": 44.221936, - "longitude": -85.065569, - "tags": ["excepteur", "commodo", "sint", "fugiat", "laborum", "in", "dolor"], - "friends": [ - { - "id": 0, - "name": "Horn Joyce" - }, - { - "id": 1, - "name": "Briana Pacheco" - }, - { - "id": 2, - "name": "Genevieve Frazier" - } - ], - "greeting": "Hello, Kathrine Long! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da69899c885085382", - "index": 626, - "guid": "8202f184-5625-4d83-ae6a-1cddd3ab418a", - "isActive": true, - "balance": "$3,746.07", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Rosalinda Payne", - "gender": "female", - "company": "MAZUDA", - "email": "rosalindapayne@mazuda.com", - "phone": "+1 (940) 467-3516", - "address": "764 Hoyt Street, Jugtown, Marshall Islands, 2964", - "about": "Anim magna irure ex do et et aute elit aute Lorem ad tempor. Deserunt non veniam enim cillum duis enim amet ad. Duis irure id laboris ipsum qui anim. Incididunt anim sint aliquip cupidatat officia excepteur ex ipsum elit esse. Id exercitation id adipisicing qui mollit laborum occaecat elit exercitation pariatur nostrud magna ex labore. Dolore dolore sit ipsum nostrud nulla excepteur aliqua occaecat exercitation incididunt. Aute reprehenderit officia laborum reprehenderit aliquip mollit.\r\n", - "registered": "2019-09-10T11:24:53 +04:00", - "latitude": -7.575224, - "longitude": 43.223485, - "tags": ["non", "excepteur", "officia", "reprehenderit", "magna", "incididunt", "commodo"], - "friends": [ - { - "id": 0, - "name": "Rachelle Everett" - }, - { - "id": 1, - "name": "Ladonna Klein" - }, - { - "id": 2, - "name": "Loretta Byers" - } - ], - "greeting": "Hello, Rosalinda Payne! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d645778475988eb5d", - "index": 627, - "guid": "dbdb8686-5b83-4259-9647-8f434c697a78", - "isActive": false, - "balance": "$1,249.95", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Marquita Poole", - "gender": "female", - "company": "BUZZMAKER", - "email": "marquitapoole@buzzmaker.com", - "phone": "+1 (880) 537-2967", - "address": "357 Ludlam Place, Villarreal, Puerto Rico, 4020", - "about": "Esse deserunt nisi pariatur labore occaecat deserunt officia. Proident sunt anim commodo ut. Fugiat esse sunt excepteur et commodo officia reprehenderit. Est commodo laboris culpa reprehenderit laboris est qui exercitation eu ad eu aliqua deserunt. Magna cupidatat ex ea ex proident nostrud est mollit quis ex aute do. Non non sint exercitation nostrud elit ea. Dolor anim non amet consectetur est magna eiusmod non excepteur culpa.\r\n", - "registered": "2014-05-27T09:25:10 +04:00", - "latitude": -16.496975, - "longitude": -10.648794, - "tags": ["aute", "consequat", "sint", "fugiat", "ea", "elit", "veniam"], - "friends": [ - { - "id": 0, - "name": "Pratt Medina" - }, - { - "id": 1, - "name": "Sandy Cross" - }, - { - "id": 2, - "name": "Ashley Foster" - } - ], - "greeting": "Hello, Marquita Poole! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1d8cbf092fc10d6f", - "index": 628, - "guid": "3ef12c36-3bec-42b8-87e9-43332d3113a2", - "isActive": true, - "balance": "$1,137.47", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "brown", - "name": "Jewell Ford", - "gender": "female", - "company": "SAVVY", - "email": "jewellford@savvy.com", - "phone": "+1 (890) 447-2992", - "address": "396 Whitney Avenue, Taft, California, 7374", - "about": "Pariatur consectetur exercitation cillum Lorem veniam tempor pariatur. Id elit veniam ex incididunt Lorem velit ipsum incididunt aute ut fugiat ullamco anim incididunt. Anim aliqua irure cupidatat cillum voluptate magna incididunt nostrud voluptate quis ea sint. Non et et eiusmod ullamco est laborum duis fugiat ipsum et proident commodo do do.\r\n", - "registered": "2018-04-24T04:29:29 +04:00", - "latitude": -47.304756, - "longitude": -120.861897, - "tags": ["non", "proident", "aliqua", "esse", "mollit", "adipisicing", "cillum"], - "friends": [ - { - "id": 0, - "name": "Marva Giles" - }, - { - "id": 1, - "name": "Glenn Clay" - }, - { - "id": 2, - "name": "Petersen Mayer" - } - ], - "greeting": "Hello, Jewell Ford! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8735716b6cb15d37", - "index": 629, - "guid": "8d3aa78f-da8d-45e4-a0e3-2929fb390b95", - "isActive": true, - "balance": "$1,016.56", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Erika Dodson", - "gender": "female", - "company": "MAXEMIA", - "email": "erikadodson@maxemia.com", - "phone": "+1 (971) 437-2303", - "address": "904 Melrose Street, Kiskimere, Tennessee, 7408", - "about": "Esse tempor est aliqua proident reprehenderit elit. Pariatur officia veniam magna voluptate labore minim labore fugiat. Nisi occaecat mollit consequat commodo consequat pariatur incididunt. Laboris amet exercitation aute nostrud. Proident amet cupidatat veniam aliqua ullamco cillum esse in. Cupidatat esse veniam in in commodo voluptate est nostrud elit commodo fugiat. Irure reprehenderit magna elit culpa reprehenderit aute ex sunt deserunt eiusmod id.\r\n", - "registered": "2020-03-15T11:05:48 +04:00", - "latitude": 62.587723, - "longitude": -133.422988, - "tags": ["amet", "commodo", "incididunt", "sit", "irure", "adipisicing", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Dina Garrett" - }, - { - "id": 1, - "name": "Dyer Middleton" - }, - { - "id": 2, - "name": "Jody Strickland" - } - ], - "greeting": "Hello, Erika Dodson! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da81a46bcca6373e7", - "index": 630, - "guid": "6321142a-b026-43ff-9227-f73c82086d8c", - "isActive": true, - "balance": "$3,954.91", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Freida Peterson", - "gender": "female", - "company": "BOVIS", - "email": "freidapeterson@bovis.com", - "phone": "+1 (960) 405-2440", - "address": "189 Moore Place, Morriston, Wyoming, 4069", - "about": "Dolor cillum magna id velit nulla amet aliquip tempor commodo veniam est ad fugiat. Labore nisi laboris non anim. Deserunt esse labore ea sit minim qui dolor sunt mollit fugiat.\r\n", - "registered": "2016-04-07T06:27:04 +04:00", - "latitude": -83.913808, - "longitude": 91.930831, - "tags": ["nulla", "proident", "aute", "non", "pariatur", "pariatur", "veniam"], - "friends": [ - { - "id": 0, - "name": "Kristine Hogan" - }, - { - "id": 1, - "name": "Pacheco Gross" - }, - { - "id": 2, - "name": "Mcgowan Lawson" - } - ], - "greeting": "Hello, Freida Peterson! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0f0e97806ef9467e", - "index": 631, - "guid": "677a11fe-d303-47d1-9651-4816860e2718", - "isActive": false, - "balance": "$1,413.58", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Atkinson Campbell", - "gender": "male", - "company": "EXOSPACE", - "email": "atkinsoncampbell@exospace.com", - "phone": "+1 (958) 407-3194", - "address": "287 Cypress Avenue, Worcester, North Carolina, 5602", - "about": "Est ea dolore eiusmod dolore duis cillum laboris voluptate eiusmod. Ea ea culpa eu amet Lorem pariatur laborum laboris. Id ipsum adipisicing magna aute tempor voluptate consectetur. Pariatur do velit culpa pariatur do aute cupidatat dolore ea consequat eiusmod officia ut deserunt. Consectetur qui deserunt ex id ullamco cupidatat esse esse laborum minim irure eu consectetur. Nostrud mollit culpa ipsum velit reprehenderit qui ea ea. Minim ea cillum incididunt dolore deserunt anim non proident amet ut.\r\n", - "registered": "2014-07-14T06:06:58 +04:00", - "latitude": -53.960214, - "longitude": 26.458713, - "tags": ["esse", "aliqua", "aliqua", "dolore", "tempor", "deserunt", "qui"], - "friends": [ - { - "id": 0, - "name": "Loraine Langley" - }, - { - "id": 1, - "name": "Rollins Reed" - }, - { - "id": 2, - "name": "Kelley Rush" - } - ], - "greeting": "Hello, Atkinson Campbell! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3fb9bf6ac03b443e", - "index": 632, - "guid": "f1b5f42d-4cc3-4f40-a68e-1157ec89d7fe", - "isActive": true, - "balance": "$1,516.56", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Blake Buck", - "gender": "male", - "company": "ICOLOGY", - "email": "blakebuck@icology.com", - "phone": "+1 (900) 493-3720", - "address": "288 Conway Street, Whitmer, Michigan, 714", - "about": "Laboris ex laboris eiusmod in aliqua. Occaecat commodo eu sunt nulla tempor. Fugiat magna veniam eiusmod cupidatat. Laboris elit consequat nulla cillum eiusmod anim aliquip sit ut do dolor. Minim nisi voluptate enim ea sit laboris labore elit laborum dolore id eiusmod.\r\n", - "registered": "2016-07-20T03:47:59 +04:00", - "latitude": -19.613851, - "longitude": 155.455639, - "tags": ["laboris", "irure", "deserunt", "eiusmod", "voluptate", "mollit", "dolor"], - "friends": [ - { - "id": 0, - "name": "Lorrie Pate" - }, - { - "id": 1, - "name": "Carmen Maxwell" - }, - { - "id": 2, - "name": "Eaton Schneider" - } - ], - "greeting": "Hello, Blake Buck! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d30d02771c466802a", - "index": 633, - "guid": "2b32f022-cc55-48d7-89af-4789c932cba4", - "isActive": true, - "balance": "$3,673.72", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Munoz Levine", - "gender": "male", - "company": "INTRAWEAR", - "email": "munozlevine@intrawear.com", - "phone": "+1 (970) 451-3722", - "address": "795 Banker Street, Hackneyville, Oklahoma, 5789", - "about": "Quis excepteur culpa adipisicing elit do nisi consequat consequat magna. Veniam cupidatat occaecat incididunt fugiat aliqua id. Officia Lorem occaecat anim id eu. Consectetur veniam voluptate magna ex non fugiat. Quis culpa consequat mollit fugiat veniam ea cupidatat duis mollit ipsum laboris. Ex elit pariatur non adipisicing enim pariatur adipisicing amet incididunt aute do exercitation adipisicing. Aliqua anim velit non elit consectetur eiusmod sunt excepteur do dolor ex exercitation.\r\n", - "registered": "2016-06-17T04:41:12 +04:00", - "latitude": -53.426019, - "longitude": -37.838843, - "tags": ["eu", "incididunt", "proident", "laborum", "sit", "consequat", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Faith Britt" - }, - { - "id": 1, - "name": "Shields Holder" - }, - { - "id": 2, - "name": "Kent Cleveland" - } - ], - "greeting": "Hello, Munoz Levine! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc33315b37cabc76b", - "index": 634, - "guid": "d014750a-5918-458b-87c2-4a18d5677522", - "isActive": true, - "balance": "$1,939.50", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Holder Lopez", - "gender": "male", - "company": "MANGLO", - "email": "holderlopez@manglo.com", - "phone": "+1 (983) 495-3831", - "address": "883 Schenectady Avenue, Rosedale, Vermont, 9225", - "about": "Exercitation laboris dolor dolor non amet veniam. Ex nulla esse in id cillum deserunt deserunt quis culpa et aliqua. In adipisicing id minim anim ad in excepteur aliqua excepteur.\r\n", - "registered": "2015-12-22T05:24:12 +05:00", - "latitude": 62.555099, - "longitude": -16.192479, - "tags": ["nulla", "quis", "do", "duis", "deserunt", "cupidatat", "nulla"], - "friends": [ - { - "id": 0, - "name": "Sheila Mercado" - }, - { - "id": 1, - "name": "Alba Cabrera" - }, - { - "id": 2, - "name": "Floyd Gray" - } - ], - "greeting": "Hello, Holder Lopez! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25debf26fd7fbebe196", - "index": 635, - "guid": "a53a5e13-6ddc-4b50-ab12-7cc45df9b077", - "isActive": false, - "balance": "$3,702.46", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Church Hewitt", - "gender": "male", - "company": "STRALUM", - "email": "churchhewitt@stralum.com", - "phone": "+1 (996) 570-2196", - "address": "580 Cass Place, Frystown, Utah, 3384", - "about": "Elit ullamco commodo ullamco cillum ex aute ut exercitation nostrud nulla officia nulla. Ex velit non exercitation laboris. Excepteur dolor laboris consequat duis qui aliqua aliqua veniam sit deserunt anim occaecat.\r\n", - "registered": "2014-01-15T03:13:54 +05:00", - "latitude": -68.955762, - "longitude": 144.18517, - "tags": ["adipisicing", "in", "cillum", "culpa", "sunt", "aliquip", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Huff Thomas" - }, - { - "id": 1, - "name": "Morrison Houston" - }, - { - "id": 2, - "name": "Madden Wong" - } - ], - "greeting": "Hello, Church Hewitt! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db6a0cd8dc0517fea", - "index": 636, - "guid": "e12f3532-fd50-4910-a608-ce4cc236c93b", - "isActive": false, - "balance": "$1,317.04", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Noel Conley", - "gender": "male", - "company": "VANTAGE", - "email": "noelconley@vantage.com", - "phone": "+1 (933) 428-3079", - "address": "464 Matthews Court, Advance, Kansas, 6911", - "about": "Duis sunt ut sit incididunt amet nisi tempor nostrud excepteur aute officia. Proident duis et id et ullamco. Nisi officia sint ad ad incididunt labore cupidatat tempor est minim. Quis mollit dolore minim nisi culpa. Officia elit laborum pariatur cupidatat eu mollit veniam cillum fugiat duis est. Consequat laboris sunt laboris do commodo velit officia.\r\n", - "registered": "2019-09-08T04:41:05 +04:00", - "latitude": -20.565216, - "longitude": -133.166546, - "tags": ["nulla", "exercitation", "nisi", "sit", "id", "veniam", "veniam"], - "friends": [ - { - "id": 0, - "name": "Casandra Velez" - }, - { - "id": 1, - "name": "Greta May" - }, - { - "id": 2, - "name": "Beverley Randall" - } - ], - "greeting": "Hello, Noel Conley! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d70a6b658226a1dbd", - "index": 637, - "guid": "16911fad-7a25-407f-9193-8a2877a9f26e", - "isActive": false, - "balance": "$3,420.29", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Marci Jones", - "gender": "female", - "company": "UNQ", - "email": "marcijones@unq.com", - "phone": "+1 (966) 599-2250", - "address": "108 Lacon Court, Tivoli, Delaware, 7506", - "about": "Sunt sint amet adipisicing labore quis qui incididunt elit officia eiusmod. Enim et do sint ut nostrud irure nulla occaecat laboris ut nisi. Amet reprehenderit ad quis labore ad nisi labore proident. Irure est enim officia et veniam amet ut sunt est id. Sunt qui sint elit deserunt culpa cupidatat amet. Culpa eu labore incididunt mollit consequat enim sint adipisicing.\r\n", - "registered": "2020-04-23T10:49:52 +04:00", - "latitude": 9.951735, - "longitude": -83.986435, - "tags": ["proident", "culpa", "culpa", "officia", "anim", "ipsum", "est"], - "friends": [ - { - "id": 0, - "name": "Ruby Glover" - }, - { - "id": 1, - "name": "Hinton Mcgee" - }, - { - "id": 2, - "name": "Mollie Singleton" - } - ], - "greeting": "Hello, Marci Jones! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8b901164a00bd928", - "index": 638, - "guid": "f8a0e74b-5b54-4b9b-8ad7-a66e1b1e860f", - "isActive": false, - "balance": "$1,147.49", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Henson Hill", - "gender": "male", - "company": "ECRATIC", - "email": "hensonhill@ecratic.com", - "phone": "+1 (823) 520-2485", - "address": "157 Pershing Loop, Wells, Guam, 6045", - "about": "Duis ullamco reprehenderit consequat id. Eu consectetur exercitation ex id aliqua dolor Lorem. Aliqua labore ut nisi exercitation labore aliquip sint cupidatat reprehenderit pariatur. Adipisicing culpa et ut sit sit in laborum aliqua sunt. Excepteur elit duis dolor ullamco voluptate do cupidatat exercitation deserunt. Sunt cupidatat duis sunt anim.\r\n", - "registered": "2018-05-19T10:57:23 +04:00", - "latitude": 21.549472, - "longitude": -49.781869, - "tags": ["nulla", "eiusmod", "anim", "laboris", "incididunt", "pariatur", "in"], - "friends": [ - { - "id": 0, - "name": "Teri Schmidt" - }, - { - "id": 1, - "name": "Torres Jensen" - }, - { - "id": 2, - "name": "Combs Murphy" - } - ], - "greeting": "Hello, Henson Hill! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db6737e2793488cc7", - "index": 639, - "guid": "cbd76bb1-da7e-46c2-9ded-a2ce37499845", - "isActive": true, - "balance": "$1,609.65", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Griffith Baxter", - "gender": "male", - "company": "EXTRAWEAR", - "email": "griffithbaxter@extrawear.com", - "phone": "+1 (920) 474-3016", - "address": "540 Christopher Avenue, Mappsville, Oregon, 6963", - "about": "Dolor in exercitation in mollit est ea. Commodo nostrud eiusmod cupidatat Lorem est officia. Lorem eiusmod adipisicing laboris irure mollit ex do non voluptate occaecat sit magna id. Duis velit nostrud aliquip est reprehenderit ex aliquip. Veniam eiusmod Lorem amet enim culpa culpa officia id ut laborum. Mollit quis ad veniam nostrud id aliqua sunt officia veniam ex qui dolore. Aliqua cupidatat do dolor excepteur eu.\r\n", - "registered": "2017-06-19T12:41:40 +04:00", - "latitude": -27.683065, - "longitude": -4.66058, - "tags": ["sint", "consequat", "fugiat", "anim", "labore", "fugiat", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Dennis Henderson" - }, - { - "id": 1, - "name": "Lela Lawrence" - }, - { - "id": 2, - "name": "Rosemarie Ward" - } - ], - "greeting": "Hello, Griffith Baxter! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d652e650753e10adc", - "index": 640, - "guid": "479f9735-f1d0-4b88-99ca-88f7a1aa7e51", - "isActive": true, - "balance": "$1,330.03", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Randi Greer", - "gender": "female", - "company": "MENBRAIN", - "email": "randigreer@menbrain.com", - "phone": "+1 (813) 498-3437", - "address": "221 Aberdeen Street, Forbestown, Missouri, 6306", - "about": "Deserunt anim veniam eu dolor mollit enim eu ex sint eu duis. Est aliqua duis dolor dolor. In sit magna velit commodo fugiat aliqua laboris quis do aute elit dolore Lorem. Est deserunt fugiat sit do et.\r\n", - "registered": "2016-01-07T09:56:52 +05:00", - "latitude": -27.639468, - "longitude": -80.097357, - "tags": ["pariatur", "ea", "laboris", "culpa", "non", "labore", "qui"], - "friends": [ - { - "id": 0, - "name": "Abby Mcconnell" - }, - { - "id": 1, - "name": "Valentine Pugh" - }, - { - "id": 2, - "name": "Cash Hartman" - } - ], - "greeting": "Hello, Randi Greer! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0358bcee2c88aa42", - "index": 641, - "guid": "ee85d74b-97c0-441c-bec2-0218b5d8324a", - "isActive": false, - "balance": "$1,559.81", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Walsh Goodwin", - "gender": "male", - "company": "MEDIFAX", - "email": "walshgoodwin@medifax.com", - "phone": "+1 (888) 442-2579", - "address": "201 Dekalb Avenue, Hayes, Montana, 5652", - "about": "Aliquip quis voluptate nulla velit occaecat sit. Eu sint nisi commodo nostrud est et sint dolor culpa ut fugiat in do. Laborum reprehenderit elit esse proident dolore elit. Sint nostrud mollit velit ipsum minim. Aute ullamco occaecat laborum commodo do elit nisi commodo sit velit anim mollit adipisicing incididunt. Enim tempor nisi enim sit commodo adipisicing qui voluptate nostrud cillum. Ea tempor nulla cillum irure magna aliqua magna.\r\n", - "registered": "2019-04-27T11:53:55 +04:00", - "latitude": -25.224584, - "longitude": -80.153684, - "tags": ["id", "do", "adipisicing", "dolor", "anim", "elit", "nulla"], - "friends": [ - { - "id": 0, - "name": "Mcdonald Sharpe" - }, - { - "id": 1, - "name": "Frost Mueller" - }, - { - "id": 2, - "name": "Nell Lott" - } - ], - "greeting": "Hello, Walsh Goodwin! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dce03513ab7cae0c8", - "index": 642, - "guid": "7427ffac-997a-4827-a73e-22ec76336f84", - "isActive": true, - "balance": "$3,715.34", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Kristi Casey", - "gender": "female", - "company": "IMPERIUM", - "email": "kristicasey@imperium.com", - "phone": "+1 (997) 430-3621", - "address": "593 Kings Place, Martinez, Alaska, 1798", - "about": "Id quis commodo cillum velit mollit Lorem id irure labore laborum. Labore aliqua nulla laborum excepteur elit in cupidatat qui. Minim adipisicing id ex consectetur enim ex in nisi est ullamco reprehenderit excepteur. Velit quis fugiat mollit non ipsum ad veniam eiusmod officia ipsum cupidatat consequat.\r\n", - "registered": "2018-05-29T12:17:30 +04:00", - "latitude": 48.738147, - "longitude": -142.464934, - "tags": ["cillum", "non", "consequat", "excepteur", "consequat", "ea", "id"], - "friends": [ - { - "id": 0, - "name": "Ina Oconnor" - }, - { - "id": 1, - "name": "Cross Stephens" - }, - { - "id": 2, - "name": "Elena Frost" - } - ], - "greeting": "Hello, Kristi Casey! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfeb2a3461d0f6d5a", - "index": 643, - "guid": "13a7e1c3-b9ff-46b2-8373-151edcf9b020", - "isActive": true, - "balance": "$1,371.18", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Gamble Benson", - "gender": "male", - "company": "ENTOGROK", - "email": "gamblebenson@entogrok.com", - "phone": "+1 (995) 591-3006", - "address": "934 Maujer Street, Haring, Kentucky, 3378", - "about": "Laborum excepteur laboris magna ut consectetur aute esse tempor anim aliquip nulla. Id consectetur nisi nisi est commodo tempor non irure excepteur labore deserunt ad occaecat. Magna ut dolor ad Lorem et nostrud amet labore.\r\n", - "registered": "2020-05-01T06:55:38 +04:00", - "latitude": -83.604061, - "longitude": -111.142984, - "tags": ["labore", "proident", "Lorem", "adipisicing", "labore", "ut", "ea"], - "friends": [ - { - "id": 0, - "name": "Regina Hatfield" - }, - { - "id": 1, - "name": "Mae Kelly" - }, - { - "id": 2, - "name": "Stevenson Delgado" - } - ], - "greeting": "Hello, Gamble Benson! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da83ac7027d7cc18b", - "index": 644, - "guid": "8e1e4855-1e67-4ff1-80b6-c19adf4d6eee", - "isActive": false, - "balance": "$3,439.47", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Hillary Avila", - "gender": "female", - "company": "GEOSTELE", - "email": "hillaryavila@geostele.com", - "phone": "+1 (883) 545-3380", - "address": "483 Kay Court, Nicut, Mississippi, 7540", - "about": "Qui anim elit cupidatat deserunt proident esse non enim ad labore. Eu nisi ullamco labore aute laborum deserunt magna fugiat ullamco. Deserunt do elit voluptate id officia ex elit ipsum sint elit labore culpa et.\r\n", - "registered": "2019-03-17T12:51:31 +04:00", - "latitude": 82.58282, - "longitude": 152.96307, - "tags": ["incididunt", "eu", "labore", "est", "dolore", "eu", "cillum"], - "friends": [ - { - "id": 0, - "name": "Small Cannon" - }, - { - "id": 1, - "name": "Valdez Stark" - }, - { - "id": 2, - "name": "Shanna Olson" - } - ], - "greeting": "Hello, Hillary Avila! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7a0d5b63593d898a", - "index": 645, - "guid": "73bd393b-320b-4f42-8e50-6e5a2b53e75a", - "isActive": false, - "balance": "$1,061.49", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Sonya Meyers", - "gender": "female", - "company": "INSURITY", - "email": "sonyameyers@insurity.com", - "phone": "+1 (938) 509-3451", - "address": "278 Oak Street, Kanauga, North Dakota, 1752", - "about": "Minim nulla commodo amet ad aliquip dolor laborum. Do nisi laborum anim et ex aute mollit esse culpa est officia. Anim aliqua Lorem ad nostrud velit. Officia labore ut consectetur cupidatat amet ipsum laborum veniam veniam consectetur irure proident excepteur est. Eiusmod adipisicing ad consequat deserunt et dolore excepteur. Id eiusmod adipisicing aute ad ad sit.\r\n", - "registered": "2015-12-01T10:53:18 +05:00", - "latitude": 23.299578, - "longitude": 145.438087, - "tags": ["duis", "mollit", "eiusmod", "est", "nisi", "aliquip", "non"], - "friends": [ - { - "id": 0, - "name": "Price Deleon" - }, - { - "id": 1, - "name": "Lucy Harris" - }, - { - "id": 2, - "name": "Lea Hutchinson" - } - ], - "greeting": "Hello, Sonya Meyers! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd274fd4029aadd58", - "index": 646, - "guid": "674f501c-b09a-4d12-9034-cc635810e73f", - "isActive": false, - "balance": "$2,501.67", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Valeria Frederick", - "gender": "female", - "company": "NETAGY", - "email": "valeriafrederick@netagy.com", - "phone": "+1 (828) 582-2131", - "address": "565 Woods Place, Thynedale, Federated States Of Micronesia, 401", - "about": "Amet ex qui eiusmod consectetur amet nulla mollit pariatur id aliqua amet velit. Ex nostrud incididunt laboris fugiat aliqua nisi elit aute. Consequat ullamco irure sint dolor cupidatat elit aute.\r\n", - "registered": "2016-04-10T06:29:55 +04:00", - "latitude": 14.33503, - "longitude": -171.032421, - "tags": ["qui", "nisi", "nulla", "aliquip", "reprehenderit", "nostrud", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Roxanne Rodgers" - }, - { - "id": 1, - "name": "Muriel Whitaker" - }, - { - "id": 2, - "name": "Carolina Miller" - } - ], - "greeting": "Hello, Valeria Frederick! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d334590dcbb498ba2", - "index": 647, - "guid": "142e65ad-d5fd-4f36-ac64-c4f102768921", - "isActive": false, - "balance": "$2,613.45", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Clayton Price", - "gender": "male", - "company": "PHARMACON", - "email": "claytonprice@pharmacon.com", - "phone": "+1 (849) 468-3639", - "address": "957 Farragut Place, Epworth, Maryland, 7229", - "about": "Minim reprehenderit dolor in est irure pariatur officia nulla incididunt ipsum duis velit. Non dolor et dolor nostrud nostrud eu mollit enim consectetur mollit irure excepteur ut fugiat. Tempor velit ipsum dolore labore nostrud incididunt sunt anim irure. Proident sint cillum Lorem est minim ea sint commodo aliquip duis cillum pariatur velit laborum. Enim sint quis eiusmod non fugiat nostrud sit enim deserunt.\r\n", - "registered": "2015-07-06T11:44:10 +04:00", - "latitude": -18.000683, - "longitude": -168.639265, - "tags": ["esse", "minim", "ullamco", "minim", "officia", "pariatur", "minim"], - "friends": [ - { - "id": 0, - "name": "Ava Merritt" - }, - { - "id": 1, - "name": "Quinn Valentine" - }, - { - "id": 2, - "name": "Natalia Avery" - } - ], - "greeting": "Hello, Clayton Price! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db99e558875a9e541", - "index": 648, - "guid": "cc681d05-fd51-44ec-b82f-ca58d0d1e3e3", - "isActive": false, - "balance": "$3,598.91", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Bridget Alston", - "gender": "female", - "company": "COMDOM", - "email": "bridgetalston@comdom.com", - "phone": "+1 (987) 555-3802", - "address": "603 Vista Place, Grayhawk, Virgin Islands, 1483", - "about": "Irure Lorem voluptate exercitation occaecat cupidatat proident cupidatat. Eu ad do esse commodo irure consectetur amet ullamco veniam fugiat irure. Eiusmod magna excepteur consectetur et duis nisi. Labore qui occaecat labore aute cupidatat quis cillum labore. Anim anim eiusmod velit dolor eiusmod ipsum cillum ullamco nulla aute quis non consequat. Minim labore occaecat officia excepteur laboris nulla elit laborum.\r\n", - "registered": "2017-09-17T01:54:34 +04:00", - "latitude": 32.194892, - "longitude": -48.844637, - "tags": ["minim", "est", "laborum", "labore", "eu", "laborum", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Middleton Quinn" - }, - { - "id": 1, - "name": "Barker Perry" - }, - { - "id": 2, - "name": "Dominique Mclaughlin" - } - ], - "greeting": "Hello, Bridget Alston! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfb8cb46d57fa15bc", - "index": 649, - "guid": "0f6732d7-f956-4527-abe4-5de39f937553", - "isActive": false, - "balance": "$2,610.29", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Dunn Strong", - "gender": "male", - "company": "ILLUMITY", - "email": "dunnstrong@illumity.com", - "phone": "+1 (887) 597-2824", - "address": "965 Eastern Parkway, Gorst, Pennsylvania, 4379", - "about": "Do consequat pariatur non esse. Do ex voluptate ut aliqua do exercitation amet magna. Fugiat deserunt magna Lorem veniam Lorem et magna tempor est. Fugiat sunt aute reprehenderit consectetur sint est reprehenderit qui nulla qui id sint esse consequat.\r\n", - "registered": "2019-10-25T07:47:49 +04:00", - "latitude": -27.978752, - "longitude": -30.927591, - "tags": ["veniam", "est", "Lorem", "excepteur", "veniam", "nostrud", "sunt"], - "friends": [ - { - "id": 0, - "name": "Guadalupe Reid" - }, - { - "id": 1, - "name": "Cain Martinez" - }, - { - "id": 2, - "name": "Stacy Daniels" - } - ], - "greeting": "Hello, Dunn Strong! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d92cd3ae955320493", - "index": 650, - "guid": "92331ff0-e358-4e4b-be25-dca2575a2d04", - "isActive": false, - "balance": "$3,125.97", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Pope Travis", - "gender": "male", - "company": "NORALI", - "email": "popetravis@norali.com", - "phone": "+1 (899) 595-2716", - "address": "718 Willmohr Street, Williams, Washington, 8508", - "about": "Deserunt ex reprehenderit reprehenderit fugiat ea ad labore qui. Id pariatur amet mollit esse adipisicing aliquip incididunt est do commodo ullamco elit aliquip. Amet elit anim magna sunt sunt ad exercitation cupidatat nulla. Sint dolor pariatur id aute enim adipisicing.\r\n", - "registered": "2014-03-27T02:13:44 +04:00", - "latitude": 48.780387, - "longitude": 80.743824, - "tags": ["ut", "nostrud", "minim", "labore", "anim", "consectetur", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Alexandria Castaneda" - }, - { - "id": 1, - "name": "Lee Cochran" - }, - { - "id": 2, - "name": "Stacey Battle" - } - ], - "greeting": "Hello, Pope Travis! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d81ad2e094b00531b", - "index": 651, - "guid": "d4ac4531-683d-421e-9cee-28ecc54e9999", - "isActive": false, - "balance": "$2,595.90", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Isabelle Castillo", - "gender": "female", - "company": "NEWCUBE", - "email": "isabellecastillo@newcube.com", - "phone": "+1 (989) 558-2435", - "address": "169 Montieth Street, Lowell, Illinois, 2893", - "about": "Duis occaecat ullamco incididunt ut reprehenderit enim excepteur labore velit tempor. Excepteur excepteur incididunt fugiat amet. Consequat elit pariatur nostrud mollit excepteur tempor cupidatat. Ipsum quis ullamco adipisicing amet deserunt. Consequat ullamco cupidatat veniam fugiat incididunt officia ad esse.\r\n", - "registered": "2020-01-31T04:26:04 +05:00", - "latitude": 2.310802, - "longitude": -128.128855, - "tags": ["culpa", "exercitation", "cillum", "commodo", "Lorem", "veniam", "magna"], - "friends": [ - { - "id": 0, - "name": "Prince Oneal" - }, - { - "id": 1, - "name": "Maritza Fitzpatrick" - }, - { - "id": 2, - "name": "Judith Velasquez" - } - ], - "greeting": "Hello, Isabelle Castillo! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6c91db34e8cbfe73", - "index": 652, - "guid": "bdbbbc3a-dcce-403b-88dc-84884b75f8c9", - "isActive": true, - "balance": "$1,906.87", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Steele Petty", - "gender": "male", - "company": "PERKLE", - "email": "steelepetty@perkle.com", - "phone": "+1 (872) 572-3528", - "address": "296 Metrotech Courtr, Warren, New Hampshire, 8186", - "about": "Incididunt sit do nulla officia deserunt. Cupidatat veniam adipisicing quis id proident aute velit aliqua duis occaecat mollit minim commodo voluptate. Quis labore elit fugiat consequat consequat. Laboris reprehenderit excepteur quis proident minim aliquip occaecat sunt duis. Amet dolore voluptate reprehenderit exercitation eu reprehenderit dolor ad quis adipisicing.\r\n", - "registered": "2015-11-26T10:24:26 +05:00", - "latitude": -55.693958, - "longitude": 175.252556, - "tags": ["sint", "reprehenderit", "enim", "laboris", "eu", "ad", "sint"], - "friends": [ - { - "id": 0, - "name": "Fannie Pennington" - }, - { - "id": 1, - "name": "Blair Reyes" - }, - { - "id": 2, - "name": "Cervantes Roth" - } - ], - "greeting": "Hello, Steele Petty! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dae063987ec77a727", - "index": 653, - "guid": "83139598-9b07-4d20-a9c3-9d5943bf9343", - "isActive": true, - "balance": "$1,043.63", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Jenifer Walker", - "gender": "female", - "company": "ZILLADYNE", - "email": "jeniferwalker@zilladyne.com", - "phone": "+1 (968) 532-3366", - "address": "495 Dorchester Road, Riner, Colorado, 6198", - "about": "Consectetur Lorem sit pariatur mollit consectetur non est cillum ut. In aliquip mollit excepteur veniam sint voluptate. Sit deserunt anim laboris ea adipisicing amet sit Lorem labore id. Pariatur id est dolore nostrud aute eiusmod commodo pariatur esse. Voluptate culpa reprehenderit tempor do cupidatat. Consectetur qui sit eiusmod veniam culpa tempor sint enim officia.\r\n", - "registered": "2014-05-06T12:11:46 +04:00", - "latitude": -26.952992, - "longitude": 21.821631, - "tags": ["laborum", "culpa", "officia", "eiusmod", "proident", "ex", "amet"], - "friends": [ - { - "id": 0, - "name": "Christa Morrison" - }, - { - "id": 1, - "name": "Lenore Carney" - }, - { - "id": 2, - "name": "Chavez Calderon" - } - ], - "greeting": "Hello, Jenifer Walker! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dadeb59ff5ff92ba0", - "index": 654, - "guid": "e906718b-d58e-470b-8d0a-45718f382754", - "isActive": true, - "balance": "$3,266.46", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Jimmie Daugherty", - "gender": "female", - "company": "ROCKLOGIC", - "email": "jimmiedaugherty@rocklogic.com", - "phone": "+1 (882) 505-2521", - "address": "627 Arlington Avenue, Gordon, Maine, 4926", - "about": "Minim id cillum tempor do tempor officia ex culpa reprehenderit. Irure occaecat est eu exercitation do labore cupidatat veniam Lorem nostrud anim aliqua incididunt. Nostrud occaecat nisi consequat consequat ea nostrud proident dolore ut id tempor est officia laborum. In duis occaecat nisi pariatur excepteur et velit sunt reprehenderit aliqua. Qui aliqua excepteur irure culpa cillum nulla dolore id Lorem incididunt non. Et nisi commodo deserunt laborum dolor exercitation sunt aliquip et qui aute culpa nostrud qui. Eiusmod ipsum pariatur reprehenderit irure ea deserunt aliquip commodo culpa.\r\n", - "registered": "2015-03-25T01:02:49 +04:00", - "latitude": 85.909737, - "longitude": 43.772247, - "tags": ["ex", "laboris", "anim", "magna", "non", "cillum", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Hooper Smith" - }, - { - "id": 1, - "name": "Henry Ingram" - }, - { - "id": 2, - "name": "Leola Randolph" - } - ], - "greeting": "Hello, Jimmie Daugherty! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d01c286c4277f0475", - "index": 655, - "guid": "43f34743-c08b-4b00-9a07-9d07831c5ea4", - "isActive": true, - "balance": "$3,203.44", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Cheryl Potts", - "gender": "female", - "company": "PYRAMI", - "email": "cherylpotts@pyrami.com", - "phone": "+1 (951) 482-3689", - "address": "516 Henry Street, Jardine, South Carolina, 764", - "about": "Nisi exercitation veniam cillum excepteur velit ad amet exercitation id. Culpa labore ea sit elit cupidatat enim irure. Irure voluptate dolor aliqua ipsum dolore consequat id magna exercitation incididunt adipisicing. Quis ut consequat ipsum in tempor duis voluptate.\r\n", - "registered": "2018-07-03T08:40:51 +04:00", - "latitude": -55.81599, - "longitude": -20.804376, - "tags": ["labore", "et", "duis", "sint", "aliquip", "exercitation", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Shepard Delacruz" - }, - { - "id": 1, - "name": "Reva Head" - }, - { - "id": 2, - "name": "Rush Newton" - } - ], - "greeting": "Hello, Cheryl Potts! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc3e5f53bb1f82920", - "index": 656, - "guid": "9f2380f6-79fc-43d4-896e-2f5c9ec1894a", - "isActive": false, - "balance": "$2,313.47", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Mckenzie Elliott", - "gender": "male", - "company": "QUARMONY", - "email": "mckenzieelliott@quarmony.com", - "phone": "+1 (898) 470-3009", - "address": "259 Tapscott Avenue, Bedias, Connecticut, 8932", - "about": "Amet cillum eu aute velit laborum exercitation ut irure. Quis velit nulla reprehenderit mollit sint consectetur irure dolor esse nostrud aute. Adipisicing laboris aute ad enim consequat. Excepteur adipisicing quis culpa id fugiat ullamco ad reprehenderit reprehenderit excepteur nostrud enim culpa cupidatat.\r\n", - "registered": "2016-12-21T07:35:32 +05:00", - "latitude": 22.272968, - "longitude": 133.220898, - "tags": ["id", "et", "pariatur", "cillum", "mollit", "deserunt", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Bradford Sullivan" - }, - { - "id": 1, - "name": "Foster Montgomery" - }, - { - "id": 2, - "name": "Cynthia Nunez" - } - ], - "greeting": "Hello, Mckenzie Elliott! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d53f09aec3d05d458", - "index": 657, - "guid": "06d9017e-5b86-4b28-a52c-5de26c1ed668", - "isActive": false, - "balance": "$3,588.16", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Socorro Mann", - "gender": "female", - "company": "ZILLAR", - "email": "socorromann@zillar.com", - "phone": "+1 (955) 483-2048", - "address": "744 Newkirk Avenue, Winchester, Virginia, 6371", - "about": "Elit labore non nostrud in. Dolor anim eiusmod deserunt aliquip ullamco dolor in ut do sit reprehenderit incididunt dolor cupidatat. Laboris consectetur aute ut reprehenderit nostrud aute Lorem consequat sint velit nisi. Magna in irure voluptate nisi laboris amet officia ex id id excepteur. Eiusmod duis dolor ut velit nisi minim deserunt amet anim enim veniam aute proident. Magna Lorem consectetur in occaecat non magna laborum duis amet.\r\n", - "registered": "2015-11-20T10:58:53 +05:00", - "latitude": 48.989767, - "longitude": 174.30009, - "tags": ["labore", "commodo", "commodo", "sunt", "ipsum", "mollit", "sint"], - "friends": [ - { - "id": 0, - "name": "Mona Miranda" - }, - { - "id": 1, - "name": "Keri Rose" - }, - { - "id": 2, - "name": "Hester Rosales" - } - ], - "greeting": "Hello, Socorro Mann! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ddd0daa8e8ae90871", - "index": 658, - "guid": "99c25a11-fbde-4e4c-a60a-1d3a0023693e", - "isActive": true, - "balance": "$2,028.18", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Mathews Vincent", - "gender": "male", - "company": "NETBOOK", - "email": "mathewsvincent@netbook.com", - "phone": "+1 (967) 588-3276", - "address": "298 Foster Avenue, Tryon, Georgia, 6658", - "about": "Magna aliquip consequat occaecat incididunt ullamco mollit. Tempor labore culpa aute laborum laboris minim occaecat ut dolore cillum sint. Aliqua laborum Lorem labore ipsum non ipsum sunt cupidatat. Excepteur irure consequat excepteur laborum velit sit aliquip adipisicing irure occaecat pariatur dolore occaecat. Elit commodo ex esse reprehenderit elit. Voluptate consectetur reprehenderit non adipisicing.\r\n", - "registered": "2014-02-12T06:38:32 +05:00", - "latitude": 13.250189, - "longitude": -91.576983, - "tags": ["irure", "amet", "proident", "sint", "elit", "tempor", "irure"], - "friends": [ - { - "id": 0, - "name": "Sweeney Burke" - }, - { - "id": 1, - "name": "Rhea Booker" - }, - { - "id": 2, - "name": "Herring Hardy" - } - ], - "greeting": "Hello, Mathews Vincent! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d076b288336f7641e", - "index": 659, - "guid": "fae8c152-0149-4ca7-97ed-4b65535e5aa6", - "isActive": false, - "balance": "$2,143.86", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Chandler James", - "gender": "male", - "company": "VIASIA", - "email": "chandlerjames@viasia.com", - "phone": "+1 (872) 487-3493", - "address": "742 Alabama Avenue, Calvary, New Jersey, 3392", - "about": "Eiusmod quis pariatur dolor aliqua anim nisi Lorem deserunt. Sunt Lorem nostrud ut irure reprehenderit in elit veniam deserunt. Ut mollit consectetur ex proident et aute magna.\r\n", - "registered": "2016-01-04T03:08:19 +05:00", - "latitude": -58.051657, - "longitude": -90.954723, - "tags": ["ea", "magna", "id", "eiusmod", "sunt", "amet", "cillum"], - "friends": [ - { - "id": 0, - "name": "Elvira Sheppard" - }, - { - "id": 1, - "name": "Lucille Meadows" - }, - { - "id": 2, - "name": "Merritt Banks" - } - ], - "greeting": "Hello, Chandler James! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2bc70db9d494bcbf", - "index": 660, - "guid": "ab6304c2-de9a-4aa6-9829-76e57aaa3dcc", - "isActive": true, - "balance": "$3,457.51", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Rogers Sears", - "gender": "male", - "company": "CIRCUM", - "email": "rogerssears@circum.com", - "phone": "+1 (899) 430-2392", - "address": "897 Irving Avenue, Jacksonburg, Minnesota, 9999", - "about": "Dolore nulla et nostrud commodo commodo pariatur esse nostrud qui officia mollit. Ea do Lorem mollit nostrud esse minim sunt. Adipisicing laborum eiusmod minim et labore cupidatat non ipsum consequat pariatur consectetur. In nostrud consequat minim cupidatat eu consequat laborum anim et sit amet est proident. Laborum sint proident esse ullamco. Sint ex labore aliqua eu labore labore anim enim laborum.\r\n", - "registered": "2014-11-13T08:52:35 +05:00", - "latitude": 44.459138, - "longitude": -78.247727, - "tags": ["ipsum", "cupidatat", "proident", "magna", "aliquip", "deserunt", "ea"], - "friends": [ - { - "id": 0, - "name": "Acosta Rivera" - }, - { - "id": 1, - "name": "Salinas Kinney" - }, - { - "id": 2, - "name": "Tricia Justice" - } - ], - "greeting": "Hello, Rogers Sears! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0327dd9f9740f094", - "index": 661, - "guid": "4ead84c0-7c9b-4421-8c80-7e607e38a364", - "isActive": true, - "balance": "$2,616.97", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Emily Anderson", - "gender": "female", - "company": "DIGINETIC", - "email": "emilyanderson@diginetic.com", - "phone": "+1 (985) 457-2330", - "address": "778 Beaver Street, Haena, Texas, 1635", - "about": "In ea sit laborum eu excepteur consequat consectetur ad aute id commodo. Occaecat velit minim mollit velit ad velit. Magna in duis mollit officia ea qui non ea mollit fugiat. Exercitation cupidatat culpa exercitation non nulla occaecat cupidatat cillum non pariatur non commodo esse. Adipisicing et pariatur sunt in deserunt eiusmod amet. Veniam eiusmod excepteur elit fugiat duis velit consequat fugiat.\r\n", - "registered": "2018-12-19T04:44:52 +05:00", - "latitude": 7.365781, - "longitude": 25.509466, - "tags": ["et", "amet", "proident", "veniam", "reprehenderit", "adipisicing", "ut"], - "friends": [ - { - "id": 0, - "name": "Gillespie Landry" - }, - { - "id": 1, - "name": "Callie Young" - }, - { - "id": 2, - "name": "Alexis Harvey" - } - ], - "greeting": "Hello, Emily Anderson! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d18d443d2d02f9370", - "index": 662, - "guid": "e74a645d-ab6d-4c65-b031-273c7b5b7f81", - "isActive": true, - "balance": "$1,060.36", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Claire Guthrie", - "gender": "female", - "company": "FLUM", - "email": "claireguthrie@flum.com", - "phone": "+1 (933) 473-3660", - "address": "358 Preston Court, Westerville, Alabama, 5579", - "about": "Proident elit dolore esse minim elit sint esse magna. Pariatur ea ut culpa commodo ullamco aliquip proident. Ut Lorem veniam commodo occaecat ad aliqua aliqua elit exercitation esse non. Eu dolore consectetur ut commodo. Nisi in proident do cupidatat fugiat ipsum in dolor ut excepteur. Nulla tempor aliquip dolor reprehenderit excepteur occaecat elit excepteur officia anim dolore aute in. Qui laboris veniam nulla reprehenderit consectetur enim consectetur voluptate consectetur id labore.\r\n", - "registered": "2018-03-16T01:12:41 +04:00", - "latitude": -65.483687, - "longitude": -17.541049, - "tags": ["id", "ullamco", "consectetur", "aliqua", "occaecat", "minim", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Lenora Mcintosh" - }, - { - "id": 1, - "name": "Mcdowell Wall" - }, - { - "id": 2, - "name": "Sawyer Moss" - } - ], - "greeting": "Hello, Claire Guthrie! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df9d6feb458e2a7e5", - "index": 663, - "guid": "73a69460-5f5b-4053-9080-e7bcc175069d", - "isActive": false, - "balance": "$3,625.97", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Anna Holland", - "gender": "female", - "company": "FARMAGE", - "email": "annaholland@farmage.com", - "phone": "+1 (892) 578-2667", - "address": "453 Middleton Street, Otranto, Rhode Island, 1535", - "about": "Nulla deserunt cillum eiusmod ea aliquip laboris amet consequat qui veniam est. Incididunt commodo exercitation commodo laboris non. Dolor ipsum esse nisi quis adipisicing. Lorem consectetur duis sit eiusmod quis veniam consectetur laborum cillum sit sint laborum. Cupidatat aute esse quis sunt ex in officia et sit dolor velit aute voluptate. Velit officia nulla adipisicing esse et in.\r\n", - "registered": "2016-06-08T12:07:01 +04:00", - "latitude": -17.591757, - "longitude": -69.078622, - "tags": ["adipisicing", "qui", "ut", "est", "et", "id", "aute"], - "friends": [ - { - "id": 0, - "name": "Roman Bauer" - }, - { - "id": 1, - "name": "Strong Burton" - }, - { - "id": 2, - "name": "Riggs Haney" - } - ], - "greeting": "Hello, Anna Holland! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de2b4c10f1ab40fae", - "index": 664, - "guid": "5f5c7984-d826-4e33-b3f4-a403d0b6b964", - "isActive": false, - "balance": "$2,126.29", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Sadie Key", - "gender": "female", - "company": "SPEEDBOLT", - "email": "sadiekey@speedbolt.com", - "phone": "+1 (827) 423-2181", - "address": "894 Newel Street, Gratton, Florida, 8487", - "about": "Velit nisi ea eu aliqua laborum enim officia ea. Officia dolore quis consectetur qui minim officia eiusmod cupidatat aliquip Lorem aute fugiat. Sit est pariatur cupidatat dolor qui. Voluptate cillum ex aliquip labore.\r\n", - "registered": "2016-06-08T10:25:20 +04:00", - "latitude": -83.752111, - "longitude": 3.989403, - "tags": ["ad", "sint", "irure", "irure", "eu", "in", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Jeanne Gill" - }, - { - "id": 1, - "name": "Penny Rivas" - }, - { - "id": 2, - "name": "Olsen Whitley" - } - ], - "greeting": "Hello, Sadie Key! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc993b337be05cc56", - "index": 665, - "guid": "f317a18e-76e0-4525-86e9-dae761497cca", - "isActive": true, - "balance": "$3,842.25", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Christian Harrell", - "gender": "male", - "company": "GAZAK", - "email": "christianharrell@gazak.com", - "phone": "+1 (837) 448-3284", - "address": "610 Nostrand Avenue, Crucible, Indiana, 8109", - "about": "Quis et ipsum nulla eu et fugiat ipsum laborum sunt aliqua. Eu consectetur tempor est aliqua ea anim mollit Lorem anim veniam quis proident anim. Magna cupidatat voluptate ullamco fugiat. Est Lorem culpa magna pariatur dolore.\r\n", - "registered": "2020-08-26T12:42:25 +04:00", - "latitude": 1.805496, - "longitude": 164.845156, - "tags": ["aliqua", "duis", "minim", "eiusmod", "dolor", "id", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Hanson Case" - }, - { - "id": 1, - "name": "Holcomb Gamble" - }, - { - "id": 2, - "name": "Rojas Hahn" - } - ], - "greeting": "Hello, Christian Harrell! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4cac15466e9094f0", - "index": 666, - "guid": "ba7aaf81-6480-4598-825d-d872bce04157", - "isActive": false, - "balance": "$3,605.39", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Mcknight Stone", - "gender": "male", - "company": "SENMAO", - "email": "mcknightstone@senmao.com", - "phone": "+1 (830) 505-3650", - "address": "546 Horace Court, Beason, Northern Mariana Islands, 3910", - "about": "Non anim sint consequat duis non commodo excepteur ut velit nulla irure sunt eiusmod incididunt. Proident eu culpa do qui occaecat in. Exercitation quis enim id sint est est sint nostrud. Officia magna cillum proident mollit nisi laborum dolor aliqua ut culpa ea veniam tempor. Commodo qui cillum occaecat laborum. Amet sunt eiusmod dolore non eiusmod ipsum aliquip adipisicing reprehenderit aute. Duis fugiat aliquip enim officia velit enim magna voluptate qui Lorem nostrud dolore ut occaecat.\r\n", - "registered": "2018-11-03T04:59:54 +04:00", - "latitude": -33.676655, - "longitude": 77.017009, - "tags": ["minim", "ea", "elit", "minim", "minim", "cillum", "tempor"], - "friends": [ - { - "id": 0, - "name": "Beard Ramirez" - }, - { - "id": 1, - "name": "Donna Carver" - }, - { - "id": 2, - "name": "Wade Ayala" - } - ], - "greeting": "Hello, Mcknight Stone! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dff6b7e77e70045eb", - "index": 667, - "guid": "f156bf92-1d38-4946-a3d8-1fbf1a11f21f", - "isActive": true, - "balance": "$3,147.09", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Edna Nicholson", - "gender": "female", - "company": "REMOLD", - "email": "ednanicholson@remold.com", - "phone": "+1 (804) 531-3325", - "address": "692 Rockwell Place, Greenwich, Idaho, 5742", - "about": "Enim non nisi exercitation culpa cillum ullamco exercitation est officia Lorem excepteur. Dolore sint duis incididunt culpa non magna consequat nisi. Veniam consequat est sunt reprehenderit aute.\r\n", - "registered": "2016-12-19T06:49:16 +05:00", - "latitude": -28.641847, - "longitude": -122.919716, - "tags": ["aliquip", "esse", "pariatur", "laboris", "laborum", "nostrud", "dolore"], - "friends": [ - { - "id": 0, - "name": "Harding Faulkner" - }, - { - "id": 1, - "name": "Johns Hobbs" - }, - { - "id": 2, - "name": "Meredith Munoz" - } - ], - "greeting": "Hello, Edna Nicholson! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25de27f2f78a27f3a52", - "index": 668, - "guid": "2d3b8499-4011-478d-b6f6-c5d85111f4c5", - "isActive": false, - "balance": "$3,865.98", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Bullock Workman", - "gender": "male", - "company": "VETRON", - "email": "bullockworkman@vetron.com", - "phone": "+1 (828) 599-3556", - "address": "134 Montague Terrace, Cornucopia, District Of Columbia, 6742", - "about": "Nulla est qui aute duis laborum exercitation ipsum. Velit fugiat commodo occaecat culpa incididunt aute aliqua deserunt dolor eu ea deserunt ut voluptate. Dolor deserunt duis proident mollit consequat ut eu ut. Est sint laborum do exercitation Lorem laboris amet. Est ad irure aliquip elit enim quis velit. Incididunt ullamco excepteur cillum Lorem reprehenderit Lorem nisi. Sint cillum in culpa elit officia tempor esse aute eu.\r\n", - "registered": "2019-08-04T09:57:34 +04:00", - "latitude": -74.137961, - "longitude": 5.941469, - "tags": ["laborum", "sint", "anim", "elit", "adipisicing", "officia", "id"], - "friends": [ - { - "id": 0, - "name": "Margret Kent" - }, - { - "id": 1, - "name": "Michael Henson" - }, - { - "id": 2, - "name": "Raquel Huff" - } - ], - "greeting": "Hello, Bullock Workman! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d937c8277e8fff623", - "index": 669, - "guid": "e308d527-9834-4246-becc-ff87413b6327", - "isActive": false, - "balance": "$2,876.91", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Sherman Hines", - "gender": "male", - "company": "CRUSTATIA", - "email": "shermanhines@crustatia.com", - "phone": "+1 (972) 591-2589", - "address": "629 Clove Road, Witmer, New Mexico, 2342", - "about": "Magna fugiat irure non consequat dolore cupidatat et dolore ut commodo est nulla. Fugiat labore est voluptate dolor voluptate aliqua. Laboris in incididunt commodo nostrud elit qui proident culpa sint id labore laboris Lorem ipsum. Nulla quis reprehenderit tempor ea.\r\n", - "registered": "2019-09-16T10:19:33 +04:00", - "latitude": -61.72152, - "longitude": -45.075503, - "tags": ["cillum", "dolore", "et", "deserunt", "amet", "in", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Gwen Molina" - }, - { - "id": 1, - "name": "Miranda Anthony" - }, - { - "id": 2, - "name": "Holt Church" - } - ], - "greeting": "Hello, Sherman Hines! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da9d3d68e33fee9b0", - "index": 670, - "guid": "4bcc923a-7419-48d6-bd59-fc0d7d6e4c1c", - "isActive": true, - "balance": "$2,263.78", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Dorsey Lee", - "gender": "male", - "company": "BLURRYBUS", - "email": "dorseylee@blurrybus.com", - "phone": "+1 (904) 510-2814", - "address": "922 Emmons Avenue, Jackpot, South Dakota, 3542", - "about": "Qui anim excepteur est cillum. Eiusmod nostrud veniam tempor irure ex velit culpa ut amet do dolor dolore. Est anim magna do et.\r\n", - "registered": "2017-06-05T04:18:38 +04:00", - "latitude": 70.135947, - "longitude": 158.023892, - "tags": ["Lorem", "excepteur", "sint", "occaecat", "sit", "esse", "consectetur"], - "friends": [ - { - "id": 0, - "name": "James Williamson" - }, - { - "id": 1, - "name": "Burch Brennan" - }, - { - "id": 2, - "name": "Vasquez Knapp" - } - ], - "greeting": "Hello, Dorsey Lee! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd946c610f6711730", - "index": 671, - "guid": "9e2e47cf-6860-48d7-95db-c76927d75416", - "isActive": false, - "balance": "$3,823.08", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Hood Bowers", - "gender": "male", - "company": "ZILCH", - "email": "hoodbowers@zilch.com", - "phone": "+1 (813) 404-3358", - "address": "491 Grove Place, Chicopee, American Samoa, 4317", - "about": "Excepteur exercitation nulla ex non exercitation commodo commodo est minim tempor enim. Occaecat non Lorem sit sit aute excepteur est duis deserunt eiusmod do. Amet minim irure mollit minim pariatur mollit. Nostrud eu ad minim enim ex magna nisi cupidatat id officia. Enim in culpa dolor exercitation veniam exercitation Lorem.\r\n", - "registered": "2019-10-01T12:29:43 +04:00", - "latitude": 28.212996, - "longitude": 145.140792, - "tags": ["occaecat", "commodo", "occaecat", "irure", "aute", "nulla", "minim"], - "friends": [ - { - "id": 0, - "name": "Kenya Kirkland" - }, - { - "id": 1, - "name": "Lester Mack" - }, - { - "id": 2, - "name": "Bond Powers" - } - ], - "greeting": "Hello, Hood Bowers! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df7a9fdb207720bfb", - "index": 672, - "guid": "cf4b047e-766a-43cb-83f1-d24aab595976", - "isActive": true, - "balance": "$1,854.56", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Kirsten Chandler", - "gender": "female", - "company": "AQUAZURE", - "email": "kirstenchandler@aquazure.com", - "phone": "+1 (959) 579-2825", - "address": "729 Bay Avenue, Muse, Iowa, 6609", - "about": "Commodo tempor qui velit magna. Ea sit occaecat ut cillum proident occaecat ut culpa officia amet occaecat do enim ipsum. Veniam adipisicing mollit ut elit sit labore eu. Adipisicing laboris excepteur laborum aliqua proident dolor enim proident ipsum consequat. Ad laboris duis enim est laboris tempor pariatur minim commodo. Velit deserunt esse voluptate mollit. Consequat est tempor cillum dolore ad magna consequat nisi nisi.\r\n", - "registered": "2014-04-15T01:32:53 +04:00", - "latitude": -59.191643, - "longitude": 134.526043, - "tags": ["enim", "aliqua", "occaecat", "labore", "proident", "cillum", "anim"], - "friends": [ - { - "id": 0, - "name": "Margaret Kane" - }, - { - "id": 1, - "name": "Hollie Kramer" - }, - { - "id": 2, - "name": "Medina Ruiz" - } - ], - "greeting": "Hello, Kirsten Chandler! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db8d75e59835f6ea1", - "index": 673, - "guid": "9bcd1b57-83f3-4990-ad9b-b52a95677d00", - "isActive": true, - "balance": "$1,298.79", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Vega Snow", - "gender": "male", - "company": "ARCTIQ", - "email": "vegasnow@arctiq.com", - "phone": "+1 (844) 455-2084", - "address": "680 Willoughby Street, Valle, Palau, 2261", - "about": "Est velit est amet enim reprehenderit incididunt quis labore tempor eu irure culpa. Veniam laborum dolore nulla ex ut do id labore excepteur incididunt nostrud tempor. Eiusmod culpa minim dolore mollit ad reprehenderit amet in. Nostrud velit id occaecat id exercitation adipisicing. Occaecat quis sit deserunt aute deserunt aliquip consequat excepteur elit ad. Exercitation laboris occaecat officia sint minim ullamco nisi aliqua anim consectetur esse. Duis sunt reprehenderit tempor consequat ipsum qui irure.\r\n", - "registered": "2019-03-02T03:14:44 +05:00", - "latitude": 22.279497, - "longitude": 159.943071, - "tags": ["consequat", "laboris", "id", "ex", "culpa", "enim", "consequat"], - "friends": [ - { - "id": 0, - "name": "Phoebe Lane" - }, - { - "id": 1, - "name": "Kristin Douglas" - }, - { - "id": 2, - "name": "Humphrey Figueroa" - } - ], - "greeting": "Hello, Vega Snow! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d07379276b91dbffb", - "index": 674, - "guid": "1070026e-8b02-4816-9b20-c3115a559ced", - "isActive": true, - "balance": "$1,281.35", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Ann Rios", - "gender": "female", - "company": "BLUPLANET", - "email": "annrios@bluplanet.com", - "phone": "+1 (998) 495-2827", - "address": "750 Vanderbilt Avenue, Matheny, West Virginia, 4053", - "about": "Sint anim ex Lorem ea ad magna cupidatat nulla cupidatat magna. Anim mollit non est occaecat ea nulla nulla dolore cillum non mollit laborum minim. Amet excepteur adipisicing aute elit aliquip eu magna ut pariatur nostrud ex. Ex laboris nulla minim dolor irure consectetur anim incididunt ipsum nostrud laborum.\r\n", - "registered": "2014-11-23T06:15:43 +05:00", - "latitude": -28.971272, - "longitude": 5.552171, - "tags": ["sit", "est", "qui", "irure", "laboris", "sint", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Holloway Stuart" - }, - { - "id": 1, - "name": "Webb Mercer" - }, - { - "id": 2, - "name": "Bennett Flynn" - } - ], - "greeting": "Hello, Ann Rios! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbf835ceb603eb43c", - "index": 675, - "guid": "54d58a71-d3f0-4ce7-8be1-ee0e69f46dc2", - "isActive": false, - "balance": "$1,440.77", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Johnson Carroll", - "gender": "male", - "company": "COLUMELLA", - "email": "johnsoncarroll@columella.com", - "phone": "+1 (911) 546-2992", - "address": "263 Albany Avenue, Hayden, New York, 7511", - "about": "Aliquip ad fugiat ipsum ipsum eiusmod irure ad amet eu veniam. Culpa reprehenderit cupidatat tempor consectetur pariatur do occaecat culpa labore veniam dolore. Sint mollit magna labore adipisicing reprehenderit exercitation tempor. Ad reprehenderit reprehenderit voluptate qui sunt duis est nulla ad anim nulla. Commodo qui ipsum sit et voluptate mollit cupidatat nostrud sunt ullamco. Exercitation voluptate duis reprehenderit duis ipsum et laborum velit in dolore in cillum proident.\r\n", - "registered": "2019-05-10T04:53:23 +04:00", - "latitude": 28.371863, - "longitude": 139.413437, - "tags": ["ad", "et", "ipsum", "aliquip", "dolor", "consectetur", "ea"], - "friends": [ - { - "id": 0, - "name": "Sloan Mccarty" - }, - { - "id": 1, - "name": "Savage Blair" - }, - { - "id": 2, - "name": "Jaclyn Carson" - } - ], - "greeting": "Hello, Johnson Carroll! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da8f071c72a08f30a", - "index": 676, - "guid": "3f148ea0-19ab-43bd-8d7e-3d7e4193fba6", - "isActive": false, - "balance": "$3,351.78", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Lucia Torres", - "gender": "female", - "company": "WRAPTURE", - "email": "luciatorres@wrapture.com", - "phone": "+1 (885) 569-2845", - "address": "847 Rogers Avenue, Bourg, Hawaii, 7898", - "about": "Ipsum non sunt nisi veniam labore incididunt fugiat. Excepteur do do est occaecat qui ullamco sunt aliquip enim ex nulla velit enim. Incididunt excepteur culpa culpa consectetur esse aliqua cillum sint sunt. Exercitation consectetur velit adipisicing reprehenderit ad labore amet anim commodo aute nulla. Et ad sint aliqua reprehenderit voluptate magna est. Tempor nisi tempor minim sit in. Occaecat aliqua labore mollit labore occaecat ex commodo minim exercitation.\r\n", - "registered": "2015-09-21T07:06:08 +04:00", - "latitude": -6.382708, - "longitude": -20.238307, - "tags": ["sit", "velit", "cillum", "Lorem", "in", "culpa", "consequat"], - "friends": [ - { - "id": 0, - "name": "Moran Alford" - }, - { - "id": 1, - "name": "Hall Bowman" - }, - { - "id": 2, - "name": "Judy Diaz" - } - ], - "greeting": "Hello, Lucia Torres! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d92f5761175d476a4", - "index": 677, - "guid": "e3694660-185a-4258-9f69-23009513cfdb", - "isActive": false, - "balance": "$1,179.57", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Violet Morton", - "gender": "female", - "company": "PORTALINE", - "email": "violetmorton@portaline.com", - "phone": "+1 (991) 526-3641", - "address": "528 Strickland Avenue, Roy, Nebraska, 6405", - "about": "Eu mollit consectetur qui consectetur cillum consequat. Duis est incididunt ea enim reprehenderit. Enim voluptate exercitation cillum proident do incididunt consequat laboris. Elit adipisicing dolore do ad excepteur ut veniam et quis sint ex ut. Ullamco aliquip sint in ipsum. Ex tempor ea ullamco enim dolore excepteur enim Lorem.\r\n", - "registered": "2015-03-29T10:37:24 +04:00", - "latitude": 78.245517, - "longitude": -91.196867, - "tags": ["voluptate", "Lorem", "voluptate", "occaecat", "et", "in", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Johanna Sherman" - }, - { - "id": 1, - "name": "Stein Bean" - }, - { - "id": 2, - "name": "Haney Galloway" - } - ], - "greeting": "Hello, Violet Morton! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db36ad53cc7940bf3", - "index": 678, - "guid": "0e9cece8-fbf1-42af-825e-096be9a2cb0c", - "isActive": true, - "balance": "$2,382.62", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Rasmussen Mcneil", - "gender": "male", - "company": "VIOCULAR", - "email": "rasmussenmcneil@viocular.com", - "phone": "+1 (897) 567-2346", - "address": "505 Brooklyn Avenue, Frierson, Wisconsin, 1973", - "about": "Culpa culpa nulla mollit tempor magna enim anim in nulla velit sunt esse. Nostrud sit incididunt voluptate sint. Quis veniam nulla aliquip in aliquip anim nisi amet. Deserunt laborum duis est dolor esse occaecat est velit in excepteur in enim officia reprehenderit. Id eu enim eiusmod Lorem veniam Lorem laborum culpa anim.\r\n", - "registered": "2017-08-20T07:49:40 +04:00", - "latitude": 65.862764, - "longitude": -158.164874, - "tags": ["sunt", "et", "culpa", "cillum", "consequat", "mollit", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Blankenship Yates" - }, - { - "id": 1, - "name": "Myers Reeves" - }, - { - "id": 2, - "name": "Evelyn Brown" - } - ], - "greeting": "Hello, Rasmussen Mcneil! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5a4b409185dc3862", - "index": 679, - "guid": "422670b0-378f-4e94-ba62-0fad2ca05a00", - "isActive": true, - "balance": "$2,858.57", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Suarez Joyner", - "gender": "male", - "company": "GINK", - "email": "suarezjoyner@gink.com", - "phone": "+1 (883) 538-3331", - "address": "893 Clarkson Avenue, Glenshaw, Arizona, 3642", - "about": "In dolore officia proident excepteur fugiat nostrud dolor nisi ullamco. Veniam deserunt excepteur Lorem cupidatat cupidatat Lorem culpa enim id est voluptate ex incididunt. Amet anim fugiat aliqua laboris adipisicing dolor anim exercitation do quis aute amet.\r\n", - "registered": "2014-07-07T06:50:13 +04:00", - "latitude": -25.930495, - "longitude": -129.095862, - "tags": ["exercitation", "non", "ex", "non", "exercitation", "tempor", "duis"], - "friends": [ - { - "id": 0, - "name": "Lindsey Spears" - }, - { - "id": 1, - "name": "Dana Gilliam" - }, - { - "id": 2, - "name": "Cristina Rowland" - } - ], - "greeting": "Hello, Suarez Joyner! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dcbca9eb08c66d2c3", - "index": 680, - "guid": "db87a3e5-715e-46d9-97bb-825ba7f15776", - "isActive": true, - "balance": "$1,186.26", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Holman Solomon", - "gender": "male", - "company": "VERTIDE", - "email": "holmansolomon@vertide.com", - "phone": "+1 (800) 502-3143", - "address": "956 Lyme Avenue, Saranap, Ohio, 9054", - "about": "Commodo anim non cillum amet nostrud nostrud irure fugiat qui ut magna. Tempor ex duis aute do incididunt fugiat. Ut incididunt laborum irure consequat aute cillum ex exercitation ipsum occaecat cillum. Est nostrud exercitation in mollit enim do consequat veniam commodo labore dolor.\r\n", - "registered": "2014-10-05T04:04:17 +04:00", - "latitude": -86.506706, - "longitude": -163.835505, - "tags": ["ullamco", "laborum", "nulla", "eiusmod", "enim", "Lorem", "irure"], - "friends": [ - { - "id": 0, - "name": "Carter Manning" - }, - { - "id": 1, - "name": "Cecelia Patterson" - }, - { - "id": 2, - "name": "Ebony Daniel" - } - ], - "greeting": "Hello, Holman Solomon! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d674350f1fdcb75a3", - "index": 681, - "guid": "2edf3137-dbff-4634-9839-3822d17e1fc9", - "isActive": true, - "balance": "$1,770.47", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Durham Vaughn", - "gender": "male", - "company": "EARWAX", - "email": "durhamvaughn@earwax.com", - "phone": "+1 (955) 414-2129", - "address": "957 Oceanic Avenue, Century, Arkansas, 5894", - "about": "Quis sunt est est fugiat tempor cupidatat ipsum ad sunt labore sunt elit labore. Consectetur ea sint sint enim. Cillum reprehenderit esse aliqua aliqua sint ullamco. In dolore eiusmod incididunt et commodo cupidatat laborum reprehenderit laborum consequat. Dolore amet fugiat ipsum magna magna nostrud id et eu et proident fugiat fugiat ullamco. Consequat magna enim aliquip incididunt cillum pariatur velit nulla id in nostrud.\r\n", - "registered": "2015-07-19T12:27:07 +04:00", - "latitude": 24.825864, - "longitude": 64.562411, - "tags": ["reprehenderit", "aliqua", "labore", "ex", "incididunt", "dolor", "ea"], - "friends": [ - { - "id": 0, - "name": "Colette Cardenas" - }, - { - "id": 1, - "name": "Jerry Wells" - }, - { - "id": 2, - "name": "Lamb Buckner" - } - ], - "greeting": "Hello, Durham Vaughn! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7f861b11e506b1c5", - "index": 682, - "guid": "d697e911-c840-460d-8bdf-68fd12cb3af8", - "isActive": true, - "balance": "$2,699.14", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Haynes Scott", - "gender": "male", - "company": "ISOSPHERE", - "email": "haynesscott@isosphere.com", - "phone": "+1 (897) 529-3570", - "address": "455 Dictum Court, Caln, Nevada, 758", - "about": "Ex qui do dolor nulla eiusmod. Qui qui mollit consequat aliquip nulla ad eu id commodo duis. Ut sit ea id incididunt culpa occaecat occaecat mollit.\r\n", - "registered": "2018-09-23T12:21:39 +04:00", - "latitude": 22.742959, - "longitude": 80.775762, - "tags": ["culpa", "consequat", "do", "aliqua", "sint", "ut", "culpa"], - "friends": [ - { - "id": 0, - "name": "Rosemary Hansen" - }, - { - "id": 1, - "name": "Meghan Osborn" - }, - { - "id": 2, - "name": "Martina Barr" - } - ], - "greeting": "Hello, Haynes Scott! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1f9c8846794da437", - "index": 683, - "guid": "deb9e5fa-b94e-436e-a300-d198273e65dd", - "isActive": true, - "balance": "$2,380.25", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Lambert Mcclure", - "gender": "male", - "company": "BITREX", - "email": "lambertmcclure@bitrex.com", - "phone": "+1 (860) 435-2269", - "address": "311 Utica Avenue, Klondike, Massachusetts, 5180", - "about": "Incididunt reprehenderit elit minim do esse sunt ad deserunt labore ullamco eiusmod incididunt sint proident. Amet Lorem voluptate ullamco Lorem ea anim. Ut adipisicing enim culpa incididunt. Cupidatat Lorem ea eu in incididunt incididunt dolore dolor.\r\n", - "registered": "2018-07-23T03:19:53 +04:00", - "latitude": 53.639446, - "longitude": -0.244141, - "tags": ["mollit", "consequat", "officia", "nisi", "laborum", "labore", "et"], - "friends": [ - { - "id": 0, - "name": "Liza Bolton" - }, - { - "id": 1, - "name": "Helena Roy" - }, - { - "id": 2, - "name": "Kelley Drake" - } - ], - "greeting": "Hello, Lambert Mcclure! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25de772949b509b1a3f", - "index": 684, - "guid": "798fb779-e4dd-4578-80d5-23f351fa177c", - "isActive": false, - "balance": "$3,294.44", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Mercado Dean", - "gender": "male", - "company": "EVENTEX", - "email": "mercadodean@eventex.com", - "phone": "+1 (879) 531-3422", - "address": "801 Garnet Street, Tuskahoma, Marshall Islands, 9762", - "about": "Quis cillum elit eu cillum ipsum laboris aliqua. Mollit duis irure aute sint et officia enim. Exercitation consectetur aliqua do amet proident qui ullamco magna. Et sunt cupidatat esse id labore labore sit in proident reprehenderit cupidatat proident. Reprehenderit dolor aliqua ullamco amet id et magna anim laboris aliquip eiusmod eu eu. Et labore cillum ex laboris veniam anim labore magna consequat eiusmod consectetur. Deserunt ullamco laborum aute sint nostrud irure aliqua irure elit tempor velit in officia.\r\n", - "registered": "2018-07-20T08:33:00 +04:00", - "latitude": 25.863057, - "longitude": 160.095349, - "tags": ["occaecat", "incididunt", "quis", "et", "mollit", "exercitation", "proident"], - "friends": [ - { - "id": 0, - "name": "Rosa Nichols" - }, - { - "id": 1, - "name": "Swanson Flowers" - }, - { - "id": 2, - "name": "Henrietta Wallace" - } - ], - "greeting": "Hello, Mercado Dean! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6b3c1bac6c620f8b", - "index": 685, - "guid": "ce7fd44e-96de-405e-9504-fe76841096a0", - "isActive": false, - "balance": "$2,109.34", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Imelda Gregory", - "gender": "female", - "company": "OMATOM", - "email": "imeldagregory@omatom.com", - "phone": "+1 (854) 490-3334", - "address": "984 Times Placez, Roeville, Puerto Rico, 8584", - "about": "Fugiat cillum est amet sunt labore occaecat eu laborum consequat dolore enim duis irure. Labore fugiat do nulla proident qui ea sunt in ipsum cillum. Cillum anim ea qui consequat. Anim sint consequat pariatur mollit incididunt tempor consequat. Ipsum laboris ex occaecat ipsum minim eiusmod nulla nulla amet dolore ut nostrud duis ad.\r\n", - "registered": "2019-04-20T03:45:14 +04:00", - "latitude": -67.244356, - "longitude": -162.496854, - "tags": ["minim", "proident", "est", "ullamco", "elit", "ut", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Yates Ellison" - }, - { - "id": 1, - "name": "Nadine Walters" - }, - { - "id": 2, - "name": "Mattie Watts" - } - ], - "greeting": "Hello, Imelda Gregory! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9378c59ace0494bf", - "index": 686, - "guid": "352cc205-da70-402c-b5cd-2e23dd198125", - "isActive": false, - "balance": "$2,772.46", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Audra Crawford", - "gender": "female", - "company": "ENTROPIX", - "email": "audracrawford@entropix.com", - "phone": "+1 (865) 437-3152", - "address": "540 Hornell Loop, Gasquet, California, 3031", - "about": "Nulla dolore enim enim non. Incididunt ipsum irure cillum deserunt sit aliquip aliquip qui eu est qui aliquip culpa. Fugiat elit magna elit aliqua Lorem non cillum. Ea sunt deserunt commodo culpa. Exercitation ea proident nulla in incididunt non esse consequat proident eiusmod incididunt reprehenderit incididunt aliquip. Minim reprehenderit consequat incididunt consectetur enim ex cupidatat consectetur et consectetur fugiat irure.\r\n", - "registered": "2015-02-20T05:56:56 +05:00", - "latitude": -78.575686, - "longitude": -79.324917, - "tags": ["sit", "dolor", "do", "minim", "labore", "nostrud", "dolore"], - "friends": [ - { - "id": 0, - "name": "Robbie Hampton" - }, - { - "id": 1, - "name": "Patton Duke" - }, - { - "id": 2, - "name": "Catherine Boyer" - } - ], - "greeting": "Hello, Audra Crawford! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da844a9b86e043a55", - "index": 687, - "guid": "1185d6c4-59a3-4224-b051-b688045a7cf9", - "isActive": true, - "balance": "$3,136.77", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Denise Le", - "gender": "female", - "company": "DIGIAL", - "email": "denisele@digial.com", - "phone": "+1 (920) 503-3742", - "address": "672 Joval Court, Cashtown, Tennessee, 3279", - "about": "Sint sit ut magna ipsum elit cupidatat do pariatur id occaecat. Enim ipsum voluptate deserunt voluptate dolore deserunt mollit nostrud est nulla non quis. Sint ad ipsum qui adipisicing incididunt anim elit aute nisi consequat officia consectetur labore.\r\n", - "registered": "2020-08-29T05:16:05 +04:00", - "latitude": 60.141021, - "longitude": -52.593067, - "tags": ["cillum", "sunt", "reprehenderit", "exercitation", "anim", "quis", "est"], - "friends": [ - { - "id": 0, - "name": "Weeks Best" - }, - { - "id": 1, - "name": "Silvia Sanchez" - }, - { - "id": 2, - "name": "Padilla Ratliff" - } - ], - "greeting": "Hello, Denise Le! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df7e43fb7e56b2983", - "index": 688, - "guid": "0cd500a7-f140-40e3-a0cc-a8120e94b6bf", - "isActive": true, - "balance": "$2,261.42", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Brenda Jimenez", - "gender": "female", - "company": "MAINELAND", - "email": "brendajimenez@maineland.com", - "phone": "+1 (917) 460-3018", - "address": "734 Vandalia Avenue, Barclay, Wyoming, 9212", - "about": "Commodo laborum incididunt aute elit incididunt duis occaecat officia sint nostrud laborum sunt voluptate. Qui irure anim consequat cillum nostrud magna ea. Labore duis ea est aliqua officia et exercitation occaecat excepteur consectetur officia tempor.\r\n", - "registered": "2018-07-19T02:40:48 +04:00", - "latitude": -74.311239, - "longitude": -108.910453, - "tags": ["exercitation", "eu", "duis", "ut", "non", "aute", "laboris"], - "friends": [ - { - "id": 0, - "name": "Jacobs Hurley" - }, - { - "id": 1, - "name": "Lucile Bryan" - }, - { - "id": 2, - "name": "Madge Colon" - } - ], - "greeting": "Hello, Brenda Jimenez! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d338608725f0dc382", - "index": 689, - "guid": "688820ad-71a6-450c-86bb-b34859c39f64", - "isActive": false, - "balance": "$3,279.88", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Dolores Sharp", - "gender": "female", - "company": "BOLAX", - "email": "doloressharp@bolax.com", - "phone": "+1 (848) 589-2174", - "address": "218 Sapphire Street, Brogan, North Carolina, 875", - "about": "Proident do laborum officia qui elit sunt et voluptate eiusmod dolore eu aute ut. Voluptate cupidatat dolore eu amet. Irure duis adipisicing aute elit amet non proident duis. Labore aute reprehenderit anim ullamco exercitation. Sint mollit elit pariatur laborum consectetur ea. Ipsum dolore proident labore et amet amet duis amet. Ullamco consectetur consequat esse aliquip quis ipsum in do.\r\n", - "registered": "2019-09-22T11:09:14 +04:00", - "latitude": 14.763532, - "longitude": -68.623825, - "tags": ["in", "amet", "duis", "id", "consectetur", "aliquip", "esse"], - "friends": [ - { - "id": 0, - "name": "Miriam Navarro" - }, - { - "id": 1, - "name": "Oliver Russell" - }, - { - "id": 2, - "name": "Sherri Fields" - } - ], - "greeting": "Hello, Dolores Sharp! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9bcc0dd9e313510b", - "index": 690, - "guid": "b57ead15-0cc9-45fd-8e9c-826843ebf142", - "isActive": true, - "balance": "$3,894.97", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Bruce Hayes", - "gender": "male", - "company": "TALENDULA", - "email": "brucehayes@talendula.com", - "phone": "+1 (958) 403-2693", - "address": "211 Dean Street, Grenelefe, Michigan, 9455", - "about": "Ullamco consectetur irure consectetur enim sunt ad veniam in do exercitation aute anim. Labore elit duis occaecat irure proident ea sit sunt. Id cillum consequat aliqua ea aliqua. Culpa minim nostrud pariatur enim ex consequat eu aliqua. Exercitation officia reprehenderit voluptate consectetur incididunt excepteur officia deserunt dolore eiusmod ea aliqua ex incididunt.\r\n", - "registered": "2014-05-06T03:43:54 +04:00", - "latitude": 10.944808, - "longitude": -0.214106, - "tags": ["deserunt", "excepteur", "nisi", "irure", "sunt", "anim", "laborum"], - "friends": [ - { - "id": 0, - "name": "Elisabeth Copeland" - }, - { - "id": 1, - "name": "Randall Pittman" - }, - { - "id": 2, - "name": "Wendy Dawson" - } - ], - "greeting": "Hello, Bruce Hayes! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8f2fe85c68ce4f38", - "index": 691, - "guid": "b027f8b2-a6a4-4879-925c-1e6cced865f6", - "isActive": true, - "balance": "$1,310.98", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Jane Perkins", - "gender": "female", - "company": "CANDECOR", - "email": "janeperkins@candecor.com", - "phone": "+1 (942) 554-2195", - "address": "675 Clermont Avenue, Rushford, Oklahoma, 9404", - "about": "Eu enim non laboris amet anim occaecat irure est esse elit aliquip. Elit minim do ullamco pariatur. Enim qui et nisi ullamco pariatur proident esse ad ullamco ad nisi. Lorem id ex et incididunt tempor et ullamco. Ex nostrud amet sit fugiat laborum sit nulla. Ut ipsum esse amet et mollit.\r\n", - "registered": "2014-09-17T06:53:45 +04:00", - "latitude": -17.497084, - "longitude": -24.208414, - "tags": ["occaecat", "non", "velit", "commodo", "irure", "deserunt", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Katina Cervantes" - }, - { - "id": 1, - "name": "Richards Rosario" - }, - { - "id": 2, - "name": "Jordan Baird" - } - ], - "greeting": "Hello, Jane Perkins! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4e3a06f0d55babcc", - "index": 692, - "guid": "db17cfc5-0bd0-495e-af1f-c08704988779", - "isActive": true, - "balance": "$3,057.37", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Jami Hunt", - "gender": "female", - "company": "ISONUS", - "email": "jamihunt@isonus.com", - "phone": "+1 (886) 514-3533", - "address": "997 Banner Avenue, Bentonville, Vermont, 9904", - "about": "Velit consequat ex aliqua qui sint minim dolor ex ex aliquip ipsum fugiat sunt sint. Sit commodo occaecat minim laboris proident irure laborum. Reprehenderit cupidatat qui aute cupidatat est quis esse. Veniam Lorem ad id laborum dolore anim ad consectetur et dolore ea. Velit anim adipisicing dolor fugiat sint irure id enim. Aliquip laboris dolor deserunt elit eu nulla.\r\n", - "registered": "2015-09-06T09:36:51 +04:00", - "latitude": -79.335926, - "longitude": 179.020616, - "tags": ["eiusmod", "id", "aliqua", "labore", "eu", "enim", "dolore"], - "friends": [ - { - "id": 0, - "name": "Meagan Chaney" - }, - { - "id": 1, - "name": "Montgomery Mullins" - }, - { - "id": 2, - "name": "Cruz Roberts" - } - ], - "greeting": "Hello, Jami Hunt! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbc47afc0edd0ec52", - "index": 693, - "guid": "a162d629-f063-44f9-95d6-058e4915b391", - "isActive": true, - "balance": "$3,179.18", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Hickman Schwartz", - "gender": "male", - "company": "OULU", - "email": "hickmanschwartz@oulu.com", - "phone": "+1 (934) 507-2353", - "address": "604 Bridgewater Street, Warsaw, Utah, 2200", - "about": "Tempor nostrud ut quis ut ipsum. Do cupidatat minim amet quis ea excepteur anim. Tempor proident Lorem nostrud non.\r\n", - "registered": "2020-06-30T05:37:24 +04:00", - "latitude": 9.282541, - "longitude": 137.592884, - "tags": ["veniam", "qui", "nisi", "non", "aliqua", "aute", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Houston Swanson" - }, - { - "id": 1, - "name": "Pam Gomez" - }, - { - "id": 2, - "name": "Ellison Guzman" - } - ], - "greeting": "Hello, Hickman Schwartz! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d88fa93926846397c", - "index": 694, - "guid": "082d71a3-e4ac-4010-8db3-30aae3f6154c", - "isActive": true, - "balance": "$2,384.15", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Rosie Hancock", - "gender": "female", - "company": "DIGIGEN", - "email": "rosiehancock@digigen.com", - "phone": "+1 (857) 402-2476", - "address": "219 Harway Avenue, Wolcott, Kansas, 258", - "about": "Cupidatat commodo proident sunt cillum sunt officia. Ex nulla ex consectetur duis magna nisi culpa culpa ut enim eu reprehenderit tempor. Amet voluptate incididunt excepteur dolore mollit. Ullamco consequat minim in fugiat voluptate id aute sint adipisicing. Est laboris ex sunt mollit.\r\n", - "registered": "2016-12-12T03:17:26 +05:00", - "latitude": 49.839008, - "longitude": 81.599366, - "tags": ["in", "incididunt", "eu", "laborum", "id", "et", "non"], - "friends": [ - { - "id": 0, - "name": "Wagner Morse" - }, - { - "id": 1, - "name": "Best Hicks" - }, - { - "id": 2, - "name": "Barrett Mcguire" - } - ], - "greeting": "Hello, Rosie Hancock! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dbc9145c5630237b1", - "index": 695, - "guid": "ead6104b-1172-45e6-b456-8d5ad5407b4c", - "isActive": false, - "balance": "$2,100.81", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Michelle Olsen", - "gender": "female", - "company": "GENEKOM", - "email": "michelleolsen@genekom.com", - "phone": "+1 (860) 444-3564", - "address": "927 Howard Place, Coaldale, Delaware, 691", - "about": "Ad officia deserunt in duis tempor dolore. Ullamco non in magna deserunt fugiat. Et labore dolor anim pariatur consectetur. Amet veniam reprehenderit commodo enim.\r\n", - "registered": "2014-09-27T11:56:51 +04:00", - "latitude": 12.961847, - "longitude": 97.718123, - "tags": ["occaecat", "veniam", "proident", "ullamco", "sint", "excepteur", "sunt"], - "friends": [ - { - "id": 0, - "name": "Pena Puckett" - }, - { - "id": 1, - "name": "Castaneda York" - }, - { - "id": 2, - "name": "Viola Hart" - } - ], - "greeting": "Hello, Michelle Olsen! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d84995650a8e748b6", - "index": 696, - "guid": "06d099ee-1b55-4ec5-9072-de8aeb952e81", - "isActive": true, - "balance": "$1,737.75", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Campos Reese", - "gender": "male", - "company": "GUSHKOOL", - "email": "camposreese@gushkool.com", - "phone": "+1 (817) 406-2357", - "address": "273 Vandam Street, Bowie, Guam, 382", - "about": "Labore nisi nostrud culpa enim duis non minim id ipsum amet adipisicing Lorem exercitation. Dolor ea dolor est commodo dolor. Est fugiat sint laborum esse est ipsum eu voluptate occaecat. Elit adipisicing enim labore laborum nisi consequat ipsum veniam esse cupidatat enim.\r\n", - "registered": "2018-02-07T09:46:45 +05:00", - "latitude": -12.431896, - "longitude": 45.007695, - "tags": ["deserunt", "esse", "incididunt", "laboris", "ipsum", "culpa", "sit"], - "friends": [ - { - "id": 0, - "name": "Sonja Mooney" - }, - { - "id": 1, - "name": "Deanna Odom" - }, - { - "id": 2, - "name": "Zamora Kirby" - } - ], - "greeting": "Hello, Campos Reese! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d416e1360629f4a98", - "index": 697, - "guid": "ec310567-3230-4c87-b957-710916c0ecea", - "isActive": false, - "balance": "$2,614.38", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Charles Fowler", - "gender": "male", - "company": "EMPIRICA", - "email": "charlesfowler@empirica.com", - "phone": "+1 (971) 439-2179", - "address": "167 Veronica Place, Lutsen, Oregon, 507", - "about": "Sit et eu laborum ea eiusmod enim incididunt. Aliqua eiusmod consectetur qui consequat veniam aliqua. Incididunt exercitation cillum dolore non ipsum exercitation consequat commodo. Consequat fugiat excepteur voluptate id est.\r\n", - "registered": "2018-03-20T09:29:18 +04:00", - "latitude": -31.655524, - "longitude": 88.898204, - "tags": ["id", "sunt", "laborum", "sint", "adipisicing", "laboris", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Mayer Little" - }, - { - "id": 1, - "name": "Yvonne Tanner" - }, - { - "id": 2, - "name": "Norris Kline" - } - ], - "greeting": "Hello, Charles Fowler! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df582d50ecc585b4e", - "index": 698, - "guid": "4f261591-cf8a-4c1a-bd04-187f867b44ec", - "isActive": true, - "balance": "$3,580.24", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Frederick Baldwin", - "gender": "male", - "company": "CUIZINE", - "email": "frederickbaldwin@cuizine.com", - "phone": "+1 (817) 517-3312", - "address": "175 Georgia Avenue, Kirk, Missouri, 8647", - "about": "Tempor nostrud mollit irure irure reprehenderit duis culpa aliquip fugiat eiusmod esse nostrud. Aute fugiat Lorem laborum fugiat et eu. Et est anim quis minim id anim in ipsum excepteur nostrud cillum. Mollit ea dolore proident voluptate enim dolor quis quis labore laborum aliqua laboris id do. Voluptate tempor pariatur ad cillum minim ex dolor anim anim labore veniam.\r\n", - "registered": "2016-05-15T11:29:33 +04:00", - "latitude": 50.985863, - "longitude": 141.377584, - "tags": ["nulla", "est", "duis", "incididunt", "ad", "pariatur", "laborum"], - "friends": [ - { - "id": 0, - "name": "Cecilia Morgan" - }, - { - "id": 1, - "name": "Gross Mckay" - }, - { - "id": 2, - "name": "Aguilar Craig" - } - ], - "greeting": "Hello, Frederick Baldwin! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1d1499d0b0e7e3dc", - "index": 699, - "guid": "5a11df16-0365-40ec-acd4-174c263a8185", - "isActive": false, - "balance": "$2,844.55", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Carson Carey", - "gender": "male", - "company": "AQUAFIRE", - "email": "carsoncarey@aquafire.com", - "phone": "+1 (899) 431-3419", - "address": "747 Tompkins Place, Darbydale, Montana, 6201", - "about": "Sit ad ipsum laboris qui magna qui esse nisi quis ipsum. Est in quis velit est velit aliquip ullamco. Veniam irure ut deserunt qui aliqua.\r\n", - "registered": "2019-04-23T06:31:27 +04:00", - "latitude": -67.791743, - "longitude": -2.469707, - "tags": ["fugiat", "commodo", "magna", "laboris", "tempor", "occaecat", "irure"], - "friends": [ - { - "id": 0, - "name": "Wallace Mendez" - }, - { - "id": 1, - "name": "Preston Dillon" - }, - { - "id": 2, - "name": "Cook Caldwell" - } - ], - "greeting": "Hello, Carson Carey! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dce43bac31bd558c1", - "index": 700, - "guid": "7eed4e8a-2381-4e69-8e8c-00d9e0e23def", - "isActive": true, - "balance": "$3,220.17", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Greene Mathews", - "gender": "male", - "company": "SENTIA", - "email": "greenemathews@sentia.com", - "phone": "+1 (945) 404-2184", - "address": "285 Harden Street, Carbonville, Alaska, 3010", - "about": "Anim ex magna excepteur occaecat eu consequat ad voluptate laborum cupidatat consequat. Labore qui veniam aliquip velit nisi minim amet anim. Esse sint ex cillum culpa ut consectetur elit nisi anim aute magna. Ex consequat laborum do excepteur dolor consectetur ex incididunt ut officia dolore mollit nulla. Proident Lorem cupidatat dolore adipisicing deserunt ex enim incididunt duis velit nulla. Incididunt ipsum ea exercitation excepteur labore in mollit reprehenderit anim irure. Sint duis do consectetur aliqua aute ex.\r\n", - "registered": "2017-05-14T02:48:51 +04:00", - "latitude": -33.675484, - "longitude": -66.641544, - "tags": ["eiusmod", "enim", "nostrud", "sunt", "proident", "sunt", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Oneil Solis" - }, - { - "id": 1, - "name": "Amelia Lara" - }, - { - "id": 2, - "name": "Meadows Raymond" - } - ], - "greeting": "Hello, Greene Mathews! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d33261a56a8fe90db", - "index": 701, - "guid": "daee317d-f576-439a-a076-4afe979f8af4", - "isActive": false, - "balance": "$1,034.78", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Brandy Chavez", - "gender": "female", - "company": "KIOSK", - "email": "brandychavez@kiosk.com", - "phone": "+1 (855) 587-2649", - "address": "726 Locust Avenue, Groveville, Kentucky, 1656", - "about": "Eu fugiat consequat ad Lorem est. Quis proident sunt ipsum adipisicing cupidatat reprehenderit in deserunt dolor laborum deserunt eu. Culpa eiusmod cillum nostrud ad tempor et. Et exercitation amet ullamco qui aliqua sit dolor labore sit. Qui nulla excepteur adipisicing est cillum quis laborum id ullamco id enim eiusmod incididunt. Sint pariatur minim sint occaecat esse reprehenderit pariatur dolore exercitation labore et pariatur. Aliqua irure enim pariatur do consequat aliqua cillum.\r\n", - "registered": "2017-01-08T12:06:04 +05:00", - "latitude": 11.62774, - "longitude": 31.572752, - "tags": ["laboris", "non", "aute", "commodo", "labore", "labore", "sint"], - "friends": [ - { - "id": 0, - "name": "Nellie Rocha" - }, - { - "id": 1, - "name": "Gates Larsen" - }, - { - "id": 2, - "name": "Saundra Beard" - } - ], - "greeting": "Hello, Brandy Chavez! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d56ac0b2317c83f78", - "index": 702, - "guid": "8d3da659-25c6-4f68-8a4b-21ec49dc5dab", - "isActive": false, - "balance": "$1,445.71", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Kimberley Benjamin", - "gender": "female", - "company": "PARAGONIA", - "email": "kimberleybenjamin@paragonia.com", - "phone": "+1 (831) 455-2367", - "address": "516 Sutter Avenue, Belmont, Mississippi, 5213", - "about": "Excepteur ex proident proident sit. Laboris Lorem adipisicing veniam excepteur magna ipsum in. Ipsum velit Lorem magna nostrud aute consectetur irure deserunt commodo. Deserunt nulla excepteur duis id. Dolor aliquip velit commodo sit laboris Lorem dolor nostrud magna laborum mollit laboris non duis.\r\n", - "registered": "2015-03-10T11:27:42 +04:00", - "latitude": 13.026519, - "longitude": -12.265478, - "tags": ["reprehenderit", "ipsum", "elit", "exercitation", "aliquip", "pariatur", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Julia Oliver" - }, - { - "id": 1, - "name": "Frieda Fuller" - }, - { - "id": 2, - "name": "Summer Hood" - } - ], - "greeting": "Hello, Kimberley Benjamin! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d94174a06c1598eb9", - "index": 703, - "guid": "16982a67-4bf1-4f94-9dff-1ec2bd387485", - "isActive": true, - "balance": "$3,114.28", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Shannon Ferrell", - "gender": "male", - "company": "HOUSEDOWN", - "email": "shannonferrell@housedown.com", - "phone": "+1 (859) 519-3736", - "address": "331 Stewart Street, Coyote, North Dakota, 7491", - "about": "Reprehenderit nulla eu duis elit ea irure magna ipsum. Irure duis nulla excepteur excepteur nostrud qui excepteur magna officia commodo. Do quis officia aliquip aliqua eu enim id eu excepteur exercitation in enim dolor culpa. Excepteur eiusmod elit ex ipsum incididunt. Et laboris sit amet reprehenderit ex enim deserunt anim dolore ullamco consequat id. Laboris incididunt est non est et dolore ipsum. Sint minim ea pariatur ad mollit velit proident esse nisi laboris.\r\n", - "registered": "2018-01-28T08:30:55 +05:00", - "latitude": -28.209322, - "longitude": 132.157591, - "tags": ["adipisicing", "nulla", "in", "reprehenderit", "enim", "incididunt", "duis"], - "friends": [ - { - "id": 0, - "name": "Rivas Rasmussen" - }, - { - "id": 1, - "name": "Weber Wolfe" - }, - { - "id": 2, - "name": "Chaney Goff" - } - ], - "greeting": "Hello, Shannon Ferrell! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df5ff545538ffeb5f", - "index": 704, - "guid": "39a0d81b-977f-4ebd-a257-a78ed1d251ad", - "isActive": false, - "balance": "$1,774.38", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Irma Powell", - "gender": "female", - "company": "FREAKIN", - "email": "irmapowell@freakin.com", - "phone": "+1 (901) 538-2057", - "address": "488 Hopkins Street, Yogaville, Federated States Of Micronesia, 5152", - "about": "Aliqua proident tempor ullamco cillum veniam dolore id proident. Dolore non cupidatat magna ut aliquip sunt ad fugiat enim magna. Anim sunt ut Lorem velit non reprehenderit amet aute. Cupidatat cillum nostrud aliqua aliqua occaecat sit elit laborum esse aute quis nulla aute ut. Nulla commodo qui excepteur dolor fugiat sunt commodo aliquip in.\r\n", - "registered": "2016-04-17T09:36:12 +04:00", - "latitude": -49.382024, - "longitude": -43.492168, - "tags": ["Lorem", "consequat", "laboris", "exercitation", "quis", "ipsum", "commodo"], - "friends": [ - { - "id": 0, - "name": "Santana Morrow" - }, - { - "id": 1, - "name": "Charmaine Wilcox" - }, - { - "id": 2, - "name": "Ester Simpson" - } - ], - "greeting": "Hello, Irma Powell! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7020020147537583", - "index": 705, - "guid": "82100cad-206a-4d8d-9215-a8d34a48c582", - "isActive": true, - "balance": "$2,621.40", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Raymond Oneil", - "gender": "male", - "company": "KIDGREASE", - "email": "raymondoneil@kidgrease.com", - "phone": "+1 (869) 581-3800", - "address": "451 Farragut Road, Sidman, Maryland, 1408", - "about": "Sint et deserunt esse mollit adipisicing amet deserunt duis esse voluptate sint ea Lorem. Enim ipsum irure irure pariatur dolor et in aliquip incididunt enim ea adipisicing nisi qui. Velit qui commodo do velit aliqua adipisicing minim tempor laboris pariatur elit nulla mollit aliquip. Et elit elit deserunt officia enim aute ullamco nisi nisi fugiat sit deserunt.\r\n", - "registered": "2015-08-07T08:42:20 +04:00", - "latitude": -42.80966, - "longitude": -152.055399, - "tags": ["non", "minim", "amet", "consequat", "nulla", "aute", "laboris"], - "friends": [ - { - "id": 0, - "name": "Theresa English" - }, - { - "id": 1, - "name": "Heath Vazquez" - }, - { - "id": 2, - "name": "Joyner Walter" - } - ], - "greeting": "Hello, Raymond Oneil! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de10397d58ecc0c46", - "index": 706, - "guid": "1b17c14c-755d-41e5-864e-5c116875721c", - "isActive": false, - "balance": "$2,975.55", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Jeanie Carter", - "gender": "female", - "company": "DIGIQUE", - "email": "jeaniecarter@digique.com", - "phone": "+1 (819) 442-2129", - "address": "700 Dooley Street, Shelby, Virgin Islands, 204", - "about": "Tempor qui qui Lorem ea sit sunt sint ullamco cupidatat mollit. Ea do veniam deserunt sunt ipsum dolore et et cillum nostrud reprehenderit quis ex. Nostrud laboris laborum eiusmod occaecat mollit nisi veniam quis occaecat cillum nisi. Consectetur ipsum esse eiusmod ullamco mollit proident nostrud proident officia anim cillum id.\r\n", - "registered": "2017-11-18T10:17:39 +05:00", - "latitude": -66.619662, - "longitude": 117.897909, - "tags": ["deserunt", "cupidatat", "minim", "nulla", "pariatur", "ipsum", "sunt"], - "friends": [ - { - "id": 0, - "name": "Darlene Stephenson" - }, - { - "id": 1, - "name": "Annette Santana" - }, - { - "id": 2, - "name": "Fields Moore" - } - ], - "greeting": "Hello, Jeanie Carter! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc81942810d5b12f5", - "index": 707, - "guid": "1c1e66a5-7d4b-4245-a954-e454444618fb", - "isActive": true, - "balance": "$1,928.78", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Louisa Frye", - "gender": "female", - "company": "INSOURCE", - "email": "louisafrye@insource.com", - "phone": "+1 (982) 588-3293", - "address": "286 Allen Avenue, Trexlertown, Pennsylvania, 8089", - "about": "Anim laborum duis dolore veniam magna officia tempor nostrud cupidatat sint esse enim. Eu voluptate commodo aliquip eiusmod et et quis esse culpa. Reprehenderit Lorem voluptate minim est nostrud. Ut Lorem pariatur ex velit do occaecat nostrud do minim ipsum mollit.\r\n", - "registered": "2016-06-04T07:00:23 +04:00", - "latitude": 82.188464, - "longitude": -76.218387, - "tags": ["dolor", "ut", "labore", "ipsum", "id", "adipisicing", "et"], - "friends": [ - { - "id": 0, - "name": "Luann Hughes" - }, - { - "id": 1, - "name": "Fox Valenzuela" - }, - { - "id": 2, - "name": "Michael Glenn" - } - ], - "greeting": "Hello, Louisa Frye! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7b70d2d0ae7d853a", - "index": 708, - "guid": "9d86a8f8-1642-445f-8e37-df578adb230b", - "isActive": true, - "balance": "$3,776.44", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Dudley Zamora", - "gender": "male", - "company": "OHMNET", - "email": "dudleyzamora@ohmnet.com", - "phone": "+1 (965) 491-3701", - "address": "883 Blake Avenue, Cleary, Washington, 6591", - "about": "Sint deserunt laboris aliquip cupidatat esse sunt nostrud adipisicing laborum eu ea. Duis deserunt culpa non ullamco deserunt et consectetur. Reprehenderit Lorem enim minim irure do ullamco esse quis id dolor. Qui consectetur culpa voluptate esse ullamco sint proident. Labore proident exercitation laboris cillum adipisicing sunt ex irure. Eiusmod duis aliqua sunt in non incididunt in amet qui officia do sit. Lorem commodo ad exercitation proident adipisicing nulla et.\r\n", - "registered": "2016-04-20T07:55:49 +04:00", - "latitude": -63.668603, - "longitude": -68.13265, - "tags": ["exercitation", "tempor", "tempor", "reprehenderit", "irure", "id", "velit"], - "friends": [ - { - "id": 0, - "name": "Weaver Mckee" - }, - { - "id": 1, - "name": "Wolfe Maynard" - }, - { - "id": 2, - "name": "Newton Leon" - } - ], - "greeting": "Hello, Dudley Zamora! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0823d27825b0a083", - "index": 709, - "guid": "c8be48a1-bc20-49ce-b3c7-f7b41bbd363a", - "isActive": true, - "balance": "$2,759.42", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Janna Porter", - "gender": "female", - "company": "ZANITY", - "email": "jannaporter@zanity.com", - "phone": "+1 (852) 595-3780", - "address": "345 Burnett Street, Leyner, Illinois, 2968", - "about": "Cupidatat reprehenderit cillum nulla ipsum voluptate occaecat. Anim enim proident excepteur culpa laboris excepteur amet aute laboris velit in reprehenderit laborum mollit. Cillum minim et reprehenderit enim cupidatat do sit ullamco ea ea velit ut deserunt laboris.\r\n", - "registered": "2018-02-18T09:30:57 +05:00", - "latitude": 4.337165, - "longitude": -14.889289, - "tags": ["et", "amet", "enim", "nisi", "magna", "aute", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Twila Bonner" - }, - { - "id": 1, - "name": "Osborne Cote" - }, - { - "id": 2, - "name": "Melody Tate" - } - ], - "greeting": "Hello, Janna Porter! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df3f86c61f9a674b4", - "index": 710, - "guid": "ccb1b376-abf0-42b3-81c0-112ca31694e1", - "isActive": false, - "balance": "$2,309.96", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Morris Carpenter", - "gender": "male", - "company": "INJOY", - "email": "morriscarpenter@injoy.com", - "phone": "+1 (877) 518-3044", - "address": "574 Cranberry Street, Sunbury, New Hampshire, 9230", - "about": "Ad aute in pariatur enim sunt esse. Incididunt ea ullamco esse deserunt irure culpa commodo aute quis consectetur quis duis amet. Elit incididunt aliquip consequat aliquip. Minim elit excepteur anim qui ipsum commodo fugiat laboris amet veniam ipsum deserunt ea ex. Tempor incididunt nisi incididunt minim dolor. Eiusmod nisi aliquip duis officia esse cillum amet nisi anim nostrud esse.\r\n", - "registered": "2018-05-06T01:23:42 +04:00", - "latitude": 54.122626, - "longitude": 68.508976, - "tags": ["cillum", "qui", "consequat", "fugiat", "amet", "dolor", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Schultz Sexton" - }, - { - "id": 1, - "name": "Ofelia Mason" - }, - { - "id": 2, - "name": "Cora Gonzales" - } - ], - "greeting": "Hello, Morris Carpenter! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d67353620844fc27e", - "index": 711, - "guid": "2e3d0f8e-7d56-4125-a8e5-dd47422ea344", - "isActive": false, - "balance": "$3,292.46", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Brown Fuentes", - "gender": "male", - "company": "GRAINSPOT", - "email": "brownfuentes@grainspot.com", - "phone": "+1 (915) 578-2274", - "address": "365 Ross Street, Sanders, Colorado, 4786", - "about": "Adipisicing nisi ex consectetur magna labore ut enim nulla non irure dolore sint incididunt magna. Aliqua nulla irure deserunt sint reprehenderit. Minim ex eu dolore sunt laboris veniam. Sunt voluptate ad qui tempor sint quis est mollit Lorem esse ipsum veniam. Aute esse sunt aliquip non commodo enim duis ipsum. Dolor dolore voluptate tempor laborum nisi ut amet Lorem nostrud laborum dolor incididunt cillum.\r\n", - "registered": "2018-08-11T11:41:12 +04:00", - "latitude": 10.077812, - "longitude": 117.159144, - "tags": ["non", "tempor", "in", "fugiat", "cillum", "non", "sint"], - "friends": [ - { - "id": 0, - "name": "Esperanza Montoya" - }, - { - "id": 1, - "name": "Coleman Stafford" - }, - { - "id": 2, - "name": "Conrad Curry" - } - ], - "greeting": "Hello, Brown Fuentes! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da1c8611a6a23ed63", - "index": 712, - "guid": "36632c99-e94e-4da1-92e1-620861b27667", - "isActive": true, - "balance": "$2,201.90", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Gale Johns", - "gender": "female", - "company": "GINKOGENE", - "email": "galejohns@ginkogene.com", - "phone": "+1 (816) 477-3278", - "address": "443 Bay Parkway, Enoree, Maine, 5177", - "about": "Irure duis dolor aliquip ut mollit eu anim ea nisi. Do aliquip magna amet esse Lorem in sit aute et esse quis laborum laboris. Commodo eiusmod exercitation proident cillum cillum tempor id enim non nostrud. Minim magna in tempor enim. Esse officia quis fugiat esse elit enim adipisicing proident occaecat cillum. Amet eiusmod non commodo culpa eiusmod eu ipsum et ex eu id. Occaecat cillum culpa officia nisi eu.\r\n", - "registered": "2016-12-01T08:21:31 +05:00", - "latitude": -12.832688, - "longitude": -40.943669, - "tags": ["eiusmod", "in", "quis", "pariatur", "cupidatat", "fugiat", "sit"], - "friends": [ - { - "id": 0, - "name": "Candy Santos" - }, - { - "id": 1, - "name": "Kerr Keller" - }, - { - "id": 2, - "name": "Ruthie Haynes" - } - ], - "greeting": "Hello, Gale Johns! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dfbaa9ce64f908d95", - "index": 713, - "guid": "bc73fb6f-7563-49f3-836b-599e536c35ba", - "isActive": true, - "balance": "$1,011.61", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Stokes Lyons", - "gender": "male", - "company": "COMTOUR", - "email": "stokeslyons@comtour.com", - "phone": "+1 (977) 527-2637", - "address": "186 Bennet Court, Foxworth, South Carolina, 4678", - "about": "Deserunt deserunt excepteur elit Lorem aliqua. Labore nisi eiusmod non consequat sint adipisicing tempor esse reprehenderit. Anim ipsum magna duis aliqua commodo exercitation officia exercitation ex officia ea culpa consequat consectetur. In laboris veniam in aute laborum eiusmod exercitation nisi voluptate dolore et incididunt non.\r\n", - "registered": "2017-10-09T05:57:29 +04:00", - "latitude": 26.10638, - "longitude": -154.458885, - "tags": ["Lorem", "velit", "culpa", "commodo", "do", "proident", "sit"], - "friends": [ - { - "id": 0, - "name": "Tonia Bruce" - }, - { - "id": 1, - "name": "Hess Talley" - }, - { - "id": 2, - "name": "Rosetta Castro" - } - ], - "greeting": "Hello, Stokes Lyons! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2064acfbf6332b0b", - "index": 714, - "guid": "ebf7afde-3ded-41f6-aa46-fade375ee75e", - "isActive": true, - "balance": "$3,373.29", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Pickett Griffin", - "gender": "male", - "company": "PORTICO", - "email": "pickettgriffin@portico.com", - "phone": "+1 (904) 447-3988", - "address": "101 Elm Place, Glasgow, Connecticut, 6218", - "about": "Nisi ea nulla aute mollit eiusmod aliquip tempor non laborum adipisicing. Ex qui veniam occaecat incididunt non ea et aute labore Lorem laboris commodo non. Irure est minim non nisi ea dolor.\r\n", - "registered": "2020-07-05T11:52:23 +04:00", - "latitude": -84.60705, - "longitude": 25.921358, - "tags": ["consequat", "est", "aute", "amet", "qui", "id", "duis"], - "friends": [ - { - "id": 0, - "name": "Francis Kim" - }, - { - "id": 1, - "name": "Virginia Moses" - }, - { - "id": 2, - "name": "Nichols Meyer" - } - ], - "greeting": "Hello, Pickett Griffin! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1a8bf078dbb22ca0", - "index": 715, - "guid": "87d495e4-637f-4439-a3f9-2b1c14fbad6b", - "isActive": true, - "balance": "$2,550.95", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Moreno Cunningham", - "gender": "male", - "company": "MATRIXITY", - "email": "morenocunningham@matrixity.com", - "phone": "+1 (990) 556-3784", - "address": "233 Gerritsen Avenue, Emison, Virginia, 6528", - "about": "Esse ut consequat ea voluptate laboris nostrud cupidatat. Esse pariatur esse duis eiusmod exercitation Lorem dolore esse deserunt irure eu. Mollit in elit qui ut qui labore voluptate est nulla.\r\n", - "registered": "2014-07-26T03:44:59 +04:00", - "latitude": -89.953273, - "longitude": 129.542361, - "tags": ["aute", "minim", "dolor", "esse", "eu", "cillum", "ea"], - "friends": [ - { - "id": 0, - "name": "Dale Gay" - }, - { - "id": 1, - "name": "Simmons Snyder" - }, - { - "id": 2, - "name": "Hays Kaufman" - } - ], - "greeting": "Hello, Moreno Cunningham! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d12efa5f48c8c8794", - "index": 716, - "guid": "a1386d88-b938-470c-825d-76dc26255b70", - "isActive": false, - "balance": "$2,703.05", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Alejandra Delaney", - "gender": "female", - "company": "ROCKABYE", - "email": "alejandradelaney@rockabye.com", - "phone": "+1 (805) 572-3924", - "address": "332 Court Street, Cedarville, Georgia, 3819", - "about": "Incididunt ad ut irure minim duis sint proident proident cillum quis quis eu. Commodo nostrud nulla enim laboris fugiat quis eu ea amet veniam. Et fugiat laborum mollit veniam reprehenderit aliqua deserunt. Esse elit in pariatur sunt labore irure anim elit duis sit excepteur Lorem. Amet nisi velit quis aliquip proident est occaecat ad aliquip eiusmod. Fugiat deserunt aute aliqua cillum ipsum aliqua.\r\n", - "registered": "2018-01-05T01:39:43 +05:00", - "latitude": -61.835696, - "longitude": 111.510436, - "tags": ["duis", "ad", "est", "in", "do", "ipsum", "aute"], - "friends": [ - { - "id": 0, - "name": "Corrine Chan" - }, - { - "id": 1, - "name": "Shaffer Buckley" - }, - { - "id": 2, - "name": "Rowe Stevenson" - } - ], - "greeting": "Hello, Alejandra Delaney! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1809fe6f7dfb144f", - "index": 717, - "guid": "5964e247-1664-4ced-a71f-a62f4afce5ff", - "isActive": false, - "balance": "$2,911.51", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Gabriela Sparks", - "gender": "female", - "company": "KOOGLE", - "email": "gabrielasparks@koogle.com", - "phone": "+1 (849) 401-3841", - "address": "230 Classon Avenue, Farmington, New Jersey, 5862", - "about": "Aliqua enim ea ipsum officia exercitation culpa duis esse eiusmod consectetur eiusmod tempor. Exercitation ipsum reprehenderit occaecat do est tempor tempor minim id nostrud. Mollit quis ut eiusmod aliqua veniam et.\r\n", - "registered": "2020-01-05T06:20:04 +05:00", - "latitude": 19.915897, - "longitude": -121.589887, - "tags": ["amet", "anim", "minim", "sint", "ipsum", "qui", "est"], - "friends": [ - { - "id": 0, - "name": "Foley Spencer" - }, - { - "id": 1, - "name": "Lena Silva" - }, - { - "id": 2, - "name": "Alicia Ferguson" - } - ], - "greeting": "Hello, Gabriela Sparks! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9913f411fe1b6f5c", - "index": 718, - "guid": "6b08cbc5-7b4c-42ee-96d7-ab5454afd506", - "isActive": true, - "balance": "$3,247.15", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Poole Walsh", - "gender": "male", - "company": "KAGGLE", - "email": "poolewalsh@kaggle.com", - "phone": "+1 (945) 502-3067", - "address": "626 Hudson Avenue, Winston, Minnesota, 336", - "about": "Nulla adipisicing sit ipsum eiusmod nulla pariatur anim sint consectetur non cupidatat pariatur quis officia. Nostrud nostrud veniam anim anim anim in do enim labore veniam duis sit. Mollit laborum consequat enim consectetur qui tempor cupidatat elit veniam est magna consequat officia exercitation.\r\n", - "registered": "2017-02-16T08:13:22 +05:00", - "latitude": -60.396071, - "longitude": -24.012157, - "tags": ["ex", "ipsum", "dolore", "amet", "sunt", "excepteur", "mollit"], - "friends": [ - { - "id": 0, - "name": "Lila Tyler" - }, - { - "id": 1, - "name": "Vaughan Harper" - }, - { - "id": 2, - "name": "Kathie Estes" - } - ], - "greeting": "Hello, Poole Walsh! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d129674ac15cb816c", - "index": 719, - "guid": "828d20b6-64dc-48fd-ab86-4d01efde6b3a", - "isActive": false, - "balance": "$3,199.75", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Woods Mcbride", - "gender": "male", - "company": "ETERNIS", - "email": "woodsmcbride@eternis.com", - "phone": "+1 (997) 453-2481", - "address": "304 Rutherford Place, Bordelonville, Texas, 487", - "about": "Ut officia duis anim duis ullamco enim minim id et nisi mollit adipisicing Lorem et. Sunt tempor amet voluptate proident ea quis mollit ea id occaecat ipsum do sunt nisi. Consequat ad magna et labore ex ad Lorem fugiat ea amet fugiat.\r\n", - "registered": "2015-01-16T02:16:35 +05:00", - "latitude": 81.999865, - "longitude": -39.615812, - "tags": ["labore", "labore", "ea", "cillum", "eu", "sit", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Lynda Hernandez" - }, - { - "id": 1, - "name": "Dawn Garcia" - }, - { - "id": 2, - "name": "Consuelo Burgess" - } - ], - "greeting": "Hello, Woods Mcbride! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dce91fec1b991e531", - "index": 720, - "guid": "17c2e227-d70b-4b2d-b99e-fb0805422d6b", - "isActive": false, - "balance": "$1,082.40", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Berger Parker", - "gender": "male", - "company": "COGENTRY", - "email": "bergerparker@cogentry.com", - "phone": "+1 (889) 590-3081", - "address": "929 Luquer Street, Marbury, Alabama, 8255", - "about": "Ad labore labore ad ut nisi quis nostrud Lorem. Do elit nulla est sunt est esse. Est minim voluptate cillum commodo. Nisi amet ipsum veniam sit excepteur voluptate ea non ex esse irure ad voluptate. Dolore sit pariatur reprehenderit aute qui ullamco irure sit. Reprehenderit sint ad voluptate in duis dolore elit qui aliquip quis sit.\r\n", - "registered": "2015-08-20T07:30:04 +04:00", - "latitude": -60.20478, - "longitude": -61.998413, - "tags": ["cupidatat", "id", "nisi", "laborum", "esse", "ipsum", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Lora Richmond" - }, - { - "id": 1, - "name": "Roth Mccormick" - }, - { - "id": 2, - "name": "Rene Beasley" - } - ], - "greeting": "Hello, Berger Parker! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d63501779b1fe6cc1", - "index": 721, - "guid": "a7182167-ffd8-4308-a9a9-8602d23ff1ca", - "isActive": false, - "balance": "$3,521.34", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Cantu Barrera", - "gender": "male", - "company": "PLASTO", - "email": "cantubarrera@plasto.com", - "phone": "+1 (929) 549-3115", - "address": "607 Holmes Lane, Toftrees, Rhode Island, 4458", - "about": "Quis et excepteur minim veniam Lorem. Officia ipsum cupidatat ex reprehenderit ea officia anim laboris amet enim cillum aute ut. Aliquip cupidatat proident nisi sint nisi proident exercitation ipsum. Culpa dolor nulla magna sunt eu.\r\n", - "registered": "2014-02-09T11:00:23 +05:00", - "latitude": 46.158986, - "longitude": -12.195567, - "tags": ["consequat", "consequat", "nostrud", "ut", "Lorem", "ex", "in"], - "friends": [ - { - "id": 0, - "name": "Letitia Hess" - }, - { - "id": 1, - "name": "Perkins Johnson" - }, - { - "id": 2, - "name": "Brandie Branch" - } - ], - "greeting": "Hello, Cantu Barrera! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da2fb99c4a9388b0c", - "index": 722, - "guid": "10918067-b05b-42e2-a064-984c0ea63322", - "isActive": true, - "balance": "$2,071.03", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Andrews Mcleod", - "gender": "male", - "company": "BEDLAM", - "email": "andrewsmcleod@bedlam.com", - "phone": "+1 (938) 509-3886", - "address": "872 Wogan Terrace, Cloverdale, Florida, 2107", - "about": "Lorem anim labore in minim consequat aute exercitation eu commodo commodo ullamco eu culpa esse. Exercitation esse commodo ullamco eu elit dolore reprehenderit ea officia ullamco nisi quis minim reprehenderit. Laborum aliqua eu amet labore culpa ea excepteur ullamco ullamco voluptate do veniam labore.\r\n", - "registered": "2018-02-08T03:15:20 +05:00", - "latitude": -6.069035, - "longitude": 161.399078, - "tags": ["est", "nisi", "aute", "eiusmod", "sit", "dolore", "elit"], - "friends": [ - { - "id": 0, - "name": "Addie Noel" - }, - { - "id": 1, - "name": "Samantha Tyson" - }, - { - "id": 2, - "name": "Gregory Leblanc" - } - ], - "greeting": "Hello, Andrews Mcleod! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db4751e646f623299", - "index": 723, - "guid": "d7d9aee1-64ce-42c1-93d8-6edbdd5815d0", - "isActive": true, - "balance": "$1,487.14", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Bray Bennett", - "gender": "male", - "company": "GENMOM", - "email": "braybennett@genmom.com", - "phone": "+1 (954) 577-2212", - "address": "772 Columbia Place, Broadlands, Indiana, 5652", - "about": "Aliqua culpa velit ut mollit laboris elit deserunt ea occaecat. Mollit voluptate Lorem laboris consectetur proident cupidatat irure reprehenderit aliqua ea amet eu cillum pariatur. Eiusmod eu incididunt ex deserunt.\r\n", - "registered": "2016-07-26T11:36:58 +04:00", - "latitude": -6.899625, - "longitude": 113.179297, - "tags": ["cillum", "laborum", "est", "ipsum", "duis", "enim", "ex"], - "friends": [ - { - "id": 0, - "name": "Carly Page" - }, - { - "id": 1, - "name": "Naomi Franklin" - }, - { - "id": 2, - "name": "Lessie Mitchell" - } - ], - "greeting": "Hello, Bray Bennett! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d72b824a1643973b4", - "index": 724, - "guid": "160b72fe-738c-4acd-9459-ebd07d60d502", - "isActive": true, - "balance": "$2,819.05", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Booth Bowen", - "gender": "male", - "company": "QABOOS", - "email": "boothbowen@qaboos.com", - "phone": "+1 (977) 408-3216", - "address": "440 Lincoln Place, Moscow, Northern Mariana Islands, 3165", - "about": "Ex mollit eu elit et velit mollit duis proident anim est nostrud ea ad. Ut ullamco qui laborum eiusmod minim eiusmod culpa culpa veniam ad anim magna magna ipsum. Ullamco elit sit in culpa laborum ipsum. Occaecat nostrud dolore veniam consectetur veniam ipsum reprehenderit dolore. Laborum laboris culpa aliquip deserunt labore adipisicing. Laboris enim veniam sunt eiusmod. Pariatur eiusmod qui eiusmod ad.\r\n", - "registered": "2018-11-07T11:56:59 +05:00", - "latitude": -63.947155, - "longitude": 76.811135, - "tags": ["nostrud", "ex", "et", "consequat", "mollit", "labore", "non"], - "friends": [ - { - "id": 0, - "name": "Wendi Hodge" - }, - { - "id": 1, - "name": "Heather Taylor" - }, - { - "id": 2, - "name": "Leon Neal" - } - ], - "greeting": "Hello, Booth Bowen! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d95b756c8b4d30438", - "index": 725, - "guid": "c4aeff59-6b5d-48f1-8b93-1092ef28b3ac", - "isActive": false, - "balance": "$1,395.35", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Cecile Reynolds", - "gender": "female", - "company": "ZAGGLES", - "email": "cecilereynolds@zaggles.com", - "phone": "+1 (843) 547-3378", - "address": "543 Gem Street, Salix, Idaho, 6093", - "about": "In qui laborum minim qui. Ullamco magna eiusmod ut tempor nisi incididunt occaecat pariatur exercitation minim adipisicing deserunt tempor. Lorem culpa veniam commodo pariatur labore Lorem reprehenderit tempor. Consectetur mollit laborum anim nulla dolor excepteur nulla cupidatat in. Consequat excepteur voluptate cupidatat non nulla occaecat cupidatat nulla aute nostrud. Dolore labore quis eu irure voluptate cillum proident. Exercitation nostrud minim id cupidatat laborum ad id ipsum ex nisi quis deserunt quis.\r\n", - "registered": "2019-06-10T11:20:50 +04:00", - "latitude": 80.829756, - "longitude": -134.549583, - "tags": ["consequat", "et", "reprehenderit", "quis", "culpa", "commodo", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Vonda Tillman" - }, - { - "id": 1, - "name": "Newman Wilson" - }, - { - "id": 2, - "name": "Forbes Conway" - } - ], - "greeting": "Hello, Cecile Reynolds! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db350269b23143709", - "index": 726, - "guid": "6511ed2d-5b15-4fa9-bf87-96f1b091fbce", - "isActive": true, - "balance": "$1,438.18", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Vinson Potter", - "gender": "male", - "company": "URBANSHEE", - "email": "vinsonpotter@urbanshee.com", - "phone": "+1 (866) 579-2769", - "address": "399 Herbert Street, Marienthal, District Of Columbia, 9311", - "about": "Qui tempor velit nisi mollit velit ad irure culpa quis in et ea aliquip cupidatat. Sunt ut veniam sunt reprehenderit nostrud. Eiusmod dolor sit laborum ut ad dolore esse minim est. Est officia nostrud laboris pariatur cupidatat exercitation exercitation ullamco voluptate. Consectetur sit dolor nulla mollit ipsum aliquip adipisicing voluptate mollit ipsum. Tempor cupidatat minim commodo amet mollit.\r\n", - "registered": "2020-06-15T08:07:24 +04:00", - "latitude": 69.294263, - "longitude": -145.654763, - "tags": ["proident", "nostrud", "ea", "aute", "excepteur", "do", "dolore"], - "friends": [ - { - "id": 0, - "name": "Roseann Mcgowan" - }, - { - "id": 1, - "name": "Green Lancaster" - }, - { - "id": 2, - "name": "Graham Boyle" - } - ], - "greeting": "Hello, Vinson Potter! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5f079f8494abb613", - "index": 727, - "guid": "73923c25-822a-40d6-afd7-39bfd04b57c3", - "isActive": true, - "balance": "$2,629.90", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Dona Grant", - "gender": "female", - "company": "COGNICODE", - "email": "donagrant@cognicode.com", - "phone": "+1 (870) 552-2812", - "address": "836 John Street, Grimsley, New Mexico, 3766", - "about": "Laboris ex anim incididunt occaecat. Minim laborum non excepteur ullamco eu amet tempor qui ad eiusmod minim consequat laboris adipisicing. Cillum et sunt aliqua aute cupidatat dolor non tempor enim quis ipsum labore. Do do fugiat irure id ex eu et deserunt. Occaecat fugiat adipisicing magna cillum. Amet reprehenderit tempor enim magna deserunt. Irure eiusmod sunt tempor quis deserunt aliqua proident.\r\n", - "registered": "2019-01-05T04:15:33 +05:00", - "latitude": -79.458909, - "longitude": 56.04225, - "tags": ["in", "fugiat", "sunt", "qui", "ea", "dolore", "ex"], - "friends": [ - { - "id": 0, - "name": "Leach Nieves" - }, - { - "id": 1, - "name": "Deann Sawyer" - }, - { - "id": 2, - "name": "Morton Booth" - } - ], - "greeting": "Hello, Dona Grant! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d073ef5b142eb9e90", - "index": 728, - "guid": "c423456c-a87c-49fa-b55e-b17a5c824fbd", - "isActive": true, - "balance": "$3,181.71", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Merle Edwards", - "gender": "female", - "company": "COMTEXT", - "email": "merleedwards@comtext.com", - "phone": "+1 (827) 413-2554", - "address": "160 Jaffray Street, Lacomb, South Dakota, 8102", - "about": "Duis quis magna dolore dolore enim velit pariatur ea. Anim est qui sint proident laboris proident esse reprehenderit mollit deserunt aliquip esse laboris nostrud. Id reprehenderit dolor sint sint culpa minim veniam sit magna. Dolor sunt dolore proident sint. Elit fugiat aliqua deserunt non anim quis labore est do. Aute enim cupidatat id adipisicing aliquip veniam amet qui cupidatat eiusmod elit elit sit dolor.\r\n", - "registered": "2016-09-23T05:08:59 +04:00", - "latitude": -26.331074, - "longitude": -46.894566, - "tags": ["excepteur", "nostrud", "laborum", "ipsum", "culpa", "labore", "labore"], - "friends": [ - { - "id": 0, - "name": "Fisher Malone" - }, - { - "id": 1, - "name": "Cochran Spence" - }, - { - "id": 2, - "name": "Moss Hunter" - } - ], - "greeting": "Hello, Merle Edwards! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d82a134248aa3f899", - "index": 729, - "guid": "6c09aa9e-8c43-4f51-851a-af431f03453b", - "isActive": false, - "balance": "$2,760.86", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Guerrero Wiley", - "gender": "male", - "company": "ORBIXTAR", - "email": "guerrerowiley@orbixtar.com", - "phone": "+1 (809) 512-2091", - "address": "553 National Drive, Santel, American Samoa, 5280", - "about": "Amet eiusmod enim eu culpa quis est mollit cupidatat fugiat culpa eiusmod anim ut. Ullamco duis dolor cupidatat irure id consectetur mollit esse mollit officia. Cupidatat officia quis dolore laboris eu consequat Lorem dolore qui et tempor sit aute. Veniam voluptate aute sunt est officia nulla dolore. Fugiat occaecat amet voluptate mollit esse voluptate esse exercitation ipsum proident amet labore. Velit mollit dolor laboris aliqua sint incididunt anim nulla minim Lorem. Do laborum est est elit mollit eiusmod.\r\n", - "registered": "2019-11-02T01:46:12 +04:00", - "latitude": 40.556249, - "longitude": 78.099353, - "tags": ["eu", "officia", "commodo", "amet", "occaecat", "exercitation", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Warren Vargas" - }, - { - "id": 1, - "name": "Ella Howe" - }, - { - "id": 2, - "name": "Danielle Bradford" - } - ], - "greeting": "Hello, Guerrero Wiley! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0db0eabdab170e5f", - "index": 730, - "guid": "eda3959f-dae5-49cc-8fab-68513df52b60", - "isActive": true, - "balance": "$1,462.14", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Susan Blanchard", - "gender": "female", - "company": "JAMNATION", - "email": "susanblanchard@jamnation.com", - "phone": "+1 (810) 468-3925", - "address": "929 Bassett Avenue, Hampstead, Iowa, 8975", - "about": "Ut amet laboris consectetur est labore est occaecat dolore labore enim. Amet duis proident nostrud in esse labore fugiat do voluptate nostrud officia irure. Amet incididunt incididunt ut aliquip magna commodo sunt occaecat ullamco tempor nisi. Quis ullamco occaecat esse labore ex deserunt et minim veniam officia nostrud mollit sunt cupidatat. Aute ea cupidatat excepteur exercitation ex eu cupidatat nostrud. Ipsum id culpa anim consectetur eu pariatur tempor anim consequat laborum velit nisi in nisi. Pariatur ipsum elit mollit cillum nostrud consequat laboris do anim esse nisi.\r\n", - "registered": "2014-09-28T11:05:41 +04:00", - "latitude": 24.716128, - "longitude": -16.742658, - "tags": ["adipisicing", "Lorem", "officia", "laborum", "do", "anim", "veniam"], - "friends": [ - { - "id": 0, - "name": "Hubbard Benton" - }, - { - "id": 1, - "name": "Martha Wilkerson" - }, - { - "id": 2, - "name": "Hunt Pearson" - } - ], - "greeting": "Hello, Susan Blanchard! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9f1ddfb294651ba1", - "index": 731, - "guid": "e9811895-b00c-4bc3-88be-8cb58a1c3c73", - "isActive": true, - "balance": "$2,679.35", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Langley Underwood", - "gender": "male", - "company": "ZENSUS", - "email": "langleyunderwood@zensus.com", - "phone": "+1 (992) 498-2287", - "address": "947 Diamond Street, Topaz, Palau, 4948", - "about": "Adipisicing nostrud consectetur enim ut nulla tempor sunt. Non aliqua officia pariatur cupidatat nisi velit ad mollit ex reprehenderit enim consequat dolor Lorem. Deserunt sit ipsum laborum aliquip occaecat nostrud. Sit magna sunt pariatur anim culpa consectetur Lorem sunt enim. Voluptate cupidatat tempor nisi veniam magna elit enim.\r\n", - "registered": "2018-02-18T06:00:43 +05:00", - "latitude": 0.157634, - "longitude": 154.126251, - "tags": ["occaecat", "dolore", "fugiat", "duis", "velit", "laborum", "proident"], - "friends": [ - { - "id": 0, - "name": "Mullen Mays" - }, - { - "id": 1, - "name": "Joann Kirk" - }, - { - "id": 2, - "name": "Christina Burnett" - } - ], - "greeting": "Hello, Langley Underwood! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d23880d09d3e1ee19", - "index": 732, - "guid": "9b1f736d-32f7-4b87-b2de-4acf0e227c6a", - "isActive": true, - "balance": "$3,108.38", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Nielsen Rollins", - "gender": "male", - "company": "GEEKUS", - "email": "nielsenrollins@geekus.com", - "phone": "+1 (971) 449-2668", - "address": "388 Miller Place, Abrams, West Virginia, 786", - "about": "Eiusmod do minim laborum et exercitation ea commodo ut proident minim aute. Est proident aliqua est incididunt voluptate excepteur elit proident officia. Ullamco mollit ipsum nostrud elit dolore nisi tempor ipsum.\r\n", - "registered": "2017-02-12T08:19:53 +05:00", - "latitude": 63.366011, - "longitude": 167.496501, - "tags": ["qui", "eu", "reprehenderit", "pariatur", "est", "sunt", "duis"], - "friends": [ - { - "id": 0, - "name": "Ashley Hopkins" - }, - { - "id": 1, - "name": "Fowler Alexander" - }, - { - "id": 2, - "name": "Faulkner Snider" - } - ], - "greeting": "Hello, Nielsen Rollins! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd3ed3243e8edcaa3", - "index": 733, - "guid": "66fb8454-3600-4032-9c25-bccc4126b373", - "isActive": false, - "balance": "$2,471.39", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Smith Fleming", - "gender": "male", - "company": "AUSTECH", - "email": "smithfleming@austech.com", - "phone": "+1 (938) 544-3739", - "address": "761 Lefferts Avenue, Deltaville, New York, 982", - "about": "Ad excepteur id ad laboris non occaecat est. Ad id sunt fugiat non nostrud dolore laboris. Sunt ut et ea minim officia mollit. Voluptate in exercitation proident sunt anim non.\r\n", - "registered": "2016-02-03T03:15:48 +05:00", - "latitude": -73.64239, - "longitude": 144.872965, - "tags": ["deserunt", "sunt", "velit", "duis", "nisi", "veniam", "ad"], - "friends": [ - { - "id": 0, - "name": "Goodman Lindsey" - }, - { - "id": 1, - "name": "Terry Mckenzie" - }, - { - "id": 2, - "name": "Wynn Sandoval" - } - ], - "greeting": "Hello, Smith Fleming! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4e17eb379508396b", - "index": 734, - "guid": "873dde97-c2c7-4f93-9b85-7f2eaaf9e908", - "isActive": false, - "balance": "$2,754.58", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Lana Campos", - "gender": "female", - "company": "TURNLING", - "email": "lanacampos@turnling.com", - "phone": "+1 (844) 458-2382", - "address": "362 Schenck Court, Guthrie, Hawaii, 5165", - "about": "Et anim id do labore sint voluptate duis officia cillum aliquip ad qui ex dolore. Aliquip magna velit commodo consequat enim et fugiat commodo sit excepteur. Eu fugiat duis esse pariatur qui ex cillum dolore do amet incididunt.\r\n", - "registered": "2015-12-22T02:36:31 +05:00", - "latitude": 44.620016, - "longitude": -0.622679, - "tags": ["amet", "excepteur", "aliquip", "in", "est", "quis", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Mccray Preston" - }, - { - "id": 1, - "name": "Richmond Cruz" - }, - { - "id": 2, - "name": "Logan Weiss" - } - ], - "greeting": "Hello, Lana Campos! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3dd2a26ae476521b", - "index": 735, - "guid": "72e5bcef-09d0-4d17-9cb4-61fafa436b2d", - "isActive": true, - "balance": "$2,400.66", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Opal House", - "gender": "female", - "company": "ZIDOX", - "email": "opalhouse@zidox.com", - "phone": "+1 (927) 498-2209", - "address": "920 Ridgecrest Terrace, Swartzville, Nebraska, 2342", - "about": "Non tempor aliqua incididunt fugiat incididunt labore et sint irure labore. Ea nulla sunt incididunt est Lorem adipisicing ex consequat aliqua qui. Ut quis pariatur est incididunt enim. Proident adipisicing Lorem mollit nostrud tempor dolor eiusmod pariatur ad mollit officia magna elit tempor. Aute consectetur laborum in sit esse dolor adipisicing. Aute enim voluptate ipsum et minim sit duis aliquip culpa eu proident eiusmod ipsum. Officia aliqua laboris ullamco occaecat ea minim aliquip commodo.\r\n", - "registered": "2019-12-05T08:30:51 +05:00", - "latitude": -85.224366, - "longitude": 58.058165, - "tags": ["cupidatat", "sunt", "qui", "adipisicing", "reprehenderit", "nulla", "commodo"], - "friends": [ - { - "id": 0, - "name": "Abigail Whitney" - }, - { - "id": 1, - "name": "Lottie Herrera" - }, - { - "id": 2, - "name": "Cunningham Mcknight" - } - ], - "greeting": "Hello, Opal House! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d499dfc66f825e637", - "index": 736, - "guid": "7481c3e9-b85e-4e1b-8168-543aecd40eed", - "isActive": false, - "balance": "$1,557.08", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Shaw Day", - "gender": "male", - "company": "ZENTIA", - "email": "shawday@zentia.com", - "phone": "+1 (824) 413-2734", - "address": "908 Fillmore Place, Sylvanite, Wisconsin, 3798", - "about": "Cillum amet duis consectetur consequat incididunt pariatur adipisicing labore in consequat. Commodo qui velit dolor irure laborum occaecat esse excepteur deserunt incididunt. Ad amet amet sunt consequat laboris. Ea veniam quis esse quis cillum. Laboris nostrud ut laborum consectetur labore cillum ullamco. Ex qui laborum quis qui tempor et culpa amet nisi sit proident. Duis non enim reprehenderit mollit quis occaecat.\r\n", - "registered": "2016-09-21T05:49:42 +04:00", - "latitude": -85.382293, - "longitude": 117.375687, - "tags": ["eiusmod", "consectetur", "consequat", "pariatur", "sint", "nisi", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Parks Fox" - }, - { - "id": 1, - "name": "Aileen Gibson" - }, - { - "id": 2, - "name": "Vaughn Wilder" - } - ], - "greeting": "Hello, Shaw Day! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d487d2042441f7493", - "index": 737, - "guid": "12be95f1-e236-4761-a544-dd6cee47a70e", - "isActive": false, - "balance": "$3,380.20", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Sheena Knox", - "gender": "female", - "company": "PASTURIA", - "email": "sheenaknox@pasturia.com", - "phone": "+1 (845) 503-3213", - "address": "983 Woodside Avenue, Cade, Arizona, 7690", - "about": "Commodo sunt deserunt ad occaecat pariatur magna do voluptate aliquip cillum elit non mollit. Irure incididunt ad sit dolore consequat eu voluptate. Ut elit excepteur tempor id minim in laborum excepteur id dolore anim. Reprehenderit quis sint ea veniam et sint consectetur in minim. Do amet irure quis quis dolor sit commodo eiusmod cillum commodo incididunt sint pariatur. Qui adipisicing commodo exercitation nulla esse Lorem cillum ipsum proident cillum aliquip anim. Labore tempor commodo eu eiusmod veniam veniam pariatur ullamco irure reprehenderit irure aliquip nisi.\r\n", - "registered": "2015-12-12T03:29:46 +05:00", - "latitude": -7.640701, - "longitude": 102.015394, - "tags": ["ipsum", "esse", "pariatur", "laboris", "et", "aliqua", "velit"], - "friends": [ - { - "id": 0, - "name": "Fuentes Myers" - }, - { - "id": 1, - "name": "Guerra Salinas" - }, - { - "id": 2, - "name": "Hopper Ellis" - } - ], - "greeting": "Hello, Sheena Knox! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d11b5a9b14f8b9290", - "index": 738, - "guid": "2188ffc8-b110-4fc0-9c5b-da2b6c1bc66a", - "isActive": false, - "balance": "$2,433.01", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Tracie Eaton", - "gender": "female", - "company": "BITENDREX", - "email": "tracieeaton@bitendrex.com", - "phone": "+1 (924) 407-3403", - "address": "431 Irwin Street, Camas, Ohio, 4499", - "about": "Esse ad cillum culpa labore deserunt eiusmod veniam elit tempor. Ut cupidatat irure ad labore ea fugiat elit cupidatat ea velit eu dolore ipsum. Mollit adipisicing pariatur in est aliquip adipisicing do ut culpa exercitation proident consequat magna incididunt.\r\n", - "registered": "2014-02-28T08:09:17 +05:00", - "latitude": 74.407169, - "longitude": -81.076928, - "tags": [ - "anim", - "consequat", - "mollit", - "laboris", - "exercitation", - "reprehenderit", - "voluptate" - ], - "friends": [ - { - "id": 0, - "name": "Mason Fitzgerald" - }, - { - "id": 1, - "name": "Amanda Hendrix" - }, - { - "id": 2, - "name": "Ollie Holloway" - } - ], - "greeting": "Hello, Tracie Eaton! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d59bac809cca938fc", - "index": 739, - "guid": "48b33a9a-e996-47d3-b674-d39782a5119b", - "isActive": true, - "balance": "$1,572.63", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Barron Morin", - "gender": "male", - "company": "COMTRAK", - "email": "barronmorin@comtrak.com", - "phone": "+1 (942) 536-2521", - "address": "338 Keap Street, Chapin, Arkansas, 5163", - "about": "Ex tempor consequat Lorem adipisicing minim ut. Id dolor proident magna minim qui consectetur. Id deserunt ex consequat est ullamco proident.\r\n", - "registered": "2015-11-07T10:10:10 +05:00", - "latitude": 87.824481, - "longitude": -104.025742, - "tags": ["et", "voluptate", "est", "eu", "consequat", "eiusmod", "quis"], - "friends": [ - { - "id": 0, - "name": "Alisa Abbott" - }, - { - "id": 1, - "name": "Jill Rhodes" - }, - { - "id": 2, - "name": "Kelly Dale" - } - ], - "greeting": "Hello, Barron Morin! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d174041adfc474ed6", - "index": 740, - "guid": "650ddff3-2e1b-41a8-a25b-52864d5b9e58", - "isActive": true, - "balance": "$1,033.69", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Owens Peters", - "gender": "male", - "company": "WEBIOTIC", - "email": "owenspeters@webiotic.com", - "phone": "+1 (846) 526-3807", - "address": "666 Jodie Court, Henrietta, Nevada, 9042", - "about": "Sunt nisi exercitation est nostrud commodo eu duis cillum nostrud dolore eiusmod tempor occaecat. Magna consectetur elit Lorem et velit laborum. Occaecat enim nisi incididunt duis. Elit aliquip esse aliquip et ea deserunt nostrud consectetur minim nostrud. Quis ipsum aliqua officia ea aliqua dolor excepteur anim reprehenderit.\r\n", - "registered": "2015-11-27T07:25:28 +05:00", - "latitude": 2.174092, - "longitude": -175.118476, - "tags": ["nulla", "velit", "minim", "cupidatat", "ipsum", "sit", "consequat"], - "friends": [ - { - "id": 0, - "name": "Davenport Ochoa" - }, - { - "id": 1, - "name": "Robles Ayers" - }, - { - "id": 2, - "name": "Carrie Brock" - } - ], - "greeting": "Hello, Owens Peters! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25de131f19eb565bffb", - "index": 741, - "guid": "014cc3f8-1a3d-4ebd-9d04-b1cce9a83969", - "isActive": true, - "balance": "$3,823.43", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Ramona Waller", - "gender": "female", - "company": "CUBICIDE", - "email": "ramonawaller@cubicide.com", - "phone": "+1 (842) 531-3945", - "address": "242 Hubbard Street, Ruffin, Massachusetts, 8752", - "about": "Commodo cillum in officia occaecat anim fugiat incididunt irure ea laborum aliquip. Laborum Lorem non ea laboris tempor est id nisi velit. Deserunt laborum adipisicing sit Lorem anim id nostrud ad ex culpa laboris sit irure duis. Duis anim laboris nostrud qui commodo amet. Fugiat magna laboris fugiat ut incididunt est.\r\n", - "registered": "2020-01-26T06:49:55 +05:00", - "latitude": -64.412056, - "longitude": -159.496691, - "tags": ["pariatur", "sunt", "laborum", "ea", "amet", "dolore", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Lakisha Jefferson" - }, - { - "id": 1, - "name": "Davidson Higgins" - }, - { - "id": 2, - "name": "Jefferson Knight" - } - ], - "greeting": "Hello, Ramona Waller! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db8fcd3353e3fa180", - "index": 742, - "guid": "6b593a03-1648-462a-a900-8ea39516b8f0", - "isActive": true, - "balance": "$3,007.62", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Helene Emerson", - "gender": "female", - "company": "HOMELUX", - "email": "heleneemerson@homelux.com", - "phone": "+1 (953) 455-2678", - "address": "528 Bushwick Avenue, Delshire, Marshall Islands, 5315", - "about": "Adipisicing dolor Lorem consequat sunt fugiat ea elit consectetur veniam fugiat in ullamco. Exercitation est veniam minim est. In reprehenderit duis eiusmod laboris nisi et minim consequat pariatur in do voluptate enim et. Minim tempor commodo veniam labore aliquip occaecat amet pariatur.\r\n", - "registered": "2016-11-23T02:45:24 +05:00", - "latitude": -28.459269, - "longitude": 93.374476, - "tags": ["reprehenderit", "eu", "do", "et", "ullamco", "nostrud", "laboris"], - "friends": [ - { - "id": 0, - "name": "Keller Dyer" - }, - { - "id": 1, - "name": "Susie Ballard" - }, - { - "id": 2, - "name": "Horne Gonzalez" - } - ], - "greeting": "Hello, Helene Emerson! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5ea64f0feeb53b50", - "index": 743, - "guid": "c999d5d7-f26e-4caf-b759-b7c09626a7f5", - "isActive": true, - "balance": "$3,080.05", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Adrienne Jordan", - "gender": "female", - "company": "KONNECT", - "email": "adriennejordan@konnect.com", - "phone": "+1 (915) 598-3663", - "address": "214 Florence Avenue, Topanga, Puerto Rico, 8360", - "about": "Est sint proident nisi eiusmod consequat ex id officia ut ullamco do tempor exercitation esse. Fugiat enim consequat cupidatat velit est nulla sunt est consectetur mollit. Deserunt occaecat laboris aliqua ut excepteur aute magna id commodo excepteur velit aliquip sunt. Quis cillum aliqua anim anim culpa aute cupidatat. Mollit amet laboris esse cupidatat do amet aliquip dolor dolor laboris dolor. Velit duis eiusmod ipsum nulla nostrud laboris duis duis irure esse incididunt dolore adipisicing. Fugiat commodo tempor magna excepteur ipsum aliqua proident duis irure laborum exercitation in sunt.\r\n", - "registered": "2019-07-25T12:16:06 +04:00", - "latitude": -63.310303, - "longitude": -121.01467, - "tags": ["culpa", "dolor", "do", "veniam", "ex", "est", "nulla"], - "friends": [ - { - "id": 0, - "name": "Karla Richardson" - }, - { - "id": 1, - "name": "Duffy Browning" - }, - { - "id": 2, - "name": "Suzanne Shepard" - } - ], - "greeting": "Hello, Adrienne Jordan! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3835645058bc4d4a", - "index": 744, - "guid": "ca5d9bcc-1a09-4fc3-9e81-d495073c0954", - "isActive": false, - "balance": "$1,665.88", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Lacy Herring", - "gender": "female", - "company": "HALAP", - "email": "lacyherring@halap.com", - "phone": "+1 (992) 536-2761", - "address": "494 Senator Street, Shindler, California, 686", - "about": "Duis labore labore consequat consectetur sint Lorem adipisicing quis adipisicing exercitation amet dolore. Nostrud ipsum proident sint cillum elit. Commodo magna nostrud et officia enim consequat elit consequat voluptate aute enim reprehenderit duis Lorem. Minim eu dolor culpa in esse. Lorem deserunt eiusmod id enim amet velit aliqua veniam proident duis ad labore eiusmod.\r\n", - "registered": "2020-07-21T08:43:58 +04:00", - "latitude": -27.915361, - "longitude": -159.135991, - "tags": ["excepteur", "ut", "cupidatat", "laborum", "consectetur", "enim", "eu"], - "friends": [ - { - "id": 0, - "name": "Salazar Carrillo" - }, - { - "id": 1, - "name": "Sheri Short" - }, - { - "id": 2, - "name": "Massey Patton" - } - ], - "greeting": "Hello, Lacy Herring! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df13c13cf31ec16dc", - "index": 745, - "guid": "90755a5a-04f5-4f7a-a538-2e368aa551f2", - "isActive": true, - "balance": "$1,977.96", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Lola Kelley", - "gender": "female", - "company": "EARTHPLEX", - "email": "lolakelley@earthplex.com", - "phone": "+1 (818) 535-2774", - "address": "287 Plymouth Street, Kimmell, Tennessee, 5036", - "about": "Reprehenderit incididunt aute non eu. Quis labore qui eiusmod nisi eu. Dolore ut minim ex tempor ut labore minim consectetur sit sit aliqua consectetur. Laborum sunt culpa ad nulla laboris voluptate nisi laborum. Ex cupidatat excepteur excepteur fugiat aliquip voluptate eiusmod.\r\n", - "registered": "2019-10-16T06:21:31 +04:00", - "latitude": -81.572446, - "longitude": 73.940794, - "tags": ["laboris", "Lorem", "ut", "pariatur", "laborum", "cupidatat", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Love Odonnell" - }, - { - "id": 1, - "name": "Zimmerman Cherry" - }, - { - "id": 2, - "name": "Lowery Ashley" - } - ], - "greeting": "Hello, Lola Kelley! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0d0d9d1457426725", - "index": 746, - "guid": "97b8ec4d-7fdd-40ca-818c-b5f0b7f4b088", - "isActive": true, - "balance": "$3,917.98", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Elliott Beach", - "gender": "male", - "company": "ORBOID", - "email": "elliottbeach@orboid.com", - "phone": "+1 (922) 408-3898", - "address": "128 Williams Place, Urie, Wyoming, 6191", - "about": "Amet ipsum non officia magna quis esse tempor anim anim ea enim id adipisicing. Anim minim cillum laboris excepteur nostrud fugiat non aliquip minim quis sunt et nostrud. Laborum ut esse amet esse enim in culpa qui et excepteur excepteur amet et eiusmod. Fugiat esse exercitation occaecat sint duis. Dolor nulla cillum laborum anim excepteur quis. Excepteur culpa ea laboris sint excepteur. Dolor ut eu eu ad veniam excepteur irure ea ea anim sunt.\r\n", - "registered": "2019-07-06T02:33:08 +04:00", - "latitude": -40.808857, - "longitude": -86.12574, - "tags": ["mollit", "in", "proident", "id", "dolor", "sint", "elit"], - "friends": [ - { - "id": 0, - "name": "Walters Slater" - }, - { - "id": 1, - "name": "Jocelyn Davenport" - }, - { - "id": 2, - "name": "Willa Monroe" - } - ], - "greeting": "Hello, Elliott Beach! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da3c6aed0ee634a50", - "index": 747, - "guid": "14ab9d25-5cd3-4f06-9041-d3c8ea4bcd3e", - "isActive": false, - "balance": "$3,837.99", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Janie Sutton", - "gender": "female", - "company": "ISOPLEX", - "email": "janiesutton@isoplex.com", - "phone": "+1 (948) 480-2306", - "address": "347 Broome Street, Connerton, North Carolina, 4523", - "about": "Adipisicing et magna culpa id ipsum quis aliquip ea velit est eiusmod laborum quis. Officia sint cillum aliqua aliquip sint proident aliqua ullamco Lorem magna aliqua velit. Ea minim qui eu consequat laboris eu reprehenderit officia sit.\r\n", - "registered": "2019-11-02T12:30:29 +04:00", - "latitude": -83.092175, - "longitude": -172.05449, - "tags": ["elit", "esse", "labore", "magna", "excepteur", "eiusmod", "tempor"], - "friends": [ - { - "id": 0, - "name": "Hendricks Russo" - }, - { - "id": 1, - "name": "Glover Clayton" - }, - { - "id": 2, - "name": "Whitehead Crosby" - } - ], - "greeting": "Hello, Janie Sutton! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d90a8d691cb141879", - "index": 748, - "guid": "0632f66f-52bb-4895-9901-f3caf89f5dd3", - "isActive": false, - "balance": "$1,183.58", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Olson Wooten", - "gender": "male", - "company": "MULTIFLEX", - "email": "olsonwooten@multiflex.com", - "phone": "+1 (938) 449-3367", - "address": "852 Branton Street, Orason, Michigan, 3238", - "about": "Do et ea do culpa minim qui sint. Nostrud reprehenderit id duis culpa voluptate veniam sint. Laborum ea commodo magna consequat occaecat eu consectetur aliquip cupidatat dolore ex proident. Est tempor ipsum veniam ut ut tempor proident culpa voluptate eiusmod. Cupidatat culpa ut officia ea esse dolore tempor eiusmod enim ad culpa esse.\r\n", - "registered": "2017-08-01T10:04:12 +04:00", - "latitude": -4.929328, - "longitude": 37.088574, - "tags": ["in", "duis", "ex", "fugiat", "consequat", "magna", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Malone Duffy" - }, - { - "id": 1, - "name": "Jeannette Moon" - }, - { - "id": 2, - "name": "Romero Dixon" - } - ], - "greeting": "Hello, Olson Wooten! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d53b147238df94420", - "index": 749, - "guid": "a03de7e4-e774-4fd6-bdd6-cdf1c2e24a04", - "isActive": true, - "balance": "$3,775.08", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Rios Rodriguez", - "gender": "male", - "company": "AQUAMATE", - "email": "riosrodriguez@aquamate.com", - "phone": "+1 (872) 579-2690", - "address": "678 Scott Avenue, Bennett, Oklahoma, 7367", - "about": "Culpa ad ipsum sint esse esse est ullamco nulla. Eu tempor esse enim dolor voluptate occaecat excepteur ullamco laborum do dolore. Esse ullamco commodo veniam laboris ex est proident ut minim anim eiusmod cillum deserunt incididunt. Ea irure ut aliquip consequat occaecat sit.\r\n", - "registered": "2014-04-24T11:14:14 +04:00", - "latitude": 16.812869, - "longitude": 0.704674, - "tags": ["aliquip", "sit", "quis", "duis", "do", "anim", "dolor"], - "friends": [ - { - "id": 0, - "name": "Ortiz Garner" - }, - { - "id": 1, - "name": "Parrish Parsons" - }, - { - "id": 2, - "name": "Castillo Bullock" - } - ], - "greeting": "Hello, Rios Rodriguez! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db46bda3ac925fa60", - "index": 750, - "guid": "e3e6fd2e-fbdf-4359-b271-3afbf036c662", - "isActive": true, - "balance": "$2,073.25", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Hatfield Foley", - "gender": "male", - "company": "GOLISTIC", - "email": "hatfieldfoley@golistic.com", - "phone": "+1 (815) 500-2745", - "address": "935 Malta Street, Leola, Vermont, 5577", - "about": "Exercitation sunt amet est nulla nostrud dolore consectetur fugiat occaecat. Anim fugiat cupidatat nulla nisi tempor dolore et est. Est ut anim officia nulla non anim incididunt nisi amet est consectetur consectetur id fugiat.\r\n", - "registered": "2019-08-31T08:40:46 +04:00", - "latitude": 80.285261, - "longitude": -52.192894, - "tags": ["ullamco", "proident", "labore", "veniam", "amet", "non", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Carey Brady" - }, - { - "id": 1, - "name": "Gwendolyn Mcfadden" - }, - { - "id": 2, - "name": "Russo Holman" - } - ], - "greeting": "Hello, Hatfield Foley! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1d02b6677c8989c2", - "index": 751, - "guid": "7619d12e-da32-4c76-abd1-c7f0dc15a2d5", - "isActive": true, - "balance": "$1,582.54", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Terri Shepherd", - "gender": "female", - "company": "SULFAX", - "email": "terrishepherd@sulfax.com", - "phone": "+1 (885) 529-3365", - "address": "186 Ford Street, Basye, Utah, 3197", - "about": "Ipsum consectetur eiusmod eiusmod do et officia esse ad cupidatat consectetur tempor. Consequat aute mollit ullamco ullamco pariatur nostrud excepteur do eu. Ipsum irure nulla Lorem commodo enim consequat labore anim consectetur officia fugiat incididunt. Velit enim sint consectetur enim ad eiusmod aute minim commodo aliqua est minim voluptate. Cupidatat qui nisi mollit in Lorem eu occaecat dolore esse enim.\r\n", - "registered": "2020-02-23T07:34:06 +05:00", - "latitude": -65.239143, - "longitude": -23.856441, - "tags": ["ad", "voluptate", "occaecat", "in", "reprehenderit", "proident", "qui"], - "friends": [ - { - "id": 0, - "name": "Clarke Stewart" - }, - { - "id": 1, - "name": "Rosario Richards" - }, - { - "id": 2, - "name": "Krista Paul" - } - ], - "greeting": "Hello, Terri Shepherd! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbfa1cce8f67c51a3", - "index": 752, - "guid": "f8d1fd06-6917-4783-88a1-ba2b12dfe7b6", - "isActive": false, - "balance": "$1,344.91", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Alford Parrish", - "gender": "male", - "company": "ESCENTA", - "email": "alfordparrish@escenta.com", - "phone": "+1 (845) 433-2049", - "address": "722 Rockaway Parkway, Cartwright, Kansas, 6381", - "about": "Commodo cupidatat qui dolor enim nostrud proident non esse. Fugiat sit quis quis consequat et occaecat voluptate officia mollit nostrud velit amet anim voluptate. Excepteur et laboris eu exercitation duis esse. Aliquip eiusmod ipsum qui deserunt ut laborum exercitation. Est ullamco ullamco velit ipsum mollit minim adipisicing laborum Lorem.\r\n", - "registered": "2018-05-05T01:08:29 +04:00", - "latitude": 53.152155, - "longitude": -88.647087, - "tags": ["dolor", "laborum", "eu", "sit", "mollit", "nulla", "dolor"], - "friends": [ - { - "id": 0, - "name": "Louella Mathis" - }, - { - "id": 1, - "name": "Shari Coffey" - }, - { - "id": 2, - "name": "Herman Gordon" - } - ], - "greeting": "Hello, Alford Parrish! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db5a6322c755e7b82", - "index": 753, - "guid": "5a09eeb3-35be-46f7-912f-4cc3f984d21b", - "isActive": false, - "balance": "$2,512.22", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Marian Cline", - "gender": "female", - "company": "STRALOY", - "email": "mariancline@straloy.com", - "phone": "+1 (986) 560-2914", - "address": "521 Indiana Place, Mulino, Delaware, 9475", - "about": "Et aliquip quis ullamco ad occaecat aliquip amet non elit elit. Ut tempor officia qui mollit minim elit deserunt qui culpa sit. Ex nisi occaecat incididunt id. Veniam magna id deserunt deserunt velit incididunt consectetur anim laboris occaecat.\r\n", - "registered": "2018-11-12T09:04:18 +05:00", - "latitude": -21.268393, - "longitude": -43.692768, - "tags": ["aliqua", "sit", "nulla", "elit", "ipsum", "voluptate", "commodo"], - "friends": [ - { - "id": 0, - "name": "Merrill Sims" - }, - { - "id": 1, - "name": "Sharpe Lynn" - }, - { - "id": 2, - "name": "Shirley Pickett" - } - ], - "greeting": "Hello, Marian Cline! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2b9691ead4264e0b", - "index": 754, - "guid": "847b6485-c7ce-4b2f-b21e-70dc2de2d99a", - "isActive": false, - "balance": "$1,938.53", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Carolyn Brewer", - "gender": "female", - "company": "INTERLOO", - "email": "carolynbrewer@interloo.com", - "phone": "+1 (929) 535-3905", - "address": "356 Pierrepont Place, Mammoth, Guam, 5027", - "about": "Et minim in aute commodo anim. Officia in esse est in ex sunt. Irure veniam irure ea quis eiusmod in amet mollit. Fugiat magna velit incididunt occaecat nisi nostrud duis minim sunt minim dolor. Commodo ad culpa duis in sint sint.\r\n", - "registered": "2016-07-27T07:50:15 +04:00", - "latitude": -53.552717, - "longitude": -19.931941, - "tags": ["laborum", "deserunt", "quis", "exercitation", "laboris", "dolor", "non"], - "friends": [ - { - "id": 0, - "name": "Crawford Chase" - }, - { - "id": 1, - "name": "Justice Willis" - }, - { - "id": 2, - "name": "Cassie Golden" - } - ], - "greeting": "Hello, Carolyn Brewer! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df7a3749cb007521d", - "index": 755, - "guid": "cbc1900e-3672-43bb-a167-d96511bec9e8", - "isActive": false, - "balance": "$1,895.84", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Natasha Graham", - "gender": "female", - "company": "RONBERT", - "email": "natashagraham@ronbert.com", - "phone": "+1 (876) 400-3990", - "address": "115 Havemeyer Street, Summerset, Oregon, 2352", - "about": "Elit culpa qui occaecat nulla ipsum sint amet. Elit do reprehenderit consectetur quis commodo proident eiusmod sint mollit. Excepteur est ut ea incididunt culpa culpa sint.\r\n", - "registered": "2020-05-14T03:11:33 +04:00", - "latitude": -59.488264, - "longitude": 54.870979, - "tags": ["consequat", "in", "velit", "cupidatat", "ex", "tempor", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Reese Rich" - }, - { - "id": 1, - "name": "Mccullough Freeman" - }, - { - "id": 2, - "name": "Estella Wyatt" - } - ], - "greeting": "Hello, Natasha Graham! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da8681c0528c72b27", - "index": 756, - "guid": "ed06e732-b1bc-4f16-8634-65ada2b7e2ea", - "isActive": true, - "balance": "$3,068.92", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Nicholson Dennis", - "gender": "male", - "company": "SYNKGEN", - "email": "nicholsondennis@synkgen.com", - "phone": "+1 (803) 520-3415", - "address": "104 Mill Street, Bayview, Missouri, 2839", - "about": "Duis eiusmod adipisicing ut Lorem ea consequat consequat veniam irure qui. Culpa excepteur enim ea ut nostrud duis culpa id nulla ipsum nisi aliqua mollit nisi. Reprehenderit esse occaecat magna sint id amet amet veniam in eiusmod.\r\n", - "registered": "2019-07-12T01:40:25 +04:00", - "latitude": 86.749279, - "longitude": 72.905643, - "tags": ["ad", "laborum", "ex", "sit", "consequat", "fugiat", "esse"], - "friends": [ - { - "id": 0, - "name": "Fitzgerald Contreras" - }, - { - "id": 1, - "name": "Obrien Sargent" - }, - { - "id": 2, - "name": "Chapman Hester" - } - ], - "greeting": "Hello, Nicholson Dennis! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d64ea21eee52117a5", - "index": 757, - "guid": "bd521b09-c895-42db-91bf-b7bbf1a8856a", - "isActive": true, - "balance": "$2,768.51", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Willis Hanson", - "gender": "male", - "company": "ROCKYARD", - "email": "willishanson@rockyard.com", - "phone": "+1 (986) 477-2491", - "address": "965 Elm Avenue, Callaghan, Montana, 7511", - "about": "Qui sint dolore amet culpa id sit laboris cupidatat non amet nostrud duis. Exercitation ea incididunt enim culpa excepteur aliqua minim mollit. Dolor occaecat cupidatat aliquip commodo do occaecat voluptate in exercitation aliqua deserunt cupidatat.\r\n", - "registered": "2018-04-04T02:16:08 +04:00", - "latitude": 33.435157, - "longitude": -31.741374, - "tags": ["cupidatat", "fugiat", "incididunt", "eu", "consectetur", "magna", "quis"], - "friends": [ - { - "id": 0, - "name": "Lori Mccoy" - }, - { - "id": 1, - "name": "Gertrude Rivers" - }, - { - "id": 2, - "name": "Diann Dorsey" - } - ], - "greeting": "Hello, Willis Hanson! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d784301d924f173c8", - "index": 758, - "guid": "ff125dd9-48b7-4c5e-9a1e-9e150ba0dbc4", - "isActive": false, - "balance": "$2,712.63", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Tracy Nixon", - "gender": "female", - "company": "INTERODEO", - "email": "tracynixon@interodeo.com", - "phone": "+1 (928) 599-3803", - "address": "579 Dumont Avenue, Bonanza, Alaska, 6946", - "about": "Est excepteur exercitation aute adipisicing duis consectetur esse excepteur sunt aliqua nostrud esse. Laboris sunt enim officia cupidatat aute minim deserunt proident reprehenderit magna. Aute velit excepteur culpa dolor id duis anim sunt irure. Ex est exercitation mollit voluptate. Esse deserunt aliquip minim sunt ipsum pariatur est. Reprehenderit eiusmod cupidatat aute voluptate quis reprehenderit Lorem. Cupidatat et incididunt mollit est.\r\n", - "registered": "2019-05-23T08:05:25 +04:00", - "latitude": 66.691292, - "longitude": -76.24034, - "tags": ["anim", "dolor", "duis", "aute", "Lorem", "non", "dolor"], - "friends": [ - { - "id": 0, - "name": "Candace Hensley" - }, - { - "id": 1, - "name": "Lara Livingston" - }, - { - "id": 2, - "name": "Leanne Cameron" - } - ], - "greeting": "Hello, Tracy Nixon! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d708232e19cf99ba9", - "index": 759, - "guid": "f48036f6-66b6-4de2-b6fb-bd4c0fabeb29", - "isActive": true, - "balance": "$3,609.18", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Ines Whitehead", - "gender": "female", - "company": "ZOGAK", - "email": "ineswhitehead@zogak.com", - "phone": "+1 (997) 441-2191", - "address": "509 Monaco Place, Nanafalia, Kentucky, 9637", - "about": "Commodo nisi sunt nostrud occaecat ipsum ex ut dolore velit tempor duis proident ipsum officia. Enim quis eu eu consectetur. Sit labore dolor pariatur deserunt dolore.\r\n", - "registered": "2016-02-19T09:35:20 +05:00", - "latitude": -69.199062, - "longitude": -127.597602, - "tags": ["proident", "sint", "eiusmod", "labore", "incididunt", "exercitation", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Stone Suarez" - }, - { - "id": 1, - "name": "Manuela Reilly" - }, - { - "id": 2, - "name": "Josie Watkins" - } - ], - "greeting": "Hello, Ines Whitehead! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d08d0b826130a8c8c", - "index": 760, - "guid": "2fee322c-69a1-42fa-9355-a5de90cf6372", - "isActive": true, - "balance": "$1,783.54", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Rose Villarreal", - "gender": "male", - "company": "ZILLANET", - "email": "rosevillarreal@zillanet.com", - "phone": "+1 (991) 429-3569", - "address": "107 Linden Boulevard, Boling, Mississippi, 7045", - "about": "Minim eu enim non occaecat commodo consectetur ad officia et voluptate ea eiusmod cupidatat. Excepteur eiusmod ex aliquip consequat ea magna pariatur dolor occaecat ad reprehenderit. Consequat cupidatat consequat cillum occaecat exercitation ex nostrud.\r\n", - "registered": "2019-04-30T10:23:12 +04:00", - "latitude": -63.526183, - "longitude": -18.12424, - "tags": ["reprehenderit", "nisi", "esse", "esse", "ex", "ex", "labore"], - "friends": [ - { - "id": 0, - "name": "Sanford Salas" - }, - { - "id": 1, - "name": "Concetta Mckinney" - }, - { - "id": 2, - "name": "Parker Owen" - } - ], - "greeting": "Hello, Rose Villarreal! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d367b1b3d2eb5e62e", - "index": 761, - "guid": "289e2258-bb84-48ef-a766-927261819ab5", - "isActive": false, - "balance": "$3,864.50", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Stella Durham", - "gender": "female", - "company": "PAPRICUT", - "email": "stelladurham@papricut.com", - "phone": "+1 (858) 529-3845", - "address": "484 Guider Avenue, Orovada, North Dakota, 3903", - "about": "Incididunt do sunt ut eiusmod. Sit ea consequat ipsum in officia ea duis in qui velit commodo quis. Magna adipisicing culpa ullamco ipsum ut sunt culpa laboris tempor fugiat.\r\n", - "registered": "2019-08-15T12:56:23 +04:00", - "latitude": 58.196136, - "longitude": -126.579275, - "tags": ["ad", "ad", "consectetur", "aliquip", "ad", "esse", "minim"], - "friends": [ - { - "id": 0, - "name": "Berry Adkins" - }, - { - "id": 1, - "name": "Albert Barton" - }, - { - "id": 2, - "name": "Conway Morales" - } - ], - "greeting": "Hello, Stella Durham! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8c04d9c6da84c63e", - "index": 762, - "guid": "ccc4ef5f-e302-4b57-a658-328ce13e16bf", - "isActive": true, - "balance": "$3,803.21", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Stevens Kerr", - "gender": "male", - "company": "SOFTMICRO", - "email": "stevenskerr@softmicro.com", - "phone": "+1 (878) 553-2770", - "address": "556 Mersereau Court, Barrelville, Federated States Of Micronesia, 991", - "about": "Elit velit laborum sunt pariatur adipisicing et ipsum sint qui cillum dolor. Qui officia velit minim et fugiat eu qui voluptate ullamco laborum labore. Aliquip sint velit nulla ad proident. Cillum dolore cillum ad cupidatat ad. Ullamco ea excepteur est laborum occaecat fugiat est excepteur.\r\n", - "registered": "2016-09-25T05:40:09 +04:00", - "latitude": -80.392863, - "longitude": -58.32246, - "tags": ["sunt", "amet", "occaecat", "nostrud", "ipsum", "incididunt", "dolore"], - "friends": [ - { - "id": 0, - "name": "Deena Duncan" - }, - { - "id": 1, - "name": "Jewel Foreman" - }, - { - "id": 2, - "name": "King White" - } - ], - "greeting": "Hello, Stevens Kerr! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df32551a618efb435", - "index": 763, - "guid": "f54bc555-d331-4383-bb9a-8d3b7929f28a", - "isActive": false, - "balance": "$1,136.71", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Turner Stanton", - "gender": "male", - "company": "AQUOAVO", - "email": "turnerstanton@aquoavo.com", - "phone": "+1 (906) 482-3981", - "address": "694 Clifford Place, Edenburg, Maryland, 8035", - "about": "Tempor Lorem enim deserunt consectetur velit incididunt. Duis sunt laboris veniam laboris sunt aliqua dolor exercitation nostrud qui. Eu quis veniam exercitation aliquip fugiat proident magna non consequat nostrud.\r\n", - "registered": "2017-02-19T10:20:33 +05:00", - "latitude": 69.472715, - "longitude": 22.574287, - "tags": ["esse", "ex", "reprehenderit", "aute", "Lorem", "irure", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Leticia Wheeler" - }, - { - "id": 1, - "name": "Britt Cain" - }, - { - "id": 2, - "name": "Adriana Guerra" - } - ], - "greeting": "Hello, Turner Stanton! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1565c45728172605", - "index": 764, - "guid": "262bfb3b-2e46-427c-8e97-1e01b0eb0910", - "isActive": false, - "balance": "$2,963.50", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Serrano Donaldson", - "gender": "male", - "company": "PANZENT", - "email": "serranodonaldson@panzent.com", - "phone": "+1 (987) 416-2738", - "address": "988 Kenmore Terrace, Waumandee, Virgin Islands, 7888", - "about": "Lorem elit occaecat anim consequat veniam cillum nisi do esse sint laborum ut ut id. Est excepteur sit voluptate sit laborum adipisicing velit nisi eu ut. Amet quis aute ea ut occaecat est et laborum veniam eiusmod pariatur adipisicing. Ex cillum aute irure sint nostrud ipsum deserunt magna consectetur dolore laborum. Do ex non reprehenderit commodo. Incididunt ut et ea est magna ut culpa excepteur. In fugiat sint sit officia eu labore occaecat ipsum deserunt do.\r\n", - "registered": "2015-08-05T04:51:02 +04:00", - "latitude": -48.068014, - "longitude": -133.741116, - "tags": ["aute", "sit", "fugiat", "id", "nisi", "aliqua", "in"], - "friends": [ - { - "id": 0, - "name": "Macdonald Marshall" - }, - { - "id": 1, - "name": "Powell Small" - }, - { - "id": 2, - "name": "Rae Winters" - } - ], - "greeting": "Hello, Serrano Donaldson! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d501f231fa025175b", - "index": 765, - "guid": "ec16c0af-8e69-4452-a898-469fafd4f03c", - "isActive": true, - "balance": "$2,651.58", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Katharine Johnston", - "gender": "female", - "company": "EARGO", - "email": "katharinejohnston@eargo.com", - "phone": "+1 (894) 465-2601", - "address": "906 Navy Street, Cornfields, Pennsylvania, 2817", - "about": "Commodo amet laborum esse nisi duis occaecat id amet quis. Anim ex sunt officia esse est cupidatat adipisicing eiusmod non ad. Ex aliquip sint laborum Lorem labore non sunt. Occaecat ullamco voluptate dolor laborum do adipisicing occaecat officia ea laborum excepteur. Est dolor voluptate Lorem commodo adipisicing pariatur. Proident quis minim quis eiusmod consequat consequat qui adipisicing exercitation consequat deserunt enim aute.\r\n", - "registered": "2017-03-17T07:06:04 +04:00", - "latitude": 14.977197, - "longitude": -157.439019, - "tags": ["et", "sit", "est", "do", "do", "ex", "irure"], - "friends": [ - { - "id": 0, - "name": "Armstrong Maddox" - }, - { - "id": 1, - "name": "Bradley Lamb" - }, - { - "id": 2, - "name": "Kaitlin Evans" - } - ], - "greeting": "Hello, Katharine Johnston! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2b6cd79a5788cc9f", - "index": 766, - "guid": "14143a09-fc1f-444f-960b-42d67f9e220f", - "isActive": true, - "balance": "$3,812.17", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Ethel Petersen", - "gender": "female", - "company": "QUANTASIS", - "email": "ethelpetersen@quantasis.com", - "phone": "+1 (845) 476-3367", - "address": "883 Leonard Street, Derwood, Washington, 2231", - "about": "Magna in magna dolor sint eu proident veniam reprehenderit pariatur. Amet voluptate aliquip amet sit in ea nisi. Adipisicing dolore labore occaecat anim consequat anim fugiat consequat occaecat exercitation non exercitation ipsum reprehenderit. Veniam qui cillum anim esse excepteur consectetur sit occaecat laborum. Cillum quis et cillum esse pariatur Lorem ad. Ex ex irure culpa excepteur nostrud anim. Sunt fugiat minim anim magna veniam nostrud aliqua.\r\n", - "registered": "2015-10-21T07:22:12 +04:00", - "latitude": -52.277275, - "longitude": -158.615436, - "tags": ["elit", "laborum", "ea", "tempor", "qui", "aute", "laboris"], - "friends": [ - { - "id": 0, - "name": "Andrea Thompson" - }, - { - "id": 1, - "name": "Allie Nolan" - }, - { - "id": 2, - "name": "Wood Moreno" - } - ], - "greeting": "Hello, Ethel Petersen! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d36cdbed2195dbb96", - "index": 767, - "guid": "65903c3c-5222-4824-a787-a7f11c5c3b2b", - "isActive": true, - "balance": "$1,992.18", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Hale Austin", - "gender": "male", - "company": "ENERFORCE", - "email": "haleaustin@enerforce.com", - "phone": "+1 (923) 526-3412", - "address": "791 Lloyd Street, Brownlee, Illinois, 9490", - "about": "Amet do do anim qui nulla id cupidatat aliqua mollit eu consequat non quis in. Tempor reprehenderit adipisicing nulla eu occaecat culpa proident aute proident sit aliqua deserunt sint Lorem. Excepteur quis reprehenderit consectetur esse qui aliqua minim aliquip id aute aliquip adipisicing nulla. Nostrud veniam tempor cillum incididunt id duis occaecat magna est pariatur ea aliquip nisi adipisicing. Enim duis sit do Lorem cillum ut pariatur irure voluptate officia. Id nulla eu deserunt amet consectetur elit. Do voluptate veniam aliqua mollit qui labore adipisicing ad ad.\r\n", - "registered": "2019-08-21T08:10:01 +04:00", - "latitude": -31.71312, - "longitude": -120.572219, - "tags": ["cupidatat", "veniam", "nisi", "veniam", "excepteur", "exercitation", "sit"], - "friends": [ - { - "id": 0, - "name": "Olga Santiago" - }, - { - "id": 1, - "name": "Estrada Perez" - }, - { - "id": 2, - "name": "Sheppard Donovan" - } - ], - "greeting": "Hello, Hale Austin! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db2ec4687b068b944", - "index": 768, - "guid": "c6db49ce-a611-40b2-8f82-2f8114ef6fef", - "isActive": true, - "balance": "$3,209.94", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Aguirre Cooley", - "gender": "male", - "company": "UXMOX", - "email": "aguirrecooley@uxmox.com", - "phone": "+1 (922) 435-3578", - "address": "687 India Street, Foscoe, New Hampshire, 5950", - "about": "Minim anim velit excepteur tempor ex sit tempor ex. Tempor velit aliquip deserunt laboris ea veniam qui occaecat enim nisi aute laborum aliqua cupidatat. Aute et id ullamco eu ex adipisicing cupidatat.\r\n", - "registered": "2018-02-01T10:18:22 +05:00", - "latitude": -59.32672, - "longitude": 95.320964, - "tags": ["do", "aliquip", "sint", "id", "reprehenderit", "ea", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Knox Matthews" - }, - { - "id": 1, - "name": "Rochelle Rodriquez" - }, - { - "id": 2, - "name": "Clara Franks" - } - ], - "greeting": "Hello, Aguirre Cooley! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de2202467a9637b57", - "index": 769, - "guid": "9029e38c-79cb-483d-b97e-3dff6818aa67", - "isActive": false, - "balance": "$2,050.25", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Ferrell Guerrero", - "gender": "male", - "company": "AVENETRO", - "email": "ferrellguerrero@avenetro.com", - "phone": "+1 (882) 592-2169", - "address": "968 Perry Place, Diaperville, Colorado, 7990", - "about": "Nostrud enim ea sit sunt excepteur. Qui ea eu anim ut. Ad nulla enim id quis minim et enim eiusmod ex. Sit consequat do labore reprehenderit commodo. Laborum officia velit ea consectetur veniam consequat.\r\n", - "registered": "2017-12-02T12:57:02 +05:00", - "latitude": 18.15445, - "longitude": -152.684001, - "tags": ["officia", "sunt", "velit", "consequat", "fugiat", "mollit", "magna"], - "friends": [ - { - "id": 0, - "name": "Inez Marks" - }, - { - "id": 1, - "name": "Phillips Merrill" - }, - { - "id": 2, - "name": "Dee Guy" - } - ], - "greeting": "Hello, Ferrell Guerrero! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc3a8faf681c5aa59", - "index": 770, - "guid": "3572337d-098e-47c9-9be5-f86442728c8a", - "isActive": false, - "balance": "$3,683.08", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Kate Salazar", - "gender": "female", - "company": "BOSTONIC", - "email": "katesalazar@bostonic.com", - "phone": "+1 (930) 575-3721", - "address": "208 Barbey Street, Alleghenyville, Maine, 2123", - "about": "Id nostrud ad sit minim ea dolore non ut nisi id adipisicing labore. In sint duis culpa elit cillum officia culpa et tempor. Ullamco cupidatat adipisicing ea aute amet voluptate nostrud.\r\n", - "registered": "2016-10-10T08:27:09 +04:00", - "latitude": -57.866858, - "longitude": 179.43724, - "tags": ["ullamco", "eu", "Lorem", "eiusmod", "do", "labore", "dolor"], - "friends": [ - { - "id": 0, - "name": "Morrow Rutledge" - }, - { - "id": 1, - "name": "Dollie Mosley" - }, - { - "id": 2, - "name": "Eddie Bates" - } - ], - "greeting": "Hello, Kate Salazar! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d998bc46c0c511e95", - "index": 771, - "guid": "7d4041c9-447e-457b-aa4e-fb911d2c43bb", - "isActive": false, - "balance": "$2,272.83", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Rivera Barry", - "gender": "male", - "company": "SNIPS", - "email": "riverabarry@snips.com", - "phone": "+1 (842) 459-3363", - "address": "722 Jamaica Avenue, Townsend, South Carolina, 9813", - "about": "Ut ad incididunt officia enim ipsum deserunt nisi Lorem. Fugiat fugiat laborum amet eu irure nisi elit amet voluptate. Nulla ut in dolore culpa et mollit consectetur veniam culpa esse. Mollit consectetur eu Lorem occaecat velit sunt. Ullamco eiusmod et velit id eu consequat dolore. Velit eiusmod consequat sint consequat veniam cupidatat non elit eiusmod nisi fugiat.\r\n", - "registered": "2018-11-17T07:24:00 +05:00", - "latitude": -30.014916, - "longitude": -18.002489, - "tags": ["incididunt", "consectetur", "do", "enim", "nostrud", "officia", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Juana Gilmore" - }, - { - "id": 1, - "name": "Adams Fischer" - }, - { - "id": 2, - "name": "Reed Mclean" - } - ], - "greeting": "Hello, Rivera Barry! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d029e1ad93c254ac2", - "index": 772, - "guid": "21977b08-e8c9-4ec1-88dd-f8c8efa3eba2", - "isActive": true, - "balance": "$2,045.63", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "blue", - "name": "Boyd Aguirre", - "gender": "male", - "company": "ANDERSHUN", - "email": "boydaguirre@andershun.com", - "phone": "+1 (893) 514-2195", - "address": "961 Hubbard Place, Stonybrook, Connecticut, 2882", - "about": "Laboris Lorem dolore aute veniam pariatur est ut minim labore pariatur tempor nulla. Irure elit commodo veniam culpa Lorem eu consequat voluptate deserunt fugiat irure et duis. Amet irure laboris in reprehenderit dolore. Eiusmod sit aute esse non voluptate magna enim est mollit dolor ipsum sunt pariatur. Ipsum laboris deserunt qui mollit aliquip mollit laborum.\r\n", - "registered": "2018-09-17T10:09:05 +04:00", - "latitude": -24.342519, - "longitude": -46.134952, - "tags": ["ipsum", "voluptate", "cillum", "eu", "excepteur", "ipsum", "ad"], - "friends": [ - { - "id": 0, - "name": "Gloria Blevins" - }, - { - "id": 1, - "name": "Kay Hoover" - }, - { - "id": 2, - "name": "Hurley Blake" - } - ], - "greeting": "Hello, Boyd Aguirre! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d89bff87061bb6f7f", - "index": 773, - "guid": "212d1e02-b16b-48d6-88bc-b31d9daef74e", - "isActive": false, - "balance": "$2,184.81", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Margery Watson", - "gender": "female", - "company": "SUNCLIPSE", - "email": "margerywatson@sunclipse.com", - "phone": "+1 (913) 401-3400", - "address": "362 Stuyvesant Avenue, Coloma, Virginia, 2670", - "about": "Anim Lorem laborum excepteur aute adipisicing proident voluptate occaecat cillum. Duis culpa consectetur fugiat nisi adipisicing dolore. Minim nostrud aliqua ullamco id nulla adipisicing labore deserunt ipsum. Ut incididunt officia amet sit est ullamco exercitation velit officia id excepteur officia eu.\r\n", - "registered": "2017-09-18T09:08:54 +04:00", - "latitude": 20.310169, - "longitude": 146.955399, - "tags": ["do", "dolore", "laborum", "aliqua", "nulla", "et", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Kennedy Berry" - }, - { - "id": 1, - "name": "Taylor William" - }, - { - "id": 2, - "name": "Ruth Berg" - } - ], - "greeting": "Hello, Margery Watson! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd1f91b60970c2750", - "index": 774, - "guid": "1c41f5ce-1d80-4f64-9e80-5eee14fe12f7", - "isActive": true, - "balance": "$2,354.93", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Hayden Collier", - "gender": "male", - "company": "ADORNICA", - "email": "haydencollier@adornica.com", - "phone": "+1 (901) 457-2446", - "address": "761 Drew Street, Southview, Georgia, 7059", - "about": "Proident quis consequat est non est commodo non adipisicing pariatur est est consequat non ex. Nisi enim labore proident deserunt sit nostrud aute ipsum occaecat. Eu nisi et est adipisicing dolore elit reprehenderit. Mollit Lorem duis est enim adipisicing eu excepteur aliquip tempor et fugiat. Amet nostrud qui elit irure adipisicing sit commodo nisi sunt veniam nostrud elit duis. Exercitation adipisicing dolore incididunt quis nisi laborum anim. Exercitation irure et ex id est adipisicing labore ad adipisicing voluptate dolor magna quis.\r\n", - "registered": "2018-08-04T09:24:11 +04:00", - "latitude": 82.637734, - "longitude": -1.47448, - "tags": ["pariatur", "occaecat", "laboris", "enim", "qui", "ut", "in"], - "friends": [ - { - "id": 0, - "name": "Flora Todd" - }, - { - "id": 1, - "name": "Hallie Pollard" - }, - { - "id": 2, - "name": "Rachel Francis" - } - ], - "greeting": "Hello, Hayden Collier! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d761e480fdbd3563a", - "index": 775, - "guid": "2d81f32b-7eff-4a6e-91a3-7ab7ca9838cc", - "isActive": false, - "balance": "$1,151.81", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Fanny Camacho", - "gender": "female", - "company": "VIAGREAT", - "email": "fannycamacho@viagreat.com", - "phone": "+1 (860) 596-3241", - "address": "248 Vermont Street, Lindcove, New Jersey, 2297", - "about": "Sunt aliqua enim consequat ea laborum consequat minim dolore commodo. Consectetur ut quis dolor ullamco Lorem reprehenderit anim tempor ex aute adipisicing ipsum. Et enim fugiat minim aliquip amet nulla duis incididunt aliquip nostrud. Est enim magna tempor fugiat adipisicing nisi sunt.\r\n", - "registered": "2017-06-29T12:44:50 +04:00", - "latitude": 31.335128, - "longitude": -86.805536, - "tags": ["non", "nostrud", "reprehenderit", "officia", "consectetur", "cillum", "elit"], - "friends": [ - { - "id": 0, - "name": "Livingston Lynch" - }, - { - "id": 1, - "name": "Charlotte Howell" - }, - { - "id": 2, - "name": "Adela Ware" - } - ], - "greeting": "Hello, Fanny Camacho! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1fa0eae61c67595a", - "index": 776, - "guid": "d96923ad-03ec-4b8c-b92d-8f8cb70b6be8", - "isActive": false, - "balance": "$2,853.80", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Chasity Bentley", - "gender": "female", - "company": "QUINEX", - "email": "chasitybentley@quinex.com", - "phone": "+1 (945) 505-2463", - "address": "969 Sullivan Place, Norwood, Minnesota, 4321", - "about": "Lorem excepteur voluptate eu id velit esse aliqua sit quis. Cupidatat voluptate pariatur labore aute et duis incididunt et exercitation cillum. Aliquip pariatur quis pariatur minim est irure officia dolor sint cupidatat dolore veniam sunt. Dolor consequat dolor dolor irure culpa irure non proident qui in. Incididunt sit Lorem nulla aliquip irure fugiat sint. Adipisicing nostrud quis commodo reprehenderit. Enim eiusmod culpa quis adipisicing amet aliqua qui.\r\n", - "registered": "2014-12-17T06:52:53 +05:00", - "latitude": -57.732708, - "longitude": 111.791201, - "tags": ["dolore", "ad", "fugiat", "adipisicing", "consequat", "eiusmod", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Bass Robertson" - }, - { - "id": 1, - "name": "Callahan George" - }, - { - "id": 2, - "name": "Noemi Chambers" - } - ], - "greeting": "Hello, Chasity Bentley! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d91369bcfe748bfb7", - "index": 777, - "guid": "ad951593-052a-46a4-b034-b66f1d99926b", - "isActive": true, - "balance": "$1,477.69", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Mallory Skinner", - "gender": "female", - "company": "DATAGENE", - "email": "malloryskinner@datagene.com", - "phone": "+1 (891) 574-3900", - "address": "613 Erskine Loop, Sardis, Texas, 7522", - "about": "Irure sint ea incididunt pariatur minim adipisicing esse minim anim cillum nisi in fugiat. Irure laborum veniam aliqua irure esse qui qui sunt incididunt nulla aute et officia consequat. Ipsum reprehenderit dolor do qui ipsum duis veniam. Duis laboris ea aute est irure. Elit qui non culpa adipisicing quis proident qui eu.\r\n", - "registered": "2015-07-27T06:19:25 +04:00", - "latitude": -34.950169, - "longitude": -98.671076, - "tags": ["laboris", "culpa", "non", "amet", "officia", "dolor", "sint"], - "friends": [ - { - "id": 0, - "name": "Mcclain Hudson" - }, - { - "id": 1, - "name": "May Barrett" - }, - { - "id": 2, - "name": "Mccarty Pace" - } - ], - "greeting": "Hello, Mallory Skinner! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dfa036d4abe8441e3", - "index": 778, - "guid": "8015a35f-ec07-4815-9bf9-ef0ec71ec052", - "isActive": true, - "balance": "$1,465.42", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Douglas Jacobs", - "gender": "male", - "company": "XERONK", - "email": "douglasjacobs@xeronk.com", - "phone": "+1 (804) 574-3971", - "address": "690 Manhattan Court, Denio, Alabama, 2026", - "about": "Incididunt magna qui dolore cupidatat do Lorem amet velit ullamco ipsum nulla. Culpa eiusmod fugiat non in duis id. Officia laboris occaecat minim minim do Lorem adipisicing tempor proident ipsum elit. Commodo enim incididunt cupidatat officia labore et qui cupidatat nostrud in excepteur esse anim esse.\r\n", - "registered": "2017-10-04T05:31:36 +04:00", - "latitude": -79.62552, - "longitude": 29.196471, - "tags": ["cupidatat", "et", "ad", "mollit", "nisi", "labore", "dolore"], - "friends": [ - { - "id": 0, - "name": "Emilia Jackson" - }, - { - "id": 1, - "name": "Clarissa Henry" - }, - { - "id": 2, - "name": "Sondra Wright" - } - ], - "greeting": "Hello, Douglas Jacobs! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d9d9de1d63bfe8340", - "index": 779, - "guid": "027ee10c-0c9d-4c26-bf77-71cf226b84fc", - "isActive": false, - "balance": "$1,717.79", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Cathryn Stout", - "gender": "female", - "company": "BUZZWORKS", - "email": "cathrynstout@buzzworks.com", - "phone": "+1 (811) 430-2043", - "address": "417 Kane Place, Thornport, Rhode Island, 7087", - "about": "Ea nisi duis laboris incididunt fugiat reprehenderit. Consectetur aute esse veniam dolor irure nostrud exercitation. Tempor adipisicing ad excepteur incididunt deserunt deserunt veniam est non eu occaecat enim nulla velit. Non deserunt id velit nostrud sunt adipisicing cillum. Eiusmod aliquip eu minim ea qui nostrud ut. Est quis sit excepteur occaecat dolore. Cupidatat sint enim fugiat aliquip sit pariatur dolore qui ullamco elit commodo duis do esse.\r\n", - "registered": "2014-02-23T05:52:19 +05:00", - "latitude": 52.676988, - "longitude": 28.014294, - "tags": ["velit", "cillum", "aliquip", "ad", "consequat", "adipisicing", "duis"], - "friends": [ - { - "id": 0, - "name": "Potter Acosta" - }, - { - "id": 1, - "name": "Fleming Wood" - }, - { - "id": 2, - "name": "Avis Collins" - } - ], - "greeting": "Hello, Cathryn Stout! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d14c87f603a0becac", - "index": 780, - "guid": "2dd8585f-663a-4635-9cb0-0ec0728b2d69", - "isActive": true, - "balance": "$3,863.93", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Sharlene Melendez", - "gender": "female", - "company": "PROSELY", - "email": "sharlenemelendez@prosely.com", - "phone": "+1 (937) 558-3509", - "address": "261 Liberty Avenue, Jacumba, Florida, 9049", - "about": "Veniam mollit veniam do ad in. Tempor in elit cillum dolore laboris aliquip do. Nostrud tempor dolor eu est cillum eu. Labore fugiat incididunt et commodo mollit voluptate elit cupidatat mollit ex. Ut eiusmod ullamco cupidatat et excepteur reprehenderit proident commodo nulla nisi consectetur magna ipsum.\r\n", - "registered": "2015-03-01T02:53:19 +05:00", - "latitude": -89.980053, - "longitude": -44.250729, - "tags": ["est", "mollit", "ullamco", "voluptate", "culpa", "irure", "ad"], - "friends": [ - { - "id": 0, - "name": "Erickson Fernandez" - }, - { - "id": 1, - "name": "Mcfarland Cummings" - }, - { - "id": 2, - "name": "Barton Saunders" - } - ], - "greeting": "Hello, Sharlene Melendez! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8a7f75e28efdac61", - "index": 781, - "guid": "40df40f9-5e63-47a0-9ef3-6865fedcb901", - "isActive": true, - "balance": "$3,192.23", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Gabrielle Vang", - "gender": "female", - "company": "EXOVENT", - "email": "gabriellevang@exovent.com", - "phone": "+1 (936) 545-2150", - "address": "169 Brown Street, Genoa, Indiana, 318", - "about": "Minim voluptate consequat commodo occaecat ullamco amet officia in Lorem esse qui nisi excepteur. Non quis ullamco nostrud et dolore aliquip fugiat in laborum irure. Exercitation magna consequat ut tempor ea irure amet sunt magna reprehenderit labore. Adipisicing fugiat est anim commodo Lorem excepteur ex do qui voluptate elit laborum Lorem aliqua. Sint qui in magna dolor commodo amet ipsum laborum. Ipsum pariatur reprehenderit proident do. Aute nostrud sint velit ad.\r\n", - "registered": "2017-06-24T09:47:15 +04:00", - "latitude": -45.489542, - "longitude": 39.684984, - "tags": ["excepteur", "non", "sit", "consequat", "magna", "incididunt", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Walton Compton" - }, - { - "id": 1, - "name": "Amparo Webb" - }, - { - "id": 2, - "name": "Navarro Dejesus" - } - ], - "greeting": "Hello, Gabrielle Vang! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8e7db25b9c11718f", - "index": 782, - "guid": "188e675d-d968-4855-a4b8-47b7e6f895c9", - "isActive": true, - "balance": "$3,389.75", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "blue", - "name": "Hodge Vaughan", - "gender": "male", - "company": "GROK", - "email": "hodgevaughan@grok.com", - "phone": "+1 (872) 433-2108", - "address": "555 Kaufman Place, Temperanceville, Northern Mariana Islands, 9711", - "about": "Eiusmod commodo elit qui nisi ad magna consectetur cillum ad enim velit. Ea sint ipsum qui eu consectetur aute cupidatat aliqua tempor adipisicing in ex occaecat. Cillum excepteur ipsum exercitation proident laborum cupidatat non sunt aute sit ea id mollit eu. Mollit veniam occaecat dolore ipsum officia dolor commodo. Excepteur excepteur veniam exercitation deserunt enim irure voluptate aute aliqua voluptate.\r\n", - "registered": "2014-08-02T03:25:39 +04:00", - "latitude": 1.590966, - "longitude": -0.314273, - "tags": ["enim", "sint", "sint", "magna", "dolor", "proident", "irure"], - "friends": [ - { - "id": 0, - "name": "Jessie Woodward" - }, - { - "id": 1, - "name": "Kristina Lloyd" - }, - { - "id": 2, - "name": "Watkins Simon" - } - ], - "greeting": "Hello, Hodge Vaughan! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d875ae389e547ad51", - "index": 783, - "guid": "1760e7c3-f0c8-427e-b87f-58c18317309c", - "isActive": true, - "balance": "$2,952.50", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Marcy Burks", - "gender": "female", - "company": "ECRAZE", - "email": "marcyburks@ecraze.com", - "phone": "+1 (888) 484-3683", - "address": "228 Lawrence Street, Konterra, Idaho, 5075", - "about": "Consequat anim in enim ipsum ex culpa et incididunt. Commodo cupidatat nulla adipisicing elit tempor ut reprehenderit et tempor. Consequat elit cillum adipisicing quis adipisicing ipsum culpa qui labore officia commodo. Ea exercitation duis aliquip eiusmod nostrud voluptate ex irure duis do adipisicing laboris tempor. Aliqua pariatur occaecat non reprehenderit nulla pariatur minim ut esse enim. Nisi proident commodo eu reprehenderit sunt et esse sunt consectetur deserunt consequat nostrud anim. Laboris sunt consectetur qui Lorem irure culpa.\r\n", - "registered": "2014-02-26T02:38:05 +05:00", - "latitude": -75.36475, - "longitude": 57.021263, - "tags": ["excepteur", "labore", "eiusmod", "cupidatat", "sit", "duis", "nulla"], - "friends": [ - { - "id": 0, - "name": "Calhoun Garza" - }, - { - "id": 1, - "name": "Araceli Zimmerman" - }, - { - "id": 2, - "name": "Cooley Patrick" - } - ], - "greeting": "Hello, Marcy Burks! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfb7e52bc8683a60c", - "index": 784, - "guid": "69002bf6-02e5-4f98-9f42-f11a3d9562c8", - "isActive": true, - "balance": "$2,862.62", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Claudette Gilbert", - "gender": "female", - "company": "DANJA", - "email": "claudettegilbert@danja.com", - "phone": "+1 (836) 422-3046", - "address": "412 Miller Avenue, Roland, District Of Columbia, 4352", - "about": "Proident eiusmod elit est enim dolore anim esse. Tempor exercitation labore amet nisi nulla esse non incididunt. Nulla dolore anim ex sint in pariatur consectetur ullamco proident labore amet ut aute. Amet deserunt commodo consectetur qui voluptate esse nostrud proident pariatur consectetur fugiat.\r\n", - "registered": "2019-11-26T03:43:29 +05:00", - "latitude": 25.384131, - "longitude": 50.106664, - "tags": ["consectetur", "reprehenderit", "proident", "in", "aliquip", "Lorem", "enim"], - "friends": [ - { - "id": 0, - "name": "Lawson Hamilton" - }, - { - "id": 1, - "name": "Shannon Hawkins" - }, - { - "id": 2, - "name": "Garcia Erickson" - } - ], - "greeting": "Hello, Claudette Gilbert! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dca7e9b65110e2100", - "index": 785, - "guid": "a5d4f99d-5bf6-415a-9fc3-12babb257b85", - "isActive": true, - "balance": "$1,353.71", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Nunez Clements", - "gender": "male", - "company": "ZIALACTIC", - "email": "nunezclements@zialactic.com", - "phone": "+1 (823) 491-2697", - "address": "727 Albemarle Terrace, Hessville, New Mexico, 803", - "about": "In laborum occaecat Lorem ad cillum ex sunt commodo non officia irure velit sunt. Et proident quis aliquip laborum ea incididunt dolor ullamco veniam non adipisicing. Amet elit ex velit nulla dolore officia excepteur commodo. Minim amet minim laboris deserunt velit voluptate veniam qui deserunt anim laborum tempor. Adipisicing amet amet do non eiusmod qui do magna cillum aliquip ullamco. Excepteur reprehenderit quis ex commodo cupidatat laborum dolor in minim eu dolor duis exercitation occaecat. Consequat in cillum qui proident pariatur sit ex culpa ipsum.\r\n", - "registered": "2017-09-26T09:24:24 +04:00", - "latitude": 84.060193, - "longitude": 55.622389, - "tags": ["irure", "ex", "enim", "excepteur", "excepteur", "irure", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Bette Rogers" - }, - { - "id": 1, - "name": "Ware Shields" - }, - { - "id": 2, - "name": "Pennington Serrano" - } - ], - "greeting": "Hello, Nunez Clements! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d6db1a97225ee2750", - "index": 786, - "guid": "22c8a364-1edc-4091-a328-f9c51ef694bc", - "isActive": false, - "balance": "$1,178.66", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Jeannie Burch", - "gender": "female", - "company": "ZANILLA", - "email": "jeannieburch@zanilla.com", - "phone": "+1 (846) 527-3189", - "address": "353 Powers Street, Sandston, South Dakota, 6096", - "about": "Velit adipisicing sit esse elit nisi non enim cupidatat. Exercitation nostrud fugiat commodo ut consequat ut laboris cupidatat labore cillum. Ea nulla commodo reprehenderit exercitation proident esse dolore cillum non.\r\n", - "registered": "2018-05-23T11:32:05 +04:00", - "latitude": -26.445181, - "longitude": 91.022468, - "tags": ["incididunt", "proident", "occaecat", "magna", "id", "eu", "consequat"], - "friends": [ - { - "id": 0, - "name": "Velez Gates" - }, - { - "id": 1, - "name": "Terra Burt" - }, - { - "id": 2, - "name": "Mcgee Walls" - } - ], - "greeting": "Hello, Jeannie Burch! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2de412dcd28c8393", - "index": 787, - "guid": "ece2873c-379f-493c-a761-4b9c2d72db8a", - "isActive": false, - "balance": "$1,192.15", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Donovan Calhoun", - "gender": "male", - "company": "FIREWAX", - "email": "donovancalhoun@firewax.com", - "phone": "+1 (973) 594-3959", - "address": "919 Taaffe Place, Yukon, American Samoa, 9660", - "about": "Veniam velit qui sunt ullamco qui labore excepteur. Nostrud aliqua voluptate aliqua tempor pariatur dolore. Elit quis irure Lorem commodo et cillum.\r\n", - "registered": "2014-02-14T09:42:53 +05:00", - "latitude": 32.990474, - "longitude": 166.336028, - "tags": ["veniam", "ea", "quis", "aliqua", "culpa", "irure", "dolore"], - "friends": [ - { - "id": 0, - "name": "Bradshaw Gentry" - }, - { - "id": 1, - "name": "Yolanda Yang" - }, - { - "id": 2, - "name": "Daugherty Summers" - } - ], - "greeting": "Hello, Donovan Calhoun! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4eeb93af13ddc7b1", - "index": 788, - "guid": "67f39d6b-1267-4cea-8ead-4e5cdbdf6402", - "isActive": true, - "balance": "$1,282.09", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Baldwin Farrell", - "gender": "male", - "company": "XURBAN", - "email": "baldwinfarrell@xurban.com", - "phone": "+1 (819) 528-2634", - "address": "826 Henderson Walk, Windsor, Iowa, 896", - "about": "Aliqua nulla eiusmod esse mollit aute Lorem qui id. Ipsum esse elit officia consectetur ut voluptate. Ad eiusmod duis sint ea laboris consectetur do sit et. Dolor dolore officia consequat labore duis qui deserunt irure. Fugiat ex excepteur veniam do consequat reprehenderit incididunt nisi dolor veniam nisi eiusmod.\r\n", - "registered": "2016-10-31T09:43:50 +04:00", - "latitude": 60.491022, - "longitude": 138.465858, - "tags": ["consectetur", "do", "elit", "minim", "ex", "commodo", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Cheri Warren" - }, - { - "id": 1, - "name": "Beatriz Park" - }, - { - "id": 2, - "name": "Latoya Mills" - } - ], - "greeting": "Hello, Baldwin Farrell! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dbc4a84b2a0b96e19", - "index": 789, - "guid": "a8e5b803-d4fb-4282-b943-e04d8966319e", - "isActive": true, - "balance": "$3,339.96", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Alyssa Buchanan", - "gender": "female", - "company": "COMTRAIL", - "email": "alyssabuchanan@comtrail.com", - "phone": "+1 (992) 549-2284", - "address": "821 Monitor Street, Brambleton, Palau, 9177", - "about": "Incididunt excepteur sit sunt aute et. Nisi non mollit anim quis voluptate. Nulla excepteur fugiat non veniam non pariatur et dolor pariatur ad laborum eu aliqua labore. Deserunt amet ea nostrud ea aliquip amet adipisicing officia deserunt. Minim adipisicing Lorem ex laboris proident pariatur exercitation proident consectetur laboris.\r\n", - "registered": "2018-09-04T11:02:26 +04:00", - "latitude": 87.635576, - "longitude": 165.659913, - "tags": ["incididunt", "mollit", "consequat", "nisi", "culpa", "cillum", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Joyce Floyd" - }, - { - "id": 1, - "name": "Beth Barlow" - }, - { - "id": 2, - "name": "Witt Mccall" - } - ], - "greeting": "Hello, Alyssa Buchanan! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d43f228a1770b3581", - "index": 790, - "guid": "58e35cd1-1c6d-4d4e-965e-086ffb0f40e2", - "isActive": false, - "balance": "$3,109.71", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Frank Ramos", - "gender": "male", - "company": "VELITY", - "email": "frankramos@velity.com", - "phone": "+1 (849) 513-3913", - "address": "982 Bowne Street, Corriganville, West Virginia, 2238", - "about": "Irure anim est ut irure ex aliqua sunt duis enim eu nostrud ex. Est id et consectetur ad velit culpa. Eiusmod cupidatat id commodo aliqua ut Lorem excepteur adipisicing id ullamco. Deserunt Lorem ad consectetur dolor aute veniam velit laborum amet officia esse. Nostrud deserunt tempor fugiat eiusmod in officia laboris ullamco.\r\n", - "registered": "2015-02-12T02:17:35 +05:00", - "latitude": 1.231032, - "longitude": 118.832224, - "tags": ["tempor", "tempor", "est", "laborum", "nulla", "aliqua", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Horton Horn" - }, - { - "id": 1, - "name": "Sue Blackwell" - }, - { - "id": 2, - "name": "Debra Nielsen" - } - ], - "greeting": "Hello, Frank Ramos! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8d1d0cced7696dd9", - "index": 791, - "guid": "f575bae9-5c5e-4f9c-91c0-3ed329213d3d", - "isActive": true, - "balance": "$3,169.98", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Hartman Lucas", - "gender": "male", - "company": "PLUTORQUE", - "email": "hartmanlucas@plutorque.com", - "phone": "+1 (836) 556-3292", - "address": "726 Cyrus Avenue, Deputy, New York, 8063", - "about": "Id consequat excepteur in occaecat minim commodo cupidatat cillum deserunt commodo qui labore. Veniam anim aute duis sit pariatur id. Nisi anim esse irure non sit esse quis nostrud.\r\n", - "registered": "2016-07-05T01:31:31 +04:00", - "latitude": -29.28488, - "longitude": -133.528513, - "tags": ["sint", "voluptate", "aliqua", "sint", "tempor", "ad", "sunt"], - "friends": [ - { - "id": 0, - "name": "Chase Alvarez" - }, - { - "id": 1, - "name": "Peters Hyde" - }, - { - "id": 2, - "name": "Long Flores" - } - ], - "greeting": "Hello, Hartman Lucas! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc95c877143258aeb", - "index": 792, - "guid": "a458f1d1-2a77-405c-8f87-1ebfb76b1df7", - "isActive": false, - "balance": "$2,242.25", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Maude Mcmahon", - "gender": "female", - "company": "QUINTITY", - "email": "maudemcmahon@quintity.com", - "phone": "+1 (882) 512-3658", - "address": "206 Franklin Avenue, Fannett, Hawaii, 4898", - "about": "Cupidatat veniam duis amet ad deserunt velit. Nulla et cupidatat mollit veniam. Ullamco proident officia excepteur velit.\r\n", - "registered": "2020-02-20T03:15:39 +05:00", - "latitude": 39.438979, - "longitude": 106.443555, - "tags": ["tempor", "esse", "anim", "aliqua", "sit", "officia", "enim"], - "friends": [ - { - "id": 0, - "name": "Ward Fulton" - }, - { - "id": 1, - "name": "Farrell Vance" - }, - { - "id": 2, - "name": "Holly Wilkinson" - } - ], - "greeting": "Hello, Maude Mcmahon! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd12ddb47aedd7d46", - "index": 793, - "guid": "2bab6c1a-ee4c-4c26-a42b-5d159d7909c5", - "isActive": true, - "balance": "$2,951.64", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Pauline Beck", - "gender": "female", - "company": "QUILITY", - "email": "paulinebeck@quility.com", - "phone": "+1 (997) 458-2460", - "address": "588 Walker Court, Nescatunga, Nebraska, 5807", - "about": "Pariatur reprehenderit id do enim nisi ad. Eiusmod deserunt ea veniam ad culpa. Consequat laboris non laboris irure deserunt culpa mollit et officia dolor esse. Dolore sint minim velit nisi tempor exercitation dolor aliquip esse est cupidatat laborum quis. Quis nostrud aute reprehenderit officia.\r\n", - "registered": "2015-08-31T04:16:59 +04:00", - "latitude": 35.64208, - "longitude": 65.76511, - "tags": ["minim", "ipsum", "qui", "dolor", "id", "nostrud", "laboris"], - "friends": [ - { - "id": 0, - "name": "Walls Ball" - }, - { - "id": 1, - "name": "Alma Callahan" - }, - { - "id": 2, - "name": "Bartlett Finch" - } - ], - "greeting": "Hello, Pauline Beck! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc793eedd9249c31f", - "index": 794, - "guid": "12e9d6a9-f877-401e-8014-2cc5a56413fe", - "isActive": false, - "balance": "$3,689.45", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Vicki Lowery", - "gender": "female", - "company": "DOGNOSIS", - "email": "vickilowery@dognosis.com", - "phone": "+1 (871) 483-2760", - "address": "436 Grimes Road, Riegelwood, Wisconsin, 8281", - "about": "Eu et aliquip nostrud proident non excepteur dolore velit adipisicing et mollit occaecat ad laborum. Nisi magna in proident nisi reprehenderit ipsum consectetur enim est ad officia labore. Lorem irure dolore consectetur labore dolore et et dolor enim. Est cillum tempor id mollit reprehenderit in id do quis consequat veniam. Labore reprehenderit non dolor nisi labore aliquip elit ad laborum amet officia exercitation proident nisi. Tempor velit id aliquip ea aute anim ea adipisicing aute eu magna. Adipisicing ad aliquip ut adipisicing quis labore exercitation.\r\n", - "registered": "2018-04-29T10:25:39 +04:00", - "latitude": -8.024083, - "longitude": -100.462422, - "tags": ["eu", "ex", "pariatur", "occaecat", "esse", "do", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Shawn Vinson" - }, - { - "id": 1, - "name": "Arlene Becker" - }, - { - "id": 2, - "name": "Barbra Nelson" - } - ], - "greeting": "Hello, Vicki Lowery! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1dafbf6882bd453f", - "index": 795, - "guid": "de343dc6-7c28-47bf-8926-878c12d8d5b2", - "isActive": true, - "balance": "$3,484.86", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Howell Mcpherson", - "gender": "male", - "company": "AEORA", - "email": "howellmcpherson@aeora.com", - "phone": "+1 (818) 422-3667", - "address": "160 Carroll Street, Hachita, Arizona, 6853", - "about": "Esse officia ut in consectetur occaecat. Excepteur magna ipsum sunt occaecat ut ea reprehenderit cupidatat magna sunt anim reprehenderit laborum ea. Proident Lorem ex nostrud dolore. Incididunt voluptate mollit sit laboris ad. Do fugiat est nisi minim sunt non non velit est nulla elit Lorem fugiat dolore. Cillum excepteur quis anim mollit magna esse elit consequat dolor nulla dolore reprehenderit irure. Labore magna ea ut deserunt id adipisicing minim fugiat.\r\n", - "registered": "2016-02-21T06:47:47 +05:00", - "latitude": -23.662782, - "longitude": 178.763736, - "tags": ["laboris", "non", "reprehenderit", "in", "reprehenderit", "occaecat", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Beryl Jenkins" - }, - { - "id": 1, - "name": "Mathis Robbins" - }, - { - "id": 2, - "name": "Rosalie Norton" - } - ], - "greeting": "Hello, Howell Mcpherson! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3217334b4d4f7801", - "index": 796, - "guid": "7c7e2b86-2a2a-427a-af50-26be797a9125", - "isActive": false, - "balance": "$3,741.59", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Morales Bond", - "gender": "male", - "company": "CINASTER", - "email": "moralesbond@cinaster.com", - "phone": "+1 (806) 421-3259", - "address": "875 Guernsey Street, Dana, Ohio, 5227", - "about": "Ex consequat irure qui in eu. Veniam nulla aliquip minim voluptate eu cupidatat sint amet Lorem duis. Veniam cupidatat magna duis ullamco laboris fugiat anim adipisicing.\r\n", - "registered": "2019-06-05T09:24:58 +04:00", - "latitude": 8.520954, - "longitude": -40.730004, - "tags": ["ullamco", "eiusmod", "consectetur", "pariatur", "veniam", "sint", "est"], - "friends": [ - { - "id": 0, - "name": "Eloise Roman" - }, - { - "id": 1, - "name": "Reyna Carlson" - }, - { - "id": 2, - "name": "Ila Sweeney" - } - ], - "greeting": "Hello, Morales Bond! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7a1b2782fe997964", - "index": 797, - "guid": "fd6f1862-040d-4036-9d0e-72e6fc42c496", - "isActive": true, - "balance": "$3,205.08", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Harrison Roberson", - "gender": "male", - "company": "EMOLTRA", - "email": "harrisonroberson@emoltra.com", - "phone": "+1 (911) 592-3749", - "address": "259 Bartlett Place, Tyro, Arkansas, 1218", - "about": "Sunt dolore elit anim adipisicing cupidatat sit esse. Nulla eiusmod cillum cupidatat ex reprehenderit voluptate ullamco laborum Lorem laborum cupidatat. Duis duis est ea nulla esse nulla voluptate qui ex magna. Mollit labore dolore ad culpa id est veniam deserunt eu fugiat sint. Laboris voluptate cillum exercitation aliqua do consectetur. Eiusmod eu occaecat tempor ipsum non esse et dolore officia.\r\n", - "registered": "2016-05-01T02:39:02 +04:00", - "latitude": -6.141532, - "longitude": 83.244334, - "tags": ["minim", "duis", "velit", "est", "sunt", "velit", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Lesley Trevino" - }, - { - "id": 1, - "name": "Bonnie Macias" - }, - { - "id": 2, - "name": "Mcneil Finley" - } - ], - "greeting": "Hello, Harrison Roberson! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d75ac8033f305615f", - "index": 798, - "guid": "d6aefb6f-8737-4038-a3f5-2ad2c77eded1", - "isActive": false, - "balance": "$3,637.16", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Reynolds Wynn", - "gender": "male", - "company": "RUGSTARS", - "email": "reynoldswynn@rugstars.com", - "phone": "+1 (854) 416-2797", - "address": "340 Marconi Place, Waikele, Nevada, 6497", - "about": "Esse pariatur enim eu nostrud. Id anim duis do nulla dolore aute aute. Nulla laboris elit et consequat anim nulla sint culpa fugiat cupidatat elit nulla non. Irure nostrud consequat aliquip sunt anim eu. Voluptate dolor magna cillum ex consequat aliquip eiusmod ut.\r\n", - "registered": "2017-09-28T12:08:50 +04:00", - "latitude": -48.765881, - "longitude": 63.710279, - "tags": ["ad", "cillum", "duis", "ex", "cillum", "quis", "aute"], - "friends": [ - { - "id": 0, - "name": "Conley Bray" - }, - { - "id": 1, - "name": "Tate Ross" - }, - { - "id": 2, - "name": "Byrd Schultz" - } - ], - "greeting": "Hello, Reynolds Wynn! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9c4f24e6bc4d9916", - "index": 799, - "guid": "af34afc3-aab4-4994-9310-72fb22cd8686", - "isActive": false, - "balance": "$2,399.15", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Mcfadden Warner", - "gender": "male", - "company": "ZIZZLE", - "email": "mcfaddenwarner@zizzle.com", - "phone": "+1 (841) 518-2653", - "address": "254 Jardine Place, Lopezo, Massachusetts, 3813", - "about": "Sint est fugiat tempor amet irure laboris Lorem. Voluptate nostrud quis dolore eu enim consectetur elit proident dolor cupidatat proident eu veniam amet. Consequat laboris dolor duis sint non commodo velit ipsum sit pariatur eu qui exercitation nostrud. Eiusmod proident id elit minim do sint qui aliquip do magna labore enim.\r\n", - "registered": "2019-11-14T09:53:58 +05:00", - "latitude": 21.968411, - "longitude": 149.665872, - "tags": ["cupidatat", "nulla", "dolore", "consectetur", "cillum", "pariatur", "irure"], - "friends": [ - { - "id": 0, - "name": "Dianna Mullen" - }, - { - "id": 1, - "name": "Vang Soto" - }, - { - "id": 2, - "name": "Keith Forbes" - } - ], - "greeting": "Hello, Mcfadden Warner! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d61eb6fdc954deb32", - "index": 800, - "guid": "100c4e14-53a6-4f7c-af18-dcfa0acb6e35", - "isActive": true, - "balance": "$3,119.36", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Corine Hubbard", - "gender": "female", - "company": "ISOLOGICA", - "email": "corinehubbard@isologica.com", - "phone": "+1 (935) 575-3024", - "address": "721 Logan Street, Cannondale, Marshall Islands, 8110", - "about": "Labore tempor laboris tempor voluptate. Dolor dolor laborum exercitation mollit duis eu. Officia qui officia aliqua sit laboris culpa enim aliquip non esse elit aliquip labore. Esse eiusmod dolore labore eiusmod exercitation sunt amet minim laboris minim id sunt ut et. Dolor culpa consectetur in deserunt eu veniam exercitation duis Lorem ea pariatur dolor mollit pariatur.\r\n", - "registered": "2017-08-18T09:20:18 +04:00", - "latitude": -5.15458, - "longitude": 177.858355, - "tags": ["id", "cillum", "voluptate", "non", "laboris", "commodo", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Whitley Owens" - }, - { - "id": 1, - "name": "Casey Sosa" - }, - { - "id": 2, - "name": "Edwards Espinoza" - } - ], - "greeting": "Hello, Corine Hubbard! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d863667c597b5c3ea", - "index": 801, - "guid": "0675a287-72e4-432e-9d1c-fe1eff7a5570", - "isActive": false, - "balance": "$2,184.17", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Jordan Dudley", - "gender": "female", - "company": "MEDIOT", - "email": "jordandudley@mediot.com", - "phone": "+1 (891) 535-3750", - "address": "783 Beard Street, Zarephath, Puerto Rico, 4511", - "about": "Adipisicing laboris minim ad aliqua consequat occaecat ex ex enim proident ad occaecat. Eu minim dolore consequat ullamco commodo aliquip et dolore. Laborum adipisicing ad eiusmod reprehenderit non deserunt dolore nostrud ut irure sunt. Id irure duis tempor duis tempor. Aliqua sunt eiusmod qui consequat Lorem nostrud enim. Nisi eu fugiat cillum ex veniam elit ea. Ea enim minim ut Lorem duis anim esse sunt aute ut aliqua magna.\r\n", - "registered": "2016-08-09T12:56:44 +04:00", - "latitude": 25.064779, - "longitude": 173.2926, - "tags": ["aliquip", "consequat", "dolor", "culpa", "occaecat", "et", "laborum"], - "friends": [ - { - "id": 0, - "name": "Brianna Robles" - }, - { - "id": 1, - "name": "Sutton Mcmillan" - }, - { - "id": 2, - "name": "Bates Dickerson" - } - ], - "greeting": "Hello, Jordan Dudley! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd2d638f3d1ca35c7", - "index": 802, - "guid": "da4545ef-d69e-4850-ab2e-622718e7ad5b", - "isActive": true, - "balance": "$1,966.24", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Audrey Gould", - "gender": "female", - "company": "EXERTA", - "email": "audreygould@exerta.com", - "phone": "+1 (978) 570-3657", - "address": "462 Olive Street, Maury, California, 2024", - "about": "Pariatur cupidatat minim commodo culpa. Officia qui magna id anim ea ea laborum et cupidatat officia. Laborum anim officia proident elit culpa. Non ullamco in reprehenderit Lorem ea deserunt aliqua tempor anim aute elit non ipsum. Nostrud Lorem Lorem irure eu voluptate deserunt enim consequat esse sunt. Occaecat mollit deserunt sint id minim anim ullamco est culpa et sit consequat. Incididunt cillum velit et nulla Lorem laborum laborum ullamco eu commodo consequat adipisicing ipsum.\r\n", - "registered": "2020-06-27T01:46:35 +04:00", - "latitude": 44.746559, - "longitude": 69.620917, - "tags": ["exercitation", "anim", "amet", "do", "cupidatat", "fugiat", "magna"], - "friends": [ - { - "id": 0, - "name": "Lauren Moody" - }, - { - "id": 1, - "name": "Patrice Hayden" - }, - { - "id": 2, - "name": "Ayers Washington" - } - ], - "greeting": "Hello, Audrey Gould! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d20780b8cfda01272", - "index": 803, - "guid": "1ece3d8b-11d9-44b0-b97f-27a61d31abed", - "isActive": false, - "balance": "$1,835.67", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Hope Howard", - "gender": "female", - "company": "FITCORE", - "email": "hopehoward@fitcore.com", - "phone": "+1 (826) 462-3266", - "address": "354 Sumpter Street, Stockwell, Tennessee, 5654", - "about": "Enim nulla tempor ut duis voluptate laborum non officia non. Aliquip do id adipisicing sunt excepteur ullamco irure pariatur ipsum aute esse officia occaecat exercitation. Laboris pariatur id non eu tempor velit cillum ea magna culpa reprehenderit ad. Eiusmod adipisicing aute commodo laboris velit sint veniam nisi incididunt do deserunt laboris. Pariatur excepteur cillum fugiat laborum in adipisicing officia. Aliquip fugiat sint id eiusmod reprehenderit ex excepteur sint sunt dolor aliquip.\r\n", - "registered": "2019-02-09T02:13:17 +05:00", - "latitude": 22.6409, - "longitude": 12.65792, - "tags": ["elit", "ut", "occaecat", "dolore", "occaecat", "exercitation", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Dotson Williams" - }, - { - "id": 1, - "name": "Perez Combs" - }, - { - "id": 2, - "name": "Myra Pierce" - } - ], - "greeting": "Hello, Hope Howard! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de7400c2782b26eb4", - "index": 804, - "guid": "6bf78ccb-b63f-4dd0-8a75-09f3085c4810", - "isActive": false, - "balance": "$2,225.57", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Alexander Christensen", - "gender": "male", - "company": "PARCOE", - "email": "alexanderchristensen@parcoe.com", - "phone": "+1 (906) 545-3292", - "address": "425 Lafayette Avenue, Cowiche, Wyoming, 6958", - "about": "Tempor officia quis culpa sit labore ullamco enim nulla anim commodo ex ipsum voluptate in. Officia laboris qui minim reprehenderit pariatur amet sunt labore commodo dolore excepteur qui. Ea amet occaecat ipsum excepteur aliqua magna aliquip consectetur irure consectetur.\r\n", - "registered": "2017-02-16T10:24:25 +05:00", - "latitude": 40.649584, - "longitude": -157.215993, - "tags": ["eiusmod", "exercitation", "mollit", "eu", "adipisicing", "aliqua", "sunt"], - "friends": [ - { - "id": 0, - "name": "Bowen Sweet" - }, - { - "id": 1, - "name": "Sargent Roach" - }, - { - "id": 2, - "name": "Alisha Shannon" - } - ], - "greeting": "Hello, Alexander Christensen! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbef4d2a431d90750", - "index": 805, - "guid": "1291e79b-8fd8-4db2-88fc-497e7f5e831c", - "isActive": false, - "balance": "$3,803.51", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Hughes Andrews", - "gender": "male", - "company": "EXTRAGEN", - "email": "hughesandrews@extragen.com", - "phone": "+1 (926) 457-3621", - "address": "181 Lawrence Avenue, Hinsdale, North Carolina, 4486", - "about": "Minim nulla ut nulla cillum amet reprehenderit dolore irure deserunt. Dolore tempor aliquip dolor id deserunt occaecat commodo fugiat ipsum magna. Reprehenderit voluptate nisi duis excepteur sit voluptate esse eiusmod amet. Deserunt ad cillum ea esse ipsum exercitation sint fugiat tempor eu minim velit proident. Eiusmod excepteur consequat ut sint aliqua eiusmod non. Cillum magna voluptate veniam eu et irure officia irure do et aliquip deserunt mollit. Sunt quis ut deserunt ex.\r\n", - "registered": "2017-09-16T02:08:22 +04:00", - "latitude": -66.996459, - "longitude": 36.643919, - "tags": ["nulla", "magna", "sunt", "consectetur", "do", "incididunt", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Tisha Pena" - }, - { - "id": 1, - "name": "Luna Hardin" - }, - { - "id": 2, - "name": "Rivers Haley" - } - ], - "greeting": "Hello, Hughes Andrews! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d77b5ea736b13a35e", - "index": 806, - "guid": "5469ad67-9523-458d-b345-be2b1d3910e8", - "isActive": false, - "balance": "$1,935.48", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Sonia Massey", - "gender": "female", - "company": "ROBOID", - "email": "soniamassey@roboid.com", - "phone": "+1 (837) 401-3141", - "address": "966 Maple Avenue, Echo, Michigan, 4967", - "about": "Culpa occaecat ullamco eu ad ullamco sunt voluptate. Veniam sit laboris fugiat laboris amet proident commodo pariatur. Sunt labore cupidatat incididunt sint velit anim culpa consectetur culpa veniam. Aliquip aliqua qui quis amet deserunt do non. Ut commodo tempor cupidatat culpa ut dolore sunt incididunt tempor ea sit aute. Quis irure qui cillum sunt ullamco aliqua ex.\r\n", - "registered": "2017-12-15T12:23:04 +05:00", - "latitude": -19.335946, - "longitude": -84.999776, - "tags": ["anim", "id", "occaecat", "et", "cillum", "deserunt", "elit"], - "friends": [ - { - "id": 0, - "name": "Wilcox Briggs" - }, - { - "id": 1, - "name": "Howe Wolf" - }, - { - "id": 2, - "name": "Rosario Good" - } - ], - "greeting": "Hello, Sonia Massey! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2ec79e69b09ea72f", - "index": 807, - "guid": "d27a177c-a15b-407e-8175-8d183df2d3bd", - "isActive": false, - "balance": "$3,403.98", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Paulette Weber", - "gender": "female", - "company": "ONTALITY", - "email": "pauletteweber@ontality.com", - "phone": "+1 (906) 404-3888", - "address": "619 Fairview Place, Sutton, Oklahoma, 1892", - "about": "Laborum consequat proident dolore duis est laboris enim dolor labore consequat incididunt do ex irure. Dolor aute minim anim labore mollit minim reprehenderit aliqua mollit eu esse. Eu Lorem sint ad velit est aute est aliquip do consequat aliqua sint reprehenderit.\r\n", - "registered": "2015-10-24T02:46:44 +04:00", - "latitude": 78.332851, - "longitude": 8.146928, - "tags": ["ut", "enim", "aliquip", "eiusmod", "irure", "cillum", "id"], - "friends": [ - { - "id": 0, - "name": "Tami Holden" - }, - { - "id": 1, - "name": "Tran Moran" - }, - { - "id": 2, - "name": "Mari Terrell" - } - ], - "greeting": "Hello, Paulette Weber! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd8b5c6d2574c2634", - "index": 808, - "guid": "c3b5c3f1-ede5-4b67-8968-37b74b9a3753", - "isActive": false, - "balance": "$3,603.00", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "brown", - "name": "Madelyn Holcomb", - "gender": "female", - "company": "ENTALITY", - "email": "madelynholcomb@entality.com", - "phone": "+1 (840) 550-3241", - "address": "468 Ocean Avenue, Greensburg, Vermont, 2152", - "about": "Labore in labore elit labore proident consequat dolor. Mollit commodo exercitation cillum nisi nostrud Lorem et ex quis. Aliquip aute anim non dolore nisi minim est excepteur nostrud eiusmod irure aliqua. Laborum commodo minim occaecat ullamco laboris consectetur ea incididunt veniam. Pariatur dolor ea veniam non do in aliquip sint do consectetur ad. Anim reprehenderit sit sint eiusmod tempor duis ipsum excepteur.\r\n", - "registered": "2014-02-20T06:08:01 +05:00", - "latitude": 65.335128, - "longitude": 117.361538, - "tags": ["consequat", "reprehenderit", "dolore", "labore", "non", "Lorem", "sunt"], - "friends": [ - { - "id": 0, - "name": "Palmer Hurst" - }, - { - "id": 1, - "name": "Baker Lowe" - }, - { - "id": 2, - "name": "Bender Luna" - } - ], - "greeting": "Hello, Madelyn Holcomb! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d26392b5661a48db3", - "index": 809, - "guid": "3c01e6b0-9bf8-40c1-9887-6dd826174b79", - "isActive": true, - "balance": "$1,720.69", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Bobbie Sanford", - "gender": "female", - "company": "ECOLIGHT", - "email": "bobbiesanford@ecolight.com", - "phone": "+1 (865) 559-3751", - "address": "833 Ditmars Street, Noxen, Utah, 893", - "about": "Cupidatat deserunt minim nostrud minim sit eiusmod nisi cillum proident commodo labore elit sunt. Veniam quis nulla nulla ad officia mollit sit est aliqua enim. Aliquip enim ad duis dolore ullamco nulla consectetur nisi.\r\n", - "registered": "2019-04-24T03:51:56 +04:00", - "latitude": -86.865261, - "longitude": -60.54005, - "tags": ["irure", "aute", "voluptate", "dolore", "dolore", "enim", "ea"], - "friends": [ - { - "id": 0, - "name": "Ray Maldonado" - }, - { - "id": 1, - "name": "Benson Lewis" - }, - { - "id": 2, - "name": "Ellen Clarke" - } - ], - "greeting": "Hello, Bobbie Sanford! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d77466f087efe923a", - "index": 810, - "guid": "08373188-946e-48c4-9034-7b8f9ce627b8", - "isActive": false, - "balance": "$3,178.39", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "April Chen", - "gender": "female", - "company": "BIZMATIC", - "email": "aprilchen@bizmatic.com", - "phone": "+1 (988) 412-3645", - "address": "857 Ovington Court, Columbus, Kansas, 6288", - "about": "Culpa nulla irure nostrud minim adipisicing elit consequat dolore esse. Dolor commodo consequat est sint veniam veniam adipisicing do do dolor irure elit. Do duis cillum pariatur ex cillum. Id labore in dolor non occaecat proident. Esse reprehenderit Lorem commodo dolor duis sint quis. Aliquip fugiat quis anim do deserunt aute minim dolore voluptate est excepteur elit mollit. Reprehenderit ea excepteur consectetur non labore consequat nisi ea.\r\n", - "registered": "2015-05-28T10:29:20 +04:00", - "latitude": -28.276316, - "longitude": -178.445849, - "tags": ["esse", "labore", "proident", "excepteur", "non", "velit", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Harmon Cantu" - }, - { - "id": 1, - "name": "Melisa Cook" - }, - { - "id": 2, - "name": "Eunice Murray" - } - ], - "greeting": "Hello, April Chen! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3555f1552d18951d", - "index": 811, - "guid": "2d08371c-3253-45bb-bdc6-edd090e958fb", - "isActive": true, - "balance": "$1,008.50", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Barr Webster", - "gender": "male", - "company": "ZOUNDS", - "email": "barrwebster@zounds.com", - "phone": "+1 (806) 449-2548", - "address": "247 Boerum Place, Osmond, Delaware, 8706", - "about": "Nisi nostrud non sint deserunt reprehenderit est velit excepteur aliqua. Deserunt labore sint enim fugiat est ad aute esse laboris nisi tempor Lorem. Id incididunt in nulla commodo. Velit adipisicing ut ad consectetur ex pariatur. Aliquip et sunt aute consectetur ad commodo laborum laborum Lorem quis consectetur.\r\n", - "registered": "2019-04-28T11:11:24 +04:00", - "latitude": -9.005257, - "longitude": -9.417826, - "tags": ["duis", "occaecat", "velit", "aute", "aliqua", "irure", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Angelita Mcfarland" - }, - { - "id": 1, - "name": "Bianca Stokes" - }, - { - "id": 2, - "name": "Elsa Obrien" - } - ], - "greeting": "Hello, Barr Webster! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3df113480dce23ac", - "index": 812, - "guid": "93add71c-9fa9-4eee-ad2e-1b03e90f9885", - "isActive": false, - "balance": "$1,510.72", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Berg Decker", - "gender": "male", - "company": "VINCH", - "email": "bergdecker@vinch.com", - "phone": "+1 (900) 569-2239", - "address": "609 Madison Place, Homestead, Guam, 3481", - "about": "Laborum eu tempor mollit nulla ad dolor duis adipisicing ut ea occaecat. Aliquip ea ut non incididunt elit commodo adipisicing adipisicing. Labore commodo dolore dolor mollit eiusmod elit ex. Non amet nisi laborum dolore in eu velit nisi esse amet. Do duis sunt mollit officia commodo qui adipisicing eiusmod elit ipsum Lorem dolore in.\r\n", - "registered": "2018-05-23T01:12:15 +04:00", - "latitude": -11.980993, - "longitude": 36.110829, - "tags": ["pariatur", "quis", "esse", "proident", "officia", "laboris", "est"], - "friends": [ - { - "id": 0, - "name": "Mayra Mcdonald" - }, - { - "id": 1, - "name": "Deleon Berger" - }, - { - "id": 2, - "name": "Lilian Riggs" - } - ], - "greeting": "Hello, Berg Decker! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc3e0eb19b1a08114", - "index": 813, - "guid": "6bda5db6-5aee-40c0-bd92-045691476d2c", - "isActive": false, - "balance": "$1,926.19", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Holmes Dominguez", - "gender": "male", - "company": "ELECTONIC", - "email": "holmesdominguez@electonic.com", - "phone": "+1 (860) 461-3639", - "address": "689 Kings Hwy, Tuttle, Oregon, 656", - "about": "Aute ipsum adipisicing commodo id consequat in et aliquip nulla non. Nulla adipisicing sint esse cupidatat. Nisi fugiat magna magna mollit laboris ea sint dolor cillum ea consectetur est qui aliquip. Nulla reprehenderit ad pariatur eiusmod id ullamco consectetur eu. Do ea consectetur tempor reprehenderit labore velit laborum cupidatat et tempor.\r\n", - "registered": "2020-02-11T10:26:56 +05:00", - "latitude": 87.807584, - "longitude": -34.472676, - "tags": ["do", "consectetur", "adipisicing", "veniam", "velit", "sint", "sit"], - "friends": [ - { - "id": 0, - "name": "Carlene Cooke" - }, - { - "id": 1, - "name": "Kramer Melton" - }, - { - "id": 2, - "name": "Finley Steele" - } - ], - "greeting": "Hello, Holmes Dominguez! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de1dece601553de75", - "index": 814, - "guid": "8ed8f4be-ae90-48e0-931e-0ee26cb5cab4", - "isActive": false, - "balance": "$3,791.07", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Gray Clark", - "gender": "male", - "company": "TRIBALOG", - "email": "grayclark@tribalog.com", - "phone": "+1 (904) 534-2791", - "address": "943 Love Lane, Vicksburg, Missouri, 3691", - "about": "Cillum cupidatat nisi ut consectetur sint sunt qui occaecat esse eiusmod. Sunt sint cillum consequat veniam non commodo Lorem eiusmod ullamco sit elit enim. Sit cupidatat exercitation est ullamco fugiat pariatur mollit veniam. Aliquip proident Lorem labore magna laboris id sunt proident ex. Consectetur nostrud est voluptate minim amet sunt dolor ut consectetur exercitation.\r\n", - "registered": "2019-08-04T01:39:14 +04:00", - "latitude": -35.658512, - "longitude": -36.65095, - "tags": ["eu", "Lorem", "labore", "ullamco", "aute", "adipisicing", "officia"], - "friends": [ - { - "id": 0, - "name": "Roberts Sanders" - }, - { - "id": 1, - "name": "Freeman Witt" - }, - { - "id": 2, - "name": "Robin Grimes" - } - ], - "greeting": "Hello, Gray Clark! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25daf3cacbdd989264f", - "index": 815, - "guid": "e2fc3438-2943-4d9c-9968-3d1e8ff0f1ce", - "isActive": false, - "balance": "$1,625.89", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Mitzi Bass", - "gender": "female", - "company": "PRINTSPAN", - "email": "mitzibass@printspan.com", - "phone": "+1 (951) 538-2256", - "address": "991 Junius Street, Hollins, Montana, 2126", - "about": "Ullamco labore culpa aliqua consequat veniam excepteur mollit mollit id. Ipsum nulla exercitation amet ad. Proident cillum pariatur labore commodo consequat. Ipsum voluptate Lorem et ullamco ad aute labore minim qui aute.\r\n", - "registered": "2015-12-16T08:51:35 +05:00", - "latitude": -3.049046, - "longitude": -42.043849, - "tags": ["veniam", "eu", "nisi", "ea", "labore", "pariatur", "mollit"], - "friends": [ - { - "id": 0, - "name": "Burke Jarvis" - }, - { - "id": 1, - "name": "Burns Peck" - }, - { - "id": 2, - "name": "Emma Barron" - } - ], - "greeting": "Hello, Mitzi Bass! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d68c7327200a5b737", - "index": 816, - "guid": "0a471885-2b21-4589-af2a-8cae575e80bb", - "isActive": false, - "balance": "$2,903.51", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Greer Mcclain", - "gender": "male", - "company": "MARQET", - "email": "greermcclain@marqet.com", - "phone": "+1 (816) 545-2077", - "address": "233 Canarsie Road, Magnolia, Alaska, 7361", - "about": "Enim voluptate sint consectetur fugiat fugiat in. Ad sunt non laborum voluptate voluptate commodo qui in quis enim pariatur. Aliqua mollit commodo anim nostrud.\r\n", - "registered": "2015-10-02T04:11:16 +04:00", - "latitude": 65.287589, - "longitude": 148.358108, - "tags": ["qui", "amet", "ut", "sit", "cillum", "excepteur", "do"], - "friends": [ - { - "id": 0, - "name": "Webster Osborne" - }, - { - "id": 1, - "name": "Wells Shelton" - }, - { - "id": 2, - "name": "Noble Oneill" - } - ], - "greeting": "Hello, Greer Mcclain! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc9b185031951aa8f", - "index": 817, - "guid": "2bbd0a3a-d451-4350-bb08-2601ce40fb09", - "isActive": false, - "balance": "$2,630.29", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Wilkins Turner", - "gender": "male", - "company": "CYTRAK", - "email": "wilkinsturner@cytrak.com", - "phone": "+1 (937) 442-3378", - "address": "241 Hewes Street, Coleville, Kentucky, 3590", - "about": "Incididunt anim occaecat irure amet anim enim ipsum minim aliqua ea non Lorem incididunt adipisicing. In non anim commodo commodo eiusmod eiusmod nulla adipisicing aliquip sit quis. Lorem eu labore nostrud aliquip irure dolore esse.\r\n", - "registered": "2016-08-01T04:01:50 +04:00", - "latitude": 16.072411, - "longitude": -12.040393, - "tags": ["ad", "nulla", "elit", "exercitation", "cillum", "commodo", "irure"], - "friends": [ - { - "id": 0, - "name": "Oneal Goodman" - }, - { - "id": 1, - "name": "Antoinette Bailey" - }, - { - "id": 2, - "name": "Robert Cox" - } - ], - "greeting": "Hello, Wilkins Turner! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3fa37cc62a219022", - "index": 818, - "guid": "1c5bf3e2-8978-46fe-b8bb-4dc93144b8c1", - "isActive": true, - "balance": "$1,189.78", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Carrillo Gallagher", - "gender": "male", - "company": "IDEALIS", - "email": "carrillogallagher@idealis.com", - "phone": "+1 (987) 593-2482", - "address": "834 Chase Court, Beaverdale, Mississippi, 1780", - "about": "Eiusmod magna sit magna in consectetur sint eu eiusmod cupidatat eu sit aliquip. Dolore laboris eiusmod ea nulla cillum labore pariatur ex. Est ipsum laborum irure occaecat non deserunt.\r\n", - "registered": "2019-06-12T11:32:23 +04:00", - "latitude": -51.297058, - "longitude": 135.871758, - "tags": ["cillum", "cupidatat", "consequat", "eu", "esse", "nisi", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Francine Keith" - }, - { - "id": 1, - "name": "England Harrington" - }, - { - "id": 2, - "name": "Anita Kidd" - } - ], - "greeting": "Hello, Carrillo Gallagher! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1d4069f0d369dca4", - "index": 819, - "guid": "664a4a10-738e-4cde-9c52-4309ac29becd", - "isActive": false, - "balance": "$1,924.71", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Josephine Morris", - "gender": "female", - "company": "RUBADUB", - "email": "josephinemorris@rubadub.com", - "phone": "+1 (821) 465-2589", - "address": "571 Hendrickson Place, Hickory, North Dakota, 8342", - "about": "Officia qui in laborum nisi consectetur. Adipisicing do non ad qui sit sint consectetur tempor non voluptate exercitation ex reprehenderit. Minim qui nostrud esse cupidatat id enim fugiat commodo labore in consequat. Cupidatat anim amet sunt fugiat exercitation. Occaecat esse pariatur duis nulla sit commodo nostrud in est commodo. Fugiat velit irure ut exercitation eu exercitation excepteur amet commodo aliqua aliquip.\r\n", - "registered": "2020-07-28T05:47:40 +04:00", - "latitude": 55.637539, - "longitude": 82.628284, - "tags": ["proident", "pariatur", "nostrud", "laboris", "dolore", "anim", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Hewitt Hull" - }, - { - "id": 1, - "name": "Gould Ortega" - }, - { - "id": 2, - "name": "Robinson Shaw" - } - ], - "greeting": "Hello, Josephine Morris! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3b934a46c8aa5cc8", - "index": 820, - "guid": "e464d4a5-3fc2-49ec-81dc-cfd62ac1f22e", - "isActive": true, - "balance": "$2,593.74", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Carmella Farmer", - "gender": "female", - "company": "IMKAN", - "email": "carmellafarmer@imkan.com", - "phone": "+1 (828) 494-2349", - "address": "634 Thornton Street, Celeryville, Federated States Of Micronesia, 4337", - "about": "Ut fugiat quis magna sint. Fugiat culpa nostrud aliquip commodo sunt minim ad duis culpa. Voluptate ea dolor tempor sint reprehenderit exercitation ad elit ullamco. Id cillum consequat ut aliqua culpa occaecat pariatur anim sunt eiusmod excepteur ex eu non.\r\n", - "registered": "2020-06-16T01:23:50 +04:00", - "latitude": -78.651537, - "longitude": -137.455706, - "tags": ["ut", "et", "exercitation", "commodo", "aute", "consequat", "ea"], - "friends": [ - { - "id": 0, - "name": "Barber Wagner" - }, - { - "id": 1, - "name": "Sheryl Macdonald" - }, - { - "id": 2, - "name": "Carmela Madden" - } - ], - "greeting": "Hello, Carmella Farmer! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4f2d546c85773fe3", - "index": 821, - "guid": "653e03bf-3c00-46be-928a-f9f2ac92a148", - "isActive": true, - "balance": "$2,986.99", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Stefanie Dickson", - "gender": "female", - "company": "MANUFACT", - "email": "stefaniedickson@manufact.com", - "phone": "+1 (909) 405-3753", - "address": "308 Imlay Street, Jennings, Maryland, 3392", - "about": "Dolore tempor ad non aliqua aliqua. Proident quis fugiat nisi dolor voluptate adipisicing cupidatat nulla proident in nisi proident ea. Proident cillum et Lorem elit dolore dolor culpa amet occaecat anim esse magna commodo. Consectetur et laboris aliquip irure enim adipisicing elit non sint nisi aliqua nisi proident qui. Cupidatat sunt aliqua ut nostrud ea incididunt.\r\n", - "registered": "2019-01-08T01:04:09 +05:00", - "latitude": 54.572245, - "longitude": 135.332876, - "tags": ["dolor", "do", "consectetur", "eiusmod", "dolor", "amet", "commodo"], - "friends": [ - { - "id": 0, - "name": "Trujillo Tran" - }, - { - "id": 1, - "name": "Wall Patel" - }, - { - "id": 2, - "name": "Frances England" - } - ], - "greeting": "Hello, Stefanie Dickson! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df31ab50c8a5d1972", - "index": 822, - "guid": "79690093-b8af-47d5-b1db-384decf89d27", - "isActive": true, - "balance": "$2,784.60", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Karin Chapman", - "gender": "female", - "company": "ULTRASURE", - "email": "karinchapman@ultrasure.com", - "phone": "+1 (851) 503-2802", - "address": "771 Micieli Place, Canterwood, Virgin Islands, 6748", - "about": "Cillum sit eiusmod aliquip quis ex. Ea quis consequat tempor aute nulla do. Cillum labore pariatur officia occaecat non ex nostrud aliquip magna tempor nostrud ex. Do excepteur laboris exercitation excepteur.\r\n", - "registered": "2016-02-11T09:56:02 +05:00", - "latitude": 71.651025, - "longitude": -49.985609, - "tags": ["fugiat", "excepteur", "aute", "sit", "exercitation", "occaecat", "et"], - "friends": [ - { - "id": 0, - "name": "Pearl Gaines" - }, - { - "id": 1, - "name": "Alvarez Pitts" - }, - { - "id": 2, - "name": "Slater Lambert" - } - ], - "greeting": "Hello, Karin Chapman! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dde82d27140d28a46", - "index": 823, - "guid": "e4309205-94f4-45c8-b8e3-c9eb8ef7970f", - "isActive": false, - "balance": "$2,745.64", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Staci Holt", - "gender": "female", - "company": "GENMEX", - "email": "staciholt@genmex.com", - "phone": "+1 (803) 433-2985", - "address": "634 Woodhull Street, Oberlin, Pennsylvania, 895", - "about": "Ut est deserunt aliquip ut do aliquip nisi aliqua aliquip enim. Quis elit do sint eu eu quis nulla occaecat. Laborum quis laboris Lorem eu anim culpa cupidatat officia veniam labore dolore sunt. Ex exercitation nostrud sint cillum deserunt commodo est ut consequat. Veniam reprehenderit irure adipisicing quis anim in anim reprehenderit excepteur aliquip eiusmod.\r\n", - "registered": "2014-04-23T07:59:59 +04:00", - "latitude": 84.860773, - "longitude": -169.247006, - "tags": ["dolor", "sint", "nulla", "Lorem", "deserunt", "veniam", "mollit"], - "friends": [ - { - "id": 0, - "name": "Maricela Mayo" - }, - { - "id": 1, - "name": "Roy Noble" - }, - { - "id": 2, - "name": "Olivia Hooper" - } - ], - "greeting": "Hello, Staci Holt! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd549613c07b4e7d5", - "index": 824, - "guid": "f6fd87ea-32ef-4a92-b330-c9262fc7276b", - "isActive": true, - "balance": "$1,845.91", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Stark Waters", - "gender": "male", - "company": "RADIANTIX", - "email": "starkwaters@radiantix.com", - "phone": "+1 (892) 494-2309", - "address": "321 Martense Street, Wakulla, Washington, 971", - "about": "Culpa ut nisi mollit minim. Deserunt ut officia Lorem cupidatat cillum eiusmod do proident commodo amet. Sunt culpa ad veniam mollit non velit in magna ex consequat duis.\r\n", - "registered": "2018-10-26T10:38:55 +04:00", - "latitude": -30.95785, - "longitude": -75.633118, - "tags": ["laboris", "cupidatat", "est", "anim", "nulla", "do", "amet"], - "friends": [ - { - "id": 0, - "name": "Harriett Ramsey" - }, - { - "id": 1, - "name": "Richard Horton" - }, - { - "id": 2, - "name": "Aline Bryant" - } - ], - "greeting": "Hello, Stark Waters! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6e7639297ae8be4e", - "index": 825, - "guid": "ffe876ad-1e46-4716-ae19-a0e7d90129db", - "isActive": false, - "balance": "$1,573.95", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Shelly Dotson", - "gender": "female", - "company": "CENTREGY", - "email": "shellydotson@centregy.com", - "phone": "+1 (913) 471-2198", - "address": "840 Exeter Street, Albany, Illinois, 6360", - "about": "Cupidatat Lorem id deserunt cillum id reprehenderit. Quis enim est magna in aliquip commodo ex ea cillum id quis do. Lorem deserunt pariatur culpa reprehenderit exercitation. Voluptate non reprehenderit do ea ex nostrud qui voluptate amet incididunt ex. Dolor velit sit eu adipisicing officia ipsum. Anim do do et sint pariatur voluptate id culpa esse ad.\r\n", - "registered": "2017-02-17T09:48:18 +05:00", - "latitude": -25.336551, - "longitude": 49.766974, - "tags": ["consequat", "sit", "amet", "ea", "enim", "qui", "officia"], - "friends": [ - { - "id": 0, - "name": "Glenna Griffith" - }, - { - "id": 1, - "name": "Elizabeth Fisher" - }, - { - "id": 2, - "name": "Antonia Tucker" - } - ], - "greeting": "Hello, Shelly Dotson! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7218f9abb350d0a4", - "index": 826, - "guid": "f72f1ed9-3a25-40c4-a5e8-71ff9dc6d9d8", - "isActive": false, - "balance": "$1,639.48", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Woodard Palmer", - "gender": "male", - "company": "GEEKMOSIS", - "email": "woodardpalmer@geekmosis.com", - "phone": "+1 (826) 567-2937", - "address": "779 Concord Street, Woodburn, New Hampshire, 8474", - "about": "Ipsum magna exercitation consequat deserunt adipisicing tempor cillum. Lorem consectetur occaecat voluptate in id duis ad ad laboris sunt aliquip Lorem aliquip. Anim quis voluptate adipisicing deserunt fugiat ea voluptate nulla. Lorem duis duis exercitation cupidatat. Consectetur minim cillum labore adipisicing eu enim aliquip mollit tempor dolore non labore. Non Lorem tempor magna culpa cupidatat. Est do est sit aliqua deserunt magna officia nisi non.\r\n", - "registered": "2017-03-28T11:05:04 +04:00", - "latitude": -42.202295, - "longitude": 74.537496, - "tags": ["irure", "sit", "magna", "non", "ad", "ad", "sunt"], - "friends": [ - { - "id": 0, - "name": "Porter Harrison" - }, - { - "id": 1, - "name": "Curry Clemons" - }, - { - "id": 2, - "name": "Carissa Mccullough" - } - ], - "greeting": "Hello, Woodard Palmer! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4d59d1a9331b4616", - "index": 827, - "guid": "b87e6fc1-fbc8-416c-abf0-19d751f00318", - "isActive": false, - "balance": "$1,254.72", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Yang Barnett", - "gender": "male", - "company": "VENOFLEX", - "email": "yangbarnett@venoflex.com", - "phone": "+1 (918) 481-3562", - "address": "969 Kent Avenue, Lemoyne, Colorado, 3349", - "about": "Commodo pariatur do ea magna enim culpa mollit laborum nulla voluptate voluptate. Fugiat Lorem cillum duis do qui adipisicing. Nostrud laboris non ullamco labore. Cillum tempor duis nostrud laborum sunt laboris. Sint labore aliqua dolore anim quis ut reprehenderit et exercitation pariatur.\r\n", - "registered": "2019-01-11T04:36:14 +05:00", - "latitude": 89.226322, - "longitude": 62.979193, - "tags": ["qui", "do", "non", "nulla", "dolor", "amet", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Autumn King" - }, - { - "id": 1, - "name": "Kellie Robinson" - }, - { - "id": 2, - "name": "Yvette Nguyen" - } - ], - "greeting": "Hello, Yang Barnett! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df6a7e943a499069f", - "index": 828, - "guid": "21862689-f29d-4fc9-aa8f-9353fec9630d", - "isActive": true, - "balance": "$2,772.84", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Celina Norris", - "gender": "female", - "company": "OATFARM", - "email": "celinanorris@oatfarm.com", - "phone": "+1 (912) 528-2192", - "address": "926 Eagle Street, Mathews, Maine, 608", - "about": "In elit occaecat anim labore dolore aute consequat mollit irure nostrud elit. Fugiat amet ullamco et adipisicing cillum in esse mollit velit. Enim officia magna et cillum mollit consectetur sunt pariatur reprehenderit fugiat non irure laborum laborum. Officia officia nostrud labore ut magna nulla ut nostrud aute eiusmod.\r\n", - "registered": "2018-07-24T05:19:26 +04:00", - "latitude": -52.274585, - "longitude": -34.31923, - "tags": ["ea", "ullamco", "sunt", "officia", "sint", "non", "ad"], - "friends": [ - { - "id": 0, - "name": "Banks Acevedo" - }, - { - "id": 1, - "name": "Hodges Hinton" - }, - { - "id": 2, - "name": "George Whitfield" - } - ], - "greeting": "Hello, Celina Norris! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dedfb654f82ad97d0", - "index": 829, - "guid": "55324e6d-8429-4ea8-9220-9d8998f537ef", - "isActive": true, - "balance": "$2,048.91", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Rosanne Dunlap", - "gender": "female", - "company": "WARETEL", - "email": "rosannedunlap@waretel.com", - "phone": "+1 (974) 472-3777", - "address": "102 Navy Walk, Devon, South Carolina, 3590", - "about": "Tempor ut labore id consectetur commodo commodo culpa mollit. Veniam minim deserunt et amet quis. Enim aliquip et sunt cillum. Voluptate esse et excepteur est nulla aute ullamco Lorem deserunt. Consectetur sunt nulla anim nulla aliqua magna id aute ad consequat ipsum officia. Labore pariatur et amet ipsum ut irure duis ex id excepteur nulla labore quis.\r\n", - "registered": "2017-08-09T05:29:57 +04:00", - "latitude": -84.869958, - "longitude": 84.508561, - "tags": ["occaecat", "cupidatat", "in", "minim", "dolor", "minim", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Mejia Graves" - }, - { - "id": 1, - "name": "Kemp Boyd" - }, - { - "id": 2, - "name": "Warner Duran" - } - ], - "greeting": "Hello, Rosanne Dunlap! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2691c9ee95f48f58", - "index": 830, - "guid": "c485d19a-5d46-4f5e-abae-7444f435fe5c", - "isActive": true, - "balance": "$3,326.69", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Bowers Carr", - "gender": "male", - "company": "MEDESIGN", - "email": "bowerscarr@medesign.com", - "phone": "+1 (891) 440-2411", - "address": "187 Vandervoort Avenue, Linganore, Connecticut, 442", - "about": "Qui Lorem ad incididunt culpa consectetur. Et laborum laboris sunt ut id velit magna ea quis adipisicing. Magna dolore nisi Lorem in culpa magna aliqua enim dolor anim cupidatat. Ea sint nulla adipisicing ea proident exercitation ea exercitation commodo non magna sit. Nostrud id qui consequat fugiat amet deserunt labore sit esse veniam sit. Duis sunt eu tempor dolore occaecat ad proident do duis culpa. Ipsum amet adipisicing ut mollit aliquip laboris.\r\n", - "registered": "2016-10-19T08:41:32 +04:00", - "latitude": -21.65374, - "longitude": -166.865374, - "tags": ["reprehenderit", "do", "ea", "nisi", "anim", "enim", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Cardenas Hebert" - }, - { - "id": 1, - "name": "Gilliam Allen" - }, - { - "id": 2, - "name": "Stanley Conrad" - } - ], - "greeting": "Hello, Bowers Carr! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7ca5e31e22e7098c", - "index": 831, - "guid": "5b97f304-be3c-4d6a-84c1-e313e831b7a7", - "isActive": true, - "balance": "$2,257.22", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Black Ray", - "gender": "male", - "company": "HYPLEX", - "email": "blackray@hyplex.com", - "phone": "+1 (944) 454-2884", - "address": "116 Irvington Place, Sheatown, Virginia, 2902", - "about": "Magna consectetur excepteur amet Lorem excepteur aliquip dolor voluptate qui ea eiusmod anim. Occaecat ullamco enim fugiat elit nostrud dolore veniam pariatur Lorem ea id. Aliqua laboris qui do elit sunt amet ad commodo pariatur. Veniam aliqua ea est enim commodo ex.\r\n", - "registered": "2018-08-22T12:35:02 +04:00", - "latitude": -48.99731, - "longitude": 128.632793, - "tags": ["minim", "ut", "amet", "aliqua", "eiusmod", "eiusmod", "minim"], - "friends": [ - { - "id": 0, - "name": "Deanne Charles" - }, - { - "id": 1, - "name": "Nixon Vasquez" - }, - { - "id": 2, - "name": "Stuart Farley" - } - ], - "greeting": "Hello, Black Ray! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dc0119a90f5dfdb3b", - "index": 832, - "guid": "ec0d8251-bd25-473f-9d21-5b6a167177a8", - "isActive": true, - "balance": "$1,961.72", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Mindy Sellers", - "gender": "female", - "company": "CANOPOLY", - "email": "mindysellers@canopoly.com", - "phone": "+1 (807) 500-2320", - "address": "626 Throop Avenue, Hardyville, Georgia, 7111", - "about": "Et voluptate consectetur incididunt dolore excepteur duis ipsum veniam cupidatat nulla consectetur irure. Voluptate aliqua reprehenderit qui aliqua anim non sint eiusmod labore laboris ad anim. Id consectetur eu nisi do velit elit fugiat consequat proident non velit reprehenderit aute. Veniam excepteur sint excepteur sit amet non ex labore tempor veniam in. Minim ad quis sit aliquip consequat. Mollit consectetur magna nisi occaecat nulla ad ut cillum.\r\n", - "registered": "2016-12-21T06:02:25 +05:00", - "latitude": 86.215504, - "longitude": -43.806228, - "tags": ["laboris", "occaecat", "duis", "sunt", "sint", "culpa", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Case Herman" - }, - { - "id": 1, - "name": "Tania Mcdowell" - }, - { - "id": 2, - "name": "Cannon Jennings" - } - ], - "greeting": "Hello, Mindy Sellers! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4d994cbe48facce0", - "index": 833, - "guid": "201d44e6-d389-40c0-b64b-a6f884b08967", - "isActive": true, - "balance": "$2,519.94", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Sykes Arnold", - "gender": "male", - "company": "RECRISYS", - "email": "sykesarnold@recrisys.com", - "phone": "+1 (950) 550-2658", - "address": "156 Crosby Avenue, Kempton, New Jersey, 3579", - "about": "Exercitation et adipisicing cupidatat reprehenderit in nostrud proident nulla nostrud esse nisi occaecat. Occaecat aliqua cupidatat reprehenderit nisi pariatur voluptate commodo aliqua sint pariatur exercitation. Aliqua cupidatat laboris eu in sint irure non tempor ullamco ipsum sit nulla minim sint. Magna sit aliqua incididunt incididunt consequat incididunt aliqua sit tempor est incididunt dolore enim sint. Aute excepteur ex aute quis irure.\r\n", - "registered": "2015-06-07T06:54:00 +04:00", - "latitude": 77.082961, - "longitude": -151.481605, - "tags": ["sunt", "duis", "sunt", "reprehenderit", "quis", "sunt", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Watson Downs" - }, - { - "id": 1, - "name": "Jacqueline Hickman" - }, - { - "id": 2, - "name": "Gallegos Conner" - } - ], - "greeting": "Hello, Sykes Arnold! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d74fa53f4b1e3a9d1", - "index": 834, - "guid": "a57267e1-48a0-4d72-bc13-e2253bc1dd44", - "isActive": false, - "balance": "$2,455.73", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Melendez Rojas", - "gender": "male", - "company": "NEXGENE", - "email": "melendezrojas@nexgene.com", - "phone": "+1 (914) 404-2434", - "address": "269 Victor Road, Tetherow, Minnesota, 4501", - "about": "Enim do pariatur voluptate enim consectetur dolor aute laborum cillum do et consequat. Et duis amet aliquip enim labore do consectetur sint consectetur laboris proident adipisicing sit. Cillum occaecat voluptate sunt esse ipsum. Minim dolor ipsum elit fugiat non laboris amet.\r\n", - "registered": "2019-12-14T05:40:34 +05:00", - "latitude": 45.907235, - "longitude": 80.331199, - "tags": ["excepteur", "tempor", "fugiat", "culpa", "ex", "sunt", "nisi"], - "friends": [ - { - "id": 0, - "name": "Alissa Vega" - }, - { - "id": 1, - "name": "Gracie Levy" - }, - { - "id": 2, - "name": "Cherry Albert" - } - ], - "greeting": "Hello, Melendez Rojas! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbbb2e060a4ba00cd", - "index": 835, - "guid": "e054cef1-34ff-4c20-884b-2215ce98120a", - "isActive": true, - "balance": "$2,439.84", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Nolan Bridges", - "gender": "male", - "company": "EMTRAC", - "email": "nolanbridges@emtrac.com", - "phone": "+1 (880) 481-2782", - "address": "400 Mermaid Avenue, Shaft, Texas, 2492", - "about": "Laboris qui est laboris excepteur ea officia aute excepteur incididunt minim consectetur. Sit mollit officia eiusmod consequat. Adipisicing Lorem consectetur qui culpa aute pariatur eu adipisicing velit Lorem occaecat Lorem irure sunt. Reprehenderit sunt magna irure duis aute. Amet occaecat elit aliquip consectetur magna amet minim velit dolore veniam ut minim exercitation nisi.\r\n", - "registered": "2019-01-20T02:17:21 +05:00", - "latitude": 44.673732, - "longitude": -96.547712, - "tags": ["ipsum", "cupidatat", "id", "dolore", "tempor", "incididunt", "minim"], - "friends": [ - { - "id": 0, - "name": "Ada Bright" - }, - { - "id": 1, - "name": "Thompson Pratt" - }, - { - "id": 2, - "name": "Bridgette Irwin" - } - ], - "greeting": "Hello, Nolan Bridges! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3df9a49b79cc3b6c", - "index": 836, - "guid": "60773e6d-8d0e-4574-8ace-d5e3e3e0ccd7", - "isActive": true, - "balance": "$3,474.19", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Krystal Hays", - "gender": "female", - "company": "BULLZONE", - "email": "krystalhays@bullzone.com", - "phone": "+1 (810) 427-3570", - "address": "664 Vine Street, Rowe, Alabama, 2831", - "about": "Amet excepteur laborum do eiusmod anim. Cillum labore mollit veniam et pariatur reprehenderit. Consequat do anim adipisicing amet aliqua eu. Et do sint qui quis laborum Lorem occaecat laboris Lorem eiusmod.\r\n", - "registered": "2016-06-30T05:18:55 +04:00", - "latitude": -57.214886, - "longitude": -129.659387, - "tags": ["ad", "non", "aute", "cillum", "laborum", "amet", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Tina Larson" - }, - { - "id": 1, - "name": "Sampson Hoffman" - }, - { - "id": 2, - "name": "Contreras Barber" - } - ], - "greeting": "Hello, Krystal Hays! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8b16ca001c6127c8", - "index": 837, - "guid": "53ee7b62-a7f9-49d8-8317-3d9c165cf150", - "isActive": true, - "balance": "$3,399.95", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Ryan Riley", - "gender": "male", - "company": "ZYTRAX", - "email": "ryanriley@zytrax.com", - "phone": "+1 (907) 446-2997", - "address": "233 Jackson Court, Madaket, Rhode Island, 3815", - "about": "Lorem veniam cupidatat cillum commodo proident. Non aute qui nisi ut esse consectetur officia qui duis reprehenderit minim Lorem. Ipsum laborum incididunt occaecat eu ex dolore in excepteur reprehenderit aliquip. Id laborum ut Lorem duis ex proident do ullamco. Aliqua laborum velit irure labore fugiat do enim cupidatat do.\r\n", - "registered": "2017-11-26T08:59:47 +05:00", - "latitude": 17.357888, - "longitude": -90.867569, - "tags": ["sunt", "exercitation", "commodo", "aliquip", "qui", "aliqua", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Key Stanley" - }, - { - "id": 1, - "name": "Lizzie Bush" - }, - { - "id": 2, - "name": "Verna Green" - } - ], - "greeting": "Hello, Ryan Riley! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d26e733ed6befc135", - "index": 838, - "guid": "2dcfdb7d-5816-40a5-9297-f1349b1d24f7", - "isActive": true, - "balance": "$3,032.47", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Rhoda Huffman", - "gender": "female", - "company": "ZILPHUR", - "email": "rhodahuffman@zilphur.com", - "phone": "+1 (810) 480-3856", - "address": "732 Madeline Court, Cressey, Florida, 5183", - "about": "Quis est nostrud excepteur laboris tempor in amet reprehenderit non. In esse excepteur aliqua esse voluptate. Duis velit laborum ex ad voluptate aliquip ut fugiat ut consectetur do qui. Qui ipsum consectetur ex dolore nulla.\r\n", - "registered": "2020-02-24T05:34:50 +05:00", - "latitude": 46.695791, - "longitude": -41.618087, - "tags": ["sint", "dolore", "eiusmod", "non", "proident", "commodo", "consequat"], - "friends": [ - { - "id": 0, - "name": "Branch Atkinson" - }, - { - "id": 1, - "name": "Sparks Weaver" - }, - { - "id": 2, - "name": "Mcmillan Bender" - } - ], - "greeting": "Hello, Rhoda Huffman! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1e9dbdb4ca9893bd", - "index": 839, - "guid": "a04f5cfa-9aae-46c0-964a-d3a24ecad478", - "isActive": false, - "balance": "$3,442.02", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Brady Burris", - "gender": "male", - "company": "GRUPOLI", - "email": "bradyburris@grupoli.com", - "phone": "+1 (965) 484-2143", - "address": "599 Hoyts Lane, Nash, Indiana, 5533", - "about": "Reprehenderit culpa nostrud laboris anim. Velit nulla incididunt duis quis nisi occaecat eu aute cupidatat qui ut occaecat velit. Labore incididunt reprehenderit consequat quis aute. Incididunt consectetur est reprehenderit sit commodo consequat commodo labore.\r\n", - "registered": "2020-03-09T12:31:57 +04:00", - "latitude": -10.394117, - "longitude": 8.641309, - "tags": ["sint", "veniam", "elit", "laboris", "consequat", "excepteur", "eu"], - "friends": [ - { - "id": 0, - "name": "Christi Bell" - }, - { - "id": 1, - "name": "Mariana Craft" - }, - { - "id": 2, - "name": "Le Gallegos" - } - ], - "greeting": "Hello, Brady Burris! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25de758506f73154e6e", - "index": 840, - "guid": "6d09e656-e172-4102-9bde-871a7c9338e6", - "isActive": false, - "balance": "$2,789.76", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Whitfield Norman", - "gender": "male", - "company": "EXOZENT", - "email": "whitfieldnorman@exozent.com", - "phone": "+1 (810) 466-2367", - "address": "580 Cumberland Street, Oneida, Northern Mariana Islands, 5822", - "about": "Mollit non aute occaecat dolor sunt dolore ullamco occaecat ullamco nostrud deserunt labore sunt id. Deserunt qui aute dolor ad amet reprehenderit magna eu non deserunt culpa. In deserunt enim ullamco veniam laborum. Veniam ad cillum irure culpa excepteur anim sit aliqua. Labore duis magna fugiat cillum velit laboris id nostrud minim duis ut proident. Ex voluptate eiusmod ex sint nostrud consequat proident reprehenderit reprehenderit dolore voluptate aliquip.\r\n", - "registered": "2018-02-21T10:35:46 +05:00", - "latitude": -55.097579, - "longitude": -2.247356, - "tags": ["voluptate", "aute", "duis", "ex", "elit", "velit", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Brittany Kennedy" - }, - { - "id": 1, - "name": "Cote Frank" - }, - { - "id": 2, - "name": "Ratliff Lester" - } - ], - "greeting": "Hello, Whitfield Norman! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d941d56ffd2c45934", - "index": 841, - "guid": "2865f1aa-093f-440e-91e5-690b8e1c0899", - "isActive": false, - "balance": "$1,538.49", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Florence Baker", - "gender": "female", - "company": "INEAR", - "email": "florencebaker@inear.com", - "phone": "+1 (873) 553-2696", - "address": "250 Debevoise Street, Singer, Idaho, 2157", - "about": "Culpa sunt do minim do quis sunt dolore tempor. Mollit aliquip aute aliqua ipsum do voluptate sit nulla elit in reprehenderit. Ipsum eiusmod eiusmod ut do sint cupidatat proident consectetur consectetur ullamco irure. Incididunt consequat pariatur Lorem eu consequat est ut irure ea nisi eu ipsum do sunt.\r\n", - "registered": "2020-07-18T12:55:53 +04:00", - "latitude": 69.970615, - "longitude": 30.157065, - "tags": ["labore", "pariatur", "adipisicing", "veniam", "qui", "tempor", "cillum"], - "friends": [ - { - "id": 0, - "name": "Deloris Shaffer" - }, - { - "id": 1, - "name": "Hansen Byrd" - }, - { - "id": 2, - "name": "Leann Adams" - } - ], - "greeting": "Hello, Florence Baker! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0770dd310d04f5a4", - "index": 842, - "guid": "4cceebe7-b12e-47ac-acd0-07316e1141ec", - "isActive": true, - "balance": "$1,401.83", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Jennifer Armstrong", - "gender": "female", - "company": "EXIAND", - "email": "jenniferarmstrong@exiand.com", - "phone": "+1 (846) 487-2731", - "address": "997 Cornelia Street, Hiwasse, District Of Columbia, 9966", - "about": "Excepteur magna anim adipisicing eu. Ipsum veniam velit dolore exercitation excepteur velit irure. Incididunt consectetur aliqua velit exercitation nulla deserunt ut duis ad labore ex et.\r\n", - "registered": "2020-07-03T04:13:03 +04:00", - "latitude": -81.068726, - "longitude": 104.780956, - "tags": ["culpa", "commodo", "aute", "deserunt", "aliqua", "sint", "eu"], - "friends": [ - { - "id": 0, - "name": "Tracey Kemp" - }, - { - "id": 1, - "name": "Ford Stein" - }, - { - "id": 2, - "name": "Koch Aguilar" - } - ], - "greeting": "Hello, Jennifer Armstrong! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df9b3d9845666e65c", - "index": 843, - "guid": "cb7b9423-561f-4a3a-811e-33408fe15c28", - "isActive": false, - "balance": "$1,056.01", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Bertie Glass", - "gender": "female", - "company": "ZOLAR", - "email": "bertieglass@zolar.com", - "phone": "+1 (907) 522-3985", - "address": "147 Durland Place, Worton, New Mexico, 5493", - "about": "Sunt sint adipisicing commodo culpa deserunt esse nulla nostrud consequat ipsum est. Fugiat culpa ex proident ipsum irure deserunt ea magna quis cupidatat. Laborum non velit eu nulla mollit ex irure non id anim adipisicing. Laboris minim culpa amet exercitation irure est mollit deserunt non et. Esse duis duis esse elit esse cillum non ea. Voluptate cupidatat quis occaecat elit cillum ad officia. Excepteur non elit labore amet voluptate nulla occaecat do.\r\n", - "registered": "2015-04-08T01:10:43 +04:00", - "latitude": 19.339533, - "longitude": -36.370678, - "tags": ["incididunt", "irure", "aliqua", "do", "cupidatat", "do", "anim"], - "friends": [ - { - "id": 0, - "name": "Josefa Allison" - }, - { - "id": 1, - "name": "Graves West" - }, - { - "id": 2, - "name": "Lourdes Hammond" - } - ], - "greeting": "Hello, Bertie Glass! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1bcac79ab6ac1789", - "index": 844, - "guid": "63128f00-1e55-47f2-b5f8-cf216d608148", - "isActive": true, - "balance": "$3,215.58", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Katy Blackburn", - "gender": "female", - "company": "BRAINQUIL", - "email": "katyblackburn@brainquil.com", - "phone": "+1 (885) 551-3136", - "address": "510 Montague Street, Kenwood, South Dakota, 8618", - "about": "Dolore ut laboris amet minim. Irure reprehenderit laborum irure in non commodo fugiat non sit reprehenderit quis aliqua. Ullamco sint ut ipsum quis irure ut laboris. Esse labore reprehenderit non veniam qui deserunt quis elit incididunt exercitation quis laborum. Exercitation consectetur consectetur commodo sit magna commodo. Anim anim velit nulla nulla duis ea. Amet eu sit exercitation esse magna commodo exercitation sint excepteur sit magna aliquip amet irure.\r\n", - "registered": "2018-08-16T10:36:01 +04:00", - "latitude": 33.794365, - "longitude": 56.008414, - "tags": ["culpa", "amet", "exercitation", "aliquip", "anim", "aute", "sunt"], - "friends": [ - { - "id": 0, - "name": "Jaime Bernard" - }, - { - "id": 1, - "name": "Buckner Parks" - }, - { - "id": 2, - "name": "Duncan Logan" - } - ], - "greeting": "Hello, Katy Blackburn! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd5f4c880117b274c", - "index": 845, - "guid": "ad7a821c-c8ca-4454-a4f6-063b0da76103", - "isActive": true, - "balance": "$2,422.90", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Rodriquez Martin", - "gender": "male", - "company": "NSPIRE", - "email": "rodriquezmartin@nspire.com", - "phone": "+1 (858) 400-2177", - "address": "420 Green Street, Brethren, American Samoa, 1190", - "about": "Sint duis consectetur labore consequat. Laboris veniam id sint nostrud incididunt Lorem adipisicing elit laboris eiusmod. Eu laborum laboris sint minim elit. Amet aute minim esse eu. Proident aliqua labore occaecat aliquip id nostrud in id commodo. Occaecat proident enim Lorem enim anim cillum Lorem proident culpa cillum.\r\n", - "registered": "2015-10-31T03:38:48 +04:00", - "latitude": -33.389468, - "longitude": -156.597019, - "tags": ["et", "ut", "consectetur", "et", "cupidatat", "labore", "nisi"], - "friends": [ - { - "id": 0, - "name": "Valerie Davidson" - }, - { - "id": 1, - "name": "Hudson Bartlett" - }, - { - "id": 2, - "name": "Etta Garrison" - } - ], - "greeting": "Hello, Rodriquez Martin! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dae0d247f6be459b9", - "index": 846, - "guid": "dbbfa312-08a1-4a14-a1fe-9632474075cb", - "isActive": false, - "balance": "$3,798.38", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Tucker Newman", - "gender": "male", - "company": "ECLIPTO", - "email": "tuckernewman@eclipto.com", - "phone": "+1 (891) 448-3798", - "address": "540 Jackson Street, Juntura, Iowa, 1106", - "about": "Minim deserunt adipisicing in et dolore elit. In officia elit adipisicing duis labore in cillum adipisicing proident. Lorem ullamco amet eu velit ea irure id aute sit aliquip quis. Consequat sunt reprehenderit quis quis incididunt ullamco aliqua elit voluptate laboris sunt.\r\n", - "registered": "2017-04-26T08:02:01 +04:00", - "latitude": -30.591222, - "longitude": 57.927454, - "tags": ["sunt", "ullamco", "sunt", "incididunt", "ad", "tempor", "qui"], - "friends": [ - { - "id": 0, - "name": "Winters Brooks" - }, - { - "id": 1, - "name": "Rice Juarez" - }, - { - "id": 2, - "name": "Rodgers Humphrey" - } - ], - "greeting": "Hello, Tucker Newman! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d46116be3dae5972e", - "index": 847, - "guid": "b5bf61cc-9977-4ddf-b6df-bef74665d0b6", - "isActive": false, - "balance": "$3,736.73", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Camille Woodard", - "gender": "female", - "company": "UPLINX", - "email": "camillewoodard@uplinx.com", - "phone": "+1 (849) 555-3746", - "address": "170 McKibbin Street, Edmund, Palau, 7124", - "about": "Eiusmod sit nostrud mollit adipisicing tempor consectetur laboris sint sunt. Ex et do elit excepteur tempor sint dolore commodo adipisicing. Laboris commodo dolore pariatur voluptate. Labore consectetur aliquip id elit ullamco enim dolore. Id nisi aliqua laborum tempor deserunt. Sit velit est elit voluptate dolore eu ut anim eiusmod. Veniam anim consectetur irure voluptate labore aliqua non nostrud incididunt Lorem deserunt.\r\n", - "registered": "2019-01-17T10:41:14 +05:00", - "latitude": 53.306957, - "longitude": 151.951686, - "tags": ["proident", "qui", "fugiat", "eu", "excepteur", "deserunt", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Doyle Cole" - }, - { - "id": 1, - "name": "Carole Cobb" - }, - { - "id": 2, - "name": "Ball Hopper" - } - ], - "greeting": "Hello, Camille Woodard! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ddde3e7ca96006d1c", - "index": 848, - "guid": "80c07302-3db3-4770-b883-af61e7ed80b9", - "isActive": false, - "balance": "$2,228.42", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Chrystal Sykes", - "gender": "female", - "company": "AQUASSEUR", - "email": "chrystalsykes@aquasseur.com", - "phone": "+1 (983) 502-2772", - "address": "253 Williams Avenue, Southmont, West Virginia, 665", - "about": "Proident ut anim duis nisi cupidatat ea sunt. Reprehenderit et proident aliqua cillum non labore fugiat in reprehenderit proident non veniam. Reprehenderit aute culpa sit sunt enim fugiat ipsum fugiat commodo id.\r\n", - "registered": "2019-11-03T01:28:16 +04:00", - "latitude": -58.024839, - "longitude": -25.779221, - "tags": ["consectetur", "adipisicing", "tempor", "laborum", "ex", "esse", "do"], - "friends": [ - { - "id": 0, - "name": "Mcdaniel David" - }, - { - "id": 1, - "name": "Gayle Gardner" - }, - { - "id": 2, - "name": "Chelsea Butler" - } - ], - "greeting": "Hello, Chrystal Sykes! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d50d8e606cec4db5a", - "index": 849, - "guid": "3cc9739d-e81f-4250-850b-93039477d90b", - "isActive": false, - "balance": "$3,147.75", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Kristy Prince", - "gender": "female", - "company": "SKYPLEX", - "email": "kristyprince@skyplex.com", - "phone": "+1 (877) 589-2718", - "address": "753 Cheever Place, Wildwood, New York, 3024", - "about": "Excepteur elit ut reprehenderit nulla mollit in esse culpa est laborum amet. Aute laboris minim exercitation cillum aute aliqua ex adipisicing mollit. Lorem ex consectetur eiusmod labore aliquip cillum elit velit aliqua ea aute laborum. Velit velit excepteur occaecat eu laboris velit cupidatat irure id nulla. Do velit anim reprehenderit incididunt ea minim mollit tempor proident ad velit enim. Nisi ex in aute id velit labore velit incididunt sit cillum ullamco adipisicing in dolore. Tempor ea ullamco ex officia ullamco sint excepteur ex.\r\n", - "registered": "2018-02-19T10:09:59 +05:00", - "latitude": -41.649327, - "longitude": 128.59098, - "tags": ["id", "qui", "mollit", "esse", "commodo", "deserunt", "mollit"], - "friends": [ - { - "id": 0, - "name": "Potts Riddle" - }, - { - "id": 1, - "name": "Hahn Romero" - }, - { - "id": 2, - "name": "House Mccarthy" - } - ], - "greeting": "Hello, Kristy Prince! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d055276c39f91a12f", - "index": 850, - "guid": "21c2f907-bd06-4e93-9180-f7b88354532a", - "isActive": false, - "balance": "$3,647.52", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Isabel Black", - "gender": "female", - "company": "HARMONEY", - "email": "isabelblack@harmoney.com", - "phone": "+1 (839) 599-3697", - "address": "409 McKibben Street, Loyalhanna, Hawaii, 5485", - "about": "Anim do cillum consectetur veniam consectetur duis. Non reprehenderit nulla sunt ut qui qui sit ullamco. Occaecat duis ad qui labore aliqua in eiusmod sunt culpa dolore ex. Exercitation anim occaecat duis ullamco proident. Incididunt excepteur aute veniam sint adipisicing consequat aliquip do ipsum est veniam enim aliquip excepteur. Qui cupidatat adipisicing commodo enim est irure voluptate ea id consectetur. Aliquip in ex anim et nisi anim qui ipsum consectetur ad.\r\n", - "registered": "2016-07-19T12:33:44 +04:00", - "latitude": 30.959704, - "longitude": 173.602018, - "tags": ["sint", "cillum", "culpa", "nostrud", "labore", "laboris", "nulla"], - "friends": [ - { - "id": 0, - "name": "Olive Bird" - }, - { - "id": 1, - "name": "Mcconnell Mccray" - }, - { - "id": 2, - "name": "Angelina Chang" - } - ], - "greeting": "Hello, Isabel Black! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd0d7bd52fd5a42ef", - "index": 851, - "guid": "a1eeb9db-f6f2-4094-a191-91fb4d165805", - "isActive": false, - "balance": "$1,042.08", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Sanders Doyle", - "gender": "male", - "company": "FLEETMIX", - "email": "sandersdoyle@fleetmix.com", - "phone": "+1 (851) 424-2156", - "address": "619 Summit Street, Elizaville, Nebraska, 6732", - "about": "Nisi cillum occaecat do nostrud. Officia anim deserunt magna cupidatat laborum culpa enim excepteur anim labore non. Quis officia cupidatat mollit nisi eiusmod veniam dolore reprehenderit aute ipsum anim excepteur labore sunt. Sint in deserunt deserunt voluptate anim fugiat cupidatat qui enim.\r\n", - "registered": "2020-04-29T11:03:06 +04:00", - "latitude": -15.046318, - "longitude": 132.330034, - "tags": ["ad", "incididunt", "culpa", "ullamco", "aute", "sit", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Townsend Joseph" - }, - { - "id": 1, - "name": "Shelley Simmons" - }, - { - "id": 2, - "name": "Browning Walton" - } - ], - "greeting": "Hello, Sanders Doyle! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1b17dd5b7e02167f", - "index": 852, - "guid": "94b09ac1-a1e0-4e32-a13e-7d1f84fdbba5", - "isActive": true, - "balance": "$2,427.83", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Sybil Stevens", - "gender": "female", - "company": "GEEKY", - "email": "sybilstevens@geeky.com", - "phone": "+1 (941) 417-3409", - "address": "416 Boulevard Court, Yonah, Wisconsin, 6246", - "about": "Magna proident Lorem consequat officia occaecat. Anim commodo laboris voluptate in ea dolore occaecat non nulla anim culpa adipisicing. Ea magna laborum nisi duis consequat incididunt Lorem voluptate minim velit sunt minim consectetur deserunt. Dolore cillum sint dolore duis quis. Duis do enim enim non.\r\n", - "registered": "2017-12-01T05:22:55 +05:00", - "latitude": -4.2028, - "longitude": 36.855975, - "tags": ["amet", "dolore", "adipisicing", "eu", "eiusmod", "id", "nulla"], - "friends": [ - { - "id": 0, - "name": "Cleo Woods" - }, - { - "id": 1, - "name": "Della Knowles" - }, - { - "id": 2, - "name": "Ross Michael" - } - ], - "greeting": "Hello, Sybil Stevens! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4a17b8be4302ebe5", - "index": 853, - "guid": "4540c6ec-37ca-444f-b838-f80cd7a84625", - "isActive": false, - "balance": "$2,201.82", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Beatrice Velazquez", - "gender": "female", - "company": "QIMONK", - "email": "beatricevelazquez@qimonk.com", - "phone": "+1 (846) 479-3947", - "address": "656 Humboldt Street, Nicholson, Arizona, 5606", - "about": "Est dolor mollit pariatur laboris laborum ullamco ad duis et labore minim. Eu adipisicing consequat nulla ex aute id esse veniam. Ut adipisicing laborum quis velit excepteur tempor consectetur ut anim. Tempor aliqua eiusmod veniam Lorem mollit tempor sit. Dolor eu ut non deserunt.\r\n", - "registered": "2016-02-13T03:27:18 +05:00", - "latitude": -71.196934, - "longitude": 35.481583, - "tags": ["nostrud", "ipsum", "do", "occaecat", "mollit", "adipisicing", "nulla"], - "friends": [ - { - "id": 0, - "name": "Jeanine Cotton" - }, - { - "id": 1, - "name": "Matilda Richard" - }, - { - "id": 2, - "name": "Susanna Barnes" - } - ], - "greeting": "Hello, Beatrice Velazquez! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfdf6750b7cc7a1ba", - "index": 854, - "guid": "33b8f099-12b3-4d8a-baaf-693905c6506e", - "isActive": false, - "balance": "$2,680.24", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Casey Lang", - "gender": "female", - "company": "FORTEAN", - "email": "caseylang@fortean.com", - "phone": "+1 (915) 560-2119", - "address": "529 River Street, Crenshaw, Ohio, 8336", - "about": "Veniam magna dolor anim dolore incididunt ex ad nisi voluptate magna qui minim elit cillum. Ea sit commodo dolor velit nostrud. Commodo sit cupidatat ex duis incididunt magna esse est exercitation. Mollit reprehenderit eu qui sit cillum adipisicing do culpa ea. Id pariatur ullamco qui consequat enim enim consectetur labore cillum. Et ea dolor tempor ullamco aliquip aliqua do ut exercitation nostrud sint. Laboris duis ad veniam est.\r\n", - "registered": "2017-03-30T03:24:33 +04:00", - "latitude": -39.119498, - "longitude": 121.786962, - "tags": ["occaecat", "aliquip", "enim", "irure", "commodo", "cillum", "id"], - "friends": [ - { - "id": 0, - "name": "Marquez Harding" - }, - { - "id": 1, - "name": "Nieves Townsend" - }, - { - "id": 2, - "name": "Esmeralda Dunn" - } - ], - "greeting": "Hello, Casey Lang! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df78707004dc3aad0", - "index": 855, - "guid": "e36ac7ba-bbd8-4eba-9ec9-2620879cd861", - "isActive": true, - "balance": "$3,329.16", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Wooten Rosa", - "gender": "male", - "company": "STELAECOR", - "email": "wootenrosa@stelaecor.com", - "phone": "+1 (847) 436-3541", - "address": "187 Locust Street, Bison, Arkansas, 9195", - "about": "Elit deserunt mollit ut mollit. Deserunt anim fugiat aute dolore sunt eiusmod laborum velit ad sunt sunt labore incididunt. Nisi velit nisi sint adipisicing Lorem enim. Minim reprehenderit deserunt Lorem dolore.\r\n", - "registered": "2017-02-09T02:59:45 +05:00", - "latitude": 77.995717, - "longitude": -77.378349, - "tags": ["nulla", "fugiat", "eu", "nisi", "velit", "Lorem", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Pruitt Savage" - }, - { - "id": 1, - "name": "Gay Crane" - }, - { - "id": 2, - "name": "Estelle Phelps" - } - ], - "greeting": "Hello, Wooten Rosa! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25db67072b3c5353dfb", - "index": 856, - "guid": "2800910d-132b-4e0c-b9fb-dfa5757c801c", - "isActive": false, - "balance": "$1,144.44", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Helga Boone", - "gender": "female", - "company": "SURETECH", - "email": "helgaboone@suretech.com", - "phone": "+1 (917) 494-3058", - "address": "729 Highlawn Avenue, Newkirk, Nevada, 559", - "about": "Nisi sit ad excepteur non dolore aliquip. Ullamco voluptate incididunt velit mollit proident officia. Amet amet pariatur voluptate fugiat ut amet sunt aliquip.\r\n", - "registered": "2015-10-25T05:00:10 +04:00", - "latitude": -48.313378, - "longitude": -52.847194, - "tags": ["excepteur", "cupidatat", "magna", "ullamco", "non", "esse", "esse"], - "friends": [ - { - "id": 0, - "name": "Kim Pope" - }, - { - "id": 1, - "name": "Bryan Bishop" - }, - { - "id": 2, - "name": "Maggie French" - } - ], - "greeting": "Hello, Helga Boone! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5dd4f90e7e235cb2", - "index": 857, - "guid": "97f217db-1172-4266-9ae3-b9e4aa1d712d", - "isActive": false, - "balance": "$1,706.37", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Wiggins Gibbs", - "gender": "male", - "company": "TYPHONICA", - "email": "wigginsgibbs@typhonica.com", - "phone": "+1 (813) 460-2692", - "address": "867 Orange Street, Sabillasville, Massachusetts, 6065", - "about": "Proident aliqua elit laborum exercitation ea dolor anim et ad enim anim tempor. Esse amet occaecat pariatur Lorem culpa velit voluptate labore pariatur sint commodo in. Do in tempor deserunt laborum mollit ut aute et amet laborum.\r\n", - "registered": "2014-02-03T10:19:01 +05:00", - "latitude": 82.030265, - "longitude": -131.678618, - "tags": ["aliquip", "cillum", "voluptate", "do", "et", "officia", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Reilly Holmes" - }, - { - "id": 1, - "name": "Watts Sampson" - }, - { - "id": 2, - "name": "Lynn Marsh" - } - ], - "greeting": "Hello, Wiggins Gibbs! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d24c147c553654762", - "index": 858, - "guid": "469b1636-b60f-4769-95fe-b892f06b8e1b", - "isActive": true, - "balance": "$2,391.98", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Burt Estrada", - "gender": "male", - "company": "GEOLOGIX", - "email": "burtestrada@geologix.com", - "phone": "+1 (979) 479-3131", - "address": "186 Dank Court, Montura, Marshall Islands, 2487", - "about": "Eiusmod adipisicing culpa veniam anim Lorem non non. Consectetur elit aliqua quis fugiat ex sit. Incididunt elit qui eu ullamco aute. Dolor tempor commodo duis anim irure amet officia sit sunt incididunt magna irure amet. Anim pariatur eiusmod aliquip Lorem Lorem labore esse ullamco mollit dolore. Quis ullamco amet nulla dolor est exercitation non.\r\n", - "registered": "2016-07-18T12:30:34 +04:00", - "latitude": -83.973746, - "longitude": -17.190596, - "tags": ["consequat", "est", "culpa", "non", "dolor", "culpa", "dolor"], - "friends": [ - { - "id": 0, - "name": "Hampton Greene" - }, - { - "id": 1, - "name": "Russell Leonard" - }, - { - "id": 2, - "name": "Norman Cortez" - } - ], - "greeting": "Hello, Burt Estrada! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da0125cafa64be5d6", - "index": 859, - "guid": "d99493e3-0739-49b3-ac0f-b871754d6bd7", - "isActive": false, - "balance": "$3,284.32", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Grimes Marquez", - "gender": "male", - "company": "VALPREAL", - "email": "grimesmarquez@valpreal.com", - "phone": "+1 (803) 582-3159", - "address": "263 Lake Avenue, Wikieup, Puerto Rico, 6016", - "about": "Fugiat labore officia tempor commodo nulla sint labore Lorem dolor ipsum non quis. Labore enim ad velit cillum laborum qui cupidatat esse ad adipisicing. Amet aliqua amet laborum reprehenderit.\r\n", - "registered": "2015-01-22T09:01:45 +05:00", - "latitude": 15.566283, - "longitude": 132.377031, - "tags": ["Lorem", "exercitation", "adipisicing", "sunt", "Lorem", "non", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Beck Hall" - }, - { - "id": 1, - "name": "Ronda Cantrell" - }, - { - "id": 2, - "name": "Burton Heath" - } - ], - "greeting": "Hello, Grimes Marquez! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d763971543e1dcf4c", - "index": 860, - "guid": "8a21d97f-d514-4baa-897d-ee0ecda11d4f", - "isActive": false, - "balance": "$3,393.94", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Margie Barker", - "gender": "female", - "company": "ACCRUEX", - "email": "margiebarker@accruex.com", - "phone": "+1 (992) 547-2036", - "address": "893 Karweg Place, Hamilton, California, 9994", - "about": "Cillum fugiat qui minim laboris ex ea minim velit fugiat pariatur sunt. Lorem culpa nostrud dolor deserunt do nostrud amet ea dolor consequat velit ullamco sit ad. Sint culpa excepteur quis id dolore ut nulla cupidatat ea reprehenderit magna est.\r\n", - "registered": "2019-03-16T06:38:13 +04:00", - "latitude": 85.513059, - "longitude": -82.869896, - "tags": ["qui", "nulla", "anim", "nulla", "velit", "id", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Lindsey Trujillo" - }, - { - "id": 1, - "name": "Marilyn Franco" - }, - { - "id": 2, - "name": "Sophie Wiggins" - } - ], - "greeting": "Hello, Margie Barker! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3ba479e7e9bf1589", - "index": 861, - "guid": "020cfe16-be63-48f0-a2db-2ed4e50a3f0e", - "isActive": true, - "balance": "$1,245.15", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Vicky Harmon", - "gender": "female", - "company": "OBLIQ", - "email": "vickyharmon@obliq.com", - "phone": "+1 (970) 589-3060", - "address": "159 Hancock Street, Rosine, Tennessee, 1569", - "about": "Eu sint ea sint ex reprehenderit. Quis mollit officia ea amet nisi culpa esse consequat deserunt non veniam nostrud. Proident consectetur sit id nostrud.\r\n", - "registered": "2014-10-13T11:43:29 +04:00", - "latitude": -64.808361, - "longitude": 78.592996, - "tags": ["aute", "exercitation", "laborum", "quis", "tempor", "veniam", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Mendoza Koch" - }, - { - "id": 1, - "name": "Eva Blankenship" - }, - { - "id": 2, - "name": "Trudy Wade" - } - ], - "greeting": "Hello, Vicky Harmon! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d62c99b8b409db663", - "index": 862, - "guid": "2f4685c5-c2b7-4cf9-896e-aa838e9c5baf", - "isActive": false, - "balance": "$1,367.27", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "brown", - "name": "Keisha Ryan", - "gender": "female", - "company": "SPLINX", - "email": "keisharyan@splinx.com", - "phone": "+1 (847) 509-2770", - "address": "648 Driggs Avenue, Ogema, Wyoming, 2233", - "about": "Fugiat et excepteur dolore occaecat minim. Ullamco minim fugiat ullamco cillum nisi ut eu magna ullamco dolore sunt duis. Nisi in sint eiusmod sit.\r\n", - "registered": "2020-02-07T04:41:02 +05:00", - "latitude": -18.770026, - "longitude": -55.609325, - "tags": ["eiusmod", "reprehenderit", "in", "veniam", "et", "exercitation", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Garrett Wise" - }, - { - "id": 1, - "name": "Silva Padilla" - }, - { - "id": 2, - "name": "Flores Horne" - } - ], - "greeting": "Hello, Keisha Ryan! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7d6521d10fc8f803", - "index": 863, - "guid": "88bbee2b-3bee-4bf9-a919-a335e284de60", - "isActive": false, - "balance": "$3,003.80", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Marshall Leach", - "gender": "male", - "company": "ENTHAZE", - "email": "marshallleach@enthaze.com", - "phone": "+1 (903) 489-2296", - "address": "964 Cameron Court, Moquino, North Carolina, 8561", - "about": "Ea excepteur sit sit dolor eiusmod proident tempor. Nostrud elit labore eu exercitation. Excepteur nisi non consectetur in adipisicing exercitation irure enim officia duis nostrud mollit aute quis. Lorem cillum ad non velit laborum aliqua labore anim do sit incididunt. Reprehenderit nisi ullamco sint Lorem esse magna fugiat quis commodo tempor deserunt irure eiusmod in. Occaecat aliquip nostrud deserunt est cupidatat nulla ad Lorem elit do voluptate voluptate.\r\n", - "registered": "2015-11-27T09:07:01 +05:00", - "latitude": 22.823798, - "longitude": 39.130745, - "tags": ["culpa", "do", "sit", "aliqua", "nulla", "proident", "magna"], - "friends": [ - { - "id": 0, - "name": "Tasha Phillips" - }, - { - "id": 1, - "name": "Stout Schroeder" - }, - { - "id": 2, - "name": "Rachael Curtis" - } - ], - "greeting": "Hello, Marshall Leach! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd17856e1ed550647", - "index": 864, - "guid": "35e9a8bd-b083-4c09-8cb9-8e23c679a050", - "isActive": true, - "balance": "$2,810.18", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Kinney Ewing", - "gender": "male", - "company": "IMAGINART", - "email": "kinneyewing@imaginart.com", - "phone": "+1 (986) 492-3735", - "address": "761 Garland Court, Beaulieu, Michigan, 9859", - "about": "Nulla proident fugiat aliquip aute irure magna nulla proident irure aliqua duis. Dolore duis non aliqua eiusmod anim deserunt et Lorem ea aliqua cupidatat cupidatat. Sint cillum nulla mollit ea laborum. Enim ea sunt sunt velit irure ad labore laboris fugiat non ullamco consequat mollit ut. In cupidatat ullamco ad eu excepteur laboris cupidatat mollit. Elit cupidatat ea et eiusmod ut non occaecat mollit culpa anim aliquip nisi non anim. Lorem enim ea incididunt exercitation cillum.\r\n", - "registered": "2020-04-07T11:57:23 +04:00", - "latitude": 57.185622, - "longitude": 42.506946, - "tags": ["veniam", "cillum", "anim", "ea", "dolor", "ex", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Hoover Thornton" - }, - { - "id": 1, - "name": "Blackwell Rowe" - }, - { - "id": 2, - "name": "Althea Gutierrez" - } - ], - "greeting": "Hello, Kinney Ewing! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d0bc11f25303a29cd", - "index": 865, - "guid": "c5e73e0b-0ab2-4c98-ad1f-eb96f449bc60", - "isActive": false, - "balance": "$3,259.87", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Clare Burns", - "gender": "female", - "company": "ZOLAVO", - "email": "clareburns@zolavo.com", - "phone": "+1 (967) 585-3985", - "address": "251 Madison Street, Statenville, Oklahoma, 745", - "about": "Incididunt incididunt excepteur dolor voluptate nostrud do incididunt ea dolor excepteur id. Aute id cillum enim officia incididunt ut mollit qui sint sunt aliquip. Amet duis quis labore exercitation cupidatat sunt. Anim excepteur eu nisi aliqua reprehenderit eiusmod laborum minim consequat cupidatat cupidatat. Ad esse ipsum fugiat voluptate esse minim amet labore dolore voluptate qui nulla non. Ea sit esse sit in.\r\n", - "registered": "2017-08-18T05:21:01 +04:00", - "latitude": 71.53859, - "longitude": 134.748503, - "tags": ["nostrud", "id", "magna", "aliquip", "officia", "occaecat", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Rhodes Valdez" - }, - { - "id": 1, - "name": "Melanie Pruitt" - }, - { - "id": 2, - "name": "Kathleen Welch" - } - ], - "greeting": "Hello, Clare Burns! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d48396a0f765a0d88", - "index": 866, - "guid": "d99fdccf-9c3b-4f6c-8a98-2045a1edb9ce", - "isActive": true, - "balance": "$1,001.04", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Aisha Love", - "gender": "female", - "company": "JUMPSTACK", - "email": "aishalove@jumpstack.com", - "phone": "+1 (937) 454-3502", - "address": "427 Cooke Court, Virgie, Vermont, 889", - "about": "Occaecat culpa occaecat proident exercitation proident minim dolor duis nulla cillum elit incididunt. Officia proident Lorem duis qui sunt ad veniam. Laborum Lorem aliqua qui elit aliqua dolore ut ad et incididunt ut cillum amet incididunt.\r\n", - "registered": "2019-10-08T11:58:11 +04:00", - "latitude": -40.961493, - "longitude": 30.849869, - "tags": ["consequat", "minim", "duis", "duis", "fugiat", "eu", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Duran Christian" - }, - { - "id": 1, - "name": "Leblanc Orr" - }, - { - "id": 2, - "name": "Landry Hodges" - } - ], - "greeting": "Hello, Aisha Love! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d0ca68ae500fcd455", - "index": 867, - "guid": "e916a317-e37e-4563-8ed0-7980c65c64d2", - "isActive": true, - "balance": "$1,575.57", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Bertha Dalton", - "gender": "female", - "company": "SEALOUD", - "email": "berthadalton@sealoud.com", - "phone": "+1 (860) 518-3348", - "address": "389 Seabring Street, Retsof, Utah, 6803", - "about": "Do cillum mollit do cillum cillum ea reprehenderit velit exercitation reprehenderit. Minim nostrud fugiat laborum laborum officia pariatur consectetur irure eiusmod aliquip aute. Cillum cupidatat est consectetur enim et fugiat ipsum.\r\n", - "registered": "2016-12-18T07:29:15 +05:00", - "latitude": -11.9435, - "longitude": -67.289188, - "tags": ["sit", "sunt", "sint", "adipisicing", "reprehenderit", "nostrud", "id"], - "friends": [ - { - "id": 0, - "name": "Velasquez Sloan" - }, - { - "id": 1, - "name": "Griffin Dillard" - }, - { - "id": 2, - "name": "Strickland Coleman" - } - ], - "greeting": "Hello, Bertha Dalton! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d456f3e39a64e2189", - "index": 868, - "guid": "d6d9b143-676f-486c-8035-cfc93e004898", - "isActive": true, - "balance": "$1,419.42", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Gaines Gillespie", - "gender": "male", - "company": "RODEOLOGY", - "email": "gainesgillespie@rodeology.com", - "phone": "+1 (821) 419-3746", - "address": "952 Elliott Place, Catherine, Kansas, 4333", - "about": "Est Lorem dolore nulla nostrud nulla commodo dolor. Fugiat minim velit non occaecat aute sit deserunt ad commodo sit fugiat. Eu nostrud quis velit aliqua laboris. Fugiat ut non id aliquip dolor est voluptate qui duis. Nisi officia tempor consequat reprehenderit minim duis dolore quis laboris labore excepteur qui. Deserunt dolor deserunt tempor ea deserunt ad aliquip. Id labore occaecat dolor sint Lorem eu labore fugiat adipisicing.\r\n", - "registered": "2014-01-22T08:59:20 +05:00", - "latitude": -77.562129, - "longitude": 157.103033, - "tags": ["pariatur", "aliquip", "dolore", "esse", "dolor", "enim", "culpa"], - "friends": [ - { - "id": 0, - "name": "Riddle Miles" - }, - { - "id": 1, - "name": "Franklin Fletcher" - }, - { - "id": 2, - "name": "Fry Jacobson" - } - ], - "greeting": "Hello, Gaines Gillespie! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d57d36b46c9289b8f", - "index": 869, - "guid": "545cb48e-41d7-4556-aa6f-384164ea7d7b", - "isActive": true, - "balance": "$3,417.59", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Reid Mejia", - "gender": "male", - "company": "NEUROCELL", - "email": "reidmejia@neurocell.com", - "phone": "+1 (994) 563-2579", - "address": "245 Bijou Avenue, Lorraine, Delaware, 9359", - "about": "Sit ea deserunt velit duis consectetur quis laboris laboris tempor ea. Sit cupidatat ex incididunt do esse occaecat Lorem tempor laborum magna aliquip officia. Eu et ut esse eu fugiat tempor irure qui. Est do non duis officia culpa aliquip est officia dolor sunt proident laboris exercitation. Officia ea pariatur exercitation pariatur ullamco. Aute aliqua nisi occaecat cillum culpa id aliqua nulla qui ut enim. Nulla tempor Lorem commodo fugiat nostrud nisi.\r\n", - "registered": "2014-10-23T12:37:30 +04:00", - "latitude": -75.315665, - "longitude": -151.525923, - "tags": ["exercitation", "occaecat", "adipisicing", "magna", "veniam", "cupidatat", "duis"], - "friends": [ - { - "id": 0, - "name": "Manning Terry" - }, - { - "id": 1, - "name": "Myrna Fry" - }, - { - "id": 2, - "name": "Mccarthy Valencia" - } - ], - "greeting": "Hello, Reid Mejia! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2d208eff714a3abb", - "index": 870, - "guid": "1b364938-f6d8-4129-81f0-e56df6ccd047", - "isActive": true, - "balance": "$3,623.81", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Flowers Huber", - "gender": "male", - "company": "ECOSYS", - "email": "flowershuber@ecosys.com", - "phone": "+1 (886) 496-2590", - "address": "835 Raleigh Place, Independence, Guam, 547", - "about": "Enim ullamco ad laboris nulla quis sint officia adipisicing ipsum. Qui aute nulla culpa nulla pariatur ullamco consequat excepteur sit enim in est pariatur. Esse nisi aliqua magna laboris laboris anim enim ea occaecat incididunt consectetur. Irure deserunt officia ad veniam quis in amet officia pariatur occaecat consequat et. Lorem laborum aliqua cillum nostrud eu fugiat consectetur sit adipisicing anim aute velit mollit tempor.\r\n", - "registered": "2015-02-03T05:42:13 +05:00", - "latitude": -71.90696, - "longitude": -91.559113, - "tags": ["ipsum", "adipisicing", "sint", "ullamco", "eu", "duis", "magna"], - "friends": [ - { - "id": 0, - "name": "Delacruz Nash" - }, - { - "id": 1, - "name": "Latisha Weeks" - }, - { - "id": 2, - "name": "Noelle Mendoza" - } - ], - "greeting": "Hello, Flowers Huber! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d988d3969bbaf686f", - "index": 871, - "guid": "f9ec6e15-86f4-43c8-88db-0994f0305f7b", - "isActive": false, - "balance": "$3,918.48", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "green", - "name": "Hull Rice", - "gender": "male", - "company": "AMTAP", - "email": "hullrice@amtap.com", - "phone": "+1 (966) 579-3051", - "address": "918 Whitwell Place, Graball, Oregon, 137", - "about": "Ipsum esse irure eu do consequat mollit mollit ipsum magna aliqua. Reprehenderit labore laborum ex veniam eu. Lorem occaecat ea ipsum eiusmod anim sint occaecat consequat adipisicing excepteur aliquip irure nulla. Magna commodo elit consectetur fugiat incididunt amet. Sint reprehenderit excepteur ipsum Lorem dolore. Cillum minim aute culpa ullamco enim dolor labore pariatur incididunt irure pariatur culpa sit. Laboris cupidatat cillum aliqua fugiat commodo nisi commodo dolore laboris dolore cupidatat eu.\r\n", - "registered": "2014-06-04T10:38:34 +04:00", - "latitude": -22.939558, - "longitude": -141.576163, - "tags": ["sit", "Lorem", "in", "excepteur", "ea", "ex", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Dianne Bradshaw" - }, - { - "id": 1, - "name": "Lidia Mcdaniel" - }, - { - "id": 2, - "name": "Debbie Atkins" - } - ], - "greeting": "Hello, Hull Rice! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d293e7798f74b2f2c", - "index": 872, - "guid": "cf60ae0f-aa45-4f78-83b7-ac112f7c062c", - "isActive": false, - "balance": "$1,634.47", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Booker Ortiz", - "gender": "male", - "company": "VALREDA", - "email": "bookerortiz@valreda.com", - "phone": "+1 (879) 599-2534", - "address": "228 Cropsey Avenue, Selma, Missouri, 4536", - "about": "Dolore sit commodo reprehenderit pariatur ut ut ipsum laboris aute reprehenderit officia nulla ad laboris. Incididunt labore voluptate ullamco labore mollit commodo ipsum non aliqua et esse deserunt culpa. Ullamco sint sint proident aute officia Lorem eu tempor excepteur qui esse Lorem consequat est. Ex cillum Lorem consequat dolore laboris dolore. Pariatur aute qui incididunt commodo voluptate culpa nisi. Sit mollit magna magna qui cupidatat id in veniam.\r\n", - "registered": "2016-10-12T04:26:46 +04:00", - "latitude": 15.962556, - "longitude": -79.168823, - "tags": ["tempor", "qui", "labore", "eu", "nostrud", "eiusmod", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Deidre Bradley" - }, - { - "id": 1, - "name": "Arnold Alvarado" - }, - { - "id": 2, - "name": "Polly Hale" - } - ], - "greeting": "Hello, Booker Ortiz! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d70c46260663cd570", - "index": 873, - "guid": "f02f5ddc-ee33-4808-87d1-4f061d45fc1a", - "isActive": true, - "balance": "$3,505.30", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "brown", - "name": "Billie Cohen", - "gender": "female", - "company": "NORALEX", - "email": "billiecohen@noralex.com", - "phone": "+1 (847) 435-2598", - "address": "750 Grand Avenue, Allison, Montana, 1091", - "about": "Laborum qui ipsum anim qui esse dolore. Aliquip anim velit labore incididunt pariatur incididunt est duis aliquip sit magna elit sit. Fugiat excepteur excepteur ipsum amet velit labore esse fugiat aliqua amet. Elit magna labore nostrud incididunt proident irure nisi adipisicing nostrud sit nostrud duis. Ex eiusmod sunt ut sit adipisicing consequat. Velit sit cillum velit ad nulla ex nisi nostrud. Officia non excepteur in esse ipsum culpa qui non labore est deserunt voluptate veniam est.\r\n", - "registered": "2019-10-26T04:29:56 +04:00", - "latitude": -30.744963, - "longitude": -152.558445, - "tags": ["ea", "in", "tempor", "aute", "officia", "magna", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Santiago Cash" - }, - { - "id": 1, - "name": "Battle Wilkins" - }, - { - "id": 2, - "name": "Solis Lindsay" - } - ], - "greeting": "Hello, Billie Cohen! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d57e54a98f7475405", - "index": 874, - "guid": "d1a37d9e-ad03-448d-84f8-ce15dd076c5d", - "isActive": false, - "balance": "$1,243.48", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Wolf Hendricks", - "gender": "male", - "company": "ZYTREK", - "email": "wolfhendricks@zytrek.com", - "phone": "+1 (935) 597-2271", - "address": "950 Bay Street, Baker, Alaska, 9183", - "about": "Deserunt non anim aliqua exercitation cupidatat labore pariatur aliquip velit labore nulla. Sint labore aliquip incididunt non cupidatat esse velit sunt anim Lorem Lorem est deserunt ea. Tempor proident tempor labore nulla sunt ea sit minim quis cillum dolore dolor velit.\r\n", - "registered": "2019-11-01T10:53:42 +04:00", - "latitude": 5.219507, - "longitude": -108.763945, - "tags": ["duis", "excepteur", "non", "occaecat", "consectetur", "dolore", "et"], - "friends": [ - { - "id": 0, - "name": "Compton Davis" - }, - { - "id": 1, - "name": "Shelby Mcintyre" - }, - { - "id": 2, - "name": "Kathryn Long" - } - ], - "greeting": "Hello, Wolf Hendricks! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25de27d50a5b16b5199", - "index": 875, - "guid": "b7c9de79-ecfd-461c-9724-a8678a0f3eac", - "isActive": true, - "balance": "$2,232.47", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Beach Joyce", - "gender": "male", - "company": "COMVENE", - "email": "beachjoyce@comvene.com", - "phone": "+1 (888) 429-3885", - "address": "111 Beacon Court, Bethpage, Kentucky, 3796", - "about": "Do excepteur eu quis mollit dolore ullamco reprehenderit id cillum aute adipisicing do nisi. Fugiat voluptate quis nulla culpa do veniam nostrud. Incididunt aliquip ut adipisicing dolor pariatur occaecat occaecat officia. Eu excepteur consequat ea ea laborum sint quis non quis enim fugiat nisi quis. Incididunt eu laboris esse elit non ea dolore consectetur incididunt dolor qui. Consequat ea ea fugiat non nulla amet veniam Lorem reprehenderit aute. Duis cillum ex in ut in anim eu sit magna veniam veniam nostrud.\r\n", - "registered": "2017-07-15T02:57:25 +04:00", - "latitude": -46.385393, - "longitude": 65.459508, - "tags": ["excepteur", "dolore", "labore", "exercitation", "officia", "fugiat", "do"], - "friends": [ - { - "id": 0, - "name": "Toni Pacheco" - }, - { - "id": 1, - "name": "Ballard Frazier" - }, - { - "id": 2, - "name": "Gardner Payne" - } - ], - "greeting": "Hello, Beach Joyce! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25debc7693617f920b5", - "index": 876, - "guid": "cd4dabeb-f706-402d-b681-f8a2e9174ec2", - "isActive": false, - "balance": "$1,999.42", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Castro Everett", - "gender": "male", - "company": "GLASSTEP", - "email": "castroeverett@glasstep.com", - "phone": "+1 (984) 410-3822", - "address": "995 Wyckoff Street, Iberia, Mississippi, 189", - "about": "Sunt voluptate deserunt qui voluptate cillum aliquip nulla. Qui ullamco occaecat ad voluptate cillum laborum labore quis et. Eu esse quis officia veniam minim fugiat commodo eiusmod. Lorem dolor sunt pariatur esse enim et commodo ad sit. Commodo in Lorem eu eiusmod et Lorem consequat fugiat labore officia incididunt cillum.\r\n", - "registered": "2014-03-02T02:36:22 +05:00", - "latitude": -23.195567, - "longitude": -73.527544, - "tags": ["laborum", "irure", "laborum", "aute", "ullamco", "occaecat", "proident"], - "friends": [ - { - "id": 0, - "name": "Marisa Klein" - }, - { - "id": 1, - "name": "Harvey Byers" - }, - { - "id": 2, - "name": "Catalina Poole" - } - ], - "greeting": "Hello, Castro Everett! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3c6373b50f6ee269", - "index": 877, - "guid": "62fad7a3-6dd2-41e4-8764-7be2ed9b7f40", - "isActive": false, - "balance": "$3,624.70", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "green", - "name": "Jannie Medina", - "gender": "female", - "company": "NAVIR", - "email": "janniemedina@navir.com", - "phone": "+1 (945) 419-2616", - "address": "707 Quentin Street, Kent, North Dakota, 5989", - "about": "Excepteur sint eu cupidatat labore ex dolor commodo. Ipsum reprehenderit voluptate aliquip labore Lorem laboris exercitation est Lorem deserunt cillum. Qui adipisicing culpa elit proident deserunt qui non aliqua id aliqua ut irure incididunt. Eiusmod pariatur do anim magna reprehenderit irure anim nulla nisi ea proident. Laboris proident pariatur tempor ex cupidatat fugiat minim elit ut aliquip in. Qui aliquip velit labore ut qui enim aliqua labore anim in in voluptate.\r\n", - "registered": "2017-10-29T09:22:16 +04:00", - "latitude": 85.040716, - "longitude": -95.389124, - "tags": ["occaecat", "laborum", "occaecat", "commodo", "dolor", "sint", "sint"], - "friends": [ - { - "id": 0, - "name": "Hannah Cross" - }, - { - "id": 1, - "name": "Elisa Foster" - }, - { - "id": 2, - "name": "Alta Ford" - } - ], - "greeting": "Hello, Jannie Medina! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d9a5db98c325a8b59", - "index": 878, - "guid": "0bb05649-d7f3-4b7d-989f-200937969e53", - "isActive": false, - "balance": "$3,322.95", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Lawrence Giles", - "gender": "male", - "company": "ECRATER", - "email": "lawrencegiles@ecrater.com", - "phone": "+1 (802) 417-3049", - "address": "142 Freeman Street, Kenvil, Federated States Of Micronesia, 263", - "about": "Mollit aliquip officia adipisicing sit adipisicing ad exercitation non. Nulla deserunt nisi ex nostrud qui tempor fugiat sint esse in incididunt labore reprehenderit labore. Veniam enim exercitation deserunt ipsum reprehenderit.\r\n", - "registered": "2019-11-29T07:39:01 +05:00", - "latitude": 36.906156, - "longitude": 143.476455, - "tags": ["duis", "magna", "excepteur", "sunt", "ex", "incididunt", "id"], - "friends": [ - { - "id": 0, - "name": "Marks Clay" - }, - { - "id": 1, - "name": "Rowland Mayer" - }, - { - "id": 2, - "name": "Juliana Dodson" - } - ], - "greeting": "Hello, Lawrence Giles! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d115a29f1190ab509", - "index": 879, - "guid": "3aa61bcf-27c9-4185-992e-b31e1b6e7803", - "isActive": false, - "balance": "$3,591.89", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Wise Garrett", - "gender": "male", - "company": "SENSATE", - "email": "wisegarrett@sensate.com", - "phone": "+1 (923) 542-2932", - "address": "876 Bayard Street, Drytown, Maryland, 2290", - "about": "Commodo irure nisi id culpa aute aliquip fugiat labore ut do. Exercitation sunt fugiat veniam consectetur exercitation consequat irure mollit aute laboris. Cupidatat cillum nisi cupidatat duis deserunt pariatur sunt ad. Commodo consequat minim consequat minim deserunt cupidatat ut do ea ipsum laborum aliquip. Laboris deserunt qui deserunt Lorem ea ipsum.\r\n", - "registered": "2019-01-19T09:21:30 +05:00", - "latitude": -22.04106, - "longitude": -161.615554, - "tags": ["mollit", "labore", "magna", "labore", "nulla", "amet", "esse"], - "friends": [ - { - "id": 0, - "name": "Laverne Middleton" - }, - { - "id": 1, - "name": "Elba Strickland" - }, - { - "id": 2, - "name": "Sasha Peterson" - } - ], - "greeting": "Hello, Wise Garrett! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd4c44887ef201f82", - "index": 880, - "guid": "91335015-eb48-494f-a0e7-bfb4504b3def", - "isActive": true, - "balance": "$1,954.52", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Claudine Hogan", - "gender": "female", - "company": "ISBOL", - "email": "claudinehogan@isbol.com", - "phone": "+1 (960) 445-3695", - "address": "732 Vernon Avenue, Clarence, Virgin Islands, 1380", - "about": "Laborum eu ea ex nostrud non sit veniam. Esse duis irure cupidatat voluptate esse laborum do enim deserunt ex magna. Magna mollit laboris anim enim Lorem consectetur aliqua Lorem est exercitation mollit dolor. Occaecat pariatur est consequat id irure minim deserunt. Nostrud aute sit duis Lorem non nulla. Qui amet excepteur ad elit quis nulla reprehenderit nisi nulla minim non.\r\n", - "registered": "2019-11-09T01:07:56 +05:00", - "latitude": 51.182956, - "longitude": -102.176152, - "tags": ["sit", "id", "laborum", "laboris", "irure", "pariatur", "id"], - "friends": [ - { - "id": 0, - "name": "Sharon Gross" - }, - { - "id": 1, - "name": "Phelps Lawson" - }, - { - "id": 2, - "name": "Whitney Campbell" - } - ], - "greeting": "Hello, Claudine Hogan! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2a271efa724cf87f", - "index": 881, - "guid": "370661ee-72f7-4225-9bf1-0a06f634ebdc", - "isActive": false, - "balance": "$3,247.98", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "blue", - "name": "Carey Langley", - "gender": "female", - "company": "GONKLE", - "email": "careylangley@gonkle.com", - "phone": "+1 (907) 477-3593", - "address": "904 Hanson Place, Linwood, Pennsylvania, 5755", - "about": "Commodo ipsum do enim adipisicing laborum Lorem cupidatat esse commodo reprehenderit culpa reprehenderit magna incididunt. Voluptate labore eiusmod sint esse ea magna occaecat anim. Nostrud voluptate esse commodo cupidatat sint consequat proident aliqua labore.\r\n", - "registered": "2019-04-28T05:22:35 +04:00", - "latitude": -47.881093, - "longitude": -108.939797, - "tags": ["Lorem", "pariatur", "culpa", "anim", "consectetur", "laboris", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Marjorie Reed" - }, - { - "id": 1, - "name": "Cabrera Rush" - }, - { - "id": 2, - "name": "Pace Buck" - } - ], - "greeting": "Hello, Carey Langley! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d7c73b7f00739f904", - "index": 882, - "guid": "613e299a-ebfc-48e6-976d-cde293588f6e", - "isActive": true, - "balance": "$1,473.04", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Nelson Pate", - "gender": "male", - "company": "LIMAGE", - "email": "nelsonpate@limage.com", - "phone": "+1 (838) 505-2066", - "address": "171 Stillwell Place, Sugartown, Washington, 2308", - "about": "Incididunt proident deserunt nostrud excepteur incididunt enim non adipisicing laborum est cupidatat. Ut deserunt deserunt commodo sint ut nisi eiusmod adipisicing. Tempor reprehenderit veniam sit elit ullamco sint id aliquip exercitation fugiat aute. Nisi incididunt duis Lorem minim eiusmod nisi qui do. Qui culpa cupidatat eiusmod mollit.\r\n", - "registered": "2016-10-15T06:03:37 +04:00", - "latitude": 1.130052, - "longitude": 174.407191, - "tags": ["commodo", "voluptate", "tempor", "ex", "consequat", "dolor", "nisi"], - "friends": [ - { - "id": 0, - "name": "Nona Maxwell" - }, - { - "id": 1, - "name": "Blanca Schneider" - }, - { - "id": 2, - "name": "Adkins Levine" - } - ], - "greeting": "Hello, Nelson Pate! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d042b3520bd3a2b55", - "index": 883, - "guid": "619a81c7-a275-4ae0-a092-08d6f118b4ef", - "isActive": true, - "balance": "$2,413.33", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Malinda Britt", - "gender": "female", - "company": "VELOS", - "email": "malindabritt@velos.com", - "phone": "+1 (820) 583-3382", - "address": "872 Gerald Court, Dundee, Illinois, 5395", - "about": "Nostrud est sunt dolor anim culpa ipsum amet Lorem velit elit incididunt. Aute ullamco nostrud ut reprehenderit magna consequat mollit officia in Lorem. Aliqua adipisicing ipsum do quis incididunt ea consectetur velit. Tempor reprehenderit excepteur magna eiusmod adipisicing anim non incididunt ullamco tempor ut id aliquip.\r\n", - "registered": "2018-04-18T11:44:43 +04:00", - "latitude": -68.345054, - "longitude": 174.586628, - "tags": ["voluptate", "incididunt", "consequat", "exercitation", "nulla", "sit", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Robertson Holder" - }, - { - "id": 1, - "name": "Edith Cleveland" - }, - { - "id": 2, - "name": "Hill Lopez" - } - ], - "greeting": "Hello, Malinda Britt! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3f1dafcedf9535e4", - "index": 884, - "guid": "54f92566-6009-4219-8ab0-12208f11e4d4", - "isActive": true, - "balance": "$2,402.33", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "brown", - "name": "Jeri Mercado", - "gender": "female", - "company": "TRASOLA", - "email": "jerimercado@trasola.com", - "phone": "+1 (868) 461-3551", - "address": "677 Barwell Terrace, Lupton, New Hampshire, 4326", - "about": "Esse cupidatat excepteur exercitation consectetur veniam adipisicing excepteur cupidatat duis fugiat Lorem adipisicing. Aliqua cillum ea proident reprehenderit minim exercitation aliquip ullamco. Excepteur dolore exercitation officia ea enim ea commodo velit ipsum culpa sunt. Dolore aliqua Lorem deserunt amet voluptate sunt laborum eiusmod. Pariatur qui minim exercitation elit aliquip Lorem. Magna ut fugiat non ullamco minim voluptate nulla id do non excepteur anim in.\r\n", - "registered": "2020-02-10T08:12:23 +05:00", - "latitude": 37.280857, - "longitude": -153.104298, - "tags": ["deserunt", "dolore", "ad", "exercitation", "eiusmod", "reprehenderit", "enim"], - "friends": [ - { - "id": 0, - "name": "Roberta Cabrera" - }, - { - "id": 1, - "name": "Lois Gray" - }, - { - "id": 2, - "name": "Guzman Hewitt" - } - ], - "greeting": "Hello, Jeri Mercado! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d2b7a48575731834f", - "index": 885, - "guid": "cbddac5b-2338-4414-bfaa-4f3e287cadd7", - "isActive": true, - "balance": "$3,403.23", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Bauer Thomas", - "gender": "male", - "company": "ONTAGENE", - "email": "bauerthomas@ontagene.com", - "phone": "+1 (920) 496-2649", - "address": "528 Anthony Street, Bannock, Colorado, 6903", - "about": "Aliqua sit laborum sunt exercitation. Adipisicing velit minim elit magna mollit et mollit. Sunt ad occaecat nulla exercitation cupidatat nulla fugiat enim voluptate. Veniam Lorem voluptate aliqua est sint eiusmod non laborum dolor.\r\n", - "registered": "2016-05-19T01:09:12 +04:00", - "latitude": -2.915382, - "longitude": 16.530504, - "tags": ["Lorem", "nisi", "ullamco", "ipsum", "et", "voluptate", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Therese Houston" - }, - { - "id": 1, - "name": "West Wong" - }, - { - "id": 2, - "name": "Sally Conley" - } - ], - "greeting": "Hello, Bauer Thomas! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d62af274a787ac44a", - "index": 886, - "guid": "324cae18-16ab-43f7-a2cc-9645f88110f8", - "isActive": false, - "balance": "$3,081.62", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Pate Velez", - "gender": "male", - "company": "OZEAN", - "email": "patevelez@ozean.com", - "phone": "+1 (937) 488-3067", - "address": "519 Schenck Street, Chical, Maine, 1302", - "about": "Velit exercitation consequat enim sint ex pariatur pariatur velit veniam duis esse esse minim culpa. Nostrud enim veniam ipsum proident laboris adipisicing pariatur non. Reprehenderit esse dolor commodo labore qui exercitation excepteur deserunt labore sit. Do id ea minim ea.\r\n", - "registered": "2020-04-11T08:14:09 +04:00", - "latitude": 75.193204, - "longitude": 0.044096, - "tags": ["excepteur", "elit", "Lorem", "mollit", "magna", "mollit", "dolor"], - "friends": [ - { - "id": 0, - "name": "Jacobson May" - }, - { - "id": 1, - "name": "Jennie Randall" - }, - { - "id": 2, - "name": "Alyce Jones" - } - ], - "greeting": "Hello, Pate Velez! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2f4b5b530c900391", - "index": 887, - "guid": "b52f4e99-26b5-4018-a0db-25d80ac135a0", - "isActive": true, - "balance": "$2,430.27", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Bishop Glover", - "gender": "male", - "company": "FARMEX", - "email": "bishopglover@farmex.com", - "phone": "+1 (911) 451-3531", - "address": "227 Wilson Street, Summerfield, South Carolina, 1994", - "about": "Laboris incididunt qui ea elit incididunt. Commodo nulla cupidatat ad commodo duis ad aute adipisicing sunt. Sint officia sit proident sit. Velit consectetur quis velit nostrud dolor ea non dolore. Velit exercitation cillum exercitation magna nulla ea ullamco ullamco. Ipsum aute culpa nisi consequat eu minim tempor nulla minim et tempor dolore.\r\n", - "registered": "2015-06-03T02:00:41 +04:00", - "latitude": 24.290961, - "longitude": -65.967332, - "tags": ["velit", "laboris", "adipisicing", "nisi", "consectetur", "in", "proident"], - "friends": [ - { - "id": 0, - "name": "Morin Mcgee" - }, - { - "id": 1, - "name": "Leta Singleton" - }, - { - "id": 2, - "name": "Jamie Hill" - } - ], - "greeting": "Hello, Bishop Glover! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5af92b62ff9c339b", - "index": 888, - "guid": "ab695695-75e3-44d8-8491-dd2b832ff126", - "isActive": false, - "balance": "$2,824.16", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Byers Schmidt", - "gender": "male", - "company": "PORTICA", - "email": "byersschmidt@portica.com", - "phone": "+1 (874) 582-2466", - "address": "405 Regent Place, Murillo, Connecticut, 7803", - "about": "Est commodo proident commodo anim. Non ad eu consectetur ullamco eu deserunt ad eiusmod duis sint adipisicing officia sint. Aliquip consectetur commodo excepteur sit labore pariatur ipsum nulla id irure deserunt. Ullamco cillum commodo reprehenderit sunt sunt anim ex nulla et id pariatur. Eu ullamco dolor eu minim dolore qui laboris proident do aute pariatur nostrud minim quis. Eiusmod cillum commodo id nulla aliqua qui duis officia. Duis pariatur irure consequat pariatur culpa.\r\n", - "registered": "2014-06-02T01:39:12 +04:00", - "latitude": 42.258624, - "longitude": -96.72095, - "tags": ["deserunt", "exercitation", "laboris", "ut", "ipsum", "eiusmod", "elit"], - "friends": [ - { - "id": 0, - "name": "Elise Jensen" - }, - { - "id": 1, - "name": "Mara Murphy" - }, - { - "id": 2, - "name": "Martinez Baxter" - } - ], - "greeting": "Hello, Byers Schmidt! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dddc6395bdab17104", - "index": 889, - "guid": "9d42d677-3ad3-43a0-9ce0-dd09e66cec64", - "isActive": true, - "balance": "$1,707.61", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Marcia Henderson", - "gender": "female", - "company": "MAGNEATO", - "email": "marciahenderson@magneato.com", - "phone": "+1 (825) 583-3929", - "address": "749 Louisa Street, Hillsboro, Virginia, 3874", - "about": "Lorem in officia labore sit esse ea enim. Eu enim esse labore in voluptate. Enim pariatur exercitation nostrud ea proident quis officia anim nulla pariatur. Elit sint esse nisi reprehenderit eu occaecat minim aliqua qui nisi sunt exercitation consequat. Ex dolor nulla excepteur consequat aliqua reprehenderit ut.\r\n", - "registered": "2019-01-25T09:32:54 +05:00", - "latitude": -27.363551, - "longitude": 22.909796, - "tags": ["deserunt", "ipsum", "laboris", "velit", "quis", "ad", "qui"], - "friends": [ - { - "id": 0, - "name": "Joni Lawrence" - }, - { - "id": 1, - "name": "Bernard Ward" - }, - { - "id": 2, - "name": "Angelica Greer" - } - ], - "greeting": "Hello, Marcia Henderson! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfe00c56337afd4c1", - "index": 890, - "guid": "a670c8f3-c494-4a65-9963-6815f94bb08c", - "isActive": true, - "balance": "$2,911.05", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Mercedes Mcconnell", - "gender": "female", - "company": "ASSISTIX", - "email": "mercedesmcconnell@assistix.com", - "phone": "+1 (883) 410-3448", - "address": "948 Schweikerts Walk, Fontanelle, Georgia, 169", - "about": "Cupidatat elit adipisicing occaecat officia officia nisi. Duis dolore aliqua qui duis. Cillum qui culpa enim non sit adipisicing.\r\n", - "registered": "2015-11-18T12:22:09 +05:00", - "latitude": -4.021185, - "longitude": 125.273362, - "tags": ["amet", "consectetur", "minim", "velit", "aliqua", "sit", "in"], - "friends": [ - { - "id": 0, - "name": "Patrick Pugh" - }, - { - "id": 1, - "name": "Madeline Hartman" - }, - { - "id": 2, - "name": "Wilkerson Goodwin" - } - ], - "greeting": "Hello, Mercedes Mcconnell! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25ded99c70ca4b56c8a", - "index": 891, - "guid": "c73ecb38-9859-46f9-84ac-99d22401cb18", - "isActive": true, - "balance": "$2,991.94", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Renee Sharpe", - "gender": "female", - "company": "DADABASE", - "email": "reneesharpe@dadabase.com", - "phone": "+1 (823) 426-3996", - "address": "722 Scholes Street, Coral, New Jersey, 3295", - "about": "Minim quis occaecat quis irure. Elit adipisicing laboris id Lorem commodo proident aliqua laboris veniam. Adipisicing ut officia aute aute consequat. Consectetur cillum esse et consectetur quis irure fugiat laborum laborum sint anim. Nulla in non nulla deserunt et nostrud nisi labore culpa Lorem aliqua veniam. Nostrud quis tempor esse non ut. Mollit ex magna magna tempor consequat duis veniam ea dolore.\r\n", - "registered": "2020-08-29T12:12:26 +04:00", - "latitude": 89.605357, - "longitude": 111.36398, - "tags": ["tempor", "id", "irure", "excepteur", "culpa", "dolor", "irure"], - "friends": [ - { - "id": 0, - "name": "Monroe Mueller" - }, - { - "id": 1, - "name": "Amalia Lott" - }, - { - "id": 2, - "name": "Hebert Casey" - } - ], - "greeting": "Hello, Renee Sharpe! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d541a1d9e1fa04d1d", - "index": 892, - "guid": "f0afcab7-2b01-470b-abc8-a92157eb2923", - "isActive": true, - "balance": "$2,291.09", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Mcintosh Oconnor", - "gender": "male", - "company": "COMSTAR", - "email": "mcintoshoconnor@comstar.com", - "phone": "+1 (954) 509-3891", - "address": "517 Dorset Street, Lodoga, Minnesota, 7957", - "about": "Quis et non et officia commodo ea ad id amet. Esse aliqua velit duis ipsum duis. Id exercitation aliquip adipisicing esse labore eu ad ut officia ullamco. In cillum pariatur in duis culpa laborum non aliqua ex id. Lorem ut est non magna eiusmod.\r\n", - "registered": "2018-07-26T12:33:36 +04:00", - "latitude": -41.905145, - "longitude": -50.972371, - "tags": ["fugiat", "aute", "commodo", "cupidatat", "sint", "enim", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Spence Stephens" - }, - { - "id": 1, - "name": "Lara Frost" - }, - { - "id": 2, - "name": "Gill Benson" - } - ], - "greeting": "Hello, Mcintosh Oconnor! You have 3 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dfd65ccd0a8bdcf98", - "index": 893, - "guid": "174dacd3-9f0f-4621-9e82-5f7e1d925825", - "isActive": false, - "balance": "$2,047.27", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Ginger Hatfield", - "gender": "female", - "company": "POOCHIES", - "email": "gingerhatfield@poochies.com", - "phone": "+1 (843) 585-2996", - "address": "943 Conklin Avenue, Newcastle, Texas, 8389", - "about": "Et elit nostrud culpa eu. Ex laborum ipsum quis laboris laboris. Ad aute consequat non qui eiusmod non amet. Aliquip incididunt magna laborum eiusmod sunt adipisicing. Sint magna est occaecat sint consectetur ad amet. Sit consequat magna nisi ut.\r\n", - "registered": "2015-12-06T03:57:43 +05:00", - "latitude": 39.16066, - "longitude": -70.733427, - "tags": ["nostrud", "ad", "ex", "eiusmod", "ad", "ut", "commodo"], - "friends": [ - { - "id": 0, - "name": "Lorna Kelly" - }, - { - "id": 1, - "name": "Ora Delgado" - }, - { - "id": 2, - "name": "Diana Avila" - } - ], - "greeting": "Hello, Ginger Hatfield! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6164a63606f02178", - "index": 894, - "guid": "7d5af383-1991-40d6-ba06-e14869cc9cad", - "isActive": true, - "balance": "$2,498.95", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Paige Cannon", - "gender": "female", - "company": "BEDDER", - "email": "paigecannon@bedder.com", - "phone": "+1 (973) 407-2257", - "address": "915 Autumn Avenue, Ona, Alabama, 2833", - "about": "Dolor nostrud do qui consequat id consequat eiusmod quis. Aliqua proident nostrud nisi nostrud cupidatat tempor incididunt aliqua laboris magna. Tempor culpa in elit dolore consectetur.\r\n", - "registered": "2014-04-17T04:15:13 +04:00", - "latitude": -30.836618, - "longitude": 28.204298, - "tags": ["fugiat", "ea", "mollit", "commodo", "ut", "elit", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Foreman Stark" - }, - { - "id": 1, - "name": "Lucas Olson" - }, - { - "id": 2, - "name": "Hayes Meyers" - } - ], - "greeting": "Hello, Paige Cannon! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d96807666b0a1b6b1", - "index": 895, - "guid": "680a0a82-a7ab-4413-a51e-e113c4a0a45b", - "isActive": false, - "balance": "$2,681.03", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Queen Deleon", - "gender": "female", - "company": "SUREPLEX", - "email": "queendeleon@sureplex.com", - "phone": "+1 (830) 425-3926", - "address": "984 Loring Avenue, Condon, Rhode Island, 9144", - "about": "Voluptate adipisicing ullamco consequat labore. Nisi aliqua id dolor nulla. Reprehenderit adipisicing sit laboris quis tempor aliquip id in esse. Sunt in irure sit laboris proident do incididunt dolor aliqua. Excepteur minim quis duis adipisicing cupidatat exercitation minim cupidatat amet do sit consequat ex laboris.\r\n", - "registered": "2014-08-16T04:14:29 +04:00", - "latitude": -3.857425, - "longitude": -67.85366, - "tags": ["ut", "exercitation", "eiusmod", "laborum", "aliquip", "excepteur", "tempor"], - "friends": [ - { - "id": 0, - "name": "Ola Harris" - }, - { - "id": 1, - "name": "Geneva Hutchinson" - }, - { - "id": 2, - "name": "Lisa Frederick" - } - ], - "greeting": "Hello, Queen Deleon! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6f78c1628f70b1ca", - "index": 896, - "guid": "16954639-6718-42db-a56e-098e29cced71", - "isActive": false, - "balance": "$1,038.54", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Nita Rodgers", - "gender": "female", - "company": "VURBO", - "email": "nitarodgers@vurbo.com", - "phone": "+1 (952) 586-2873", - "address": "520 Flatlands Avenue, Brutus, Florida, 6993", - "about": "Sunt magna ipsum mollit non veniam labore elit eu eu est non dolor. Non eu sint minim ea. Consectetur reprehenderit fugiat duis voluptate elit.\r\n", - "registered": "2016-03-08T05:52:26 +05:00", - "latitude": -89.642645, - "longitude": 124.181752, - "tags": ["nulla", "velit", "ipsum", "id", "excepteur", "deserunt", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Selena Whitaker" - }, - { - "id": 1, - "name": "Blanche Miller" - }, - { - "id": 2, - "name": "Burks Price" - } - ], - "greeting": "Hello, Nita Rodgers! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d75c343d39a4aa69d", - "index": 897, - "guid": "af45f40a-b98d-40b3-ab3e-ce35b21bed5a", - "isActive": true, - "balance": "$1,192.95", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Trevino Merritt", - "gender": "male", - "company": "ISOTRONIC", - "email": "trevinomerritt@isotronic.com", - "phone": "+1 (940) 423-3960", - "address": "862 Forbell Street, Rockhill, Indiana, 4023", - "about": "Cillum quis ad eu ea laboris anim elit laboris ad. Anim dolore veniam qui aute ad occaecat culpa ex exercitation aliquip dolor fugiat id duis. Officia laborum reprehenderit nostrud consectetur velit cupidatat velit incididunt. Ullamco incididunt anim occaecat voluptate anim est pariatur dolore quis. Id irure aute aute proident quis in. Qui pariatur pariatur ullamco consequat cillum cupidatat sunt.\r\n", - "registered": "2017-02-18T02:48:39 +05:00", - "latitude": -83.631351, - "longitude": -114.400837, - "tags": ["quis", "quis", "deserunt", "reprehenderit", "occaecat", "qui", "in"], - "friends": [ - { - "id": 0, - "name": "Marion Valentine" - }, - { - "id": 1, - "name": "Jensen Avery" - }, - { - "id": 2, - "name": "Burris Alston" - } - ], - "greeting": "Hello, Trevino Merritt! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3d4ae02dae66a43e", - "index": 898, - "guid": "5ed5d12f-2a0a-4cb8-b241-2555b64c11b9", - "isActive": true, - "balance": "$3,416.43", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "brown", - "name": "Hancock Quinn", - "gender": "male", - "company": "SHADEASE", - "email": "hancockquinn@shadease.com", - "phone": "+1 (942) 468-3879", - "address": "992 Nixon Court, Groton, Northern Mariana Islands, 6039", - "about": "Amet officia labore ullamco fugiat nisi voluptate fugiat officia magna labore esse exercitation et. Officia non exercitation consectetur do aute in adipisicing duis magna eiusmod. Irure incididunt aliquip elit fugiat ut velit adipisicing qui officia aute. Ex esse consequat duis dolor nisi adipisicing ea sit tempor commodo qui. Laborum sint magna quis eiusmod duis sunt dolor cupidatat elit Lorem consequat. Duis id sit aliqua ullamco ad deserunt amet sit elit amet laboris commodo ea sint. Quis ut pariatur pariatur id.\r\n", - "registered": "2019-12-24T05:07:57 +05:00", - "latitude": 66.434011, - "longitude": -80.871929, - "tags": ["labore", "nostrud", "adipisicing", "dolore", "aliquip", "eu", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Wilder Perry" - }, - { - "id": 1, - "name": "Evans Mclaughlin" - }, - { - "id": 2, - "name": "Elva Strong" - } - ], - "greeting": "Hello, Hancock Quinn! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d999f89b615403855", - "index": 899, - "guid": "a8916c0e-8237-4235-bc29-f2e8894d05bc", - "isActive": false, - "balance": "$3,388.12", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "green", - "name": "Ana Reid", - "gender": "female", - "company": "ZENTILITY", - "email": "anareid@zentility.com", - "phone": "+1 (808) 448-2454", - "address": "185 Waldorf Court, Thermal, Idaho, 9832", - "about": "Nisi id voluptate dolor sunt esse ullamco sunt ea id in exercitation fugiat. Fugiat mollit id ut est consectetur. Commodo duis amet mollit dolor Lorem tempor adipisicing excepteur tempor enim elit. Enim deserunt fugiat dolore consectetur duis. Exercitation officia Lorem sunt elit proident cupidatat labore sunt culpa ullamco ullamco. Nisi laboris dolor pariatur culpa mollit ipsum mollit est ipsum eiusmod.\r\n", - "registered": "2020-08-18T08:13:36 +04:00", - "latitude": 12.588876, - "longitude": -105.953508, - "tags": ["ipsum", "cillum", "velit", "id", "excepteur", "aute", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Claudia Martinez" - }, - { - "id": 1, - "name": "Janell Daniels" - }, - { - "id": 2, - "name": "Melba Travis" - } - ], - "greeting": "Hello, Ana Reid! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4a522a61fcb9aa28", - "index": 900, - "guid": "03aaa1fe-d2ad-4337-8546-109e176b278d", - "isActive": false, - "balance": "$1,605.06", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Kristie Castaneda", - "gender": "female", - "company": "ACCUFARM", - "email": "kristiecastaneda@accufarm.com", - "phone": "+1 (905) 424-3382", - "address": "264 Lafayette Walk, Ticonderoga, District Of Columbia, 6820", - "about": "Dolor dolor magna ad nisi ex Lorem laboris. Sint nisi adipisicing do culpa Lorem sit nostrud sit amet ullamco mollit voluptate. Ad nostrud nisi ipsum minim ipsum proident laboris.\r\n", - "registered": "2016-08-14T04:58:09 +04:00", - "latitude": 83.63974, - "longitude": 10.70921, - "tags": ["mollit", "consectetur", "duis", "elit", "cupidatat", "aute", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Dominguez Cochran" - }, - { - "id": 1, - "name": "Hines Battle" - }, - { - "id": 2, - "name": "Belinda Castillo" - } - ], - "greeting": "Hello, Kristie Castaneda! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9e031b741454ca58", - "index": 901, - "guid": "55f87ea6-cb56-4052-bb2f-f37598517a13", - "isActive": true, - "balance": "$3,570.50", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Terrell Oneal", - "gender": "male", - "company": "ZAPPIX", - "email": "terrelloneal@zappix.com", - "phone": "+1 (978) 554-3716", - "address": "922 Moultrie Street, Dunlo, New Mexico, 2754", - "about": "Minim consectetur pariatur do do ullamco. Voluptate pariatur nostrud enim laboris minim magna tempor dolore ad cillum qui. Aute non excepteur ipsum cillum ea commodo nulla. Quis labore adipisicing ipsum eiusmod occaecat labore do id nostrud. Elit dolore sit ullamco magna nulla fugiat ex ut enim. Enim occaecat duis sint consequat.\r\n", - "registered": "2015-05-05T05:51:21 +04:00", - "latitude": 61.427282, - "longitude": -178.855754, - "tags": ["ipsum", "exercitation", "culpa", "ad", "minim", "aliquip", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Jimenez Fitzpatrick" - }, - { - "id": 1, - "name": "Karyn Velasquez" - }, - { - "id": 2, - "name": "Felicia Petty" - } - ], - "greeting": "Hello, Terrell Oneal! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d23caac99c74f7026", - "index": 902, - "guid": "36c4332c-6b07-405a-92f2-447971d94868", - "isActive": true, - "balance": "$3,738.36", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Jeanette Pennington", - "gender": "female", - "company": "TETRATREX", - "email": "jeanettepennington@tetratrex.com", - "phone": "+1 (857) 488-3987", - "address": "658 Conduit Boulevard, Ballico, South Dakota, 6453", - "about": "Non est consequat nostrud ad amet est non. Nulla ullamco adipisicing non culpa. Quis velit tempor qui non nostrud. Ut occaecat amet non consectetur eiusmod adipisicing occaecat elit et labore fugiat ut.\r\n", - "registered": "2019-10-13T12:50:39 +04:00", - "latitude": -23.249636, - "longitude": 39.72146, - "tags": ["ex", "minim", "ea", "enim", "consequat", "tempor", "quis"], - "friends": [ - { - "id": 0, - "name": "Neva Reyes" - }, - { - "id": 1, - "name": "Helen Roth" - }, - { - "id": 2, - "name": "Mai Walker" - } - ], - "greeting": "Hello, Jeanette Pennington! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dec796e883e1ee12f", - "index": 903, - "guid": "5c1f3be5-e9a9-4248-9382-563caa3ff9cb", - "isActive": false, - "balance": "$3,249.48", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Whitney Morrison", - "gender": "female", - "company": "COMBOGEN", - "email": "whitneymorrison@combogen.com", - "phone": "+1 (846) 524-2233", - "address": "577 Ashford Street, Bartley, American Samoa, 6773", - "about": "Consequat excepteur occaecat Lorem amet incididunt mollit elit nisi voluptate. Aliquip et id culpa excepteur pariatur nostrud Lorem excepteur dolore qui reprehenderit. Mollit reprehenderit anim ea dolore aute deserunt ut. Amet laborum proident occaecat ut adipisicing commodo fugiat qui non irure voluptate est exercitation. Consequat eu in exercitation anim qui consectetur.\r\n", - "registered": "2016-03-18T03:41:23 +04:00", - "latitude": -77.753177, - "longitude": -132.173279, - "tags": ["duis", "do", "eiusmod", "in", "ullamco", "deserunt", "amet"], - "friends": [ - { - "id": 0, - "name": "Figueroa Carney" - }, - { - "id": 1, - "name": "Adele Calderon" - }, - { - "id": 2, - "name": "Copeland Daugherty" - } - ], - "greeting": "Hello, Whitney Morrison! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d048f294fd8730c36", - "index": 904, - "guid": "a5189f56-3587-469e-9fd4-e0139ab71aa7", - "isActive": false, - "balance": "$3,797.62", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "blue", - "name": "Maryann Smith", - "gender": "female", - "company": "LEXICONDO", - "email": "maryannsmith@lexicondo.com", - "phone": "+1 (936) 414-3561", - "address": "726 Lincoln Avenue, Staples, Iowa, 9112", - "about": "Ea exercitation ad voluptate ipsum ea mollit eu duis consectetur. Deserunt aute aute elit commodo. Aliquip occaecat reprehenderit nisi labore ipsum tempor sint aute minim esse nulla. Qui labore ullamco sit eiusmod anim irure. Minim non ex elit pariatur sit quis dolore culpa duis enim eu. Sit duis ullamco enim eiusmod ullamco. Proident laboris laborum cillum est fugiat anim in labore officia.\r\n", - "registered": "2015-06-06T08:15:55 +04:00", - "latitude": -36.411638, - "longitude": -119.371807, - "tags": ["est", "irure", "est", "mollit", "dolor", "laborum", "quis"], - "friends": [ - { - "id": 0, - "name": "Snider Ingram" - }, - { - "id": 1, - "name": "Wilma Randolph" - }, - { - "id": 2, - "name": "Kirkland Potts" - } - ], - "greeting": "Hello, Maryann Smith! You have 7 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df5068cd0fcbd7ae0", - "index": 905, - "guid": "726744cc-f840-45c7-9752-22b3914e28f2", - "isActive": false, - "balance": "$3,724.54", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Schmidt Delacruz", - "gender": "male", - "company": "YURTURE", - "email": "schmidtdelacruz@yurture.com", - "phone": "+1 (865) 414-2243", - "address": "531 Colby Court, Mahtowa, Palau, 547", - "about": "Non irure dolor nulla quis qui dolore deserunt eu elit ut nulla sunt aute. Pariatur dolor sit laboris fugiat nostrud eu aliquip quis occaecat. Duis exercitation ad proident consequat amet pariatur commodo officia. Ad velit irure nostrud do et dolor sunt non adipisicing ex enim fugiat labore. Cupidatat nulla laboris in commodo excepteur velit laborum culpa aliquip. Consectetur eu occaecat labore elit Lorem fugiat exercitation laboris non nisi proident excepteur reprehenderit. Laborum voluptate magna do consectetur sunt anim exercitation pariatur tempor consectetur tempor eiusmod.\r\n", - "registered": "2016-01-15T07:36:10 +05:00", - "latitude": 38.793597, - "longitude": 176.715862, - "tags": ["nostrud", "ea", "in", "nulla", "minim", "aute", "dolor"], - "friends": [ - { - "id": 0, - "name": "Laurie Head" - }, - { - "id": 1, - "name": "Jarvis Newton" - }, - { - "id": 2, - "name": "Harrell Elliott" - } - ], - "greeting": "Hello, Schmidt Delacruz! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25da44af64c139f3d3b", - "index": 906, - "guid": "194b37c6-a78e-4535-9978-9c4aa1f641e0", - "isActive": false, - "balance": "$1,332.88", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Maynard Sullivan", - "gender": "male", - "company": "GLOBOIL", - "email": "maynardsullivan@globoil.com", - "phone": "+1 (846) 461-2579", - "address": "568 Railroad Avenue, Elfrida, West Virginia, 3165", - "about": "Deserunt do cillum est deserunt sunt nulla. Exercitation mollit anim laboris tempor culpa consequat Lorem. Voluptate labore dolore duis nisi mollit dolor sint eu. Aliqua occaecat deserunt ex duis minim culpa laborum ipsum proident irure.\r\n", - "registered": "2018-05-25T09:31:44 +04:00", - "latitude": 23.359283, - "longitude": 60.899604, - "tags": ["labore", "ipsum", "do", "magna", "aliqua", "aliqua", "elit"], - "friends": [ - { - "id": 0, - "name": "Robyn Montgomery" - }, - { - "id": 1, - "name": "Franks Nunez" - }, - { - "id": 2, - "name": "Jolene Mann" - } - ], - "greeting": "Hello, Maynard Sullivan! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db85872a48199cf73", - "index": 907, - "guid": "013badcc-f7e9-45f4-9b93-2499a8b1822e", - "isActive": false, - "balance": "$1,421.35", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Lupe Miranda", - "gender": "female", - "company": "KYAGURU", - "email": "lupemiranda@kyaguru.com", - "phone": "+1 (860) 426-2384", - "address": "607 Lawton Street, Chloride, New York, 534", - "about": "Mollit mollit ipsum adipisicing officia deserunt amet irure. Nulla incididunt dolore irure officia qui quis irure sit nostrud officia magna sint. Laborum aliquip anim esse magna fugiat non minim labore occaecat qui non et et ipsum.\r\n", - "registered": "2014-04-10T08:25:47 +04:00", - "latitude": -83.767072, - "longitude": -88.530954, - "tags": ["et", "elit", "elit", "adipisicing", "veniam", "consequat", "aliqua"], - "friends": [ - { - "id": 0, - "name": "Elinor Rose" - }, - { - "id": 1, - "name": "Doris Rosales" - }, - { - "id": 2, - "name": "Louise Vincent" - } - ], - "greeting": "Hello, Lupe Miranda! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8c63994d3d466824", - "index": 908, - "guid": "64c612ae-f5d4-44c4-9d65-f607693f2411", - "isActive": false, - "balance": "$3,187.19", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Gutierrez Burke", - "gender": "male", - "company": "CORIANDER", - "email": "gutierrezburke@coriander.com", - "phone": "+1 (970) 514-3756", - "address": "477 Heyward Street, Bath, Hawaii, 5164", - "about": "Minim sit adipisicing anim aute proident nostrud. Consequat voluptate tempor dolor ut ullamco nisi sint labore fugiat aute. Fugiat anim tempor adipisicing nulla eu do eiusmod enim in tempor esse. Consequat enim eu Lorem nisi reprehenderit labore commodo elit Lorem.\r\n", - "registered": "2015-07-19T07:49:01 +04:00", - "latitude": 80.299189, - "longitude": -27.095176, - "tags": ["cupidatat", "amet", "ut", "proident", "aliquip", "ex", "proident"], - "friends": [ - { - "id": 0, - "name": "Marcella Booker" - }, - { - "id": 1, - "name": "Acevedo Hardy" - }, - { - "id": 2, - "name": "Aimee James" - } - ], - "greeting": "Hello, Gutierrez Burke! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d409cff3fc88e3cf2", - "index": 909, - "guid": "239c3b2a-014b-4d14-a2d0-31507baea95d", - "isActive": false, - "balance": "$2,104.21", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "blue", - "name": "Molly Sheppard", - "gender": "female", - "company": "MOTOVATE", - "email": "mollysheppard@motovate.com", - "phone": "+1 (898) 457-2187", - "address": "398 Dikeman Street, Smock, Nebraska, 5085", - "about": "Reprehenderit non culpa ullamco proident sunt adipisicing nisi enim veniam ut. Id consectetur aliquip magna veniam enim voluptate irure quis cupidatat sint sint dolor id. Officia esse ad veniam proident ipsum cupidatat proident officia.\r\n", - "registered": "2019-09-27T10:55:28 +04:00", - "latitude": 87.574959, - "longitude": -144.998107, - "tags": ["excepteur", "pariatur", "dolor", "fugiat", "excepteur", "enim", "veniam"], - "friends": [ - { - "id": 0, - "name": "Mabel Meadows" - }, - { - "id": 1, - "name": "Magdalena Banks" - }, - { - "id": 2, - "name": "Savannah Sears" - } - ], - "greeting": "Hello, Molly Sheppard! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7b29fad8075c2ae3", - "index": 910, - "guid": "2b13e9b9-1705-4995-9193-0c873fd979f0", - "isActive": false, - "balance": "$2,127.61", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Waller Rivera", - "gender": "male", - "company": "SPORTAN", - "email": "wallerrivera@sportan.com", - "phone": "+1 (971) 437-2766", - "address": "762 Rochester Avenue, Frank, Wisconsin, 5271", - "about": "Velit et pariatur enim enim ea aute deserunt et quis eu ut officia laboris cillum. Minim deserunt excepteur consectetur sit et non ullamco eu occaecat enim exercitation id. Voluptate ea deserunt et ullamco veniam id pariatur in commodo consectetur amet consectetur.\r\n", - "registered": "2014-08-19T06:24:27 +04:00", - "latitude": -76.117892, - "longitude": 163.790059, - "tags": ["aliqua", "commodo", "fugiat", "consequat", "incididunt", "fugiat", "elit"], - "friends": [ - { - "id": 0, - "name": "Hammond Kinney" - }, - { - "id": 1, - "name": "Lillian Justice" - }, - { - "id": 2, - "name": "Osborn Anderson" - } - ], - "greeting": "Hello, Waller Rivera! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d877715e51befa2d6", - "index": 911, - "guid": "c2965f1b-3bec-444e-ba6a-ab99e7d1168b", - "isActive": true, - "balance": "$2,538.49", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Thornton Landry", - "gender": "male", - "company": "KLUGGER", - "email": "thorntonlandry@klugger.com", - "phone": "+1 (891) 570-3248", - "address": "869 Veterans Avenue, Bradenville, Arizona, 2556", - "about": "Amet commodo consequat irure cupidatat. Fugiat incididunt minim sint anim esse dolore voluptate. Esse fugiat elit ex deserunt sunt velit.\r\n", - "registered": "2017-11-21T01:57:56 +05:00", - "latitude": 75.859127, - "longitude": -133.56996, - "tags": ["elit", "reprehenderit", "aliqua", "aliquip", "ea", "aliqua", "pariatur"], - "friends": [ - { - "id": 0, - "name": "Farley Young" - }, - { - "id": 1, - "name": "Kidd Harvey" - }, - { - "id": 2, - "name": "Rocha Guthrie" - } - ], - "greeting": "Hello, Thornton Landry! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d449c278770adb7dc", - "index": 912, - "guid": "254351e6-7c05-41ff-97db-10c84296ac71", - "isActive": false, - "balance": "$1,899.05", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Skinner Mcintosh", - "gender": "male", - "company": "KOG", - "email": "skinnermcintosh@kog.com", - "phone": "+1 (888) 550-3377", - "address": "958 Neptune Court, Omar, Ohio, 511", - "about": "Officia commodo nisi est occaecat dolore sint mollit ad dolore adipisicing commodo laborum. Proident enim et consectetur sunt minim. Ad consectetur dolor cillum id minim duis. Eiusmod minim id reprehenderit id qui minim veniam quis excepteur do adipisicing mollit.\r\n", - "registered": "2018-10-20T04:40:18 +04:00", - "latitude": -10.639156, - "longitude": 123.110221, - "tags": ["deserunt", "sunt", "nisi", "veniam", "reprehenderit", "magna", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Lesa Wall" - }, - { - "id": 1, - "name": "Little Moss" - }, - { - "id": 2, - "name": "Monique Holland" - } - ], - "greeting": "Hello, Skinner Mcintosh! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd48ec400fb21ccf2", - "index": 913, - "guid": "75e819f0-81aa-440f-a4d8-4d0f3f3d9086", - "isActive": true, - "balance": "$3,631.60", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Lorraine Bauer", - "gender": "female", - "company": "EARBANG", - "email": "lorrainebauer@earbang.com", - "phone": "+1 (830) 405-2878", - "address": "555 Gilmore Court, Gouglersville, Arkansas, 7697", - "about": "Magna veniam culpa labore esse sit occaecat exercitation aliqua. Duis cillum pariatur cillum exercitation. Velit duis est amet nisi in deserunt voluptate duis irure nisi sit dolor. Excepteur eu sit eu laboris excepteur consequat. Fugiat laborum amet aute laboris non amet deserunt magna. Et elit quis duis pariatur irure et.\r\n", - "registered": "2020-07-13T01:06:01 +04:00", - "latitude": 45.513361, - "longitude": 43.77664, - "tags": ["officia", "sint", "eiusmod", "ipsum", "sit", "irure", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Larsen Burton" - }, - { - "id": 1, - "name": "Garner Haney" - }, - { - "id": 2, - "name": "Sanchez Key" - } - ], - "greeting": "Hello, Lorraine Bauer! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d629f6879f33422fd", - "index": 914, - "guid": "8e876464-0d67-4c2a-9147-72dde4b28c05", - "isActive": false, - "balance": "$1,039.04", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Becky Gill", - "gender": "female", - "company": "SONGBIRD", - "email": "beckygill@songbird.com", - "phone": "+1 (808) 483-2389", - "address": "360 Barlow Drive, Trucksville, Nevada, 1887", - "about": "Est do sit id ex mollit veniam laboris amet tempor sit Lorem et exercitation laboris. Nulla mollit eu deserunt ullamco laborum incididunt. Laborum consectetur labore labore voluptate non velit proident pariatur esse aliqua. Commodo non nostrud eiusmod velit aute cillum cillum nostrud. Nisi ut excepteur consectetur sunt et. Minim consectetur velit occaecat dolor cillum.\r\n", - "registered": "2020-05-19T08:14:16 +04:00", - "latitude": 3.236575, - "longitude": 1.694467, - "tags": ["fugiat", "ex", "aliqua", "magna", "sit", "fugiat", "veniam"], - "friends": [ - { - "id": 0, - "name": "Miles Rivas" - }, - { - "id": 1, - "name": "Amie Whitley" - }, - { - "id": 2, - "name": "Garza Harrell" - } - ], - "greeting": "Hello, Becky Gill! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6bf5882f2d79f171", - "index": 915, - "guid": "5e3a41bc-4082-4423-8f3f-a885d744377b", - "isActive": false, - "balance": "$1,152.94", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Christine Case", - "gender": "female", - "company": "EZENT", - "email": "christinecase@ezent.com", - "phone": "+1 (978) 528-2976", - "address": "269 Lee Avenue, Ezel, Massachusetts, 6829", - "about": "Sunt sint dolor duis aute ea veniam aute aliqua id adipisicing sunt proident elit. Fugiat anim culpa ipsum reprehenderit anim Lorem ullamco velit ad aliqua. Officia laboris dolor velit veniam irure reprehenderit culpa quis labore proident et.\r\n", - "registered": "2019-03-16T07:36:19 +04:00", - "latitude": -39.586211, - "longitude": -97.575644, - "tags": ["proident", "labore", "do", "laboris", "non", "esse", "irure"], - "friends": [ - { - "id": 0, - "name": "Deana Gamble" - }, - { - "id": 1, - "name": "Barnett Hahn" - }, - { - "id": 2, - "name": "Lancaster Stone" - } - ], - "greeting": "Hello, Christine Case! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dba8c0e95525e4441", - "index": 916, - "guid": "3b39d7ef-0f8e-49cc-9f25-c42140910637", - "isActive": true, - "balance": "$3,235.47", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "blue", - "name": "Priscilla Ramirez", - "gender": "female", - "company": "ZOMBOID", - "email": "priscillaramirez@zomboid.com", - "phone": "+1 (976) 411-3133", - "address": "343 Herzl Street, Morningside, Marshall Islands, 5470", - "about": "Non labore anim velit veniam quis voluptate consectetur laborum esse irure officia voluptate sint proident. Ea esse minim eiusmod minim ullamco non reprehenderit aliquip pariatur et ad eu deserunt exercitation. Tempor reprehenderit nostrud adipisicing laboris nostrud non. Nostrud aliqua nostrud adipisicing culpa velit. Occaecat mollit laborum aliquip incididunt qui veniam nisi velit. Pariatur pariatur magna aliquip consequat incididunt ex id mollit proident elit.\r\n", - "registered": "2020-08-26T12:31:29 +04:00", - "latitude": 12.900421, - "longitude": -162.224106, - "tags": ["do", "voluptate", "amet", "elit", "sint", "et", "Lorem"], - "friends": [ - { - "id": 0, - "name": "Delaney Carver" - }, - { - "id": 1, - "name": "James Ayala" - }, - { - "id": 2, - "name": "Wiley Nicholson" - } - ], - "greeting": "Hello, Priscilla Ramirez! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dab7556c7a2318396", - "index": 917, - "guid": "26ae071a-ce71-4a98-9849-935a828a3e1c", - "isActive": false, - "balance": "$1,830.68", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Solomon Faulkner", - "gender": "male", - "company": "EWEVILLE", - "email": "solomonfaulkner@eweville.com", - "phone": "+1 (984) 446-3035", - "address": "358 Glen Street, Rossmore, Puerto Rico, 1821", - "about": "Esse ad dolor duis velit cillum mollit amet deserunt culpa consequat aliquip sunt adipisicing. Est ut nisi ea et. Cupidatat dolore culpa do labore aliquip duis minim commodo Lorem quis eu enim aute elit. Dolore minim id adipisicing consectetur. Esse ullamco aliqua voluptate incididunt cillum deserunt in sunt est. Consectetur enim amet quis anim culpa deserunt proident velit. Adipisicing nisi proident duis incididunt non enim et magna reprehenderit veniam.\r\n", - "registered": "2019-01-28T08:02:43 +05:00", - "latitude": -9.510807, - "longitude": 90.3654, - "tags": ["incididunt", "elit", "Lorem", "quis", "ea", "irure", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Hutchinson Hobbs" - }, - { - "id": 1, - "name": "Gentry Munoz" - }, - { - "id": 2, - "name": "Tabatha Workman" - } - ], - "greeting": "Hello, Solomon Faulkner! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dac1f9b88942b4aba", - "index": 918, - "guid": "e761ecd4-ba21-4c77-9f20-f1b6f7fb9cd5", - "isActive": true, - "balance": "$1,081.06", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Peterson Kent", - "gender": "male", - "company": "KANGLE", - "email": "petersonkent@kangle.com", - "phone": "+1 (815) 538-3390", - "address": "291 Canal Avenue, Como, California, 4350", - "about": "Minim dolor quis eiusmod dolore consectetur eu voluptate velit dolore. Dolor officia fugiat labore commodo amet. Labore dolor magna cillum consectetur consectetur. Ipsum qui minim amet et irure.\r\n", - "registered": "2019-10-23T10:55:11 +04:00", - "latitude": 65.960317, - "longitude": -88.42122, - "tags": ["est", "commodo", "nisi", "incididunt", "minim", "tempor", "ex"], - "friends": [ - { - "id": 0, - "name": "William Henson" - }, - { - "id": 1, - "name": "Gomez Huff" - }, - { - "id": 2, - "name": "Bush Hines" - } - ], - "greeting": "Hello, Peterson Kent! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d04ad7e4038d85a80", - "index": 919, - "guid": "995cf9c7-83e8-4268-a02c-a079833129fb", - "isActive": true, - "balance": "$3,218.45", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Tameka Molina", - "gender": "female", - "company": "MARVANE", - "email": "tamekamolina@marvane.com", - "phone": "+1 (855) 498-3760", - "address": "406 Eldert Lane, Tibbie, Tennessee, 2861", - "about": "In ullamco nulla deserunt ipsum officia culpa esse excepteur minim. Ullamco dolor magna cillum excepteur nostrud. Pariatur ad dolore commodo nostrud excepteur sit eiusmod incididunt magna magna deserunt. Ea ex est in sint dolore voluptate ullamco qui sint occaecat proident culpa officia occaecat. Fugiat ad pariatur non anim dolore consequat do excepteur minim nisi amet quis dolor reprehenderit. Eiusmod laborum aliqua magna fugiat dolor consectetur ex pariatur commodo anim irure esse.\r\n", - "registered": "2018-09-08T11:05:01 +04:00", - "latitude": -47.858059, - "longitude": 54.16488, - "tags": ["nisi", "in", "qui", "eu", "ipsum", "fugiat", "dolor"], - "friends": [ - { - "id": 0, - "name": "Scott Anthony" - }, - { - "id": 1, - "name": "Milagros Church" - }, - { - "id": 2, - "name": "Kelsey Lee" - } - ], - "greeting": "Hello, Tameka Molina! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4c5d8961ab86334a", - "index": 920, - "guid": "af8c5779-51ed-4095-a265-93c11693cd6d", - "isActive": false, - "balance": "$1,218.97", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Jennings Williamson", - "gender": "male", - "company": "IRACK", - "email": "jenningswilliamson@irack.com", - "phone": "+1 (964) 441-2706", - "address": "157 Coventry Road, Ironton, Wyoming, 1412", - "about": "Ipsum officia proident quis nisi do commodo ut mollit aliquip amet. Veniam magna laborum quis voluptate et adipisicing tempor amet Lorem laboris ad anim. Eiusmod laboris fugiat veniam anim velit tempor eu qui non ut. Laborum magna in amet eu commodo cupidatat et consequat velit officia ad enim.\r\n", - "registered": "2014-04-27T10:11:22 +04:00", - "latitude": 50.411037, - "longitude": 128.821223, - "tags": ["enim", "anim", "ullamco", "irure", "aliqua", "ullamco", "ex"], - "friends": [ - { - "id": 0, - "name": "Villarreal Brennan" - }, - { - "id": 1, - "name": "Roslyn Knapp" - }, - { - "id": 2, - "name": "Reyes Bowers" - } - ], - "greeting": "Hello, Jennings Williamson! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dadf3139c1f1651bf", - "index": 921, - "guid": "c309b8d5-5b00-4554-8618-c7b06ae3b16e", - "isActive": true, - "balance": "$2,330.28", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Macias Kirkland", - "gender": "male", - "company": "INSURETY", - "email": "maciaskirkland@insurety.com", - "phone": "+1 (824) 547-2866", - "address": "243 Morgan Avenue, Lydia, North Carolina, 1470", - "about": "Deserunt laboris aute duis aute dolor excepteur minim proident. Nulla consequat cupidatat ullamco nulla nostrud pariatur eu id. Consectetur tempor reprehenderit dolor magna aute non ut excepteur. Fugiat pariatur veniam tempor sunt anim magna incididunt ad culpa adipisicing est. Voluptate consectetur tempor pariatur voluptate ad do voluptate anim aute mollit cupidatat sint occaecat velit.\r\n", - "registered": "2016-06-30T07:20:52 +04:00", - "latitude": 50.490019, - "longitude": 144.667347, - "tags": ["reprehenderit", "ut", "dolor", "sunt", "est", "in", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Fay Mack" - }, - { - "id": 1, - "name": "Dickson Powers" - }, - { - "id": 2, - "name": "Bethany Chandler" - } - ], - "greeting": "Hello, Macias Kirkland! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d8bdd6ffa800ba45e", - "index": 922, - "guid": "d1179fc7-062e-4aca-ac59-a4ee7fc5d47d", - "isActive": true, - "balance": "$1,297.53", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Meyers Kane", - "gender": "male", - "company": "TROPOLIS", - "email": "meyerskane@tropolis.com", - "phone": "+1 (931) 586-2607", - "address": "337 Doone Court, Veyo, Michigan, 8908", - "about": "Cupidatat excepteur magna labore ad quis ut do quis do dolor proident quis reprehenderit. Reprehenderit magna officia ipsum elit ullamco. Esse duis duis sunt officia veniam. Dolor reprehenderit fugiat ipsum eiusmod excepteur eiusmod.\r\n", - "registered": "2018-11-24T09:22:28 +05:00", - "latitude": -55.967709, - "longitude": -11.438786, - "tags": ["veniam", "voluptate", "et", "reprehenderit", "laboris", "irure", "anim"], - "friends": [ - { - "id": 0, - "name": "Lilly Kramer" - }, - { - "id": 1, - "name": "York Ruiz" - }, - { - "id": 2, - "name": "Lorena Snow" - } - ], - "greeting": "Hello, Meyers Kane! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbd2e2907bdbc1492", - "index": 923, - "guid": "ca9a8056-c06a-4341-82c6-c641b7a1664f", - "isActive": true, - "balance": "$3,262.93", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Melissa Lane", - "gender": "female", - "company": "TSUNAMIA", - "email": "melissalane@tsunamia.com", - "phone": "+1 (854) 466-3064", - "address": "838 Temple Court, Waiohinu, Oklahoma, 1327", - "about": "Irure consequat enim anim eu incididunt velit amet irure ex sunt. Qui qui veniam sint minim ad sit voluptate velit. Ad id cupidatat sunt et enim ut eu aliquip velit veniam pariatur officia incididunt.\r\n", - "registered": "2016-03-25T02:36:58 +04:00", - "latitude": -20.036516, - "longitude": -45.174048, - "tags": ["velit", "irure", "quis", "labore", "ex", "culpa", "minim"], - "friends": [ - { - "id": 0, - "name": "Good Douglas" - }, - { - "id": 1, - "name": "Huffman Figueroa" - }, - { - "id": 2, - "name": "Payne Rios" - } - ], - "greeting": "Hello, Melissa Lane! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d015ecc4cb355fe01", - "index": 924, - "guid": "618c0a8b-6742-4942-94f0-87f062557e59", - "isActive": false, - "balance": "$2,260.16", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "blue", - "name": "Adeline Stuart", - "gender": "female", - "company": "STEELFAB", - "email": "adelinestuart@steelfab.com", - "phone": "+1 (984) 421-2432", - "address": "526 Doughty Street, Jeff, Vermont, 8437", - "about": "Laborum velit do sint labore est. Eu do reprehenderit in tempor reprehenderit ipsum enim labore dolore amet dolore officia commodo reprehenderit. Duis id incididunt mollit labore eiusmod ullamco amet sit fugiat reprehenderit ea. Officia excepteur sit incididunt irure magna esse adipisicing in nulla consequat proident. Consectetur ut nisi pariatur elit irure in velit id ullamco sunt ex. Esse voluptate consectetur velit id aute irure id nisi. Irure amet et ad in nostrud consequat ad laborum laboris ex adipisicing nostrud excepteur veniam.\r\n", - "registered": "2018-06-24T02:19:29 +04:00", - "latitude": 70.787288, - "longitude": 164.834221, - "tags": ["ut", "est", "aliquip", "do", "non", "mollit", "enim"], - "friends": [ - { - "id": 0, - "name": "Camacho Mercer" - }, - { - "id": 1, - "name": "Daniels Flynn" - }, - { - "id": 2, - "name": "Page Carroll" - } - ], - "greeting": "Hello, Adeline Stuart! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1c8a5e0bd517a8eb", - "index": 925, - "guid": "36fe72e0-8572-4775-b4be-fecb32913584", - "isActive": false, - "balance": "$1,853.84", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Wanda Mccarty", - "gender": "female", - "company": "EXOTECHNO", - "email": "wandamccarty@exotechno.com", - "phone": "+1 (807) 600-3296", - "address": "916 Fanchon Place, Fulford, Utah, 7518", - "about": "Reprehenderit magna minim duis elit elit fugiat deserunt irure est adipisicing cupidatat anim. Ea ex ea culpa cillum sit deserunt pariatur enim ut incididunt. Sunt aute exercitation duis occaecat. Anim duis amet officia dolore cillum esse sit voluptate magna id fugiat aliquip reprehenderit. Cillum Lorem ullamco tempor exercitation sint irure sit quis id eiusmod nisi sunt ut. Eiusmod nulla eiusmod aliquip culpa excepteur. Cillum culpa commodo sunt consectetur aute ad qui duis proident eu.\r\n", - "registered": "2015-02-21T04:48:37 +05:00", - "latitude": -65.391455, - "longitude": 155.81029, - "tags": ["duis", "laboris", "ad", "quis", "voluptate", "sint", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Julie Blair" - }, - { - "id": 1, - "name": "Kline Carson" - }, - { - "id": 2, - "name": "Gordon Torres" - } - ], - "greeting": "Hello, Wanda Mccarty! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db34323768e1dea12", - "index": 926, - "guid": "bf4eec72-b0de-42b4-8cfe-ae479f11ee70", - "isActive": false, - "balance": "$1,277.18", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Walter Alford", - "gender": "male", - "company": "VOLAX", - "email": "walteralford@volax.com", - "phone": "+1 (899) 588-3559", - "address": "675 Mill Road, Elliott, Kansas, 1641", - "about": "Sunt eiusmod ad esse labore reprehenderit ex cillum esse et veniam ullamco. Aliqua ex magna ut anim incididunt in veniam in pariatur quis officia aute. Magna incididunt ipsum pariatur aliqua. Voluptate sint anim laborum consequat dolor ut est in duis consectetur. Aliqua incididunt veniam velit sunt. Incididunt voluptate laboris pariatur incididunt minim sit exercitation ad consectetur eiusmod laborum labore.\r\n", - "registered": "2014-04-25T10:37:03 +04:00", - "latitude": 34.844001, - "longitude": 83.425241, - "tags": ["pariatur", "culpa", "aliquip", "tempor", "consectetur", "id", "do"], - "friends": [ - { - "id": 0, - "name": "Carroll Bowman" - }, - { - "id": 1, - "name": "Wilson Diaz" - }, - { - "id": 2, - "name": "Pearlie Morton" - } - ], - "greeting": "Hello, Walter Alford! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfe0ec64acff678a4", - "index": 927, - "guid": "54b9d07f-9c4a-49fe-8ce6-664aacddc946", - "isActive": false, - "balance": "$1,818.81", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Glass Sherman", - "gender": "male", - "company": "LIQUIDOC", - "email": "glasssherman@liquidoc.com", - "phone": "+1 (983) 549-2516", - "address": "751 Terrace Place, Sperryville, Delaware, 493", - "about": "Est Lorem ullamco culpa sunt. In velit officia pariatur nostrud officia minim cillum. Sint ea sint occaecat mollit cillum nulla dolore adipisicing dolore culpa nostrud. Officia ea velit dolore aute magna eiusmod sit reprehenderit amet cupidatat.\r\n", - "registered": "2014-10-03T07:27:48 +04:00", - "latitude": -51.469508, - "longitude": 91.932474, - "tags": ["irure", "deserunt", "pariatur", "labore", "adipisicing", "culpa", "commodo"], - "friends": [ - { - "id": 0, - "name": "White Bean" - }, - { - "id": 1, - "name": "Carla Galloway" - }, - { - "id": 2, - "name": "Ursula Mcneil" - } - ], - "greeting": "Hello, Glass Sherman! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dead36e9f9a6329d3", - "index": 928, - "guid": "c4e308fb-b821-43c0-857d-39611c1b8a1a", - "isActive": true, - "balance": "$2,850.39", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Graciela Yates", - "gender": "female", - "company": "ROOFORIA", - "email": "gracielayates@rooforia.com", - "phone": "+1 (919) 454-3941", - "address": "571 Hillel Place, Belleview, Guam, 7269", - "about": "Consectetur ex proident minim ut reprehenderit laborum eiusmod exercitation aute irure fugiat reprehenderit commodo. Quis ullamco ex duis aliquip. Esse aliquip ut laborum officia pariatur consequat ad fugiat non nulla mollit aliquip. Aliqua labore cupidatat qui fugiat eiusmod aliqua irure adipisicing qui eiusmod voluptate elit sunt quis. Sit aliquip minim dolor enim ea. Lorem adipisicing aute culpa aliquip proident velit est anim dolor voluptate aute excepteur quis. Elit duis id amet est sit velit irure laborum eu.\r\n", - "registered": "2019-04-15T04:48:44 +04:00", - "latitude": -34.903996, - "longitude": -146.55768, - "tags": ["excepteur", "magna", "veniam", "adipisicing", "culpa", "voluptate", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Jana Reeves" - }, - { - "id": 1, - "name": "Karen Brown" - }, - { - "id": 2, - "name": "Lopez Joyner" - } - ], - "greeting": "Hello, Graciela Yates! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d49fd94889749d1d4", - "index": 929, - "guid": "05667a1e-f0aa-488c-8938-c28bc3b47012", - "isActive": false, - "balance": "$2,688.79", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Lily Spears", - "gender": "female", - "company": "ACCUSAGE", - "email": "lilyspears@accusage.com", - "phone": "+1 (922) 442-3997", - "address": "602 Minna Street, Savage, Oregon, 1767", - "about": "Lorem ad ipsum nostrud dolor labore amet quis do velit cillum cupidatat nulla. Eu esse labore deserunt in nulla exercitation ullamco velit. Tempor est proident elit veniam in et proident ea sit nulla amet esse. Deserunt elit incididunt culpa id ullamco elit. Ad pariatur reprehenderit reprehenderit cillum aute tempor amet Lorem excepteur.\r\n", - "registered": "2015-07-06T01:44:55 +04:00", - "latitude": -34.654656, - "longitude": -122.45274, - "tags": ["ut", "enim", "mollit", "veniam", "labore", "proident", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Amber Gilliam" - }, - { - "id": 1, - "name": "Sweet Rowland" - }, - { - "id": 2, - "name": "Gibbs Solomon" - } - ], - "greeting": "Hello, Lily Spears! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2b578b92d983d8e6", - "index": 930, - "guid": "7b776639-0d82-4ed6-8730-a46bc2cc5921", - "isActive": true, - "balance": "$2,922.79", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "green", - "name": "Welch Manning", - "gender": "male", - "company": "ZILODYNE", - "email": "welchmanning@zilodyne.com", - "phone": "+1 (886) 589-2577", - "address": "385 Remsen Street, Elwood, Missouri, 330", - "about": "Occaecat pariatur commodo fugiat in ut esse quis ad eiusmod nulla. Ad pariatur aliquip dolore incididunt ea tempor. Mollit labore do esse tempor dolore veniam voluptate exercitation nisi ex. Do non qui fugiat incididunt quis aliqua magna est culpa laborum aliquip incididunt. Ullamco in amet fugiat culpa ad laborum excepteur eiusmod exercitation.\r\n", - "registered": "2014-10-28T06:12:23 +04:00", - "latitude": -57.15435, - "longitude": 95.424283, - "tags": ["fugiat", "enim", "irure", "amet", "sit", "cillum", "non"], - "friends": [ - { - "id": 0, - "name": "Eve Patterson" - }, - { - "id": 1, - "name": "Ilene Daniel" - }, - { - "id": 2, - "name": "Lindsay Vaughn" - } - ], - "greeting": "Hello, Welch Manning! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd971ec7cf8841be6", - "index": 931, - "guid": "6bbe27b5-6713-4c7e-9f14-767dcc8de28f", - "isActive": true, - "balance": "$3,050.14", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Mcbride Cardenas", - "gender": "male", - "company": "GENMY", - "email": "mcbridecardenas@genmy.com", - "phone": "+1 (941) 528-2026", - "address": "355 Agate Court, Robinson, Montana, 9978", - "about": "Incididunt consectetur Lorem id labore velit pariatur consectetur. Mollit magna incididunt nisi adipisicing non. Esse occaecat laborum qui do ex elit consectetur. Qui reprehenderit tempor sunt velit ut nostrud veniam officia ullamco culpa nostrud laborum. Do in voluptate sit velit consectetur laboris non deserunt pariatur sint. Non elit sint in consequat velit laboris dolor Lorem laboris excepteur in ex tempor. Do voluptate magna pariatur ad.\r\n", - "registered": "2016-11-14T01:13:12 +05:00", - "latitude": 32.152621, - "longitude": 119.265007, - "tags": ["minim", "excepteur", "officia", "irure", "esse", "consectetur", "veniam"], - "friends": [ - { - "id": 0, - "name": "Owen Wells" - }, - { - "id": 1, - "name": "Vivian Buckner" - }, - { - "id": 2, - "name": "Daphne Scott" - } - ], - "greeting": "Hello, Mcbride Cardenas! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df7b9ff11a8f56b5e", - "index": 932, - "guid": "73932491-b36d-4f1a-8353-64f778ff5ae6", - "isActive": true, - "balance": "$1,224.82", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Mueller Hansen", - "gender": "male", - "company": "ENAUT", - "email": "muellerhansen@enaut.com", - "phone": "+1 (992) 440-2952", - "address": "829 Cypress Court, Snyderville, Alaska, 3248", - "about": "Ad id aliqua dolore magna exercitation aliqua enim quis magna minim duis. Pariatur exercitation nostrud incididunt in. Eiusmod ullamco do laboris est veniam nostrud eu minim dolor id commodo irure. In Lorem aliqua nulla in culpa consectetur elit irure cillum consectetur irure occaecat sint mollit. Consequat pariatur dolore officia et.\r\n", - "registered": "2019-09-04T11:22:37 +04:00", - "latitude": -1.57663, - "longitude": -175.427215, - "tags": ["fugiat", "irure", "laborum", "exercitation", "culpa", "enim", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Ida Osborn" - }, - { - "id": 1, - "name": "Dawson Barr" - }, - { - "id": 2, - "name": "Janet Mcclure" - } - ], - "greeting": "Hello, Mueller Hansen! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d2e700aeb2039e523", - "index": 933, - "guid": "62593da1-76c5-4d55-8fbb-c54716adcd45", - "isActive": false, - "balance": "$1,256.69", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "brown", - "name": "Giles Bolton", - "gender": "male", - "company": "XEREX", - "email": "gilesbolton@xerex.com", - "phone": "+1 (978) 466-2647", - "address": "512 Hawthorne Street, Herlong, Kentucky, 8015", - "about": "Consectetur dolor qui ut consequat. Fugiat mollit consectetur sit culpa exercitation laborum nostrud ipsum nulla aliqua ex laborum. Velit excepteur anim ullamco eiusmod ea. Officia dolore eiusmod sunt officia ad anim amet cillum Lorem duis magna.\r\n", - "registered": "2017-09-26T04:40:21 +04:00", - "latitude": 52.393947, - "longitude": 128.62448, - "tags": ["nulla", "quis", "ullamco", "in", "culpa", "incididunt", "velit"], - "friends": [ - { - "id": 0, - "name": "Angelia Roy" - }, - { - "id": 1, - "name": "Lolita Drake" - }, - { - "id": 2, - "name": "Jeannine Dean" - } - ], - "greeting": "Hello, Giles Bolton! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc81b629efe1d3781", - "index": 934, - "guid": "31975e25-b3f1-436b-a181-081fc45daed1", - "isActive": false, - "balance": "$2,469.94", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Annabelle Nichols", - "gender": "female", - "company": "ECSTASIA", - "email": "annabellenichols@ecstasia.com", - "phone": "+1 (837) 544-3142", - "address": "374 Hull Street, Convent, Mississippi, 7705", - "about": "Non ea cupidatat cillum laboris consectetur sit id dolore. Exercitation exercitation ad aute voluptate. Dolore nisi consequat in ullamco veniam velit. Incididunt Lorem irure mollit incididunt consectetur nisi cupidatat nulla ea cillum officia ullamco eiusmod. Ut qui sunt culpa et sit laborum enim sunt.\r\n", - "registered": "2017-04-15T02:21:50 +04:00", - "latitude": -27.779301, - "longitude": -136.553827, - "tags": ["veniam", "ullamco", "consectetur", "ad", "ullamco", "eiusmod", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Lilia Flowers" - }, - { - "id": 1, - "name": "Summers Wallace" - }, - { - "id": 2, - "name": "Barbara Gregory" - } - ], - "greeting": "Hello, Annabelle Nichols! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d7ad708f4bbd79ccc", - "index": 935, - "guid": "65ba37bc-c37d-4c89-8ce9-65b447b1bc57", - "isActive": false, - "balance": "$1,945.24", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "blue", - "name": "Mays Ellison", - "gender": "male", - "company": "ENORMO", - "email": "maysellison@enormo.com", - "phone": "+1 (990) 597-2332", - "address": "432 Girard Street, Hailesboro, North Dakota, 5356", - "about": "Nulla ut voluptate do occaecat excepteur nostrud. Ad sint Lorem mollit incididunt dolore minim. Dolore ut nulla do ad laborum aliquip nostrud aute id. Incididunt eu irure eu irure mollit. Irure nisi quis consequat sunt officia duis excepteur velit. Tempor eiusmod amet fugiat sint et laborum ut quis dolore occaecat cillum.\r\n", - "registered": "2014-07-30T03:03:43 +04:00", - "latitude": -83.45996, - "longitude": -0.432313, - "tags": ["eu", "ut", "magna", "ex", "est", "eiusmod", "magna"], - "friends": [ - { - "id": 0, - "name": "Jacquelyn Walters" - }, - { - "id": 1, - "name": "Marylou Watts" - }, - { - "id": 2, - "name": "Lorene Crawford" - } - ], - "greeting": "Hello, Mays Ellison! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d936860cf9d3e8713", - "index": 936, - "guid": "7101b9ee-64b8-44f3-aef4-aa34947af71d", - "isActive": false, - "balance": "$1,189.97", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Bridges Hampton", - "gender": "male", - "company": "BISBA", - "email": "bridgeshampton@bisba.com", - "phone": "+1 (816) 490-3918", - "address": "533 Stillwell Avenue, Ahwahnee, Federated States Of Micronesia, 6090", - "about": "Enim sit do incididunt eu consectetur ut sit consequat et commodo enim aliqua. Cupidatat aliquip et qui officia mollit ex amet duis eiusmod consectetur voluptate irure occaecat nisi. Excepteur adipisicing deserunt et esse sint reprehenderit cupidatat laboris velit. Magna ea adipisicing sit sit duis deserunt non occaecat duis reprehenderit. Ullamco nisi exercitation irure tempor sunt proident ad quis fugiat id ea amet.\r\n", - "registered": "2014-01-12T03:58:59 +05:00", - "latitude": 21.401422, - "longitude": 78.588473, - "tags": ["laboris", "reprehenderit", "consequat", "pariatur", "proident", "aute", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Schwartz Duke" - }, - { - "id": 1, - "name": "Tamra Boyer" - }, - { - "id": 2, - "name": "Clarice Le" - } - ], - "greeting": "Hello, Bridges Hampton! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25ddafe718fe76817ae", - "index": 937, - "guid": "d46453ba-9b09-4a01-9b23-06a741f994f5", - "isActive": false, - "balance": "$3,900.63", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Huber Best", - "gender": "male", - "company": "SLUMBERIA", - "email": "huberbest@slumberia.com", - "phone": "+1 (865) 436-2040", - "address": "987 Holt Court, Calpine, Maryland, 3683", - "about": "Adipisicing enim nostrud eiusmod in non. Tempor anim tempor adipisicing aliquip enim do est ut eiusmod. Elit amet est eiusmod dolor reprehenderit sunt in veniam quis velit laborum est ad sit. In proident aliquip aute et minim enim eu aliqua est esse non. Culpa cillum culpa laborum consequat nulla ea quis amet elit mollit voluptate ea reprehenderit voluptate. Nostrud non duis id excepteur amet adipisicing cillum esse incididunt cillum Lorem commodo dolor. Deserunt et enim fugiat est irure in dolor voluptate officia tempor nulla eiusmod in.\r\n", - "registered": "2015-12-10T10:40:32 +05:00", - "latitude": -11.198894, - "longitude": -110.071763, - "tags": ["duis", "minim", "ad", "exercitation", "culpa", "deserunt", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Odonnell Sanchez" - }, - { - "id": 1, - "name": "Barlow Ratliff" - }, - { - "id": 2, - "name": "Nanette Jimenez" - } - ], - "greeting": "Hello, Huber Best! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dbfcd6a17453abb7a", - "index": 938, - "guid": "40c28664-3694-4ff9-bcea-149ec52c0792", - "isActive": false, - "balance": "$2,128.62", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Petty Hurley", - "gender": "male", - "company": "FROSNEX", - "email": "pettyhurley@frosnex.com", - "phone": "+1 (987) 487-2000", - "address": "625 Eaton Court, Twilight, Virgin Islands, 4257", - "about": "Aliqua occaecat mollit veniam enim fugiat ex et irure nostrud proident elit. Eiusmod voluptate ut ex excepteur sint et occaecat. Labore sit magna sunt ullamco cupidatat laborum veniam minim pariatur ullamco. Nostrud deserunt consequat ex consequat irure cillum magna laborum id nostrud non. Esse irure ad consectetur anim dolore eiusmod. Incididunt duis pariatur deserunt laborum reprehenderit. Qui velit eiusmod officia sit enim pariatur.\r\n", - "registered": "2016-08-17T08:12:54 +04:00", - "latitude": 44.958503, - "longitude": -10.888454, - "tags": ["excepteur", "culpa", "fugiat", "do", "aliqua", "reprehenderit", "ea"], - "friends": [ - { - "id": 0, - "name": "Janis Bryan" - }, - { - "id": 1, - "name": "Salas Colon" - }, - { - "id": 2, - "name": "Richardson Sharp" - } - ], - "greeting": "Hello, Petty Hurley! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d52446a0239e97b92", - "index": 939, - "guid": "78b70f19-3a7c-4f6f-99e2-c38cae450434", - "isActive": false, - "balance": "$3,061.38", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Duke Navarro", - "gender": "male", - "company": "OLYMPIX", - "email": "dukenavarro@olympix.com", - "phone": "+1 (826) 454-3507", - "address": "483 Richmond Street, Wawona, Pennsylvania, 5502", - "about": "Tempor fugiat excepteur non laboris proident veniam ut do sit officia laboris eu. Lorem nisi aliquip officia deserunt proident sint sint. Tempor aliqua duis esse ex est duis cillum ipsum aliquip incididunt qui.\r\n", - "registered": "2019-01-13T03:00:24 +05:00", - "latitude": 5.475259, - "longitude": -38.513126, - "tags": ["cupidatat", "enim", "irure", "aliqua", "et", "sunt", "ut"], - "friends": [ - { - "id": 0, - "name": "Rich Russell" - }, - { - "id": 1, - "name": "Whitaker Fields" - }, - { - "id": 2, - "name": "Angeline Hayes" - } - ], - "greeting": "Hello, Duke Navarro! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d94c7a7441f32e3d9", - "index": 940, - "guid": "3f21c8d9-f862-4708-b30e-b891c54e9e97", - "isActive": true, - "balance": "$1,178.83", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Brittney Copeland", - "gender": "female", - "company": "HOPELI", - "email": "brittneycopeland@hopeli.com", - "phone": "+1 (888) 488-3302", - "address": "235 Schenck Place, Lithium, Washington, 5628", - "about": "Voluptate incididunt ea dolor est consequat exercitation elit pariatur fugiat commodo nulla in laboris. Fugiat ex magna excepteur qui enim excepteur. Aliqua ullamco Lorem mollit non do elit incididunt Lorem consequat. Dolor dolor velit eiusmod veniam tempor. Aute magna mollit excepteur sint consequat deserunt fugiat mollit est aliquip aliquip. Consectetur culpa elit officia culpa veniam. Qui adipisicing occaecat amet laborum esse elit commodo ullamco velit cillum veniam.\r\n", - "registered": "2018-01-04T12:47:59 +05:00", - "latitude": -68.34877, - "longitude": -166.009146, - "tags": ["velit", "do", "consequat", "ea", "eu", "magna", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Hogan Pittman" - }, - { - "id": 1, - "name": "Willie Dawson" - }, - { - "id": 2, - "name": "Elaine Perkins" - } - ], - "greeting": "Hello, Brittney Copeland! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d41c5c449d2fc6696", - "index": 941, - "guid": "7737f645-b316-4640-b6f6-d22b3d2fefce", - "isActive": false, - "balance": "$1,863.31", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Blackburn Cervantes", - "gender": "male", - "company": "EXOSTREAM", - "email": "blackburncervantes@exostream.com", - "phone": "+1 (863) 529-2625", - "address": "713 Lott Street, Farmers, Illinois, 1435", - "about": "Esse id ex Lorem nisi laborum ipsum aute sunt voluptate esse nisi. Eu et eiusmod cupidatat tempor ex culpa duis amet sit esse dolor. Laborum et aliquip minim quis exercitation nulla eiusmod ea. Cillum et elit Lorem cillum nostrud eu esse sunt proident voluptate.\r\n", - "registered": "2017-02-17T11:39:13 +05:00", - "latitude": 4.77738, - "longitude": -78.829235, - "tags": ["mollit", "exercitation", "veniam", "in", "pariatur", "veniam", "proident"], - "friends": [ - { - "id": 0, - "name": "Glenda Rosario" - }, - { - "id": 1, - "name": "Vincent Baird" - }, - { - "id": 2, - "name": "Chan Hunt" - } - ], - "greeting": "Hello, Blackburn Cervantes! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3d08e1f64f520b76", - "index": 942, - "guid": "882f2e41-ff8e-463d-a44f-60816a76b45b", - "isActive": false, - "balance": "$2,796.11", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Celia Chaney", - "gender": "female", - "company": "MEDCOM", - "email": "celiachaney@medcom.com", - "phone": "+1 (896) 479-3519", - "address": "663 Madoc Avenue, Waverly, New Hampshire, 7583", - "about": "Quis duis laboris commodo elit esse aliquip. Nostrud mollit ut ea deserunt in consectetur elit consectetur magna ullamco fugiat aliquip. Veniam aliqua excepteur nulla ipsum. Sint nisi irure excepteur reprehenderit pariatur pariatur quis excepteur qui. Dolor consequat reprehenderit ullamco commodo velit. Reprehenderit amet nulla mollit sint amet adipisicing occaecat. Et dolore elit quis aliquip culpa Lorem tempor sit ut tempor do.\r\n", - "registered": "2015-06-22T01:42:44 +04:00", - "latitude": -58.393297, - "longitude": -73.851431, - "tags": ["magna", "minim", "labore", "adipisicing", "est", "elit", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Goff Mullins" - }, - { - "id": 1, - "name": "Bernice Roberts" - }, - { - "id": 2, - "name": "Bessie Schwartz" - } - ], - "greeting": "Hello, Celia Chaney! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d88b52f5778ae7f1a", - "index": 943, - "guid": "3c9ff882-fc0a-49c1-8562-a69d949e5caf", - "isActive": true, - "balance": "$1,830.32", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "brown", - "name": "Rebekah Swanson", - "gender": "female", - "company": "SENMEI", - "email": "rebekahswanson@senmei.com", - "phone": "+1 (812) 464-3459", - "address": "568 Plaza Street, Dante, Colorado, 7094", - "about": "Nostrud sit proident minim ea proident sunt elit id velit. Cupidatat dolor ullamco elit ea consequat officia enim adipisicing consequat deserunt. Labore aliquip tempor non labore velit tempor incididunt veniam labore excepteur non. Sunt eu culpa commodo et minim. Minim cupidatat irure non eu quis culpa veniam esse. Labore labore nulla ullamco sint exercitation eiusmod consequat in occaecat ullamco sunt qui Lorem deserunt.\r\n", - "registered": "2014-03-06T05:29:44 +05:00", - "latitude": 19.179311, - "longitude": 131.7687, - "tags": ["anim", "excepteur", "esse", "irure", "excepteur", "pariatur", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Pearson Gomez" - }, - { - "id": 1, - "name": "Chandra Guzman" - }, - { - "id": 2, - "name": "Rita Hancock" - } - ], - "greeting": "Hello, Rebekah Swanson! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0efe94f4c606fde8", - "index": 944, - "guid": "13c638c8-ebc2-4ec8-b676-31b66694941b", - "isActive": false, - "balance": "$1,519.95", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "brown", - "name": "Hernandez Morse", - "gender": "male", - "company": "CONFERIA", - "email": "hernandezmorse@conferia.com", - "phone": "+1 (887) 561-3272", - "address": "125 Frank Court, Slovan, Maine, 7587", - "about": "Proident id et do est consectetur excepteur ad est labore ad dolor est. Ullamco nostrud mollit consectetur aute elit ea ullamco id labore velit incididunt reprehenderit nulla. Aute magna consequat adipisicing eu laborum sunt magna est laborum aliqua dolore. Dolor amet et exercitation ipsum nostrud.\r\n", - "registered": "2018-03-17T06:14:07 +04:00", - "latitude": -5.035763, - "longitude": 135.470362, - "tags": [ - "ipsum", - "exercitation", - "fugiat", - "ullamco", - "adipisicing", - "aliquip", - "reprehenderit" - ], - "friends": [ - { - "id": 0, - "name": "Lauri Hicks" - }, - { - "id": 1, - "name": "Heidi Mcguire" - }, - { - "id": 2, - "name": "Blanchard Olsen" - } - ], - "greeting": "Hello, Hernandez Morse! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d289b5cc228cbb002", - "index": 945, - "guid": "4b7eba19-f245-4965-9a05-66c69200c444", - "isActive": false, - "balance": "$2,379.48", - "picture": "http://placehold.it/32x32", - "age": 32, - "eyeColor": "green", - "name": "Hazel Puckett", - "gender": "female", - "company": "DAYCORE", - "email": "hazelpuckett@daycore.com", - "phone": "+1 (904) 467-2473", - "address": "763 Harrison Place, Blairstown, South Carolina, 993", - "about": "Esse esse sit commodo elit non ullamco et laborum. Adipisicing ut sit quis cillum officia sit proident proident veniam consectetur. Excepteur quis cupidatat laboris magna fugiat. Ipsum ea cupidatat culpa est adipisicing quis culpa cillum qui id aliqua ea. Laboris aute ad nulla nostrud anim quis exercitation. Eiusmod nulla laborum nostrud magna enim dolor. Duis cillum excepteur dolore aliqua consectetur.\r\n", - "registered": "2018-04-04T10:51:14 +04:00", - "latitude": 2.576358, - "longitude": 94.322986, - "tags": ["do", "esse", "sunt", "occaecat", "tempor", "reprehenderit", "nisi"], - "friends": [ - { - "id": 0, - "name": "Rodriguez York" - }, - { - "id": 1, - "name": "Talley Hart" - }, - { - "id": 2, - "name": "Joy Reese" - } - ], - "greeting": "Hello, Hazel Puckett! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d466e0d0e39c55728", - "index": 946, - "guid": "346aa857-d8ba-455a-9ea4-293da1016d0e", - "isActive": true, - "balance": "$1,667.02", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Riley Mooney", - "gender": "male", - "company": "CEMENTION", - "email": "rileymooney@cemention.com", - "phone": "+1 (949) 499-3007", - "address": "740 Cove Lane, Kapowsin, Connecticut, 5535", - "about": "Veniam ad voluptate tempor sint dolore est veniam dolor pariatur occaecat. Velit proident minim non nostrud esse fugiat incididunt duis magna esse. Enim non adipisicing pariatur aliquip ex non non cupidatat. Eu elit sint consectetur anim irure occaecat amet. Cupidatat sunt deserunt anim irure pariatur mollit ea pariatur. Minim occaecat ea non duis deserunt. Reprehenderit culpa irure id adipisicing commodo pariatur duis magna veniam commodo.\r\n", - "registered": "2017-05-28T10:32:09 +04:00", - "latitude": 62.921394, - "longitude": 96.287468, - "tags": ["veniam", "esse", "dolor", "eu", "in", "proident", "duis"], - "friends": [ - { - "id": 0, - "name": "Jackson Odom" - }, - { - "id": 1, - "name": "Hurst Kirby" - }, - { - "id": 2, - "name": "Mercer Fowler" - } - ], - "greeting": "Hello, Riley Mooney! You have 6 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25db26e5b0ac6278e9c", - "index": 947, - "guid": "94decf86-3e91-4e62-b583-cfddbad9f527", - "isActive": false, - "balance": "$2,152.09", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Wilda Little", - "gender": "female", - "company": "ENQUILITY", - "email": "wildalittle@enquility.com", - "phone": "+1 (893) 551-3326", - "address": "134 Butler Place, Umapine, Virginia, 5714", - "about": "Ullamco laboris exercitation voluptate reprehenderit nisi ea reprehenderit excepteur. Lorem consectetur aute velit id aute. Elit aliqua aliqua ex do dolor aute sint et tempor. Irure consequat aliqua minim nisi cupidatat id veniam non incididunt dolore anim amet labore eiusmod. Laborum esse eu velit do adipisicing laboris consequat ea.\r\n", - "registered": "2018-02-16T10:44:54 +05:00", - "latitude": 10.288811, - "longitude": -152.447063, - "tags": ["cupidatat", "nisi", "labore", "laborum", "anim", "magna", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Tammy Tanner" - }, - { - "id": 1, - "name": "Cooke Kline" - }, - { - "id": 2, - "name": "Ashlee Baldwin" - } - ], - "greeting": "Hello, Wilda Little! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df2886f6b9496d9e9", - "index": 948, - "guid": "583fe261-64e7-4183-8470-cc12cb41079a", - "isActive": true, - "balance": "$3,986.40", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Penelope Morgan", - "gender": "female", - "company": "QUILK", - "email": "penelopemorgan@quilk.com", - "phone": "+1 (997) 494-3966", - "address": "932 Bristol Street, Finzel, Georgia, 7643", - "about": "Aliqua sint sint nostrud est ad dolor. Eu voluptate nulla quis anim aute. Adipisicing dolore minim velit cillum ex sit in consectetur minim pariatur do. Aute deserunt voluptate labore id. Exercitation nostrud cillum id ad enim est sit quis ea est enim. Amet pariatur incididunt ex deserunt et esse eiusmod amet pariatur eiusmod laboris irure.\r\n", - "registered": "2018-11-06T08:53:53 +05:00", - "latitude": 61.808844, - "longitude": 6.180449, - "tags": ["consequat", "velit", "est", "ullamco", "qui", "quis", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Agnes Mckay" - }, - { - "id": 1, - "name": "Nicole Craig" - }, - { - "id": 2, - "name": "Reba Carey" - } - ], - "greeting": "Hello, Penelope Morgan! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d0bb6e21c72aec006", - "index": 949, - "guid": "bce95b1f-2266-45f3-979e-a88954091547", - "isActive": true, - "balance": "$3,166.49", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Roberson Mendez", - "gender": "male", - "company": "HAWKSTER", - "email": "robersonmendez@hawkster.com", - "phone": "+1 (803) 454-3989", - "address": "206 Oriental Court, Dawn, New Jersey, 801", - "about": "Nisi irure elit in consequat cillum. Laborum sint ut duis dolor. Nulla magna dolor deserunt magna pariatur. Eiusmod pariatur laborum ad deserunt sint duis mollit. Sint aute deserunt consectetur nisi anim dolor cupidatat cillum non cillum mollit aliqua ullamco tempor.\r\n", - "registered": "2018-03-09T07:04:07 +05:00", - "latitude": 87.710676, - "longitude": 85.744337, - "tags": ["aliqua", "fugiat", "excepteur", "ex", "duis", "ipsum", "excepteur"], - "friends": [ - { - "id": 0, - "name": "Gilda Dillon" - }, - { - "id": 1, - "name": "Dorothea Caldwell" - }, - { - "id": 2, - "name": "Sosa Mathews" - } - ], - "greeting": "Hello, Roberson Mendez! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1307a9dc1262ed26", - "index": 950, - "guid": "237261a0-e2d6-4661-b277-aa1301585545", - "isActive": false, - "balance": "$3,420.87", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "blue", - "name": "Tammie Solis", - "gender": "female", - "company": "QUADEEBO", - "email": "tammiesolis@quadeebo.com", - "phone": "+1 (822) 549-3693", - "address": "773 Beaumont Street, Layhill, Minnesota, 9792", - "about": "Consectetur esse fugiat cupidatat adipisicing amet consequat adipisicing qui nisi. Nulla tempor ad adipisicing ea elit proident. Culpa quis pariatur ad ex anim excepteur aute nulla non ullamco nisi mollit. Laboris dolore cupidatat eu nostrud et quis ut magna.\r\n", - "registered": "2017-08-02T12:46:59 +04:00", - "latitude": -60.934533, - "longitude": 112.288317, - "tags": ["ipsum", "qui", "sit", "eiusmod", "et", "ipsum", "occaecat"], - "friends": [ - { - "id": 0, - "name": "Sylvia Lara" - }, - { - "id": 1, - "name": "Mills Raymond" - }, - { - "id": 2, - "name": "Gonzalez Chavez" - } - ], - "greeting": "Hello, Tammie Solis! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dad594f4350a3ed73", - "index": 951, - "guid": "ce4f5337-809e-4809-bb88-dd6fa2cd58c1", - "isActive": true, - "balance": "$2,131.75", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "green", - "name": "Chang Rocha", - "gender": "male", - "company": "PLAYCE", - "email": "changrocha@playce.com", - "phone": "+1 (968) 592-3493", - "address": "472 Livonia Avenue, Corinne, Texas, 2238", - "about": "Sint quis fugiat officia in proident consectetur quis aliqua pariatur est. Quis ullamco adipisicing non non ad cillum fugiat exercitation proident magna consectetur fugiat. Ut ea incididunt velit ex. Ad nostrud sint qui sunt est mollit sint. Enim nulla aliquip ad laborum. Sint cupidatat cupidatat consectetur sit pariatur ullamco voluptate cillum enim adipisicing mollit laboris eu esse. Id ut ut laboris elit sit Lorem dolor minim magna.\r\n", - "registered": "2019-08-20T05:29:43 +04:00", - "latitude": 9.656896, - "longitude": -179.5047, - "tags": ["ipsum", "ut", "exercitation", "labore", "pariatur", "aliquip", "commodo"], - "friends": [ - { - "id": 0, - "name": "Eleanor Larsen" - }, - { - "id": 1, - "name": "Suzette Beard" - }, - { - "id": 2, - "name": "Buchanan Benjamin" - } - ], - "greeting": "Hello, Chang Rocha! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5ee857a54ad0d696", - "index": 952, - "guid": "f28814d1-b259-4a6a-b473-2e3d9217fd00", - "isActive": false, - "balance": "$2,242.07", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Bright Oliver", - "gender": "male", - "company": "SCHOOLIO", - "email": "brightoliver@schoolio.com", - "phone": "+1 (907) 431-3516", - "address": "918 Turnbull Avenue, Albrightsville, Alabama, 3267", - "about": "Labore veniam sit consectetur dolore commodo sint. Exercitation anim veniam et et incididunt adipisicing aute id. Irure excepteur non aute fugiat eiusmod pariatur laboris eu. Tempor laborum do anim veniam sunt reprehenderit laboris. Dolore esse cillum sit fugiat sunt ipsum ex veniam proident id. Sint minim culpa ullamco reprehenderit pariatur eu esse ea est aute eiusmod ad.\r\n", - "registered": "2019-12-15T08:54:28 +05:00", - "latitude": 36.574888, - "longitude": 91.831266, - "tags": ["aute", "ea", "labore", "magna", "ullamco", "sint", "nisi"], - "friends": [ - { - "id": 0, - "name": "Susanne Fuller" - }, - { - "id": 1, - "name": "Gallagher Hood" - }, - { - "id": 2, - "name": "Bryant Ferrell" - } - ], - "greeting": "Hello, Bright Oliver! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d26a6d7b1b68dcfb9", - "index": 953, - "guid": "1123c5ee-32bc-4fd9-b93c-503c97068584", - "isActive": false, - "balance": "$3,975.55", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Celeste Rasmussen", - "gender": "female", - "company": "WAZZU", - "email": "celesterasmussen@wazzu.com", - "phone": "+1 (993) 464-3228", - "address": "282 Gerry Street, Chumuckla, Rhode Island, 5182", - "about": "Aute duis nulla non culpa deserunt aliqua proident voluptate. Sit consequat culpa velit reprehenderit ex duis commodo magna et ex adipisicing. Qui et tempor nulla consequat exercitation fugiat excepteur. Aliquip dolor ea laborum id in minim qui Lorem officia.\r\n", - "registered": "2020-01-06T04:15:43 +05:00", - "latitude": -39.539058, - "longitude": 34.226799, - "tags": ["dolor", "qui", "laborum", "labore", "voluptate", "consequat", "eiusmod"], - "friends": [ - { - "id": 0, - "name": "Henderson Wolfe" - }, - { - "id": 1, - "name": "Tonya Goff" - }, - { - "id": 2, - "name": "Jerri Powell" - } - ], - "greeting": "Hello, Celeste Rasmussen! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbfb4f03b989e90ff", - "index": 954, - "guid": "ee356800-36bc-41a3-a4e2-fb7d4e985002", - "isActive": false, - "balance": "$2,272.17", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "green", - "name": "Mendez Morrow", - "gender": "male", - "company": "ZINCA", - "email": "mendezmorrow@zinca.com", - "phone": "+1 (935) 589-2575", - "address": "100 Macdougal Street, Flintville, Florida, 4253", - "about": "Commodo sunt pariatur non deserunt cillum pariatur consectetur Lorem ad magna consequat incididunt mollit mollit. Cupidatat ut reprehenderit ex officia ipsum. Tempor aliqua commodo do pariatur commodo labore reprehenderit nulla proident. Nulla amet quis ipsum do magna irure voluptate pariatur quis enim tempor enim proident adipisicing.\r\n", - "registered": "2020-03-09T04:05:35 +04:00", - "latitude": 85.380852, - "longitude": -175.188243, - "tags": ["id", "est", "aliquip", "duis", "exercitation", "et", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Dodson Wilcox" - }, - { - "id": 1, - "name": "Harris Simpson" - }, - { - "id": 2, - "name": "Minerva Oneil" - } - ], - "greeting": "Hello, Mendez Morrow! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d7207b00f0893f318", - "index": 955, - "guid": "5c4761b2-5c0c-47f6-b443-6c9b0d1b4cb7", - "isActive": true, - "balance": "$2,768.29", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Lynnette English", - "gender": "female", - "company": "NETUR", - "email": "lynnetteenglish@netur.com", - "phone": "+1 (838) 557-3063", - "address": "623 Grove Street, Longbranch, Indiana, 5094", - "about": "Et velit sit ad nisi reprehenderit nisi nisi pariatur esse anim sunt. Fugiat dolor mollit anim excepteur magna cupidatat velit ea. Ad voluptate proident sunt sunt pariatur nisi cupidatat labore occaecat do velit. Esse esse voluptate duis ex anim excepteur deserunt anim magna nostrud ex et culpa amet. Dolore deserunt sit reprehenderit in esse.\r\n", - "registered": "2016-02-29T04:55:35 +05:00", - "latitude": -87.543011, - "longitude": -116.157011, - "tags": ["ut", "esse", "enim", "aute", "excepteur", "aliqua", "esse"], - "friends": [ - { - "id": 0, - "name": "Maxine Vazquez" - }, - { - "id": 1, - "name": "Waters Walter" - }, - { - "id": 2, - "name": "Doreen Carter" - } - ], - "greeting": "Hello, Lynnette English! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d223f6556056210c0", - "index": 956, - "guid": "221b304a-e44e-4de3-93fd-49133a804379", - "isActive": false, - "balance": "$2,017.38", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "green", - "name": "Short Stephenson", - "gender": "male", - "company": "ORONOKO", - "email": "shortstephenson@oronoko.com", - "phone": "+1 (957) 415-2186", - "address": "630 Anna Court, Unionville, Northern Mariana Islands, 872", - "about": "Non eu incididunt et ex sunt nulla Lorem occaecat exercitation non ea. Ex occaecat ex irure adipisicing nisi ea. Commodo quis ut cillum adipisicing occaecat consectetur Lorem deserunt labore.\r\n", - "registered": "2017-10-19T01:11:05 +04:00", - "latitude": -39.026887, - "longitude": 116.278698, - "tags": ["consequat", "ut", "ea", "amet", "aliqua", "esse", "ex"], - "friends": [ - { - "id": 0, - "name": "Cherie Santana" - }, - { - "id": 1, - "name": "Tamara Moore" - }, - { - "id": 2, - "name": "Erna Frye" - } - ], - "greeting": "Hello, Short Stephenson! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d5472331bbd6ae298", - "index": 957, - "guid": "9d76ac14-5456-4ac8-b02f-7112e8208b3d", - "isActive": true, - "balance": "$1,413.91", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "blue", - "name": "Connie Hughes", - "gender": "female", - "company": "KYAGORO", - "email": "conniehughes@kyagoro.com", - "phone": "+1 (842) 577-2888", - "address": "191 Hart Street, Dale, Idaho, 8550", - "about": "Mollit Lorem nostrud fugiat consequat qui id est duis irure consectetur. Ullamco sint voluptate velit ex ut ipsum. Amet sint sint ea voluptate dolore nostrud nisi ullamco deserunt quis dolore aliqua irure officia. Aute occaecat sit reprehenderit veniam duis non enim non aliqua consequat do fugiat nostrud. Laboris voluptate culpa consequat dolore exercitation deserunt proident ullamco. Aute occaecat nulla irure aliqua.\r\n", - "registered": "2020-06-05T07:02:41 +04:00", - "latitude": 10.885379, - "longitude": 119.425064, - "tags": ["eu", "irure", "est", "laborum", "reprehenderit", "reprehenderit", "sit"], - "friends": [ - { - "id": 0, - "name": "Benita Valenzuela" - }, - { - "id": 1, - "name": "Atkins Glenn" - }, - { - "id": 2, - "name": "Simon Zamora" - } - ], - "greeting": "Hello, Connie Hughes! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d32d83fe19a4e1063", - "index": 958, - "guid": "5c3848b8-ece4-448e-83ff-dbadca49d37f", - "isActive": true, - "balance": "$2,925.93", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Parsons Mckee", - "gender": "male", - "company": "GEEKNET", - "email": "parsonsmckee@geeknet.com", - "phone": "+1 (989) 496-2078", - "address": "202 Opal Court, Tecolotito, District Of Columbia, 9650", - "about": "Ea exercitation aliqua quis ullamco reprehenderit sunt do occaecat cillum. Non exercitation cillum anim aute sunt reprehenderit aliquip. Anim ea officia nulla veniam esse id dolore nostrud commodo qui et ut dolore ut.\r\n", - "registered": "2019-01-11T05:28:16 +05:00", - "latitude": -25.122226, - "longitude": -8.034272, - "tags": ["est", "minim", "minim", "laboris", "dolore", "deserunt", "reprehenderit"], - "friends": [ - { - "id": 0, - "name": "Tiffany Maynard" - }, - { - "id": 1, - "name": "Mclaughlin Leon" - }, - { - "id": 2, - "name": "Vance Porter" - } - ], - "greeting": "Hello, Parsons Mckee! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df8c491f59b5d5552", - "index": 959, - "guid": "27793014-1e5b-43e8-9d37-5efc80cd4437", - "isActive": false, - "balance": "$3,392.44", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "blue", - "name": "Caitlin Bonner", - "gender": "female", - "company": "SOPRANO", - "email": "caitlinbonner@soprano.com", - "phone": "+1 (818) 495-3608", - "address": "701 Revere Place, Sims, New Mexico, 3999", - "about": "Ullamco non nulla in in nostrud commodo aliqua officia nisi excepteur enim. Sunt id ullamco nulla veniam velit Lorem non consectetur. Elit amet consectetur anim deserunt laboris nisi velit ullamco. Nisi incididunt dolor sit in duis do. Cupidatat nostrud aute elit do ut exercitation excepteur Lorem labore.\r\n", - "registered": "2015-11-02T02:10:55 +05:00", - "latitude": 64.48652, - "longitude": -34.870049, - "tags": ["nulla", "est", "elit", "in", "labore", "nostrud", "velit"], - "friends": [ - { - "id": 0, - "name": "Ayala Cote" - }, - { - "id": 1, - "name": "Gilmore Tate" - }, - { - "id": 2, - "name": "Brigitte Carpenter" - } - ], - "greeting": "Hello, Caitlin Bonner! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d9d1b8e31600d737c", - "index": 960, - "guid": "76763695-93f4-4875-8a61-0b0eabbdc60e", - "isActive": true, - "balance": "$1,603.41", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "green", - "name": "Boyle Sexton", - "gender": "male", - "company": "MAGNINA", - "email": "boylesexton@magnina.com", - "phone": "+1 (817) 592-2277", - "address": "716 Bank Street, Evergreen, South Dakota, 9659", - "about": "Reprehenderit esse esse amet ea. Excepteur occaecat esse sint amet incididunt do officia quis exercitation exercitation. Culpa occaecat mollit non labore consectetur esse. Voluptate magna officia adipisicing ipsum eu ad tempor quis labore nisi aute. Lorem sint aliqua anim irure incididunt minim pariatur officia nostrud ex duis aliquip ad. Tempor irure dolor cupidatat minim cupidatat in.\r\n", - "registered": "2015-11-10T05:30:26 +05:00", - "latitude": 54.320398, - "longitude": -103.885701, - "tags": ["minim", "veniam", "labore", "anim", "et", "ea", "est"], - "friends": [ - { - "id": 0, - "name": "Joanna Mason" - }, - { - "id": 1, - "name": "Maryellen Gonzales" - }, - { - "id": 2, - "name": "Betty Fuentes" - } - ], - "greeting": "Hello, Boyle Sexton! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d4ee15e776405323f", - "index": 961, - "guid": "93ebd36d-7330-47d8-9a7b-58265a6a8f89", - "isActive": true, - "balance": "$3,775.22", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Ingram Montoya", - "gender": "male", - "company": "BICOL", - "email": "ingrammontoya@bicol.com", - "phone": "+1 (816) 491-3952", - "address": "587 Hall Street, Gardners, American Samoa, 9896", - "about": "Enim reprehenderit ad velit irure anim sunt adipisicing labore. Incididunt nostrud duis magna velit et eu cillum est pariatur. Cupidatat incididunt cillum reprehenderit nostrud magna esse cupidatat in. Sint ex eu duis fugiat eu. Ad est consectetur exercitation aliquip veniam ad. Lorem consequat non consequat proident elit tempor amet nostrud esse aute. Ut laboris consequat voluptate occaecat ad eiusmod nostrud commodo sunt do.\r\n", - "registered": "2019-08-23T06:24:06 +04:00", - "latitude": -46.663597, - "longitude": -119.807379, - "tags": ["deserunt", "esse", "proident", "voluptate", "culpa", "commodo", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Sharp Stafford" - }, - { - "id": 1, - "name": "French Curry" - }, - { - "id": 2, - "name": "Aurora Johns" - } - ], - "greeting": "Hello, Ingram Montoya! You have 8 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4eceeb0450e8d481", - "index": 962, - "guid": "b86cabbc-fb60-42aa-ab9b-13e8f3bb4150", - "isActive": true, - "balance": "$2,933.04", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Mable Santos", - "gender": "female", - "company": "NORSUP", - "email": "mablesantos@norsup.com", - "phone": "+1 (845) 519-3937", - "address": "274 Windsor Place, Fidelis, Iowa, 3036", - "about": "Duis enim reprehenderit laborum dolore quis aliquip duis aliqua anim elit id ea deserunt. Laboris aliquip ad ex tempor aute eu ut adipisicing. Consectetur adipisicing ad occaecat culpa sunt laboris mollit amet ullamco sit veniam aliqua eiusmod duis. Irure veniam dolore Lorem aliquip ex fugiat ipsum eu voluptate. Consequat deserunt in minim elit non reprehenderit deserunt ullamco cupidatat esse excepteur. Velit exercitation ullamco occaecat laboris laborum exercitation eu ex aliqua est fugiat proident voluptate esse. Incididunt adipisicing amet enim eiusmod est proident elit culpa ut Lorem reprehenderit reprehenderit quis.\r\n", - "registered": "2014-06-02T01:24:05 +04:00", - "latitude": -63.29483, - "longitude": 176.522186, - "tags": ["id", "voluptate", "nostrud", "nulla", "ad", "in", "ea"], - "friends": [ - { - "id": 0, - "name": "Crosby Keller" - }, - { - "id": 1, - "name": "Ellis Haynes" - }, - { - "id": 2, - "name": "Rutledge Lyons" - } - ], - "greeting": "Hello, Mable Santos! You have 1 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d03113df034117458", - "index": 963, - "guid": "7a524ece-9b53-4bbc-83c5-8651f14a9cde", - "isActive": true, - "balance": "$3,304.83", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Fernandez Bruce", - "gender": "male", - "company": "CORPULSE", - "email": "fernandezbruce@corpulse.com", - "phone": "+1 (868) 478-2925", - "address": "671 Sackman Street, Cherokee, Palau, 9853", - "about": "Proident ex aliquip velit aliquip pariatur fugiat reprehenderit et voluptate eu veniam veniam fugiat irure. Reprehenderit irure non Lorem consequat Lorem esse duis ea exercitation. Exercitation eiusmod do aliqua ea sunt ut culpa enim. Culpa cillum duis consequat elit consectetur laborum Lorem ut. Culpa aliquip elit quis esse cillum officia quis sit mollit est nulla. Ea minim eu labore ipsum incididunt fugiat in irure minim.\r\n", - "registered": "2016-10-20T08:36:56 +04:00", - "latitude": -74.430425, - "longitude": -134.890552, - "tags": ["ut", "ut", "minim", "nostrud", "aliquip", "aliqua", "in"], - "friends": [ - { - "id": 0, - "name": "Dillard Talley" - }, - { - "id": 1, - "name": "Eileen Castro" - }, - { - "id": 2, - "name": "Elvia Griffin" - } - ], - "greeting": "Hello, Fernandez Bruce! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d1e9405020cc64a6c", - "index": 964, - "guid": "7bf682d6-d561-417e-9332-3cd61532c248", - "isActive": true, - "balance": "$3,731.52", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "blue", - "name": "Dejesus Kim", - "gender": "male", - "company": "COMTOURS", - "email": "dejesuskim@comtours.com", - "phone": "+1 (989) 407-3523", - "address": "718 Varet Street, Boykin, West Virginia, 9980", - "about": "Lorem quis occaecat proident quis amet minim dolor. Commodo enim consectetur nisi anim dolore. Fugiat id quis id ipsum cillum fugiat reprehenderit. Aliquip dolore proident minim excepteur excepteur sunt officia aliquip ut tempor. Culpa ut pariatur reprehenderit non reprehenderit nostrud eu consectetur eu. Amet ex nisi consectetur mollit sint reprehenderit sunt. Duis ullamco id excepteur quis mollit labore qui labore.\r\n", - "registered": "2016-10-02T11:40:20 +04:00", - "latitude": -46.421555, - "longitude": -148.55433, - "tags": ["sit", "pariatur", "sit", "sit", "laboris", "laborum", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Luella Moses" - }, - { - "id": 1, - "name": "Moses Meyer" - }, - { - "id": 2, - "name": "Patel Cunningham" - } - ], - "greeting": "Hello, Dejesus Kim! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25da841e295ade0cd74", - "index": 965, - "guid": "62921247-fec8-423b-ad95-b0c79cb4da3c", - "isActive": false, - "balance": "$3,305.70", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "English Gay", - "gender": "male", - "company": "EPLODE", - "email": "englishgay@eplode.com", - "phone": "+1 (804) 415-2296", - "address": "705 Ryerson Street, Libertytown, New York, 1159", - "about": "Est esse ea eiusmod irure pariatur. Tempor ea voluptate exercitation cillum dolore cupidatat velit duis minim reprehenderit officia. Amet magna nulla consequat veniam voluptate ut officia. Exercitation aute labore culpa labore mollit elit ex tempor culpa enim ullamco. Occaecat voluptate ipsum ipsum est magna enim non dolor consectetur quis id. Aliqua sint sint labore reprehenderit id fugiat adipisicing eiusmod enim laborum cillum pariatur. Et enim exercitation aliquip aliqua cupidatat.\r\n", - "registered": "2015-01-22T11:41:30 +05:00", - "latitude": 24.019025, - "longitude": 54.766681, - "tags": ["nisi", "ex", "nisi", "amet", "eu", "labore", "amet"], - "friends": [ - { - "id": 0, - "name": "Rosales Snyder" - }, - { - "id": 1, - "name": "Cole Kaufman" - }, - { - "id": 2, - "name": "Marguerite Delaney" - } - ], - "greeting": "Hello, English Gay! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25da3115a5d7a42f849", - "index": 966, - "guid": "a202d309-2b62-4601-b7b4-3e65c86c1e7b", - "isActive": false, - "balance": "$2,141.44", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Hardin Chan", - "gender": "male", - "company": "CUJO", - "email": "hardinchan@cujo.com", - "phone": "+1 (878) 490-2090", - "address": "836 Gallatin Place, Waukeenah, Hawaii, 9986", - "about": "In cupidatat minim nisi tempor. Eu occaecat voluptate sint proident id pariatur dolore sunt elit deserunt sint. Quis tempor nulla id sunt Lorem minim officia fugiat cillum do officia nulla aute officia. Ex sunt incididunt duis culpa et dolor minim incididunt consectetur sit in tempor. Commodo reprehenderit do incididunt ea voluptate exercitation sint amet mollit est enim consectetur et. Et Lorem consequat magna esse magna minim nulla occaecat. Id eu enim tempor aliquip pariatur laborum aliquip pariatur occaecat ullamco consequat ut voluptate qui.\r\n", - "registered": "2017-08-20T12:26:00 +04:00", - "latitude": -57.752264, - "longitude": 54.358034, - "tags": ["veniam", "tempor", "dolore", "enim", "aliquip", "nisi", "qui"], - "friends": [ - { - "id": 0, - "name": "Tanya Buckley" - }, - { - "id": 1, - "name": "Elsie Stevenson" - }, - { - "id": 2, - "name": "Frazier Sparks" - } - ], - "greeting": "Hello, Hardin Chan! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d6d871deba2bffe13", - "index": 967, - "guid": "9006d30e-457a-4a9d-8ae8-047a0a7d1412", - "isActive": true, - "balance": "$1,761.56", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Knapp Spencer", - "gender": "male", - "company": "COMVEX", - "email": "knappspencer@comvex.com", - "phone": "+1 (881) 417-2655", - "address": "813 Harbor Court, Richville, Nebraska, 2343", - "about": "Exercitation nostrud laborum ea qui ea laboris ut fugiat tempor fugiat consequat eu exercitation anim. Exercitation consectetur ad dolor non sint reprehenderit eiusmod sit dolor fugiat consequat sint laborum. Aliquip consectetur est ipsum ipsum cillum quis pariatur tempor ea occaecat. In elit nisi est fugiat aute laboris nulla in. Dolore cupidatat commodo consequat elit mollit officia ullamco dolore tempor labore velit eiusmod. Adipisicing enim duis nostrud dolore aute excepteur incididunt.\r\n", - "registered": "2020-02-28T05:16:21 +05:00", - "latitude": 67.805526, - "longitude": -117.753433, - "tags": ["dolor", "ut", "veniam", "consectetur", "duis", "tempor", "in"], - "friends": [ - { - "id": 0, - "name": "Shauna Silva" - }, - { - "id": 1, - "name": "Melinda Ferguson" - }, - { - "id": 2, - "name": "Clark Walsh" - } - ], - "greeting": "Hello, Knapp Spencer! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dcfc76a4aafd53098", - "index": 968, - "guid": "9c8d993c-ecaf-4408-ae9b-236038e6ad1e", - "isActive": false, - "balance": "$3,760.21", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Cantrell Tyler", - "gender": "male", - "company": "MOLTONIC", - "email": "cantrelltyler@moltonic.com", - "phone": "+1 (865) 480-2021", - "address": "264 Bushwick Court, Harleigh, Wisconsin, 2402", - "about": "Nisi commodo excepteur dolore nostrud Lorem anim ex duis adipisicing mollit officia magna. Ex cupidatat velit qui quis deserunt consequat est non. Irure sint voluptate proident exercitation ullamco aute magna sint. Cillum officia et adipisicing dolor aute minim. Deserunt elit pariatur quis incididunt pariatur. Exercitation do sint esse adipisicing pariatur veniam et nisi nisi enim. Cillum ex ad labore magna incididunt ipsum.\r\n", - "registered": "2020-05-31T03:36:02 +04:00", - "latitude": 46.770982, - "longitude": -101.900941, - "tags": ["ipsum", "incididunt", "minim", "officia", "laborum", "proident", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Ramsey Harper" - }, - { - "id": 1, - "name": "Edwina Estes" - }, - { - "id": 2, - "name": "Coffey Mcbride" - } - ], - "greeting": "Hello, Cantrell Tyler! You have 4 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d26c13db2ec4bdc0d", - "index": 969, - "guid": "13983746-20e4-4b8c-bac9-414ea503d566", - "isActive": true, - "balance": "$1,620.70", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Linda Hernandez", - "gender": "female", - "company": "PROTODYNE", - "email": "lindahernandez@protodyne.com", - "phone": "+1 (803) 562-2260", - "address": "624 Tiffany Place, Tioga, Arizona, 3648", - "about": "Lorem occaecat commodo velit qui irure culpa ut et tempor voluptate cupidatat nostrud. Qui adipisicing consequat fugiat velit cillum minim qui exercitation dolor est. Lorem adipisicing magna do ipsum. Nulla exercitation aliqua consequat qui sunt magna do quis excepteur adipisicing commodo amet. Duis tempor adipisicing deserunt tempor nulla esse proident ad reprehenderit nostrud enim pariatur duis irure. Commodo non quis exercitation voluptate velit culpa.\r\n", - "registered": "2014-10-05T07:17:49 +04:00", - "latitude": -6.885459, - "longitude": -167.889961, - "tags": ["occaecat", "laborum", "in", "consectetur", "cupidatat", "excepteur", "et"], - "friends": [ - { - "id": 0, - "name": "Margo Garcia" - }, - { - "id": 1, - "name": "Dixon Burgess" - }, - { - "id": 2, - "name": "Johnston Parker" - } - ], - "greeting": "Hello, Linda Hernandez! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dd15e6fe8e564d1a8", - "index": 970, - "guid": "4152a64c-456f-4a11-9ff9-f056169fea22", - "isActive": true, - "balance": "$3,904.45", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Janelle Richmond", - "gender": "female", - "company": "ZILLAN", - "email": "janellerichmond@zillan.com", - "phone": "+1 (882) 475-3794", - "address": "811 Lombardy Street, Kenmar, Ohio, 8028", - "about": "Veniam reprehenderit ullamco labore Lorem fugiat exercitation consectetur occaecat enim consequat pariatur labore ex magna. Eiusmod eu et sint qui ad consectetur do commodo esse anim et tempor. Enim cupidatat ea non ipsum aliqua duis incididunt mollit. Esse et labore ipsum velit ea ad culpa ut ea eiusmod.\r\n", - "registered": "2014-06-01T07:38:15 +04:00", - "latitude": -12.604898, - "longitude": 89.88129, - "tags": ["exercitation", "nostrud", "anim", "minim", "culpa", "voluptate", "laboris"], - "friends": [ - { - "id": 0, - "name": "Mann Mccormick" - }, - { - "id": 1, - "name": "Grant Beasley" - }, - { - "id": 2, - "name": "Oneill Barrera" - } - ], - "greeting": "Hello, Janelle Richmond! You have 1 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df7454b20d09feb78", - "index": 971, - "guid": "2bb8124b-4890-4574-bae7-77eb8f0269f7", - "isActive": false, - "balance": "$2,614.93", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "blue", - "name": "Lindsay Hess", - "gender": "male", - "company": "MICRONAUT", - "email": "lindsayhess@micronaut.com", - "phone": "+1 (966) 455-2429", - "address": "441 Dearborn Court, Utting, Arkansas, 3820", - "about": "Anim consequat duis consequat eiusmod proident ullamco aliqua veniam duis nostrud consequat. Quis mollit cillum ullamco id proident do duis. Sint laboris mollit velit nostrud magna. Minim occaecat et deserunt tempor ex culpa Lorem nulla tempor veniam qui. Dolor minim tempor aliqua esse dolor nostrud. Amet sint ullamco aliqua eu nostrud enim.\r\n", - "registered": "2016-02-27T03:09:19 +05:00", - "latitude": -5.311924, - "longitude": -100.060556, - "tags": ["et", "anim", "tempor", "cillum", "ullamco", "reprehenderit", "et"], - "friends": [ - { - "id": 0, - "name": "Mcpherson Johnson" - }, - { - "id": 1, - "name": "Head Branch" - }, - { - "id": 2, - "name": "Noreen Mcleod" - } - ], - "greeting": "Hello, Lindsay Hess! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d8762238ed7da5203", - "index": 972, - "guid": "2b3312b6-d512-4d25-bf44-df046057a76c", - "isActive": true, - "balance": "$1,993.75", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Moon Noel", - "gender": "male", - "company": "SOLAREN", - "email": "moonnoel@solaren.com", - "phone": "+1 (920) 569-3199", - "address": "604 Erasmus Street, Berlin, Nevada, 3399", - "about": "Duis id ullamco laborum ex veniam nulla cillum amet velit qui consequat. Exercitation officia esse consectetur incididunt sit elit do aute. Ut laboris labore excepteur enim amet ex Lorem ipsum et dolor laborum. Cupidatat consectetur sit reprehenderit irure in quis et aliqua esse cillum anim sunt exercitation adipisicing. Ullamco et ad fugiat ex labore do exercitation. Ea do laborum adipisicing ut officia in aliquip et.\r\n", - "registered": "2019-10-28T12:23:28 +04:00", - "latitude": 19.439581, - "longitude": -74.421943, - "tags": ["duis", "sunt", "veniam", "laboris", "duis", "sit", "id"], - "friends": [ - { - "id": 0, - "name": "Sabrina Tyson" - }, - { - "id": 1, - "name": "Kitty Leblanc" - }, - { - "id": 2, - "name": "Leonard Bennett" - } - ], - "greeting": "Hello, Moon Noel! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd3b4250e86cc3e02", - "index": 973, - "guid": "0f491d07-cf74-41df-8f01-d7389dbe571f", - "isActive": false, - "balance": "$3,201.04", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Allison Page", - "gender": "male", - "company": "BULLJUICE", - "email": "allisonpage@bulljuice.com", - "phone": "+1 (807) 421-3172", - "address": "213 Monroe Place, Lumberton, Massachusetts, 6261", - "about": "Elit veniam in aliqua anim sint tempor consectetur Lorem nisi et nostrud. Ad id aliqua est nostrud voluptate proident deserunt dolore laborum. Exercitation aliqua esse dolore Lorem in cupidatat nisi officia qui irure non laborum. Labore magna enim anim elit sunt commodo culpa ad excepteur cillum mollit eiusmod. Quis velit fugiat eu ipsum eiusmod. Anim velit Lorem deserunt quis occaecat consequat ullamco dolor magna ipsum cillum laboris ex.\r\n", - "registered": "2020-03-22T01:17:24 +04:00", - "latitude": 15.353974, - "longitude": 20.251792, - "tags": ["amet", "eu", "consequat", "reprehenderit", "incididunt", "sint", "ad"], - "friends": [ - { - "id": 0, - "name": "Elnora Franklin" - }, - { - "id": 1, - "name": "Montoya Mitchell" - }, - { - "id": 2, - "name": "Serena Bowen" - } - ], - "greeting": "Hello, Allison Page! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d1c9ea07e773b8426", - "index": 974, - "guid": "e91184da-47b9-4bda-a181-a135bcfea778", - "isActive": false, - "balance": "$1,943.67", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Frye Hodge", - "gender": "male", - "company": "CALLFLEX", - "email": "fryehodge@callflex.com", - "phone": "+1 (844) 574-2330", - "address": "485 Beverly Road, Lawrence, Marshall Islands, 1083", - "about": "Fugiat eiusmod eu culpa et deserunt. Ex esse irure nisi minim sit culpa minim fugiat cillum minim eu duis. Veniam reprehenderit voluptate anim Lorem.\r\n", - "registered": "2020-06-18T10:08:23 +04:00", - "latitude": 4.151948, - "longitude": 153.068159, - "tags": ["do", "et", "ipsum", "duis", "id", "cupidatat", "proident"], - "friends": [ - { - "id": 0, - "name": "Phyllis Taylor" - }, - { - "id": 1, - "name": "Erin Neal" - }, - { - "id": 2, - "name": "Cox Reynolds" - } - ], - "greeting": "Hello, Frye Hodge! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dde970f5b1911daa8", - "index": 975, - "guid": "817d3120-8cae-42f0-ac8a-cb6882f38766", - "isActive": true, - "balance": "$1,098.78", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Mccoy Tillman", - "gender": "male", - "company": "ENDICIL", - "email": "mccoytillman@endicil.com", - "phone": "+1 (912) 509-2483", - "address": "924 Willow Place, Ola, Puerto Rico, 8814", - "about": "Do laboris sint laborum mollit laborum. Irure aliquip ea ullamco labore ullamco et ullamco Lorem do nisi amet ullamco. Sunt duis in cillum laborum aute pariatur tempor nisi laboris nulla cillum voluptate officia reprehenderit.\r\n", - "registered": "2015-07-01T02:51:27 +04:00", - "latitude": -50.980751, - "longitude": 60.6328, - "tags": ["aliqua", "culpa", "pariatur", "laboris", "veniam", "irure", "magna"], - "friends": [ - { - "id": 0, - "name": "Nola Wilson" - }, - { - "id": 1, - "name": "Kirk Conway" - }, - { - "id": 2, - "name": "Murphy Potter" - } - ], - "greeting": "Hello, Mccoy Tillman! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc4b8d501bbb5a11d", - "index": 976, - "guid": "bc4cb651-a8ab-4d31-a2d6-1189ddb8e402", - "isActive": true, - "balance": "$1,460.63", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Pansy Mcgowan", - "gender": "female", - "company": "XOGGLE", - "email": "pansymcgowan@xoggle.com", - "phone": "+1 (925) 526-2228", - "address": "631 Baycliff Terrace, Blanco, California, 5808", - "about": "In occaecat nisi labore Lorem exercitation commodo mollit magna ad consequat sint dolore. Voluptate veniam cillum minim minim id ut Lorem voluptate. Officia exercitation nisi incididunt do incididunt ullamco sunt quis excepteur velit cillum laborum cupidatat. Lorem Lorem proident est reprehenderit officia velit. Aute est cupidatat duis mollit et pariatur labore sit ullamco voluptate quis do reprehenderit sint.\r\n", - "registered": "2020-07-10T12:30:40 +04:00", - "latitude": -46.569992, - "longitude": -16.137471, - "tags": ["magna", "sint", "quis", "voluptate", "in", "sunt", "incididunt"], - "friends": [ - { - "id": 0, - "name": "Christie Lancaster" - }, - { - "id": 1, - "name": "Yesenia Boyle" - }, - { - "id": 2, - "name": "Marcie Grant" - } - ], - "greeting": "Hello, Pansy Mcgowan! You have 5 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dc98c0b92afa8b33e", - "index": 977, - "guid": "3af79318-4734-4e61-b793-476cc4b5a773", - "isActive": true, - "balance": "$2,117.13", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "blue", - "name": "Mclean Nieves", - "gender": "male", - "company": "APEXIA", - "email": "mcleannieves@apexia.com", - "phone": "+1 (819) 423-3099", - "address": "960 Cortelyou Road, Maplewood, Tennessee, 3720", - "about": "Dolore culpa cillum culpa et anim nisi esse aute incididunt voluptate. Deserunt veniam sunt culpa tempor aliquip qui proident tempor amet culpa do laborum. Esse dolor quis id est sunt eu anim nisi. Excepteur veniam ipsum consequat excepteur ea pariatur eu tempor laborum do tempor. Do ullamco esse reprehenderit sint aute nulla eiusmod proident cillum est veniam. Lorem proident sit aliqua do in.\r\n", - "registered": "2014-10-15T02:12:38 +04:00", - "latitude": -38.329136, - "longitude": 80.670716, - "tags": ["consequat", "ipsum", "adipisicing", "irure", "consequat", "eiusmod", "aliquip"], - "friends": [ - { - "id": 0, - "name": "Pollard Sawyer" - }, - { - "id": 1, - "name": "Herminia Booth" - }, - { - "id": 2, - "name": "Kasey Edwards" - } - ], - "greeting": "Hello, Mclean Nieves! You have 7 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3ae52b1247e3dc65", - "index": 978, - "guid": "674a2a1a-9375-4fe4-b68d-01218c0ab8d8", - "isActive": true, - "balance": "$2,474.20", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Bowman Malone", - "gender": "male", - "company": "REVERSUS", - "email": "bowmanmalone@reversus.com", - "phone": "+1 (920) 555-2278", - "address": "472 Truxton Street, Chamberino, Wyoming, 3974", - "about": "Esse qui eu nisi non id. Qui enim irure nulla culpa adipisicing sunt qui commodo id enim ad est aute proident. Ut elit id in reprehenderit aliqua sunt laboris Lorem aute. Eu sit aliqua exercitation labore nisi est ea laboris. Sit exercitation nisi eiusmod pariatur laborum nostrud ipsum. Aute deserunt magna dolore labore culpa voluptate sit dolore.\r\n", - "registered": "2020-07-13T12:21:42 +04:00", - "latitude": -62.188635, - "longitude": -143.681742, - "tags": ["elit", "anim", "qui", "id", "sunt", "amet", "sit"], - "friends": [ - { - "id": 0, - "name": "Buck Spence" - }, - { - "id": 1, - "name": "Kristen Hunter" - }, - { - "id": 2, - "name": "Velma Wiley" - } - ], - "greeting": "Hello, Bowman Malone! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d090288f611d241bc", - "index": 979, - "guid": "b9153c42-7f59-4bf9-8cdd-2edea4059f18", - "isActive": true, - "balance": "$1,569.43", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Cummings Vargas", - "gender": "male", - "company": "MICROLUXE", - "email": "cummingsvargas@microluxe.com", - "phone": "+1 (802) 410-2498", - "address": "654 Story Street, Kylertown, North Carolina, 7472", - "about": "Nisi culpa anim ad ex pariatur pariatur minim anim nulla. Incididunt anim cupidatat quis consectetur cupidatat in pariatur amet deserunt minim magna. Dolor incididunt eu pariatur aliqua proident eiusmod commodo sunt pariatur aute veniam proident eiusmod in. Mollit voluptate enim ad irure do.\r\n", - "registered": "2015-09-24T11:40:56 +04:00", - "latitude": 4.691934, - "longitude": 126.658335, - "tags": ["cupidatat", "ut", "ut", "ea", "commodo", "reprehenderit", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Neal Howe" - }, - { - "id": 1, - "name": "Ewing Bradford" - }, - { - "id": 2, - "name": "Simone Blanchard" - } - ], - "greeting": "Hello, Cummings Vargas! You have 7 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5f565b03e24cadad", - "index": 980, - "guid": "65289433-e90a-41e9-a167-e05c59da043f", - "isActive": false, - "balance": "$3,446.25", - "picture": "http://placehold.it/32x32", - "age": 20, - "eyeColor": "green", - "name": "Howard Benton", - "gender": "male", - "company": "TEMORAK", - "email": "howardbenton@temorak.com", - "phone": "+1 (973) 555-2138", - "address": "411 Trucklemans Lane, Falconaire, Michigan, 8040", - "about": "Culpa elit ut pariatur Lorem qui anim ea labore incididunt commodo eu. Laborum elit minim Lorem dolore consequat aliqua elit excepteur veniam pariatur nostrud adipisicing velit. Consequat nostrud adipisicing velit Lorem qui minim proident esse Lorem consectetur minim anim. Consectetur ea adipisicing exercitation irure dolore est mollit cupidatat eu nostrud ea incididunt. Non voluptate consequat voluptate irure sunt fugiat eu.\r\n", - "registered": "2020-06-08T07:09:41 +04:00", - "latitude": -45.31256, - "longitude": 20.027573, - "tags": ["consequat", "deserunt", "et", "dolor", "cupidatat", "consequat", "sunt"], - "friends": [ - { - "id": 0, - "name": "Marlene Wilkerson" - }, - { - "id": 1, - "name": "Marie Pearson" - }, - { - "id": 2, - "name": "Joyce Underwood" - } - ], - "greeting": "Hello, Howard Benton! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dcba71dc44b2d9b6d", - "index": 981, - "guid": "0351a90b-758d-43ed-9b15-688a304cd244", - "isActive": false, - "balance": "$2,798.52", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Cornelia Mays", - "gender": "female", - "company": "ZENTIME", - "email": "corneliamays@zentime.com", - "phone": "+1 (888) 447-2188", - "address": "458 Hyman Court, Katonah, Oklahoma, 4421", - "about": "Ullamco dolore occaecat aute consectetur sit dolor consequat. Aliquip veniam occaecat elit non. Non nisi ea ut labore sunt id enim.\r\n", - "registered": "2015-01-21T12:19:30 +05:00", - "latitude": 68.898709, - "longitude": 105.986224, - "tags": ["elit", "ipsum", "tempor", "aliqua", "consectetur", "eiusmod", "deserunt"], - "friends": [ - { - "id": 0, - "name": "Vickie Kirk" - }, - { - "id": 1, - "name": "Pat Burnett" - }, - { - "id": 2, - "name": "Corinne Rollins" - } - ], - "greeting": "Hello, Cornelia Mays! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd11e5918e521e418", - "index": 982, - "guid": "48b37a1c-e364-4c16-8894-2cabe03860ce", - "isActive": false, - "balance": "$1,762.77", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Melton Hopkins", - "gender": "male", - "company": "SHEPARD", - "email": "meltonhopkins@shepard.com", - "phone": "+1 (865) 595-3301", - "address": "912 Dewitt Avenue, Strykersville, Vermont, 4218", - "about": "Eu eiusmod anim laboris incididunt. Veniam amet irure irure non enim veniam dolore. Labore ipsum qui fugiat ea et deserunt et ipsum ad officia tempor commodo laboris enim. Ad reprehenderit exercitation eu ea non incididunt cupidatat. Dolor excepteur do elit velit sint magna aliquip labore. Elit anim enim fugiat nostrud ipsum labore velit id.\r\n", - "registered": "2019-12-24T09:19:07 +05:00", - "latitude": 73.422862, - "longitude": 168.420753, - "tags": ["cillum", "amet", "qui", "excepteur", "aliqua", "ullamco", "minim"], - "friends": [ - { - "id": 0, - "name": "Wong Alexander" - }, - { - "id": 1, - "name": "Mckay Snider" - }, - { - "id": 2, - "name": "Curtis Fleming" - } - ], - "greeting": "Hello, Melton Hopkins! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d8ae17133e24cf5e7", - "index": 983, - "guid": "db99d6ec-95bc-4a5c-b79b-f7e0c4acab0c", - "isActive": false, - "balance": "$3,371.18", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Anne Lindsey", - "gender": "female", - "company": "ZUVY", - "email": "annelindsey@zuvy.com", - "phone": "+1 (896) 418-3154", - "address": "807 Nichols Avenue, Snelling, Utah, 309", - "about": "Eiusmod aute nulla elit eu aute magna elit id cillum laborum ad. Tempor aute cupidatat voluptate mollit. In laborum magna in nostrud sint deserunt. Consequat deserunt in eu in incididunt nulla mollit irure officia cupidatat sunt incididunt. Amet cupidatat irure sit quis ea exercitation duis irure cupidatat quis ad elit nisi.\r\n", - "registered": "2019-03-17T08:00:45 +04:00", - "latitude": -39.580733, - "longitude": 78.660574, - "tags": ["mollit", "irure", "culpa", "fugiat", "amet", "nisi", "adipisicing"], - "friends": [ - { - "id": 0, - "name": "Wilkinson Mckenzie" - }, - { - "id": 1, - "name": "Harrington Sandoval" - }, - { - "id": 2, - "name": "Bentley Campos" - } - ], - "greeting": "Hello, Anne Lindsey! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dc412437d5d5910eb", - "index": 984, - "guid": "9f4e464e-deb3-4790-ad48-1a691de5eb40", - "isActive": false, - "balance": "$3,765.77", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Nannie Preston", - "gender": "female", - "company": "ORBIFLEX", - "email": "nanniepreston@orbiflex.com", - "phone": "+1 (821) 570-3887", - "address": "734 Ridgewood Place, Bainbridge, Kansas, 4305", - "about": "Incididunt amet enim ex sint amet. Exercitation nostrud sit labore magna aute consequat nisi Lorem eiusmod velit. Non reprehenderit aute anim Lorem mollit esse magna officia amet. In culpa velit pariatur aliquip dolor sint dolore adipisicing ullamco esse non.\r\n", - "registered": "2020-03-23T04:47:13 +04:00", - "latitude": -70.226171, - "longitude": 120.004999, - "tags": ["eiusmod", "consectetur", "et", "adipisicing", "mollit", "ut", "proident"], - "friends": [ - { - "id": 0, - "name": "Burgess Cruz" - }, - { - "id": 1, - "name": "Alberta Weiss" - }, - { - "id": 2, - "name": "Pamela House" - } - ], - "greeting": "Hello, Nannie Preston! You have 10 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dcfb8e63973232351", - "index": 985, - "guid": "2e3f107f-0b27-4574-99a9-8ffc218f3e1d", - "isActive": true, - "balance": "$1,136.27", - "picture": "http://placehold.it/32x32", - "age": 22, - "eyeColor": "brown", - "name": "Josefina Whitney", - "gender": "female", - "company": "MAGMINA", - "email": "josefinawhitney@magmina.com", - "phone": "+1 (833) 471-2364", - "address": "310 Garfield Place, Welda, Delaware, 3007", - "about": "Mollit aliqua reprehenderit anim cillum aliqua sint occaecat sint culpa pariatur sunt. Officia in proident elit consectetur voluptate veniam voluptate non minim quis id qui. Ut officia ipsum proident sint cupidatat laborum. Elit officia amet consequat ut consequat non consequat quis ut proident consequat. Anim enim cupidatat aliquip voluptate duis. Elit tempor excepteur nisi consectetur in officia eiusmod qui mollit consectetur.\r\n", - "registered": "2017-09-25T06:56:20 +04:00", - "latitude": 64.687102, - "longitude": 167.370514, - "tags": ["nulla", "non", "culpa", "consequat", "cupidatat", "amet", "nulla"], - "friends": [ - { - "id": 0, - "name": "Leslie Herrera" - }, - { - "id": 1, - "name": "Coleen Mcknight" - }, - { - "id": 2, - "name": "Herrera Day" - } - ], - "greeting": "Hello, Josefina Whitney! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db15a76d210a0a2c1", - "index": 986, - "guid": "1c8276f4-7b97-4434-988f-8a2274a5d44b", - "isActive": false, - "balance": "$2,618.36", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Dunlap Fox", - "gender": "male", - "company": "XIXAN", - "email": "dunlapfox@xixan.com", - "phone": "+1 (963) 491-2442", - "address": "146 Boynton Place, Malott, Guam, 9207", - "about": "Eu consequat nisi quis magna. Ea consequat amet aliquip culpa est quis in adipisicing. Do non magna excepteur officia reprehenderit adipisicing ipsum id consectetur voluptate ad nisi labore. Anim esse laboris exercitation labore ipsum sit laboris cupidatat enim.\r\n", - "registered": "2017-08-02T11:50:38 +04:00", - "latitude": -8.140856, - "longitude": -121.391424, - "tags": ["Lorem", "sint", "excepteur", "sunt", "incididunt", "cillum", "dolore"], - "friends": [ - { - "id": 0, - "name": "Snyder Gibson" - }, - { - "id": 1, - "name": "Boyer Wilder" - }, - { - "id": 2, - "name": "Thelma Knox" - } - ], - "greeting": "Hello, Dunlap Fox! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25db9ad642df1f8749f", - "index": 987, - "guid": "e4d18f2d-322e-46cd-bc74-e4335aa13bab", - "isActive": true, - "balance": "$3,490.48", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "green", - "name": "Bonita Myers", - "gender": "female", - "company": "COMTENT", - "email": "bonitamyers@comtent.com", - "phone": "+1 (905) 581-3473", - "address": "866 McClancy Place, Tolu, Oregon, 2387", - "about": "Nulla amet duis ut anim eu cupidatat eiusmod magna ad laborum aliquip fugiat. Incididunt incididunt aute est consequat velit mollit aliqua ipsum officia dolor. Pariatur cupidatat nisi sint deserunt sit id. Elit Lorem nostrud dolor magna fugiat eu non ut et velit.\r\n", - "registered": "2020-05-05T04:38:43 +04:00", - "latitude": -15.889204, - "longitude": -38.766976, - "tags": ["dolore", "dolore", "voluptate", "laborum", "nisi", "Lorem", "culpa"], - "friends": [ - { - "id": 0, - "name": "Winnie Salinas" - }, - { - "id": 1, - "name": "Lyons Ellis" - }, - { - "id": 2, - "name": "Beverly Eaton" - } - ], - "greeting": "Hello, Bonita Myers! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4db844397def3be4", - "index": 988, - "guid": "aa1d3f33-255a-4cd7-a5be-83a2798a44b2", - "isActive": false, - "balance": "$2,652.03", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "brown", - "name": "Traci Fitzgerald", - "gender": "female", - "company": "ROUGHIES", - "email": "tracifitzgerald@roughies.com", - "phone": "+1 (974) 456-3811", - "address": "633 Stryker Street, Forestburg, Missouri, 3850", - "about": "Esse excepteur qui eu cillum veniam et velit anim occaecat sunt labore irure et. Non in esse sit proident adipisicing est pariatur anim. Sit anim nisi labore velit in consectetur consequat esse qui aliqua. Id velit excepteur magna enim cillum fugiat ex dolor pariatur sit ea eiusmod.\r\n", - "registered": "2018-02-21T09:37:52 +05:00", - "latitude": -43.014704, - "longitude": -166.273664, - "tags": ["non", "excepteur", "ad", "excepteur", "nostrud", "pariatur", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Kim Hendrix" - }, - { - "id": 1, - "name": "Kari Holloway" - }, - { - "id": 2, - "name": "Wheeler Morin" - } - ], - "greeting": "Hello, Traci Fitzgerald! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d34ff8473b01e83d3", - "index": 989, - "guid": "f148df30-312e-4a76-956d-fd8391bd1c39", - "isActive": false, - "balance": "$2,701.17", - "picture": "http://placehold.it/32x32", - "age": 21, - "eyeColor": "brown", - "name": "Nguyen Abbott", - "gender": "male", - "company": "HAIRPORT", - "email": "nguyenabbott@hairport.com", - "phone": "+1 (937) 589-3451", - "address": "623 Gatling Place, Kersey, Montana, 8387", - "about": "Id culpa magna sit cillum consequat laboris consequat voluptate dolor officia. Pariatur tempor tempor nulla nulla. Exercitation sit cillum sunt excepteur amet exercitation ex amet commodo exercitation nisi. Incididunt tempor ipsum ullamco enim veniam et esse cupidatat consectetur laborum aliquip excepteur laborum. Deserunt ad duis quis excepteur sint eiusmod excepteur commodo ad nulla ex proident.\r\n", - "registered": "2017-06-01T11:36:19 +04:00", - "latitude": -78.398731, - "longitude": -100.980207, - "tags": ["in", "consectetur", "mollit", "aute", "sit", "excepteur", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Lewis Rhodes" - }, - { - "id": 1, - "name": "Spencer Dale" - }, - { - "id": 2, - "name": "Jo Peters" - } - ], - "greeting": "Hello, Nguyen Abbott! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dd24e0b0b73e72c8d", - "index": 990, - "guid": "8a1b83af-d41b-43ed-996e-e65e499eb6df", - "isActive": false, - "balance": "$1,210.10", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Hunter Ochoa", - "gender": "male", - "company": "EYERIS", - "email": "hunterochoa@eyeris.com", - "phone": "+1 (917) 402-3523", - "address": "650 Linden Street, Barstow, Alaska, 9719", - "about": "Exercitation quis mollit aliqua culpa ut ea id do. Voluptate ea quis deserunt aliquip tempor sunt eiusmod velit veniam eu Lorem. Enim sunt eu nulla tempor culpa amet sunt mollit. Proident excepteur cillum ut laborum eiusmod ad ut sunt reprehenderit ipsum consectetur. Non incididunt aute magna sit consectetur occaecat velit Lorem dolor laboris anim. Excepteur Lorem labore dolor ut aute consectetur.\r\n", - "registered": "2015-10-05T06:33:00 +04:00", - "latitude": 48.899559, - "longitude": 108.001626, - "tags": ["ullamco", "quis", "dolore", "mollit", "qui", "quis", "anim"], - "friends": [ - { - "id": 0, - "name": "Sims Ayers" - }, - { - "id": 1, - "name": "Mosley Brock" - }, - { - "id": 2, - "name": "Baxter Waller" - } - ], - "greeting": "Hello, Hunter Ochoa! You have 5 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2a69cc0b7cb52843", - "index": 991, - "guid": "fd497eae-783c-4ee8-8a71-d99717fe33a7", - "isActive": false, - "balance": "$1,386.36", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "green", - "name": "Harriet Jefferson", - "gender": "female", - "company": "EARTHWAX", - "email": "harrietjefferson@earthwax.com", - "phone": "+1 (816) 573-2136", - "address": "119 Sands Street, Bendon, Kentucky, 6936", - "about": "Fugiat tempor tempor et laboris ipsum labore consectetur cillum in sit labore eiusmod. Duis sit velit est enim. Deserunt nostrud nulla excepteur proident culpa dolor aliquip deserunt quis. Et aliquip labore consectetur cupidatat. Cupidatat voluptate ea ipsum esse. Et anim incididunt enim fugiat sit ex exercitation pariatur est.\r\n", - "registered": "2019-04-19T08:09:24 +04:00", - "latitude": 63.171718, - "longitude": 52.483136, - "tags": ["excepteur", "mollit", "veniam", "deserunt", "laboris", "ipsum", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Sarah Higgins" - }, - { - "id": 1, - "name": "Emerson Knight" - }, - { - "id": 2, - "name": "Leah Emerson" - } - ], - "greeting": "Hello, Harriet Jefferson! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d89f4d9ca9952c719", - "index": 992, - "guid": "8a1cf2fb-eae0-4d4f-82a3-bec094a1a1e9", - "isActive": true, - "balance": "$1,756.79", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "blue", - "name": "Flynn Dyer", - "gender": "male", - "company": "TALKALOT", - "email": "flynndyer@talkalot.com", - "phone": "+1 (941) 504-2469", - "address": "474 Adams Street, Fostoria, Mississippi, 6352", - "about": "Cupidatat sunt incididunt culpa deserunt elit qui laboris proident commodo ipsum proident incididunt ullamco deserunt. Cupidatat deserunt consectetur cupidatat sint nulla tempor cillum velit cillum velit culpa. Ea commodo laboris nisi eu velit officia reprehenderit irure tempor minim fugiat sunt. Voluptate id dolor et velit aliquip fugiat aliquip et cupidatat Lorem amet in reprehenderit mollit. Aute est ut ea in ut laboris aliquip magna dolore irure sint.\r\n", - "registered": "2019-04-15T09:51:59 +04:00", - "latitude": 27.641015, - "longitude": 145.093155, - "tags": ["labore", "labore", "laborum", "reprehenderit", "officia", "quis", "amet"], - "friends": [ - { - "id": 0, - "name": "Jackie Ballard" - }, - { - "id": 1, - "name": "Hoffman Gonzalez" - }, - { - "id": 2, - "name": "Stephens Jordan" - } - ], - "greeting": "Hello, Flynn Dyer! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfdac522d837031ce", - "index": 993, - "guid": "7b0234f7-d5b8-494b-b56f-cfa4b051e070", - "isActive": true, - "balance": "$2,625.23", - "picture": "http://placehold.it/32x32", - "age": 39, - "eyeColor": "blue", - "name": "Lynn Richardson", - "gender": "female", - "company": "IMANT", - "email": "lynnrichardson@imant.com", - "phone": "+1 (959) 458-3304", - "address": "660 Remsen Avenue, Colton, North Dakota, 7406", - "about": "Do consequat ut cupidatat aliquip velit nulla minim elit aliquip occaecat nulla sunt. Cillum amet officia sint nisi adipisicing tempor Lorem ipsum do magna ut commodo anim. Aliquip minim cupidatat consequat anim minim Lorem eu magna. Labore est pariatur sunt ut laboris pariatur do sint in laborum sint.\r\n", - "registered": "2017-10-05T11:11:31 +04:00", - "latitude": 30.107924, - "longitude": -140.188929, - "tags": ["magna", "cupidatat", "cillum", "do", "laboris", "nostrud", "irure"], - "friends": [ - { - "id": 0, - "name": "Peck Browning" - }, - { - "id": 1, - "name": "Donaldson Shepard" - }, - { - "id": 2, - "name": "Leanna Herring" - } - ], - "greeting": "Hello, Lynn Richardson! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d016d366c50ea0b7f", - "index": 994, - "guid": "962f94b8-bc06-4b5d-a89d-d99c6d2c39cf", - "isActive": false, - "balance": "$2,581.22", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Craft Carrillo", - "gender": "male", - "company": "AUSTEX", - "email": "craftcarrillo@austex.com", - "phone": "+1 (826) 432-3473", - "address": "699 Calyer Street, Garnet, Federated States Of Micronesia, 6875", - "about": "Minim magna magna do qui dolore dolore esse id commodo sint labore voluptate ad. Reprehenderit aliquip irure ex sit duis do officia. Ut anim sint quis irure magna adipisicing incididunt cupidatat eu nostrud ex exercitation reprehenderit amet. Eiusmod ullamco ullamco qui ex aliquip anim mollit sint proident dolore Lorem nostrud. Incididunt magna pariatur reprehenderit laboris est deserunt laborum id.\r\n", - "registered": "2018-07-11T08:22:53 +04:00", - "latitude": 4.859054, - "longitude": 13.70457, - "tags": ["sint", "reprehenderit", "sunt", "ea", "proident", "nisi", "ex"], - "friends": [ - { - "id": 0, - "name": "Ferguson Short" - }, - { - "id": 1, - "name": "Jodie Patton" - }, - { - "id": 2, - "name": "Sheree Kelley" - } - ], - "greeting": "Hello, Craft Carrillo! You have 2 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25dee8c01742c9edd28", - "index": 995, - "guid": "afb5f679-0615-49dd-8225-009e81dfbb69", - "isActive": true, - "balance": "$2,620.08", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "brown", - "name": "Lakeisha Odonnell", - "gender": "female", - "company": "GRACKER", - "email": "lakeishaodonnell@gracker.com", - "phone": "+1 (853) 444-2876", - "address": "375 Nassau Street, Harold, Maryland, 8270", - "about": "Lorem amet cupidatat amet aute consequat ullamco sunt ullamco minim ea. Esse consequat voluptate esse ullamco non excepteur id mollit enim excepteur labore sint. Cupidatat ipsum adipisicing consequat pariatur consequat exercitation do.\r\n", - "registered": "2014-08-28T04:25:57 +04:00", - "latitude": -59.827444, - "longitude": -56.912597, - "tags": ["ea", "ad", "tempor", "elit", "eiusmod", "culpa", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Rosa Cherry" - }, - { - "id": 1, - "name": "Laura Ashley" - }, - { - "id": 2, - "name": "Tanner Beach" - } - ], - "greeting": "Hello, Lakeisha Odonnell! You have 9 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d6b79e82fb1edd8a5", - "index": 996, - "guid": "a65972d9-91fb-4371-ab38-5f43b24d8d2e", - "isActive": false, - "balance": "$2,527.42", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "blue", - "name": "Meyer Slater", - "gender": "male", - "company": "SUREMAX", - "email": "meyerslater@suremax.com", - "phone": "+1 (942) 521-3241", - "address": "233 Charles Place, Fairview, Virgin Islands, 3966", - "about": "Lorem ipsum et id Lorem cillum. Aliquip in fugiat quis ut ipsum labore aliquip aute excepteur cupidatat. Do voluptate in velit ut sunt non ea incididunt pariatur sit laborum do non dolore. Dolor do sunt et id in velit cupidatat reprehenderit culpa est voluptate. Pariatur amet nulla fugiat excepteur dolor anim occaecat aliqua incididunt magna reprehenderit laboris sunt aliquip.\r\n", - "registered": "2015-04-02T11:29:18 +04:00", - "latitude": 8.07224, - "longitude": -169.329245, - "tags": ["fugiat", "ipsum", "incididunt", "irure", "tempor", "officia", "ut"], - "friends": [ - { - "id": 0, - "name": "Clemons Davenport" - }, - { - "id": 1, - "name": "Millie Monroe" - }, - { - "id": 2, - "name": "Nadia Sutton" - } - ], - "greeting": "Hello, Meyer Slater! You have 6 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1bfe239f737c2d9d", - "index": 997, - "guid": "b4539faa-0893-4b42-9cdd-9b0698db41ce", - "isActive": false, - "balance": "$1,988.06", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "green", - "name": "Gina Russo", - "gender": "female", - "company": "GAPTEC", - "email": "ginarusso@gaptec.com", - "phone": "+1 (877) 411-3371", - "address": "460 Empire Boulevard, Walker, Pennsylvania, 5239", - "about": "Pariatur nulla officia veniam deserunt. Irure elit eu excepteur minim exercitation. Sunt ullamco do nostrud fugiat excepteur occaecat occaecat ipsum magna nisi et incididunt. Irure amet laboris excepteur dolore excepteur do pariatur labore exercitation exercitation aliquip officia ut eu. Voluptate ad commodo laborum anim consequat nostrud irure dolor minim commodo incididunt culpa et culpa. Consectetur excepteur amet commodo cillum est incididunt sint mollit incididunt ex sit exercitation et adipisicing. Qui cupidatat eu aute ullamco officia non Lorem voluptate consequat veniam adipisicing in sunt ex.\r\n", - "registered": "2016-11-08T11:36:31 +05:00", - "latitude": -80.711875, - "longitude": 2.651047, - "tags": ["elit", "deserunt", "qui", "ad", "deserunt", "voluptate", "consectetur"], - "friends": [ - { - "id": 0, - "name": "Tommie Clayton" - }, - { - "id": 1, - "name": "Lane Crosby" - }, - { - "id": 2, - "name": "Oconnor Wooten" - } - ], - "greeting": "Hello, Gina Russo! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25df4fd75fadbd50bc7", - "index": 998, - "guid": "0e926819-931a-42b5-9f96-4eeff1e356fc", - "isActive": false, - "balance": "$2,703.27", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Lorie Duffy", - "gender": "female", - "company": "CEPRENE", - "email": "lorieduffy@ceprene.com", - "phone": "+1 (920) 507-3409", - "address": "827 Lawn Court, Heil, Washington, 7245", - "about": "Adipisicing ipsum cupidatat esse aliquip qui id ex minim labore anim amet eiusmod. In adipisicing aliquip Lorem nostrud mollit cupidatat anim do commodo. Cupidatat occaecat labore qui elit nisi incididunt sit culpa. Magna id consectetur labore laborum laboris in quis exercitation ullamco in officia veniam. In veniam ex elit id. Cillum irure ut est consectetur elit.\r\n", - "registered": "2015-08-10T01:33:59 +04:00", - "latitude": 70.301783, - "longitude": -146.209842, - "tags": ["ut", "reprehenderit", "sit", "veniam", "proident", "cupidatat", "id"], - "friends": [ - { - "id": 0, - "name": "Latonya Moon" - }, - { - "id": 1, - "name": "Burnett Dixon" - }, - { - "id": 2, - "name": "Hester Rodriguez" - } - ], - "greeting": "Hello, Lorie Duffy! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1f39666f24dc9e31", - "index": 999, - "guid": "ef5d838b-82f5-4952-9890-cf7b6c350546", - "isActive": true, - "balance": "$3,362.40", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "brown", - "name": "Nora Garner", - "gender": "female", - "company": "CONCILITY", - "email": "noragarner@concility.com", - "phone": "+1 (890) 456-3497", - "address": "459 Forest Place, Brule, Illinois, 5182", - "about": "Fugiat pariatur eiusmod labore minim sint sint in aute ut id ut. Nostrud voluptate non anim fugiat in tempor adipisicing labore aliqua deserunt cupidatat qui sit. Velit nisi labore in nisi aute ut minim. Veniam ea officia do et consectetur non eu reprehenderit eiusmod ad pariatur. Voluptate excepteur aute fugiat exercitation ut enim qui. Nostrud occaecat enim minim in dolore elit veniam quis ea est dolor ad ullamco. Culpa in tempor consequat aliqua eiusmod ipsum reprehenderit.\r\n", - "registered": "2016-07-26T02:53:32 +04:00", - "latitude": -35.018944, - "longitude": 147.116022, - "tags": ["non", "id", "voluptate", "elit", "officia", "laboris", "ipsum"], - "friends": [ - { - "id": 0, - "name": "Juarez Parsons" - }, - { - "id": 1, - "name": "Benton Bullock" - }, - { - "id": 2, - "name": "Gonzales Foley" - } - ], - "greeting": "Hello, Nora Garner! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25dca953713077d4fbf", - "index": 1000, - "guid": "4956f270-d05d-4d3e-b41c-c9bf001606d3", - "isActive": false, - "balance": "$3,706.08", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Murray Brady", - "gender": "male", - "company": "QUALITERN", - "email": "murraybrady@qualitern.com", - "phone": "+1 (932) 525-2799", - "address": "452 Aurelia Court, Dahlen, New Hampshire, 6735", - "about": "Et incididunt nulla reprehenderit labore labore consequat non nulla quis ullamco irure. Aute qui esse excepteur aute do. Consectetur occaecat consequat officia in magna non adipisicing ut. Nulla ex ullamco sit nisi nulla aliquip eiusmod duis dolor Lorem cillum.\r\n", - "registered": "2019-11-21T04:22:03 +05:00", - "latitude": 14.73143, - "longitude": 105.490875, - "tags": ["ut", "consequat", "proident", "qui", "labore", "minim", "duis"], - "friends": [ - { - "id": 0, - "name": "Sandra Mcfadden" - }, - { - "id": 1, - "name": "Annmarie Holman" - }, - { - "id": 2, - "name": "Goodwin Shepherd" - } - ], - "greeting": "Hello, Murray Brady! You have 9 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d14b90356b8a63647", - "index": 1001, - "guid": "ceaef753-37d2-48db-b842-f397b30131ed", - "isActive": true, - "balance": "$1,149.62", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Caldwell Stewart", - "gender": "male", - "company": "TUBALUM", - "email": "caldwellstewart@tubalum.com", - "phone": "+1 (805) 409-3566", - "address": "986 Creamer Street, Rosewood, Colorado, 9300", - "about": "Adipisicing in dolor pariatur laborum aliquip enim veniam. Cillum commodo ullamco excepteur fugiat fugiat dolore ea elit elit tempor excepteur reprehenderit tempor. Esse incididunt ad voluptate magna cupidatat. Excepteur reprehenderit id ad elit anim veniam dolor amet velit. Nostrud duis id ullamco ipsum eu laborum ut tempor enim exercitation reprehenderit et.\r\n", - "registered": "2014-11-15T08:43:46 +05:00", - "latitude": -40.984919, - "longitude": -97.176555, - "tags": ["esse", "aliqua", "exercitation", "duis", "consectetur", "ad", "nostrud"], - "friends": [ - { - "id": 0, - "name": "Mccormick Richards" - }, - { - "id": 1, - "name": "Tabitha Paul" - }, - { - "id": 2, - "name": "Earlene Parrish" - } - ], - "greeting": "Hello, Caldwell Stewart! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dde507a6f31a8976b", - "index": 1002, - "guid": "ac50c8f4-d561-4966-ad51-693c8842833f", - "isActive": false, - "balance": "$3,601.87", - "picture": "http://placehold.it/32x32", - "age": 24, - "eyeColor": "green", - "name": "Austin Mathis", - "gender": "male", - "company": "COMVERGES", - "email": "austinmathis@comverges.com", - "phone": "+1 (973) 470-3622", - "address": "586 Bayview Avenue, Dola, Maine, 2516", - "about": "Qui occaecat ipsum sit dolor id. Aute et sunt ullamco mollit dolore culpa labore occaecat sunt duis esse. Laborum qui ea aute enim ad esse ipsum anim in fugiat ut id do velit. Esse ut officia est cupidatat excepteur consequat aute.\r\n", - "registered": "2015-07-09T07:38:58 +04:00", - "latitude": 24.062816, - "longitude": -142.858079, - "tags": ["aliqua", "anim", "mollit", "consequat", "pariatur", "sit", "exercitation"], - "friends": [ - { - "id": 0, - "name": "Juliet Coffey" - }, - { - "id": 1, - "name": "Tamika Gordon" - }, - { - "id": 2, - "name": "Hart Cline" - } - ], - "greeting": "Hello, Austin Mathis! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d3445627b2215bdd3", - "index": 1003, - "guid": "9fe94b6a-3b50-4fab-b94e-7289aea2668a", - "isActive": true, - "balance": "$3,343.89", - "picture": "http://placehold.it/32x32", - "age": 31, - "eyeColor": "brown", - "name": "Puckett Sims", - "gender": "male", - "company": "PETIGEMS", - "email": "puckettsims@petigems.com", - "phone": "+1 (920) 578-3894", - "address": "296 Atkins Avenue, Martinsville, South Carolina, 9958", - "about": "Laborum duis exercitation duis ea eu consequat est in ullamco aliqua ut cillum. Do laboris veniam eu enim. Adipisicing cillum sint dolore amet. Nulla tempor pariatur ea magna sit veniam velit incididunt excepteur cupidatat tempor reprehenderit. Labore et veniam cillum nisi do sint commodo. Adipisicing nostrud eu occaecat qui commodo et sunt.\r\n", - "registered": "2017-04-18T08:52:00 +04:00", - "latitude": 25.626924, - "longitude": -18.181401, - "tags": ["aliquip", "qui", "ipsum", "sunt", "mollit", "do", "ex"], - "friends": [ - { - "id": 0, - "name": "Jenkins Lynn" - }, - { - "id": 1, - "name": "Tamera Pickett" - }, - { - "id": 2, - "name": "Alfreda Brewer" - } - ], - "greeting": "Hello, Puckett Sims! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d5e3e54c7244129c0", - "index": 1004, - "guid": "0bc631e6-9f4a-432d-9ca0-81fdff7831c6", - "isActive": true, - "balance": "$2,309.00", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "brown", - "name": "Francisca Chase", - "gender": "female", - "company": "BYTREX", - "email": "franciscachase@bytrex.com", - "phone": "+1 (876) 550-3604", - "address": "269 Meserole Avenue, Chamizal, Connecticut, 6987", - "about": "Esse nisi nisi do reprehenderit reprehenderit nulla do aliquip. Proident proident eiusmod aliqua qui veniam excepteur et consequat laboris dolor. Excepteur tempor ut reprehenderit irure tempor. Dolor qui sit veniam ipsum nostrud enim deserunt quis aute officia laboris exercitation deserunt aliqua.\r\n", - "registered": "2019-04-27T12:42:33 +04:00", - "latitude": 29.417898, - "longitude": -20.869043, - "tags": ["aute", "cupidatat", "nisi", "esse", "duis", "consequat", "veniam"], - "friends": [ - { - "id": 0, - "name": "Day Willis" - }, - { - "id": 1, - "name": "Nelda Golden" - }, - { - "id": 2, - "name": "Jasmine Graham" - } - ], - "greeting": "Hello, Francisca Chase! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3594a86848c3e978", - "index": 1005, - "guid": "0a1c9fbb-4284-40c8-9561-87280146adc8", - "isActive": false, - "balance": "$1,868.59", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "green", - "name": "Sullivan Rich", - "gender": "male", - "company": "ACLIMA", - "email": "sullivanrich@aclima.com", - "phone": "+1 (930) 461-3770", - "address": "395 Covert Street, Oretta, Virginia, 8021", - "about": "Reprehenderit magna voluptate sint ad tempor sit minim nisi pariatur. Pariatur deserunt pariatur officia sunt duis ullamco veniam cupidatat. Aute laboris amet anim dolore quis ut quis. Eiusmod mollit minim cillum velit tempor. Enim ex excepteur deserunt excepteur ea esse velit. Lorem cillum et incididunt commodo labore cillum nulla.\r\n", - "registered": "2015-09-08T11:14:56 +04:00", - "latitude": -80.412671, - "longitude": 99.609627, - "tags": ["dolore", "culpa", "do", "ad", "sit", "consectetur", "irure"], - "friends": [ - { - "id": 0, - "name": "June Freeman" - }, - { - "id": 1, - "name": "Rena Wyatt" - }, - { - "id": 2, - "name": "Sears Dennis" - } - ], - "greeting": "Hello, Sullivan Rich! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dbef67c7e3bcf33aa", - "index": 1006, - "guid": "e4e8a5ba-ae95-4118-a688-1f78e3ccf5f8", - "isActive": false, - "balance": "$2,513.95", - "picture": "http://placehold.it/32x32", - "age": 33, - "eyeColor": "brown", - "name": "Hyde Contreras", - "gender": "male", - "company": "EXTRAGENE", - "email": "hydecontreras@extragene.com", - "phone": "+1 (844) 443-2710", - "address": "889 Fayette Street, Trinway, Georgia, 7604", - "about": "Sunt exercitation incididunt anim culpa veniam irure eiusmod fugiat occaecat consectetur irure. Veniam dolore fugiat veniam ad labore nisi non ad nulla et nulla reprehenderit laboris. Cupidatat tempor non pariatur nulla nostrud eiusmod.\r\n", - "registered": "2018-08-17T06:00:36 +04:00", - "latitude": 76.689615, - "longitude": 161.319152, - "tags": ["non", "id", "et", "in", "non", "irure", "velit"], - "friends": [ - { - "id": 0, - "name": "Chambers Sargent" - }, - { - "id": 1, - "name": "Leigh Hester" - }, - { - "id": 2, - "name": "Downs Hanson" - } - ], - "greeting": "Hello, Hyde Contreras! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d2d468e80f46dbf67", - "index": 1007, - "guid": "10067d24-a797-4d65-be66-b76723dac212", - "isActive": false, - "balance": "$3,185.01", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Dillon Mccoy", - "gender": "male", - "company": "EARTHMARK", - "email": "dillonmccoy@earthmark.com", - "phone": "+1 (800) 557-3396", - "address": "124 Dakota Place, Maxville, New Jersey, 6118", - "about": "Aliquip ipsum nostrud sint fugiat ullamco aute. Pariatur aute sint in cillum non dolor id amet minim adipisicing ipsum dolor occaecat. Voluptate incididunt occaecat aliquip do minim eiusmod tempor proident minim ut. Ut sint id nostrud laborum ea nulla deserunt deserunt ad consectetur qui enim proident sunt. Fugiat voluptate nostrud cupidatat esse exercitation pariatur do laborum aliqua anim voluptate aliqua sint. Do ex nisi deserunt dolor aliquip velit et fugiat mollit. Elit anim ad consectetur culpa.\r\n", - "registered": "2018-05-24T09:01:33 +04:00", - "latitude": 27.873026, - "longitude": -127.5565, - "tags": ["non", "est", "officia", "deserunt", "ex", "ex", "fugiat"], - "friends": [ - { - "id": 0, - "name": "Collier Rivers" - }, - { - "id": 1, - "name": "Woodward Dorsey" - }, - { - "id": 2, - "name": "Petra Nixon" - } - ], - "greeting": "Hello, Dillon Mccoy! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d4b28bd23ad977052", - "index": 1008, - "guid": "432e15b0-f7e7-4951-908e-0996125bc2d0", - "isActive": false, - "balance": "$1,323.27", - "picture": "http://placehold.it/32x32", - "age": 37, - "eyeColor": "brown", - "name": "Marietta Hensley", - "gender": "female", - "company": "EXTRO", - "email": "mariettahensley@extro.com", - "phone": "+1 (825) 501-3374", - "address": "337 Douglass Street, Boyd, Minnesota, 6292", - "about": "Deserunt cupidatat labore enim enim eu consequat minim reprehenderit consectetur. Mollit dolore laborum ad eu culpa nostrud eu velit nostrud nisi in esse est. Officia pariatur enim tempor cillum. Reprehenderit officia cupidatat dolor ipsum velit.\r\n", - "registered": "2019-12-02T03:27:15 +05:00", - "latitude": 23.843952, - "longitude": -169.655504, - "tags": ["proident", "esse", "laborum", "velit", "sint", "duis", "nulla"], - "friends": [ - { - "id": 0, - "name": "Kirby Livingston" - }, - { - "id": 1, - "name": "Courtney Cameron" - }, - { - "id": 2, - "name": "Rosella Whitehead" - } - ], - "greeting": "Hello, Marietta Hensley! You have 4 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d1d5d5ecea83feb3d", - "index": 1009, - "guid": "fae1633f-1fea-40cf-a3f6-13b6e028e98f", - "isActive": true, - "balance": "$3,441.61", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "brown", - "name": "Morgan Suarez", - "gender": "female", - "company": "POWERNET", - "email": "morgansuarez@powernet.com", - "phone": "+1 (958) 497-2031", - "address": "935 Duryea Court, Blende, Texas, 7603", - "about": "Adipisicing nostrud veniam Lorem labore anim elit dolor ea officia commodo. Quis amet ex duis nisi. Commodo excepteur pariatur occaecat ullamco aute velit ut amet ex. Duis dolore dolor nulla excepteur nostrud officia velit mollit est ex. Eiusmod ullamco eiusmod nostrud consectetur aliqua. Qui ex occaecat laborum aliquip est tempor quis anim sunt consectetur Lorem magna. Anim duis ipsum sint veniam laboris tempor anim excepteur amet.\r\n", - "registered": "2015-03-19T01:54:21 +04:00", - "latitude": -58.5367, - "longitude": -105.52097, - "tags": ["mollit", "do", "eiusmod", "fugiat", "duis", "ea", "nisi"], - "friends": [ - { - "id": 0, - "name": "Brandi Reilly" - }, - { - "id": 1, - "name": "Sandoval Watkins" - }, - { - "id": 2, - "name": "Bailey Villarreal" - } - ], - "greeting": "Hello, Morgan Suarez! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dfd4903b2d4fcae10", - "index": 1010, - "guid": "6b40c546-e710-462e-b2b8-d0e11cce18b8", - "isActive": true, - "balance": "$1,059.13", - "picture": "http://placehold.it/32x32", - "age": 30, - "eyeColor": "brown", - "name": "Luz Salas", - "gender": "female", - "company": "IDETICA", - "email": "luzsalas@idetica.com", - "phone": "+1 (842) 471-3010", - "address": "131 Harrison Avenue, Fredericktown, Alabama, 2783", - "about": "Laboris officia quis id sunt. In sunt Lorem quis Lorem eu pariatur mollit. Reprehenderit consectetur aliquip ipsum aliquip cupidatat.\r\n", - "registered": "2019-01-01T01:05:26 +05:00", - "latitude": -88.249344, - "longitude": 71.096008, - "tags": ["ad", "voluptate", "incididunt", "ea", "anim", "incididunt", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Cassandra Mckinney" - }, - { - "id": 1, - "name": "Janette Owen" - }, - { - "id": 2, - "name": "Sara Durham" - } - ], - "greeting": "Hello, Luz Salas! You have 3 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dd294784eaec70a36", - "index": 1011, - "guid": "3533fb85-8181-436a-b15c-71effc7d1bc6", - "isActive": false, - "balance": "$2,964.94", - "picture": "http://placehold.it/32x32", - "age": 26, - "eyeColor": "blue", - "name": "Hattie Adkins", - "gender": "female", - "company": "ISOTRACK", - "email": "hattieadkins@isotrack.com", - "phone": "+1 (989) 513-2994", - "address": "954 Brightwater Avenue, Germanton, Rhode Island, 7818", - "about": "Nulla nisi ea ut deserunt incididunt cupidatat elit reprehenderit reprehenderit sunt aliquip. Ea quis ipsum mollit eiusmod veniam sunt ea aliquip minim. Est fugiat do non ipsum est ut excepteur sint sit irure. Magna officia non reprehenderit aliqua aute do eiusmod eu minim. Non ut nostrud proident consectetur Lorem qui qui proident laborum sint.\r\n", - "registered": "2015-04-10T03:50:21 +04:00", - "latitude": -45.350044, - "longitude": 31.066228, - "tags": ["reprehenderit", "ipsum", "incididunt", "velit", "pariatur", "aute", "non"], - "friends": [ - { - "id": 0, - "name": "Betsy Barton" - }, - { - "id": 1, - "name": "Ramos Morales" - }, - { - "id": 2, - "name": "Grace Kerr" - } - ], - "greeting": "Hello, Hattie Adkins! You have 8 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d64ab48bd6c5232ce", - "index": 1012, - "guid": "0fbabc62-d5a7-4d8e-b465-94edc35d9130", - "isActive": true, - "balance": "$1,271.11", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Patricia Duncan", - "gender": "female", - "company": "INQUALA", - "email": "patriciaduncan@inquala.com", - "phone": "+1 (948) 578-2935", - "address": "789 Lorimer Street, Imperial, Florida, 981", - "about": "Nulla id ut aute amet minim. Exercitation elit veniam consectetur deserunt magna officia fugiat aliquip ex. Aliqua voluptate consequat enim in non est exercitation. Qui magna laborum aliqua deserunt magna voluptate anim cillum aute minim. Do velit voluptate consequat sit consequat minim duis duis nulla excepteur. Tempor esse laborum occaecat irure veniam proident ut.\r\n", - "registered": "2015-12-11T10:02:07 +05:00", - "latitude": 78.269441, - "longitude": 13.87222, - "tags": ["nulla", "aliquip", "adipisicing", "magna", "voluptate", "laborum", "cupidatat"], - "friends": [ - { - "id": 0, - "name": "Underwood Foreman" - }, - { - "id": 1, - "name": "Lang White" - }, - { - "id": 2, - "name": "Vanessa Stanton" - } - ], - "greeting": "Hello, Patricia Duncan! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d3c9f5b798473ce1e", - "index": 1013, - "guid": "b51a1c8a-0d13-46c1-b985-5f124279ab16", - "isActive": true, - "balance": "$2,542.92", - "picture": "http://placehold.it/32x32", - "age": 27, - "eyeColor": "blue", - "name": "Hawkins Wheeler", - "gender": "male", - "company": "ZANYMAX", - "email": "hawkinswheeler@zanymax.com", - "phone": "+1 (975) 493-2899", - "address": "477 Downing Street, Dupuyer, Indiana, 1185", - "about": "Labore aute laborum ullamco esse. Velit magna nulla commodo aliquip veniam sit. Aliqua mollit velit dolor duis cillum ut laborum id ad. Sunt minim qui sunt in id dolor occaecat eu.\r\n", - "registered": "2019-07-16T08:34:53 +04:00", - "latitude": 17.166033, - "longitude": 70.259971, - "tags": ["aliqua", "incididunt", "nisi", "quis", "duis", "velit", "ullamco"], - "friends": [ - { - "id": 0, - "name": "Finch Cain" - }, - { - "id": 1, - "name": "May Guerra" - }, - { - "id": 2, - "name": "Tessa Donaldson" - } - ], - "greeting": "Hello, Hawkins Wheeler! You have 10 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d57968cbbcedc876b", - "index": 1014, - "guid": "b5084e37-56d8-4ebc-b474-60294344c6dc", - "isActive": false, - "balance": "$1,191.49", - "picture": "http://placehold.it/32x32", - "age": 34, - "eyeColor": "green", - "name": "Wright Marshall", - "gender": "male", - "company": "AVIT", - "email": "wrightmarshall@avit.com", - "phone": "+1 (957) 514-3830", - "address": "898 Hope Street, Orviston, Northern Mariana Islands, 8915", - "about": "Ea culpa dolore duis sit Lorem dolore et duis. Laboris voluptate reprehenderit voluptate est labore quis id id laborum. In mollit incididunt aliqua nisi duis commodo deserunt ipsum in incididunt sint. Amet aute eiusmod labore dolor labore proident elit ullamco consequat consectetur. Deserunt voluptate commodo ut amet fugiat irure amet velit incididunt amet est. Proident excepteur ad incididunt irure quis. Elit cillum sint ipsum ut incididunt ut officia deserunt nostrud.\r\n", - "registered": "2018-02-09T11:38:41 +05:00", - "latitude": 84.487649, - "longitude": -91.066346, - "tags": ["sit", "consequat", "dolore", "aliqua", "nostrud", "in", "duis"], - "friends": [ - { - "id": 0, - "name": "Kaye Small" - }, - { - "id": 1, - "name": "Stephanie Winters" - }, - { - "id": 2, - "name": "Dora Johnston" - } - ], - "greeting": "Hello, Wright Marshall! You have 6 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df7fb23640882849e", - "index": 1015, - "guid": "7b107726-e092-401c-8d75-873c443f0949", - "isActive": true, - "balance": "$2,767.89", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "green", - "name": "Mack Maddox", - "gender": "male", - "company": "ENVIRE", - "email": "mackmaddox@envire.com", - "phone": "+1 (971) 571-2215", - "address": "523 Hampton Place, Fairfield, Idaho, 7140", - "about": "Laborum reprehenderit ex sunt non commodo officia Lorem non exercitation Lorem aute. Duis amet eiusmod reprehenderit voluptate et exercitation. Sint laborum nulla laborum pariatur cillum eu occaecat sint fugiat sunt sint minim amet ex. Nisi sit nisi magna labore officia irure excepteur cupidatat do eiusmod. Deserunt pariatur est nisi fugiat eiusmod esse excepteur elit elit consectetur eiusmod cillum enim dolore.\r\n", - "registered": "2015-10-07T07:13:51 +04:00", - "latitude": -10.002077, - "longitude": 98.186101, - "tags": ["ad", "incididunt", "duis", "tempor", "reprehenderit", "sunt", "duis"], - "friends": [ - { - "id": 0, - "name": "Nancy Lamb" - }, - { - "id": 1, - "name": "Fulton Evans" - }, - { - "id": 2, - "name": "Valenzuela Petersen" - } - ], - "greeting": "Hello, Mack Maddox! You have 5 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25df34deb71fb6b69f4", - "index": 1016, - "guid": "1af532f0-2e67-4492-901b-d466966668ac", - "isActive": false, - "balance": "$1,687.68", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Stanton Thompson", - "gender": "male", - "company": "CHILLIUM", - "email": "stantonthompson@chillium.com", - "phone": "+1 (970) 560-3487", - "address": "402 Woodbine Street, Kraemer, District Of Columbia, 2337", - "about": "Ullamco elit pariatur dolore minim et qui sint fugiat magna do. Nulla culpa enim id sit reprehenderit adipisicing sit adipisicing qui ea dolore deserunt ullamco nostrud. Incididunt proident dolor dolor ipsum nostrud. Eu id aute cillum nulla consectetur eiusmod ullamco dolor cupidatat est. Qui minim ipsum labore laboris sunt laborum ullamco cupidatat id exercitation tempor elit ex cillum.\r\n", - "registered": "2020-01-23T04:15:59 +05:00", - "latitude": 35.856827, - "longitude": 85.29493, - "tags": ["est", "ea", "id", "exercitation", "occaecat", "do", "ut"], - "friends": [ - { - "id": 0, - "name": "Leona Nolan" - }, - { - "id": 1, - "name": "Jan Moreno" - }, - { - "id": 2, - "name": "Sellers Austin" - } - ], - "greeting": "Hello, Stanton Thompson! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25dad9ff80d0a139920", - "index": 1017, - "guid": "d5d5e98b-3c93-4a23-860c-b6e0dcc81801", - "isActive": false, - "balance": "$2,695.71", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Davis Santiago", - "gender": "male", - "company": "GEEKKO", - "email": "davissantiago@geekko.com", - "phone": "+1 (848) 515-3758", - "address": "845 Keen Court, Fairhaven, New Mexico, 933", - "about": "Officia magna sint nostrud reprehenderit velit. Veniam cillum enim id do qui elit sit elit fugiat duis duis. Occaecat do laboris dolor sit elit aute do amet. Mollit fugiat pariatur aliqua deserunt qui aliquip elit sint ullamco deserunt fugiat mollit laboris. Quis ex ut elit excepteur. Est commodo eu dolore eu in sit minim proident reprehenderit commodo et. Irure excepteur Lorem cupidatat ea Lorem id ut qui culpa reprehenderit ut qui.\r\n", - "registered": "2019-08-14T04:13:39 +04:00", - "latitude": 34.874439, - "longitude": -58.357908, - "tags": ["proident", "occaecat", "nulla", "pariatur", "velit", "esse", "quis"], - "friends": [ - { - "id": 0, - "name": "Victoria Perez" - }, - { - "id": 1, - "name": "Avery Donovan" - }, - { - "id": 2, - "name": "Terry Cooley" - } - ], - "greeting": "Hello, Davis Santiago! You have 9 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25d53a2bbd70b696825", - "index": 1018, - "guid": "2f0431a6-d785-4324-94ce-1bd551eeb03b", - "isActive": false, - "balance": "$3,411.86", - "picture": "http://placehold.it/32x32", - "age": 25, - "eyeColor": "brown", - "name": "Sallie Matthews", - "gender": "female", - "company": "SLAMBDA", - "email": "salliematthews@slambda.com", - "phone": "+1 (885) 581-3715", - "address": "551 Onderdonk Avenue, Cutter, South Dakota, 5029", - "about": "Esse ipsum adipisicing consequat exercitation incididunt in nisi nostrud sunt sint. Nulla fugiat cillum fugiat fugiat. Amet sit est magna incididunt.\r\n", - "registered": "2017-02-23T10:24:14 +05:00", - "latitude": 40.734263, - "longitude": 105.284731, - "tags": ["commodo", "id", "eiusmod", "do", "minim", "irure", "officia"], - "friends": [ - { - "id": 0, - "name": "Ochoa Rodriquez" - }, - { - "id": 1, - "name": "Lott Franks" - }, - { - "id": 2, - "name": "Nash Guerrero" - } - ], - "greeting": "Hello, Sallie Matthews! You have 2 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d4433baf28f70f788", - "index": 1019, - "guid": "ff357627-684e-431d-89ce-4cd298a399e4", - "isActive": true, - "balance": "$3,871.38", - "picture": "http://placehold.it/32x32", - "age": 23, - "eyeColor": "green", - "name": "Hendrix Marks", - "gender": "male", - "company": "NIPAZ", - "email": "hendrixmarks@nipaz.com", - "phone": "+1 (989) 464-3694", - "address": "791 Clymer Street, Accoville, American Samoa, 864", - "about": "Dolore mollit eiusmod qui eu nostrud culpa ex minim dolor eu fugiat. Eiusmod voluptate et in sint consequat duis duis aliquip consequat aliquip exercitation duis sit non. Eiusmod cupidatat aute laboris aute aute occaecat nostrud consequat et.\r\n", - "registered": "2014-10-10T09:23:49 +04:00", - "latitude": -56.062734, - "longitude": 143.15588, - "tags": ["ex", "fugiat", "incididunt", "sit", "anim", "nostrud", "quis"], - "friends": [ - { - "id": 0, - "name": "Dickerson Merrill" - }, - { - "id": 1, - "name": "Moore Guy" - }, - { - "id": 2, - "name": "Mckinney Salazar" - } - ], - "greeting": "Hello, Hendrix Marks! You have 10 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d285f00fcad78e02f", - "index": 1020, - "guid": "0d875f48-2eae-4bd8-be7d-ea2b44923fa2", - "isActive": false, - "balance": "$3,356.85", - "picture": "http://placehold.it/32x32", - "age": 38, - "eyeColor": "blue", - "name": "Pitts Rutledge", - "gender": "male", - "company": "REALMO", - "email": "pittsrutledge@realmo.com", - "phone": "+1 (920) 591-3232", - "address": "984 Hanover Place, Jamestown, Iowa, 9516", - "about": "Velit consectetur id aliquip excepteur deserunt id cupidatat nostrud. Cupidatat Lorem magna enim non consectetur exercitation Lorem ad ut elit quis officia. Aute aute consequat est est do. Duis anim mollit cillum ad proident in occaecat est non sint. Laboris magna qui anim tempor aute pariatur ullamco ut culpa anim. Duis aute consectetur id enim tempor reprehenderit laboris in ullamco. Nisi consequat veniam in minim nulla do id cillum incididunt.\r\n", - "registered": "2015-05-22T11:08:12 +04:00", - "latitude": 29.515545, - "longitude": -95.329717, - "tags": ["exercitation", "consequat", "adipisicing", "nostrud", "exercitation", "sit", "nulla"], - "friends": [ - { - "id": 0, - "name": "Anderson Mosley" - }, - { - "id": 1, - "name": "Lowe Bates" - }, - { - "id": 2, - "name": "Crane Barry" - } - ], - "greeting": "Hello, Pitts Rutledge! You have 1 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "5f5ba25d3d98bafe6bc4b979", - "index": 1021, - "guid": "e0522ee9-2241-4ad7-8a9b-961ae97661f6", - "isActive": true, - "balance": "$1,259.60", - "picture": "http://placehold.it/32x32", - "age": 29, - "eyeColor": "green", - "name": "Carney Gilmore", - "gender": "male", - "company": "STEELTAB", - "email": "carneygilmore@steeltab.com", - "phone": "+1 (873) 421-3101", - "address": "539 Kossuth Place, Reinerton, Palau, 4268", - "about": "Elit ullamco tempor sunt do anim ut. Veniam fugiat excepteur esse eu non duis aliqua sunt commodo minim laboris qui do velit. Laborum laboris qui ipsum ea minim sint anim voluptate irure commodo.\r\n", - "registered": "2017-11-21T09:13:08 +05:00", - "latitude": -79.553404, - "longitude": -134.449624, - "tags": ["cupidatat", "cupidatat", "sunt", "commodo", "anim", "culpa", "voluptate"], - "friends": [ - { - "id": 0, - "name": "Lucinda Fischer" - }, - { - "id": 1, - "name": "Alston Mclean" - }, - { - "id": 2, - "name": "Paul Aguirre" - } - ], - "greeting": "Hello, Carney Gilmore! You have 8 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "5f5ba25d315aebb9cee8bee0", - "index": 1022, - "guid": "813366c2-917d-4024-ad71-8288295dc4f4", - "isActive": true, - "balance": "$3,221.46", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "brown", - "name": "Christy Blevins", - "gender": "female", - "company": "HELIXO", - "email": "christyblevins@helixo.com", - "phone": "+1 (952) 406-2214", - "address": "997 Highland Boulevard, Hobucken, West Virginia, 2798", - "about": "Nisi proident occaecat Lorem fugiat consectetur reprehenderit nulla dolore exercitation deserunt. Velit nostrud anim ut elit commodo incididunt nulla do incididunt nostrud irure aliquip. Deserunt et id officia laborum ad cupidatat est ea deserunt non cupidatat cillum. Reprehenderit fugiat voluptate culpa laboris elit ea aliqua.\r\n", - "registered": "2014-12-29T02:34:49 +05:00", - "latitude": 32.248918, - "longitude": -175.821225, - "tags": ["velit", "ex", "esse", "cillum", "consectetur", "mollit", "non"], - "friends": [ - { - "id": 0, - "name": "Mccall Hoover" - }, - { - "id": 1, - "name": "Leila Blake" - }, - { - "id": 2, - "name": "Maxwell Watson" - } - ], - "greeting": "Hello, Christy Blevins! You have 2 unread messages.", - "favoriteFruit": "apple" - }, - { - "_id": "5f5ba25df108736a03aa461a", - "index": 1023, - "guid": "538af93c-d91e-49e8-9c18-77d698a1841e", - "isActive": false, - "balance": "$1,364.53", - "picture": "http://placehold.it/32x32", - "age": 36, - "eyeColor": "green", - "name": "Berta Berry", - "gender": "female", - "company": "CODAX", - "email": "bertaberry@codax.com", - "phone": "+1 (908) 525-3493", - "address": "276 Dupont Street, Summertown, New York, 4817", - "about": "Velit deserunt veniam cillum occaecat culpa id voluptate ex ut sint labore labore ipsum. Esse aute ea commodo deserunt commodo. Do culpa qui consectetur et. Et laboris ipsum occaecat ipsum laborum officia adipisicing consectetur. Mollit veniam in aliqua Lorem in dolore excepteur cupidatat deserunt.\r\n", - "registered": "2016-02-04T09:52:38 +05:00", - "latitude": 14.248172, - "longitude": 127.719246, - "tags": ["ea", "excepteur", "mollit", "ex", "pariatur", "nisi", "anim"], - "friends": [ - { - "id": 0, - "name": "Fletcher William" - }, - { - "id": 1, - "name": "Justine Berg" - }, - { - "id": 2, - "name": "Imogene Collier" - } - ], - "greeting": "Hello, Berta Berry! You have 4 unread messages.", - "favoriteFruit": "apple" - } -] diff --git a/packages/quickjs-emscripten/tsconfig.build.json b/packages/quickjs-emscripten/tsconfig.build.json deleted file mode 100644 index 7412f5b69..000000000 --- a/packages/quickjs-emscripten/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": ".output", - "rootDir": "src", - "paths": { - "#variants": ["./src/variants.ts", "./src/variants.js"] - } - } -} diff --git a/packages/quickjs-emscripten/tsconfig.iife.json b/packages/quickjs-emscripten/tsconfig.iife.json deleted file mode 100644 index b44e1af4f..000000000 --- a/packages/quickjs-emscripten/tsconfig.iife.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "#variants": ["./src/variants.iife.ts", "./src/variants.iife.js"] - } - } -} diff --git a/packages/quickjs-emscripten/tsconfig.json b/packages/quickjs-emscripten/tsconfig.json deleted file mode 100644 index 8631045d9..000000000 --- a/packages/quickjs-emscripten/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@jitl/tsconfig/tsconfig.json", - "include": ["src/*.*ts"], - "compilerOptions": { - "paths": { - "#variants": ["./src/variants.ts", "./src/variants.js"], - "quickjs-emscripten-core": ["../quickjs-emscripten-core/src"], - "quickjs-emscripten-core/*": ["../quickjs-emscripten-core/src/*"] - } - } -} diff --git a/packages/quickjs-emscripten/tsup.config.ts b/packages/quickjs-emscripten/tsup.config.ts deleted file mode 100644 index 8ae8bb05e..000000000 --- a/packages/quickjs-emscripten/tsup.config.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { defineConfig, type Options } from "tsup" -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" - -const browsers: Extract> = [ - "deno1", - "safari14", - "chrome80", - "firefox72", - "ios16", -] - -const configs = [ - extendConfig({ - entry: ["src/index.ts", "src/variants.ts"], - tsconfig: "./tsconfig.build.json", - format: "esm", - target: ["node16", ...browsers], - }), - extendConfig({ - entry: ["src/index.ts", "src/variants.ts"], - tsconfig: "./tsconfig.build.json", - format: "cjs", - }), - extendConfig({ - entry: ["src/index.ts"], - format: "iife", - globalName: "QJS", - target: [...browsers], - tsconfig: "./tsconfig.iife.json", - sourcemap: false, - dts: false, - esbuildOptions(options, _context) { - options.conditions ??= [] - options.conditions.push("iife") - }, - }), -] - -export default defineConfig((options) => configs.map((cfg) => cfg(options))) diff --git a/packages/quickjs-emscripten/typedoc.js b/packages/quickjs-emscripten/typedoc.js deleted file mode 100644 index e124ab88c..000000000 --- a/packages/quickjs-emscripten/typedoc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: "../../typedoc.base.js", - entryPoints: ["./src/index.ts"], -} diff --git a/packages/quickjs-emscripten/vite.config.mts b/packages/quickjs-emscripten/vite.config.mts deleted file mode 100644 index b8036c096..000000000 --- a/packages/quickjs-emscripten/vite.config.mts +++ /dev/null @@ -1,2 +0,0 @@ -import config from "@jitl/tsconfig/vite.base.config.mjs" -export default config diff --git a/packages/quickjs-ffi-types/.gitignore b/packages/quickjs-ffi-types/.gitignore deleted file mode 100644 index 1521c8b76..000000000 --- a/packages/quickjs-ffi-types/.gitignore +++ /dev/null @@ -1 +0,0 @@ -dist diff --git a/packages/quickjs-ffi-types/LICENSE b/packages/quickjs-ffi-types/LICENSE deleted file mode 100644 index 22f51c713..000000000 --- a/packages/quickjs-ffi-types/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/quickjs-ffi-types/README.md b/packages/quickjs-ffi-types/README.md deleted file mode 100644 index a564c3bcc..000000000 --- a/packages/quickjs-ffi-types/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# @jitl/quickjs-ffi-types - -This is an internal package, part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). - -See the main package for documentation. diff --git a/packages/quickjs-ffi-types/package.json b/packages/quickjs-ffi-types/package.json deleted file mode 100644 index 760fb4414..000000000 --- a/packages/quickjs-ffi-types/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@jitl/quickjs-ffi-types", - "version": "0.31.0", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "check": "npx tsc --project . --noEmit", - "build": "npx tsup", - "clean": "git clean -fx dist" - }, - "files": [ - "LICENSE", - "dist/**/*" - ], - "types": "dist/index.d.ts", - "main": "dist/index.js", - "module": "dist/index.mjs", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - } - }, - "devDependencies": { - "@jitl/tsconfig": "workspace:*" - } -} diff --git a/packages/quickjs-ffi-types/src/emscripten-types.ts b/packages/quickjs-ffi-types/src/emscripten-types.ts deleted file mode 100644 index e4e080932..000000000 --- a/packages/quickjs-ffi-types/src/emscripten-types.ts +++ /dev/null @@ -1,250 +0,0 @@ -// This is a subset of the Emscripten type definitions from @types/emscripten -// Project: http://kripken.github.io/emscripten-site/index.html -// Definitions by: Kensuke Matsuzaki -// Periklis Tsirakidis -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// -// quickjs-emscripten doesn't use the full EmscriptenModule type from @types/emscripten because: -// -// - the upstream types define many properties that don't exist on our module due -// to our build settings -// - some upstream types reference web-only ambient types like WebGL stuff, which -// we don't use. - -import type { - BorrowedHeapCharPointer, - JSContextPointer, - JSRuntimePointer, - JSValueConstPointer, - JSValuePointer, - OwnedHeapCharPointer, -} from "./ffi-types" - -// eslint-disable-next-line @typescript-eslint/no-namespace -declare namespace Emscripten { - interface FileSystemType {} - type EnvironmentType = "WEB" | "NODE" | "SHELL" | "WORKER" - type ValueType = "number" | "string" | "array" | "boolean" - type TypeCompatibleWithC = number | string | any[] | boolean - - type WebAssemblyImports = Array<{ - name: string - kind: string - }> - - type WebAssemblyExports = Array<{ - module: string - name: string - kind: string - }> - - interface CCallOpts { - async?: boolean - } - - class WasmOffsetConverter { - constructor(wasmBytes: ArrayBuffer, wasmModule: WebAssembly.Module) - convert(funcidx: number, offset: number): number - getIndex(offset: number): number - isSameFunc(offset1: number, offset2: number): boolean - getName(offset: number): string - } -} - -export interface SourceMapData { - version: number - sources: string[] - names: string[] - mappings: string -} - -/** @private */ -export interface QuickJSEmscriptenExtensions { - mock?: boolean - removeRunDependency?(name: string): void - receiveSourceMapJSON?(data: SourceMapData): void - WasmOffsetConverter?: typeof Emscripten.WasmOffsetConverter - existingWasmOffsetConverter?: Emscripten.WasmOffsetConverter - receiveWasmOffsetConverter?(bytes: ArrayBuffer, mod: WebAssembly.Module): void - getWasmMemory?(): WebAssembly.Memory -} - -/** - * This structure is defined by Emscripten. - * It's possible to provide these parameters to an emscripten module loader. - * See [the Emscripten Module API reference](https://emscripten.org/docs/api_reference/module.html). - */ -export interface EmscriptenModuleLoaderOptions { - /** - * If set, this method will be called when the runtime needs to load a file, - * such as a .wasm WebAssembly file, .mem memory init file, or a file - * generated by the file packager. - * - * The function receives two parameters: - * - * - `fileName`, the relative path to the file as configured in build - * process, eg `"emscripten-module.wasm"`. - * - `prefix` (path to the main JavaScript file’s directory). This may be `''` - * (empty string) in some cases if the Emscripten Javascript code can't locate - * itself. Try logging it in your environment. - * - * It should return the actual URI or path to the requested file. - * - * This lets you host file packages on a different location than the directory - * of the JavaScript file (which is the default expectation), for example if - * you want to host them on a CDN. - */ - locateFile?( - fileName: "emscripten-module.wasm" | "emscripten-module.wasm.map" | string, - /** Often `''` (empty string) */ - prefix: string, - ): string - - /** Compile this to WebAssembly.Module */ - wasmBinary?: ArrayBuffer - - /** If provided, use this WebAssembly.Memory instead of an automatically created one. */ - wasmMemory?: WebAssembly.Memory - - /** Create an instance of the WASM module, call onSuccess(instance), then return instance.exports */ - instantiateWasm?( - imports: WebAssembly.Imports, - onSuccess: (instance: WebAssembly.Instance) => void, - ): WebAssembly.Exports | Promise - - /** Called by emscripten as dependencies blocking initialization are added or fulfilled. May only be called in debug builds. */ - monitorRunDependencies?(left: number): void - - /** - * Emscripten may mutate the loader options object to contain this function. - * It's added in our --pre-js / pre.js file, and used by custom variant loaders. - * @private - */ - quickjsEmscriptenInit?(log: typeof console.log): QuickJSEmscriptenExtensions -} - -/** - * Typings for the features we use to interface with our Emscripten build of - * QuickJS. - */ -export interface EmscriptenModule extends EmscriptenModuleLoaderOptions { - // No longer needed: - // addFunction(fn: Function, type: string): number - // removeFunction(pointer: number): void - - /** - * Write JS `str` to HeapChar pointer. - * https://emscripten.org/docs/api_reference/preamble.js.html#stringToUTF8 - */ - stringToUTF8(str: string, outPtr: OwnedHeapCharPointer, maxBytesToRead?: number): void - /** - * HeapChar to JS string. - * https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString - */ - UTF8ToString(ptr: BorrowedHeapCharPointer, maxBytesToRead?: number): string - lengthBytesUTF8(str: string): number - - _malloc(size: number): number - _free(ptr: number): void - cwrap( - ident: string, - returnType: Emscripten.ValueType | null, - argTypes: Emscripten.ValueType[], - opts?: Emscripten.CCallOpts, - ): (...args: any[]) => any - - // USE_TYPED_ARRAYS == 2 - HEAP8: Int8Array - HEAP16: Int16Array - HEAP32: Int32Array - HEAPU8: Uint8Array - HEAPU16: Uint16Array - HEAPU32: Uint32Array - HEAPF32: Float32Array - HEAPF64: Float64Array - - TOTAL_STACK: number - TOTAL_MEMORY: number - FAST_MEMORY: number -} - -// This isn't the real return type of handleAsync, but it's better to treat it this way. -declare const AsyncifySleepReturnValue: unique symbol -/** @private */ -export type AsyncifySleepResult = T & typeof AsyncifySleepReturnValue - -/** - * Allows us to optionally suspend the Emscripten runtime to wait for a promise. - * https://emscripten.org/docs/porting/asyncify.html#ways-to-use-async-apis-in-older-engines - * ``` - * EM_JS(int, do_fetch, (), { - * return Asyncify.handleSleep(function (wakeUp) { - * out("waiting for a fetch"); - * fetch("a.html").then(function (response) { - * out("got the fetch response"); - * // (normally you would do something with the fetch here) - * wakeUp(42); - * }); - * }); - * }); - * ``` - * @private - */ -export interface Asyncify { - handleSleep(maybeAsyncFn: (wakeUp: (result: T) => void) => void): AsyncifySleepResult - // Because this one requires a promise, it's going to be less efficient than - // the callback system. Plus it seems like we'd need to use SyncPromise to - // avoid suspending. - // handleAsync(asyncFn: () => T | Promise): AsyncifySleepResult -} - -/** - * @private - */ -export interface EmscriptenModuleCallbacks { - callFunction: ( - asyncify: Asyncify | undefined, - ctx: JSContextPointer, - this_ptr: JSValueConstPointer, - argc: number, - argv: JSValueConstPointer, - fn_id: number, - ) => JSValuePointer | AsyncifySleepResult - - loadModuleSource: ( - asyncify: Asyncify | undefined, - rt: JSRuntimePointer, - ctx: JSContextPointer, - module_name: string, - ) => BorrowedHeapCharPointer | AsyncifySleepResult - - normalizeModule: ( - asyncify: Asyncify | undefined, - rt: JSRuntimePointer, - ctx: JSContextPointer, - module_base_name: string, - module_name: string, - ) => BorrowedHeapCharPointer | AsyncifySleepResult - - shouldInterrupt: ( - asyncify: Asyncify | undefined, - rt: JSRuntimePointer, - ) => 0 | 1 | AsyncifySleepResult<0 | 1> -} - -export interface QuickJSEmscriptenModule extends EmscriptenModule { - type: "sync" - callbacks: EmscriptenModuleCallbacks -} - -export interface QuickJSAsyncEmscriptenModule extends EmscriptenModule { - /** @todo Implement this field */ - type: "async" - callbacks: EmscriptenModuleCallbacks -} - -export type EitherModule = QuickJSEmscriptenModule | QuickJSAsyncEmscriptenModule - -export interface EmscriptenModuleLoader { - (options?: EmscriptenModuleLoaderOptions): Promise -} diff --git a/packages/quickjs-ffi-types/src/ffi-async.ts b/packages/quickjs-ffi-types/src/ffi-async.ts deleted file mode 100644 index 8f50f7b23..000000000 --- a/packages/quickjs-ffi-types/src/ffi-async.ts +++ /dev/null @@ -1,266 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "." - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export interface QuickJSAsyncFFI { - /** Set at compile time. */ - readonly DEBUG: boolean - - QTS_Throw: (ctx: JSContextPointer, error: JSValuePointer | JSValueConstPointer) => JSValuePointer - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer - QTS_RecoverableLeakCheck: () => number - QTS_BuildIsSanitizeLeak: () => number - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void - QTS_GetUndefined: () => JSValueConstPointer - QTS_GetNull: () => JSValueConstPointer - QTS_GetFalse: () => JSValueConstPointer - QTS_GetTrue: () => JSValueConstPointer - QTS_NewRuntime: () => JSRuntimePointer - QTS_FreeRuntime: (rt: JSRuntimePointer) => void - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer - QTS_FreeContext: (ctx: JSContextPointer) => void - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise - QTS_IsGlobalSymbol: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number - QTS_IsJobPending: (rt: JSRuntimePointer) => number - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_TestStringArg: (string: string) => void - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void - QTS_BuildIsDebug: () => number - QTS_BuildIsAsyncify: () => number - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer -} diff --git a/packages/quickjs-ffi-types/src/ffi-types.ts b/packages/quickjs-ffi-types/src/ffi-types.ts deleted file mode 100644 index b8c03033e..000000000 --- a/packages/quickjs-ffi-types/src/ffi-types.ts +++ /dev/null @@ -1,216 +0,0 @@ -/** - * C pointer to type `CType`. Pointer types are used internally for FFI, but - * are not intended for external use. - * - * @unstable This type is considered private and may change. - */ -type Pointer = number & { ctype: CType } - -type Brand = T & { brand: B } - -/** - * `JSRuntime*`. - */ -export type JSRuntimePointer = Pointer<"JSRuntime"> - -/** - * `JSContext*`. - */ -export type JSContextPointer = Pointer<"JSContext"> - -/** - * `JSContext**`. Used internally for execute pending jobs. - */ -export type JSContextPointerPointer = Pointer<"JSContext"> - -/** - * `JSModuleDef*`. - */ -export type JSModuleDefPointer = Pointer<"JSModuleDef"> - -/** - * `JSValue*`. - * See {@link JSValue}. - */ -export type JSValuePointer = Pointer<"JSValue"> - -/** - * `JSValueConst* - * See {@link JSValueConst} and {@link StaticJSValue}. - */ -export type JSValueConstPointer = Pointer<"JSValueConst"> - -/** - * Used internally for Javascript-to-C function calls. - */ -export type JSValuePointerPointer = Pointer<"JSValue[]"> - -/** - * Used internally for Javascript-to-C function calls. - */ -export type JSValuePointerPointerPointer = Pointer<"*JSValue[]"> - -/** - * Used internally for Javascript-to-C function calls. - */ -export type JSValueConstPointerPointer = Pointer<"JSValueConst[]"> - -/** - * Used internally for C-to-Javascript function calls. - */ -// type JSCFunctionPointer = Pointer<'JSCFunction'> - -/** - * Used internally for C-to-Javascript function calls. - */ -export type QTS_C_To_HostCallbackFuncPointer = Pointer<"C_To_HostCallbackFunc"> - -/** - * Used internally for C-to-Javascript interrupt handlers. - */ -export type QTS_C_To_HostInterruptFuncPointer = Pointer<"C_To_HostInterruptFunc"> - -/** - * Used internally for C-to-Javascript module loading. - */ -export type QTS_C_To_HostLoadModuleFuncPointer = Pointer<"C_To_HostLoadModuleFunc"> - -/** - * Used internally for Javascript-to-C calls that may contain strings too large - * for the Emscripten stack. - */ -export type BorrowedHeapCharPointer = Pointer<"const char" | "char" | "js const char"> - -/** - * Used internally for Javascript-to-C calls that may contain strings too large - * for the Emscripten stack. - */ -export type OwnedHeapCharPointer = Pointer<"char"> - -/** - * Used internally for Javascript-to-C calls that may contain strings too large - * for the Emscripten stack. - */ -export type JSBorrowedCharPointer = Pointer<"js const char"> - -/** - * Opaque pointer that was allocated by js_malloc. - */ -export type JSVoidPointer = Pointer - -export type UInt32Pointer = Pointer<"uint32_t"> - -/** - * @private - */ -export type EvalFlags = Brand - -/** - * @private - */ -export type IntrinsicsFlags = Brand - -/** - * @private - */ -export type EvalDetectModule = Brand - -/** - * @private - */ -export type GetOwnPropertyNamesFlags = Brand - -/** - * @private - */ -export type IsEqualOp = Brand - -/** - * State of a promise. - */ -export type JSPromiseStateEnum = Brand< - (typeof JSPromiseStateEnum)[keyof typeof JSPromiseStateEnum], - "JSPromiseStateEnum" -> - -export function assertSync(fn: (...args: Args) => R): (...args: Args) => R { - return function mustBeSync(...args: Args): R { - const result = fn(...args) - if (result && typeof result === "object" && result instanceof Promise) { - throw new Error("Function unexpectedly returned a Promise") - } - return result - } -} - -/** Bitfield options for JS_Eval() C function. */ -export const EvalFlags = { - /** global code (default) */ - JS_EVAL_TYPE_GLOBAL: 0 << 0, - /** module code */ - JS_EVAL_TYPE_MODULE: 1 << 0, - /** direct call (internal use) */ - JS_EVAL_TYPE_DIRECT: 2 << 0, - /** indirect call (internal use) */ - JS_EVAL_TYPE_INDIRECT: 3 << 0, - JS_EVAL_TYPE_MASK: 3 << 0, - /** force 'strict' mode */ - JS_EVAL_FLAG_STRICT: 1 << 3, - /** force 'strip' mode */ - JS_EVAL_FLAG_STRIP: 1 << 4, - /** - * compile but do not run. The result is an object with a - * JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed - * with JS_EvalFunction(). - */ - JS_EVAL_FLAG_COMPILE_ONLY: 1 << 5, - /** don't include the stack frames before this eval in the Error() backtraces */ - JS_EVAL_FLAG_BACKTRACE_BARRIER: 1 << 6, -} as const - -/** Bitfield options for QTS_NewContext intrinsics */ -export const IntrinsicsFlags = { - BaseObjects: 1 << 0, - Date: 1 << 1, - Eval: 1 << 2, - StringNormalize: 1 << 3, - RegExp: 1 << 4, - RegExpCompiler: 1 << 5, - JSON: 1 << 6, - Proxy: 1 << 7, - MapSet: 1 << 8, - TypedArrays: 1 << 9, - Promise: 1 << 10, - BigInt: 1 << 11, - BigFloat: 1 << 12, - BigDecimal: 1 << 13, - OperatorOverloading: 1 << 14, - BignumExt: 1 << 15, -} as const - -export const JSPromiseStateEnum = { - Pending: 0, - Fulfilled: 1, - Rejected: 2, -} as const - -/** Bitfield options for QTS_GetOwnPropertyNames */ -export const GetOwnPropertyNamesFlags = { - JS_GPN_STRING_MASK: 1 << 0, - JS_GPN_SYMBOL_MASK: 1 << 1, - JS_GPN_PRIVATE_MASK: 1 << 2, - /* only include the enumerable properties */ - JS_GPN_ENUM_ONLY: 1 << 4, - /* set theJSPropertyEnum.is_enumerable field */ - JS_GPN_SET_ENUM: 1 << 5, - /* include numbers. when only this is set, we filter out strings */ - QTS_GPN_NUMBER_MASK: 1 << 6, - /* Treat numbers as strings */ - QTS_STANDARD_COMPLIANT_NUMBER: 1 << 7, -} - -export const IsEqualOp = { - IsStrictlyEqual: 0 as IsEqualOp, - IsSameValue: 1 as IsEqualOp, - IsSameValueZero: 2 as IsEqualOp, -} diff --git a/packages/quickjs-ffi-types/src/ffi.ts b/packages/quickjs-ffi-types/src/ffi.ts deleted file mode 100644 index cf9a2096f..000000000 --- a/packages/quickjs-ffi-types/src/ffi.ts +++ /dev/null @@ -1,214 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "." - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export interface QuickJSFFI { - /** Set at compile time. */ - readonly DEBUG: boolean - - QTS_Throw: (ctx: JSContextPointer, error: JSValuePointer | JSValueConstPointer) => JSValuePointer - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer - QTS_RecoverableLeakCheck: () => number - QTS_BuildIsSanitizeLeak: () => number - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void - QTS_GetUndefined: () => JSValueConstPointer - QTS_GetNull: () => JSValueConstPointer - QTS_GetFalse: () => JSValueConstPointer - QTS_GetTrue: () => JSValueConstPointer - QTS_NewRuntime: () => JSRuntimePointer - QTS_FreeRuntime: (rt: JSRuntimePointer) => void - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer - QTS_FreeContext: (ctx: JSContextPointer) => void - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer - QTS_IsGlobalSymbol: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number - QTS_IsJobPending: (rt: JSRuntimePointer) => number - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_TestStringArg: (string: string) => void - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void - QTS_BuildIsDebug: () => number - QTS_BuildIsAsyncify: () => number - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer -} diff --git a/packages/quickjs-ffi-types/src/index.ts b/packages/quickjs-ffi-types/src/index.ts deleted file mode 100644 index 5cff4ef19..000000000 --- a/packages/quickjs-ffi-types/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./emscripten-types" -export * from "./ffi-types" -// eslint-disable-next-line import/no-cycle -export * from "./ffi" -// eslint-disable-next-line import/no-cycle -export * from "./ffi-async" -export * from "./variant-types" diff --git a/packages/quickjs-ffi-types/src/variant-types.ts b/packages/quickjs-ffi-types/src/variant-types.ts deleted file mode 100644 index 122d35e11..000000000 --- a/packages/quickjs-ffi-types/src/variant-types.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { - EmscriptenModuleLoader, - QuickJSAsyncEmscriptenModule, - QuickJSEmscriptenModule, - EmscriptenModule, -} from "./emscripten-types.js" -import type { QuickJSFFI } from "./ffi.js" -import type { QuickJSAsyncFFI } from "./ffi-async.js" - -type EmscriptenImport = - | EmscriptenModuleLoader - | { default: EmscriptenModuleLoader } - | { - default: { - default: EmscriptenModuleLoader - } - } - -/** - * A standard (sync) build variant. - * - * quickjs-emscripten provides multiple build variants of the core WebAssembly - * module. These variants are each intended for a different use case. - * - * To create an instance of the library using a specific build variant, pass the - * build variant to {@link newQuickJSWASMModule} or {@link newQuickJSAsyncWASMModule}. - */ -export interface QuickJSSyncVariant { - readonly type: "sync" - readonly importFFI: () => Promise QuickJSFFI> - readonly importModuleLoader: () => Promise> -} - -/** - * An ASYNCIFY build variant. - * - * quickjs-emscripten provides multiple build variants of the core WebAssembly - * module. These variants are each intended for a different use case. - * - * To create an instance of the library using a specific build variant, pass the - * build variant to {@link newQuickJSWASMModule} or {@link newQuickJSAsyncWASMModule}. - */ -export interface QuickJSAsyncVariant { - readonly type: "async" - readonly importFFI: () => Promise QuickJSAsyncFFI> - readonly importModuleLoader: () => Promise> -} - -export type QuickJSVariant = QuickJSSyncVariant | QuickJSAsyncVariant -export type EitherFFI = QuickJSFFI | QuickJSAsyncFFI diff --git a/packages/quickjs-ffi-types/tsconfig.json b/packages/quickjs-ffi-types/tsconfig.json deleted file mode 100644 index 3dd819649..000000000 --- a/packages/quickjs-ffi-types/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "@jitl/tsconfig/tsconfig.json", - "include": ["src/**/*"], - "compilerOptions": { - "rootDir": "src" - } -} diff --git a/packages/quickjs-ffi-types/tsup.config.ts b/packages/quickjs-ffi-types/tsup.config.ts deleted file mode 100644 index a1c58efd0..000000000 --- a/packages/quickjs-ffi-types/tsup.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" - -export default extendConfig() diff --git a/packages/quickjs-ffi-types/typedoc.js b/packages/quickjs-ffi-types/typedoc.js deleted file mode 100644 index 36d7dc1bc..000000000 --- a/packages/quickjs-ffi-types/typedoc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - extends: "../../typedoc.base.js", - mergeReadme: true, - entryPoints: ["./src/index.ts"], -} diff --git a/packages/quickjs-for-quickjs/LICENSE b/packages/quickjs-for-quickjs/LICENSE deleted file mode 100644 index 22f51c713..000000000 --- a/packages/quickjs-for-quickjs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/quickjs-for-quickjs/README.md b/packages/quickjs-for-quickjs/README.md deleted file mode 100644 index 6e8cc1ea0..000000000 --- a/packages/quickjs-for-quickjs/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# quickjs-for-quickjs - -![yo dawg i herd u like quickjs so i put quickjs in ur quickjs so u can eval while u eval](./yodawg.jpg) - -This package is a build of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten) that can run inside QuickJS or any other JavaScript runtime without WebAssembly support. The QuickJS C library is compiled to Asm.js, and then bundled together with the quickjs-emscripten JavaScript wrapper into a single standalone file with no external dependencies. - -`quickjs-for-quickjs` has been tested in the following configurations: - -- ✅ NodeJS -> quickjs-for-quickjs -- ✅ NodeJS -> quickjs-emscripten RELEASE_SYNC -> quickjs-for-quickjs -- ❌ NodeJS -> quickjs-emscripten RELEASE_SYNC -> quickjs-for-quickjs -> quickjs-for-quickjs (This hits stack overflow in QuickJS. It could work with a larger stack size for the outer QuickJS instance) - -## Why? - -For fun! - -This could have practical applications, like if you're a user writing a plugin for a 3rd-party system using quickjs-emscripten for scripting, and you as a plugin author also want your plugin to have its own plugin ecosystem. - -## Usage - -For a more detailed example, see [the "example" directory][example] in the repo. - -[example]: https://github.com/justjake/quickjs-emscripte/tree/main/packages/quickjs-for-quickjs/example - -```javascript -// nodejs-host.mjs -import fs from "node:fs/promises" -import module from "node:module" -import { getQuickJS, setUpContext } from "quickjs-for-quickjs" - -// get quickjs source code -const require = module.createRequire(import.meta.url) -const quickjsSource = await fs.readFile(require.resolve("quickjs-for-quickjs"), "utf8") - -// create the host QuickJS context -const QuickJS = await getQuickJS() -const context = QuickJS.createContext() - -// inject console.log, which is required for quickjs-for-quickjs to work -setUpContext(context) - -// allow the host QuickJS to import quickjs-for-quickjs module -context.runtime.setModuleLoader((name) => { - if (name === "quickjs-for-quickjs") { - return quickjsSource - } - throw new Error(`Module not found: ${name}`) -}) - -const quickjsHost = ` -// import and create inner QuickJS guest context -import { getQuickJS } from "quickjs-for-quickjs" -const context = await getQuickJS().then(mod => mod.createContext()) - -// eval some code in the inner context -const innerResult = context.evalCode('1 + 2', "quickjs-guest.mjs").unwrap() - -// export the result -export const result = innerResult.consume(context.dump) -` - -// eval the quickjs host -const handle = context.evalCode(quickjsHost, "quickjs-host.mjs").unwrap() - -// get the result -context.runtime.executePendingJob() -const result = context.unwrapResult(context.getPromiseState(handle)) - -console.log(result.consume(context.dump)) -``` diff --git a/packages/quickjs-for-quickjs/example/node-host.mjs b/packages/quickjs-for-quickjs/example/node-host.mjs deleted file mode 100644 index 5ea39a1fb..000000000 --- a/packages/quickjs-for-quickjs/example/node-host.mjs +++ /dev/null @@ -1,51 +0,0 @@ -import fs from "node:fs/promises" -import module from "node:module" -import { getQuickJS, setUpContext } from "quickjs-for-quickjs" -const require = module.createRequire(import.meta.url) - -console.log("hello") - -const quickjsSource = await fs.readFile(require.resolve("quickjs-for-quickjs"), "utf8") -const exportQuickjsSource = `export default ${JSON.stringify(quickjsSource)}` - -const exampleQuickjsHostSource = await fs.readFile(require.resolve("./quickjs-host.mjs"), "utf8") -const exportExampleQuickjsHostSource = `export default ${JSON.stringify(exampleQuickjsHostSource)}` - -const QuickJS = await getQuickJS() -const context = setUpContext(QuickJS.newContext()) -context.runtime.setModuleLoader((name) => { - console.log(`0: import ${name}`) - if (name === "quickjs-for-quickjs") { - return quickjsSource - } - if (name === "quickjs-for-quickjs-source") { - return exportQuickjsSource - } - if (name === "example-quickjs-host-source") { - return exportExampleQuickjsHostSource - } - return { error: new Error("not found") } -}) - -let nestingLimit = 2 -context.setProp( - context.global, - "done", - context.newFunction("done", () => context.newNumber(--nestingLimit <= 0 ? 1 : 0)), -) -const handle = context - .evalCode(exampleQuickjsHostSource, "quickjs-host.mjs", { - type: "module", - }) - .unwrap() - -const promise = context.resolvePromise(handle) -context.runtime.executePendingJobs() - -const result = (await promise).unwrap() - -console.log({ - result: context.dump(context.getProp(result, "result")), -}) - -console.log("result:", context.dump(context.getProp(await promise, "result"))) diff --git a/packages/quickjs-for-quickjs/example/quickjs-host.mjs b/packages/quickjs-for-quickjs/example/quickjs-host.mjs deleted file mode 100644 index a82df11fe..000000000 --- a/packages/quickjs-for-quickjs/example/quickjs-host.mjs +++ /dev/null @@ -1,49 +0,0 @@ -import { getQuickJS, setUpContext } from "quickjs-for-quickjs" -import quickjsSource from "quickjs-for-quickjs-source" -import exampleQuickjsHostSource from "example-quickjs-host-source" - -console.log(`${console.depth}: started`) -const QuickJS = await getQuickJS() - -const exportQuickjsSource = `export default ${JSON.stringify(quickjsSource)}` -const exportExampleQuickjsHostSource = `export default ${JSON.stringify(exampleQuickjsHostSource)}` - -console.log(`${console.depth}: imported`) - -const context = setUpContext(QuickJS.newContext()) -context.runtime.setModuleLoader((name) => { - console.log(`${console.depth}: import ${name}`) - if (name === "quickjs-for-quickjs") { - return quickjsSource - } - if (name === "quickjs-for-quickjs-source") { - return exportQuickjsSource - } - if (name === "example-quickjs-host-source") { - return exportExampleQuickjsHostSource - } - return { error: new Error("not found") } -}) -context.setProp( - context.global, - "done", - context.newFunction("random", () => context.newNumber(done())), -) - -console.log(`${console.depth}: evaluating`) - -const codeToEval = done() - ? `export const result = ['hello', 'world', console.depth].join(' ')` - : exampleQuickjsHostSource -const promise = context.resolvePromise(context.evalCode(codeToEval).unwrap()) - -console.log(`${console.depth}: executing pending jobs`) -context.runtime.executePendingJobs() - -console.log("awaiting") -const promised = (await promise).unwrap() -console.log(`${console.depth}:`, { promised, type: context.typeof(promised) }) - -export const result = "hello " + context.dump(context.getProp(promised, "result")) - -console.log(`${console.depth}: done`) diff --git a/packages/quickjs-for-quickjs/package.json b/packages/quickjs-for-quickjs/package.json deleted file mode 100644 index d86e032ed..000000000 --- a/packages/quickjs-for-quickjs/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "quickjs-for-quickjs", - "version": "0.31.0", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "check": "npx tsc --project . --noEmit", - "build": "npx tsup", - "clean": "git clean -fx dist" - }, - "files": [ - "LICENSE", - "yodawg.jpg", - "example/**/*", - "dist/**/*" - ], - "types": "dist/index.d.mts", - "main": "dist/index.mjs", - "module": "dist/index.mjs", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - } - }, - "devDependencies": { - "@jitl/quickjs-asmjs-mjs-release-sync": "workspace:*", - "@jitl/tsconfig": "workspace:*", - "quickjs-emscripten-core": "workspace:*" - } -} diff --git a/packages/quickjs-for-quickjs/src/index.mts b/packages/quickjs-for-quickjs/src/index.mts deleted file mode 100644 index 6a7d3a096..000000000 --- a/packages/quickjs-for-quickjs/src/index.mts +++ /dev/null @@ -1,52 +0,0 @@ -import type { QuickJSWASMModule, QuickJSContext } from "quickjs-emscripten-core" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -import RELEASE_SYNC from "@jitl/quickjs-asmjs-mjs-release-sync" - -let promise: Promise | undefined - -export function getQuickJS(): Promise { - return (promise ??= newQuickJSWASMModule()) -} - -export function newQuickJSWASMModule(): Promise { - // TODO: why are the types mad? - return newQuickJSWASMModuleFromVariant(RELEASE_SYNC as any) -} - -export function setUpContext( - context: QuickJSContext, - options: { - log?: (...args: unknown[]) => void - } = {}, -) { - const { log } = options - const depth: number = (console as any)["depth"] ?? 0 - using consoleHandle = context.newObject() - using logHandle = context.newFunction("console.log", (...args) => { - const message = args.map(context.dump) - if (log) { - log(...message) - } else { - console.log(...message) - } - }) - using depthHandle = context.newNumber(1 + depth) - - context.setProp(consoleHandle, "log", logHandle) - context.setProp(consoleHandle, "error", logHandle) - context.setProp(consoleHandle, "depth", depthHandle) - - context.setProp(context.global, "console", consoleHandle) - - context.runtime.setMaxStackSize(0) - context.runtime.setMemoryLimit(0) - let interruptCount = 0 - context.runtime.setInterruptHandler(() => { - console.log(`${depth}: ...eval... (${++interruptCount})`) - return undefined - }) - - return context -} - -export { RELEASE_SYNC } diff --git a/packages/quickjs-for-quickjs/tsconfig.json b/packages/quickjs-for-quickjs/tsconfig.json deleted file mode 100644 index 3dd819649..000000000 --- a/packages/quickjs-for-quickjs/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "@jitl/tsconfig/tsconfig.json", - "include": ["src/**/*"], - "compilerOptions": { - "rootDir": "src" - } -} diff --git a/packages/quickjs-for-quickjs/tsup.config.ts b/packages/quickjs-for-quickjs/tsup.config.ts deleted file mode 100644 index cf490f781..000000000 --- a/packages/quickjs-for-quickjs/tsup.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" - -export default extendConfig({ - entry: ["src/index.mts"], - format: ["esm"], - external: [], - clean: true, - splitting: false, - sourcemap: false, -}) diff --git a/packages/quickjs-for-quickjs/yodawg.jpg b/packages/quickjs-for-quickjs/yodawg.jpg deleted file mode 100644 index 81e68c25191e92791656a3687a62a848544b12a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58744 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%0D7QKG*E_6dsdt}^%eq8^?(1(CL<`-})X=GWvo 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®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 diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/LICENSE b/packages/variant-quickjs-asmjs-mjs-release-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/Makefile b/packages/variant-quickjs-asmjs-mjs-release-sync/Makefile deleted file mode 100644 index 9389c4867..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/Makefile +++ /dev/null @@ -1,183 +0,0 @@ -# Tools -EMSDK_VERSION=3.1.43 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s WASM=0 -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_WASM+=-s WASM_ASYNC_COMPILATION=0 - -CFLAGS_MJS+=-s ENVIRONMENT=web,worker,node - - - -# GENERATE_TS options - variant specific - - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: MJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/README.md b/packages/variant-quickjs-asmjs-mjs-release-sync/README.md deleted file mode 100644 index e6812997f..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# @jitl/quickjs-asmjs-mjs-release-sync - -Compiled to pure Javascript, no WebAssembly required. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-asmjs-mjs-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? asmjs - -The C library code is compiled to Javascript, no WebAssembly used. Sometimes called "asmjs". This is the slowest possible option, and is intended for constrained environments that do not support WebAssembly, like quickjs-for-quickjs. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Compiled to pure Javascript, no WebAssembly required.", - "emscriptenInclusion": "asmjs", - "emscriptenVersion": "3.1.43", - "exports": { - "import": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s WASM=0", - "-s SINGLE_FILE=1", - "-s WASM_ASYNC_COMPILATION=0" -] -``` diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/package.json b/packages/variant-quickjs-asmjs-mjs-release-sync/package.json deleted file mode 100644 index 6b09f2083..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@jitl/quickjs-asmjs-mjs-release-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Compiled to pure Javascript, no WebAssembly required.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/src/ffi.ts b/packages/variant-quickjs-asmjs-mjs-release-sync/src/ffi.ts deleted file mode 100644 index 419f408d7..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/src/index.ts b/packages/variant-quickjs-asmjs-mjs-release-sync/src/index.ts deleted file mode 100644 index 5aab96578..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/src/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" -import moduleLoader from "@jitl/quickjs-asmjs-mjs-release-sync/emscripten-module" -import { QuickJSFFI } from "./ffi.js" -/** - * ### @jitl/quickjs-asmjs-mjs-release-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-asmjs-mjs-release-sync/README.md) | - * Compiled to pure Javascript, no WebAssembly required. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | asmjs | The C library code is compiled to Javascript, no WebAssembly used. Sometimes called "asmjs". This is the slowest possible option, and is intended for constrained environments that do not support WebAssembly, like quickjs-for-quickjs. | - * | exports | import | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => Promise.resolve(QuickJSFFI), - importModuleLoader: () => Promise.resolve(moduleLoader), -} as const -export default variant diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/tsconfig.json b/packages/variant-quickjs-asmjs-mjs-release-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/tsup.config.ts b/packages/variant-quickjs-asmjs-mjs-release-sync/tsup.config.ts deleted file mode 100644 index b99f85b05..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-asmjs-mjs-release-sync/typedoc.json b/packages/variant-quickjs-asmjs-mjs-release-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-asmjs-mjs-release-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/LICENSE b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/LICENSE deleted file mode 100644 index f2712b5a2..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/LICENSE +++ /dev/null @@ -1,49 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs-ng: -The MIT License (MIT) - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon -Copyright (c) 2023 Ben Noordhuis -Copyright (c) 2023 Saúl Ibarra Corretgé - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/Makefile b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/Makefile deleted file mode 100644 index 4844d6cb0..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/Makefile +++ /dev/null @@ -1,192 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs-ng - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-O3 -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/README.md b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/README.md deleted file mode 100644 index 5a194c531..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# @jitl/quickjs-ng-wasmfile-debug-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-O3" -] -``` diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/package.json b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/package.json deleted file mode 100644 index bfe2a4f44..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-ng-wasmfile-debug-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/ffi.ts b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/ffi.ts deleted file mode 100644 index ee3ce88b3..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/ffi.ts +++ /dev/null @@ -1,526 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetProp", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetPropNumber", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap( - "QTS_SetProp", - null, - ["number", "number", "number", "number"], - { async: true }, - ) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Call", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Eval", - "number", - ["number", "number", "number", "string", "number", "number"], - { async: true }, - ) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/index.ts b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/index.ts deleted file mode 100644 index e251c303f..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-ng-wasmfile-debug-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-asyncify/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-ng-wasmfile-debug-asyncify/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsconfig.json b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsup.config.ts b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsup.config.ts deleted file mode 100644 index d2ab789be..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-ng-wasmfile-debug-asyncify/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/typedoc.json b/packages/variant-quickjs-ng-wasmfile-debug-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/LICENSE b/packages/variant-quickjs-ng-wasmfile-debug-sync/LICENSE deleted file mode 100644 index f2712b5a2..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/LICENSE +++ /dev/null @@ -1,49 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs-ng: -The MIT License (MIT) - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon -Copyright (c) 2023 Ben Noordhuis -Copyright (c) 2023 Saúl Ibarra Corretgé - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/Makefile b/packages/variant-quickjs-ng-wasmfile-debug-sync/Makefile deleted file mode 100644 index bf8dbcb95..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/Makefile +++ /dev/null @@ -1,186 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs-ng - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-DQTS_SANITIZE_LEAK -CFLAGS_WASM+=-fsanitize=leak -CFLAGS_WASM+=-g2 -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/README.md b/packages/variant-quickjs-ng-wasmfile-debug-sync/README.md deleted file mode 100644 index c3e762f96..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# @jitl/quickjs-ng-wasmfile-debug-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/package.json b/packages/variant-quickjs-ng-wasmfile-debug-sync/package.json deleted file mode 100644 index 0fd01f155..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-ng-wasmfile-debug-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/src/ffi.ts b/packages/variant-quickjs-ng-wasmfile-debug-sync/src/ffi.ts deleted file mode 100644 index 323a3abcf..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/src/index.ts b/packages/variant-quickjs-ng-wasmfile-debug-sync/src/index.ts deleted file mode 100644 index 15876a178..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-ng-wasmfile-debug-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-debug-sync/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-ng-wasmfile-debug-sync/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/tsconfig.json b/packages/variant-quickjs-ng-wasmfile-debug-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/tsup.config.ts b/packages/variant-quickjs-ng-wasmfile-debug-sync/tsup.config.ts deleted file mode 100644 index da548d8b7..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-ng-wasmfile-debug-sync/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-ng-wasmfile-debug-sync/typedoc.json b/packages/variant-quickjs-ng-wasmfile-debug-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-ng-wasmfile-debug-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/LICENSE b/packages/variant-quickjs-ng-wasmfile-release-asyncify/LICENSE deleted file mode 100644 index f2712b5a2..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/LICENSE +++ /dev/null @@ -1,49 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs-ng: -The MIT License (MIT) - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon -Copyright (c) 2023 Ben Noordhuis -Copyright (c) 2023 Saúl Ibarra Corretgé - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/Makefile b/packages/variant-quickjs-ng-wasmfile-release-asyncify/Makefile deleted file mode 100644 index b7f6beb37..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/Makefile +++ /dev/null @@ -1,187 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs-ng - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/README.md b/packages/variant-quickjs-ng-wasmfile-release-asyncify/README.md deleted file mode 100644 index 6624c67af..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# @jitl/quickjs-ng-wasmfile-release-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/package.json b/packages/variant-quickjs-ng-wasmfile-release-asyncify/package.json deleted file mode 100644 index 0378d7729..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-ng-wasmfile-release-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/src/ffi.ts b/packages/variant-quickjs-ng-wasmfile-release-asyncify/src/ffi.ts deleted file mode 100644 index 83989cf6d..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/src/ffi.ts +++ /dev/null @@ -1,523 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetProp", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap("QTS_SetProp", null, [ - "number", - "number", - "number", - "number", - ]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/src/index.ts b/packages/variant-quickjs-ng-wasmfile-release-asyncify/src/index.ts deleted file mode 100644 index 9388d2974..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-ng-wasmfile-release-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-asyncify/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-ng-wasmfile-release-asyncify/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/tsconfig.json b/packages/variant-quickjs-ng-wasmfile-release-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/tsup.config.ts b/packages/variant-quickjs-ng-wasmfile-release-asyncify/tsup.config.ts deleted file mode 100644 index c762d2ffe..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-ng-wasmfile-release-asyncify/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-ng-wasmfile-release-asyncify/typedoc.json b/packages/variant-quickjs-ng-wasmfile-release-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/LICENSE b/packages/variant-quickjs-ng-wasmfile-release-sync/LICENSE deleted file mode 100644 index f2712b5a2..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/LICENSE +++ /dev/null @@ -1,49 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs-ng: -The MIT License (MIT) - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon -Copyright (c) 2023 Ben Noordhuis -Copyright (c) 2023 Saúl Ibarra Corretgé - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/Makefile b/packages/variant-quickjs-ng-wasmfile-release-sync/Makefile deleted file mode 100644 index c2d539348..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/Makefile +++ /dev/null @@ -1,180 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs-ng - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific - - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/README.md b/packages/variant-quickjs-ng-wasmfile-release-sync/README.md deleted file mode 100644 index cb980f8bd..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# @jitl/quickjs-ng-wasmfile-release-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-ng-wasmfile-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs-ng - -[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. - -Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs-ng", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/package.json b/packages/variant-quickjs-ng-wasmfile-release-sync/package.json deleted file mode 100644 index 8c6052f0f..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-ng-wasmfile-release-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/src/ffi.ts b/packages/variant-quickjs-ng-wasmfile-release-sync/src/ffi.ts deleted file mode 100644 index 419f408d7..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/src/index.ts b/packages/variant-quickjs-ng-wasmfile-release-sync/src/index.ts deleted file mode 100644 index bcc2c2877..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-ng-wasmfile-release-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-ng-wasmfile-release-sync/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs-ng | [quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly. Version [git+7ded62c5](https://github.com/quickjs-ng/quickjs/commit/7ded62c536fca860b8106c39fb75f2df8fe27180) vendored to quickjs-emscripten on 2024-02-12. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-ng-wasmfile-release-sync/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/tsconfig.json b/packages/variant-quickjs-ng-wasmfile-release-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/tsup.config.ts b/packages/variant-quickjs-ng-wasmfile-release-sync/tsup.config.ts deleted file mode 100644 index ec030821a..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-ng-wasmfile-release-sync/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-ng-wasmfile-release-sync/typedoc.json b/packages/variant-quickjs-ng-wasmfile-release-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-ng-wasmfile-release-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/LICENSE b/packages/variant-quickjs-singlefile-browser-debug-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/Makefile b/packages/variant-quickjs-singlefile-browser-debug-asyncify/Makefile deleted file mode 100644 index 8ad555e60..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/Makefile +++ /dev/null @@ -1,193 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_WASM+=-O3 - - -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/README.md b/packages/variant-quickjs-singlefile-browser-debug-asyncify/README.md deleted file mode 100644 index dd643e37d..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# @jitl/quickjs-singlefile-browser-debug-asyncify - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-O3" -] -``` diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/package.json b/packages/variant-quickjs-singlefile-browser-debug-asyncify/package.json deleted file mode 100644 index b1c8b4b01..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-browser-debug-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/src/ffi.ts b/packages/variant-quickjs-singlefile-browser-debug-asyncify/src/ffi.ts deleted file mode 100644 index ee3ce88b3..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/src/ffi.ts +++ /dev/null @@ -1,526 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetProp", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetPropNumber", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap( - "QTS_SetProp", - null, - ["number", "number", "number", "number"], - { async: true }, - ) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Call", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Eval", - "number", - ["number", "number", "number", "string", "number", "number"], - { async: true }, - ) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/src/index.ts b/packages/variant-quickjs-singlefile-browser-debug-asyncify/src/index.ts deleted file mode 100644 index b627bbb06..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-browser-debug-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-asyncify/README.md) | - * Variant with the WASM data embedded into a browser ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | browser | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-browser-debug-asyncify/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/tsconfig.json b/packages/variant-quickjs-singlefile-browser-debug-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/tsup.config.ts b/packages/variant-quickjs-singlefile-browser-debug-asyncify/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-browser-debug-asyncify/typedoc.json b/packages/variant-quickjs-singlefile-browser-debug-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/LICENSE b/packages/variant-quickjs-singlefile-browser-debug-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/Makefile b/packages/variant-quickjs-singlefile-browser-debug-sync/Makefile deleted file mode 100644 index c455169e2..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/Makefile +++ /dev/null @@ -1,187 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_WASM+=-DQTS_SANITIZE_LEAK -CFLAGS_WASM+=-fsanitize=leak -CFLAGS_WASM+=-g2 - - -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/README.md b/packages/variant-quickjs-singlefile-browser-debug-sync/README.md deleted file mode 100644 index fe5fe4ac8..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# @jitl/quickjs-singlefile-browser-debug-sync - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/package.json b/packages/variant-quickjs-singlefile-browser-debug-sync/package.json deleted file mode 100644 index d1a257a60..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-browser-debug-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/src/ffi.ts b/packages/variant-quickjs-singlefile-browser-debug-sync/src/ffi.ts deleted file mode 100644 index 323a3abcf..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/src/index.ts b/packages/variant-quickjs-singlefile-browser-debug-sync/src/index.ts deleted file mode 100644 index d47bace1f..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-browser-debug-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-debug-sync/README.md) | - * Variant with the WASM data embedded into a browser ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | browser | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-browser-debug-sync/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/tsconfig.json b/packages/variant-quickjs-singlefile-browser-debug-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/tsup.config.ts b/packages/variant-quickjs-singlefile-browser-debug-sync/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-browser-debug-sync/typedoc.json b/packages/variant-quickjs-singlefile-browser-debug-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-browser-debug-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/LICENSE b/packages/variant-quickjs-singlefile-browser-release-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/Makefile b/packages/variant-quickjs-singlefile-browser-release-asyncify/Makefile deleted file mode 100644 index 47cb34a64..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/Makefile +++ /dev/null @@ -1,188 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 - - -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/README.md b/packages/variant-quickjs-singlefile-browser-release-asyncify/README.md deleted file mode 100644 index 6262e81c9..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# @jitl/quickjs-singlefile-browser-release-asyncify - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/package.json b/packages/variant-quickjs-singlefile-browser-release-asyncify/package.json deleted file mode 100644 index d85ff42f4..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-browser-release-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/src/ffi.ts b/packages/variant-quickjs-singlefile-browser-release-asyncify/src/ffi.ts deleted file mode 100644 index 83989cf6d..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/src/ffi.ts +++ /dev/null @@ -1,523 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetProp", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap("QTS_SetProp", null, [ - "number", - "number", - "number", - "number", - ]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/src/index.ts b/packages/variant-quickjs-singlefile-browser-release-asyncify/src/index.ts deleted file mode 100644 index d958a04cf..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-browser-release-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-asyncify/README.md) | - * Variant with the WASM data embedded into a browser ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | browser | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-browser-release-asyncify/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/tsconfig.json b/packages/variant-quickjs-singlefile-browser-release-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/tsup.config.ts b/packages/variant-quickjs-singlefile-browser-release-asyncify/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-browser-release-asyncify/typedoc.json b/packages/variant-quickjs-singlefile-browser-release-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/LICENSE b/packages/variant-quickjs-singlefile-browser-release-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/Makefile b/packages/variant-quickjs-singlefile-browser-release-sync/Makefile deleted file mode 100644 index 64b4baaff..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/Makefile +++ /dev/null @@ -1,181 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 - - -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker - - -# GENERATE_TS options - variant specific - - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/README.md b/packages/variant-quickjs-singlefile-browser-release-sync/README.md deleted file mode 100644 index f7fb17af1..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# @jitl/quickjs-singlefile-browser-release-sync - -Variant with the WASM data embedded into a browser ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-browser-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: browser - -Exports the following in package.json for the package entrypoint: - -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "browser": { - "emscriptenEnvironment": ["web", "worker"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/package.json b/packages/variant-quickjs-singlefile-browser-release-sync/package.json deleted file mode 100644 index 1f3078705..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-browser-release-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/src/ffi.ts b/packages/variant-quickjs-singlefile-browser-release-sync/src/ffi.ts deleted file mode 100644 index 419f408d7..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/src/index.ts b/packages/variant-quickjs-singlefile-browser-release-sync/src/index.ts deleted file mode 100644 index a6092682a..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-browser-release-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-browser-release-sync/README.md) | - * Variant with the WASM data embedded into a browser ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | browser | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-browser-release-sync/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/tsconfig.json b/packages/variant-quickjs-singlefile-browser-release-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/tsup.config.ts b/packages/variant-quickjs-singlefile-browser-release-sync/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-browser-release-sync/typedoc.json b/packages/variant-quickjs-singlefile-browser-release-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-browser-release-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/LICENSE b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/Makefile b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/Makefile deleted file mode 100644 index b298c4f28..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/Makefile +++ /dev/null @@ -1,193 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_WASM+=-O3 -CFLAGS_CJS+=-s ENVIRONMENT=web,worker,node - - - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: CJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/README.md b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/README.md deleted file mode 100644 index c9d52a2ce..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# @jitl/quickjs-singlefile-cjs-debug-asyncify - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-O3" -] -``` diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/package.json b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/package.json deleted file mode 100644 index 08566d6d4..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-cjs-debug-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/ffi.ts b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/ffi.ts deleted file mode 100644 index ee3ce88b3..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/ffi.ts +++ /dev/null @@ -1,526 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetProp", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetPropNumber", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap( - "QTS_SetProp", - null, - ["number", "number", "number", "number"], - { async: true }, - ) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Call", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Eval", - "number", - ["number", "number", "number", "string", "number", "number"], - { async: true }, - ) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/index.ts b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/index.ts deleted file mode 100644 index 96fda0a94..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-cjs-debug-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-asyncify/README.md) | - * Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | require | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-cjs-debug-asyncify/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsconfig.json b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsup.config.ts b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsup.config.ts deleted file mode 100644 index 1e0a2f626..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/typedoc.json b/packages/variant-quickjs-singlefile-cjs-debug-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/LICENSE b/packages/variant-quickjs-singlefile-cjs-debug-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/Makefile b/packages/variant-quickjs-singlefile-cjs-debug-sync/Makefile deleted file mode 100644 index fa6209746..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/Makefile +++ /dev/null @@ -1,187 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_WASM+=-DQTS_SANITIZE_LEAK -CFLAGS_WASM+=-fsanitize=leak -CFLAGS_WASM+=-g2 -CFLAGS_CJS+=-s ENVIRONMENT=web,worker,node - - - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: CJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/README.md b/packages/variant-quickjs-singlefile-cjs-debug-sync/README.md deleted file mode 100644 index b346b8291..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# @jitl/quickjs-singlefile-cjs-debug-sync - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/package.json b/packages/variant-quickjs-singlefile-cjs-debug-sync/package.json deleted file mode 100644 index 76e50399b..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-cjs-debug-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/src/ffi.ts b/packages/variant-quickjs-singlefile-cjs-debug-sync/src/ffi.ts deleted file mode 100644 index 323a3abcf..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/src/index.ts b/packages/variant-quickjs-singlefile-cjs-debug-sync/src/index.ts deleted file mode 100644 index 39f8417bf..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-cjs-debug-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-debug-sync/README.md) | - * Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | require | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-cjs-debug-sync/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/tsconfig.json b/packages/variant-quickjs-singlefile-cjs-debug-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/tsup.config.ts b/packages/variant-quickjs-singlefile-cjs-debug-sync/tsup.config.ts deleted file mode 100644 index 1e0a2f626..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-cjs-debug-sync/typedoc.json b/packages/variant-quickjs-singlefile-cjs-debug-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-cjs-debug-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/LICENSE b/packages/variant-quickjs-singlefile-cjs-release-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/Makefile b/packages/variant-quickjs-singlefile-cjs-release-asyncify/Makefile deleted file mode 100644 index 2a6eedc10..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/Makefile +++ /dev/null @@ -1,188 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_CJS+=-s ENVIRONMENT=web,worker,node - - - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: CJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/README.md b/packages/variant-quickjs-singlefile-cjs-release-asyncify/README.md deleted file mode 100644 index 85353c14f..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# @jitl/quickjs-singlefile-cjs-release-asyncify - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/package.json b/packages/variant-quickjs-singlefile-cjs-release-asyncify/package.json deleted file mode 100644 index 59d3211f0..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-cjs-release-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/src/ffi.ts b/packages/variant-quickjs-singlefile-cjs-release-asyncify/src/ffi.ts deleted file mode 100644 index 83989cf6d..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/src/ffi.ts +++ /dev/null @@ -1,523 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetProp", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap("QTS_SetProp", null, [ - "number", - "number", - "number", - "number", - ]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/src/index.ts b/packages/variant-quickjs-singlefile-cjs-release-asyncify/src/index.ts deleted file mode 100644 index 29ede7e6c..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-cjs-release-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-asyncify/README.md) | - * Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | require | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-cjs-release-asyncify/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/tsconfig.json b/packages/variant-quickjs-singlefile-cjs-release-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/tsup.config.ts b/packages/variant-quickjs-singlefile-cjs-release-asyncify/tsup.config.ts deleted file mode 100644 index 1e0a2f626..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-cjs-release-asyncify/typedoc.json b/packages/variant-quickjs-singlefile-cjs-release-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/LICENSE b/packages/variant-quickjs-singlefile-cjs-release-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/Makefile b/packages/variant-quickjs-singlefile-cjs-release-sync/Makefile deleted file mode 100644 index c667f7240..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/Makefile +++ /dev/null @@ -1,181 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_CJS+=-s ENVIRONMENT=web,worker,node - - - - -# GENERATE_TS options - variant specific - - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: CJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/README.md b/packages/variant-quickjs-singlefile-cjs-release-sync/README.md deleted file mode 100644 index 8796b52d3..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# @jitl/quickjs-singlefile-cjs-release-sync - -Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-cjs-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { - "require": { - "emscriptenEnvironment": ["web", "worker", "node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/package.json b/packages/variant-quickjs-singlefile-cjs-release-sync/package.json deleted file mode 100644 index 4a16a753e..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-cjs-release-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/src/ffi.ts b/packages/variant-quickjs-singlefile-cjs-release-sync/src/ffi.ts deleted file mode 100644 index 419f408d7..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/src/index.ts b/packages/variant-quickjs-singlefile-cjs-release-sync/src/index.ts deleted file mode 100644 index 8f653a12a..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-cjs-release-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-cjs-release-sync/README.md) | - * Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | require | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-cjs-release-sync/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/tsconfig.json b/packages/variant-quickjs-singlefile-cjs-release-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/tsup.config.ts b/packages/variant-quickjs-singlefile-cjs-release-sync/tsup.config.ts deleted file mode 100644 index 1e0a2f626..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-cjs-release-sync/typedoc.json b/packages/variant-quickjs-singlefile-cjs-release-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-cjs-release-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/LICENSE b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/Makefile b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/Makefile deleted file mode 100644 index 6102d667c..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/Makefile +++ /dev/null @@ -1,193 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_WASM+=-O3 - -CFLAGS_MJS+=-s ENVIRONMENT=node - - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: MJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/README.md b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/README.md deleted file mode 100644 index 38f82feb7..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# @jitl/quickjs-singlefile-mjs-debug-asyncify - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-O3" -] -``` diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/package.json b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/package.json deleted file mode 100644 index 9b8b0ab17..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-mjs-debug-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/ffi.ts b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/ffi.ts deleted file mode 100644 index ee3ce88b3..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/ffi.ts +++ /dev/null @@ -1,526 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetProp", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetPropNumber", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap( - "QTS_SetProp", - null, - ["number", "number", "number", "number"], - { async: true }, - ) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Call", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Eval", - "number", - ["number", "number", "number", "string", "number", "number"], - { async: true }, - ) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/index.ts b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/index.ts deleted file mode 100644 index bb6e908f4..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-mjs-debug-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-asyncify/README.md) | - * Variant with the WASM data embedded into a NodeJS ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | import | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-mjs-debug-asyncify/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsconfig.json b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsup.config.ts b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/typedoc.json b/packages/variant-quickjs-singlefile-mjs-debug-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/LICENSE b/packages/variant-quickjs-singlefile-mjs-debug-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/Makefile b/packages/variant-quickjs-singlefile-mjs-debug-sync/Makefile deleted file mode 100644 index 6a0f163ea..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/Makefile +++ /dev/null @@ -1,187 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 -CFLAGS_WASM+=-DQTS_SANITIZE_LEAK -CFLAGS_WASM+=-fsanitize=leak -CFLAGS_WASM+=-g2 - -CFLAGS_MJS+=-s ENVIRONMENT=node - - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: MJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/README.md b/packages/variant-quickjs-singlefile-mjs-debug-sync/README.md deleted file mode 100644 index 6956fe763..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# @jitl/quickjs-singlefile-mjs-debug-sync - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/package.json b/packages/variant-quickjs-singlefile-mjs-debug-sync/package.json deleted file mode 100644 index 3fd036939..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-mjs-debug-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/src/ffi.ts b/packages/variant-quickjs-singlefile-mjs-debug-sync/src/ffi.ts deleted file mode 100644 index 323a3abcf..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/src/index.ts b/packages/variant-quickjs-singlefile-mjs-debug-sync/src/index.ts deleted file mode 100644 index 64f8a1d07..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-mjs-debug-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-debug-sync/README.md) | - * Variant with the WASM data embedded into a NodeJS ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | import | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-mjs-debug-sync/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/tsconfig.json b/packages/variant-quickjs-singlefile-mjs-debug-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/tsup.config.ts b/packages/variant-quickjs-singlefile-mjs-debug-sync/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-mjs-debug-sync/typedoc.json b/packages/variant-quickjs-singlefile-mjs-debug-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-mjs-debug-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/LICENSE b/packages/variant-quickjs-singlefile-mjs-release-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/Makefile b/packages/variant-quickjs-singlefile-mjs-release-asyncify/Makefile deleted file mode 100644 index 1011d16c1..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/Makefile +++ /dev/null @@ -1,188 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 - -CFLAGS_MJS+=-s ENVIRONMENT=node - - - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: MJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/README.md b/packages/variant-quickjs-singlefile-mjs-release-asyncify/README.md deleted file mode 100644 index 827c43bd1..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# @jitl/quickjs-singlefile-mjs-release-asyncify - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/package.json b/packages/variant-quickjs-singlefile-mjs-release-asyncify/package.json deleted file mode 100644 index 76c1bbe20..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-mjs-release-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/src/ffi.ts b/packages/variant-quickjs-singlefile-mjs-release-asyncify/src/ffi.ts deleted file mode 100644 index 83989cf6d..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/src/ffi.ts +++ /dev/null @@ -1,523 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetProp", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap("QTS_SetProp", null, [ - "number", - "number", - "number", - "number", - ]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/src/index.ts b/packages/variant-quickjs-singlefile-mjs-release-asyncify/src/index.ts deleted file mode 100644 index c333f223a..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-mjs-release-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-asyncify/README.md) | - * Variant with the WASM data embedded into a NodeJS ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | import | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-mjs-release-asyncify/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/tsconfig.json b/packages/variant-quickjs-singlefile-mjs-release-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/tsup.config.ts b/packages/variant-quickjs-singlefile-mjs-release-asyncify/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-mjs-release-asyncify/typedoc.json b/packages/variant-quickjs-singlefile-mjs-release-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/LICENSE b/packages/variant-quickjs-singlefile-mjs-release-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/Makefile b/packages/variant-quickjs-singlefile-mjs-release-sync/Makefile deleted file mode 100644 index 1e3d9bbc7..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/Makefile +++ /dev/null @@ -1,181 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-s SINGLE_FILE=1 - -CFLAGS_MJS+=-s ENVIRONMENT=node - - - -# GENERATE_TS options - variant specific - - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: MJS -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/README.md b/packages/variant-quickjs-singlefile-mjs-release-sync/README.md deleted file mode 100644 index 8f3d7970c..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# @jitl/quickjs-singlefile-mjs-release-sync - -Variant with the WASM data embedded into a NodeJS ESModule. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-singlefile-mjs-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: import - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? singlefile - -The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { - "import": { - "emscriptenEnvironment": ["node"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-s SINGLE_FILE=1" -] -``` diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/package.json b/packages/variant-quickjs-singlefile-mjs-release-sync/package.json deleted file mode 100644 index 1f327fc6e..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@jitl/quickjs-singlefile-mjs-release-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/src/ffi.ts b/packages/variant-quickjs-singlefile-mjs-release-sync/src/ffi.ts deleted file mode 100644 index 419f408d7..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/src/index.ts b/packages/variant-quickjs-singlefile-mjs-release-sync/src/index.ts deleted file mode 100644 index a69d8d291..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-singlefile-mjs-release-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-singlefile-mjs-release-sync/README.md) | - * Variant with the WASM data embedded into a NodeJS ESModule. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | singlefile | The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app. | - * | exports | import | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-singlefile-mjs-release-sync/emscripten-module").then( - (mod) => mod.default, - ), -} as const - -export default variant diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/tsconfig.json b/packages/variant-quickjs-singlefile-mjs-release-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/tsup.config.ts b/packages/variant-quickjs-singlefile-mjs-release-sync/tsup.config.ts deleted file mode 100644 index fbd0f5073..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: [], - format: ["esm"], - clean: false, -}) diff --git a/packages/variant-quickjs-singlefile-mjs-release-sync/typedoc.json b/packages/variant-quickjs-singlefile-mjs-release-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-singlefile-mjs-release-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/LICENSE b/packages/variant-quickjs-wasmfile-debug-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/Makefile b/packages/variant-quickjs-wasmfile-debug-asyncify/Makefile deleted file mode 100644 index 877a5ceab..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/Makefile +++ /dev/null @@ -1,192 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-O3 -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/README.md b/packages/variant-quickjs-wasmfile-debug-asyncify/README.md deleted file mode 100644 index b25605d93..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# @jitl/quickjs-wasmfile-debug-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-debug-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-O3" -] -``` diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/package.json b/packages/variant-quickjs-wasmfile-debug-asyncify/package.json deleted file mode 100644 index 640f63a27..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-wasmfile-debug-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/src/ffi.ts b/packages/variant-quickjs-wasmfile-debug-asyncify/src/ffi.ts deleted file mode 100644 index ee3ce88b3..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/src/ffi.ts +++ /dev/null @@ -1,526 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetProp", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetPropNumber", - "number", - ["number", "number", "number"], - { async: true }, - ) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap( - "QTS_SetProp", - null, - ["number", "number", "number", "number"], - { async: true }, - ) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Call", - "number", - ["number", "number", "number", "number", "number"], - { async: true }, - ) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - { async: true }, - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_Eval", - "number", - ["number", "number", "number", "string", "number", "number"], - { async: true }, - ) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/src/index.ts b/packages/variant-quickjs-wasmfile-debug-asyncify/src/index.ts deleted file mode 100644 index fa522edfa..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-wasmfile-debug-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-asyncify/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-wasmfile-debug-asyncify/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/tsconfig.json b/packages/variant-quickjs-wasmfile-debug-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/tsup.config.ts b/packages/variant-quickjs-wasmfile-debug-asyncify/tsup.config.ts deleted file mode 100644 index be8403fb9..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-wasmfile-debug-asyncify/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-wasmfile-debug-asyncify/typedoc.json b/packages/variant-quickjs-wasmfile-debug-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-wasmfile-debug-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-wasmfile-debug-sync/LICENSE b/packages/variant-quickjs-wasmfile-debug-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-wasmfile-debug-sync/Makefile b/packages/variant-quickjs-wasmfile-debug-sync/Makefile deleted file mode 100644 index 98bece5b9..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/Makefile +++ /dev/null @@ -1,186 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-O0 -CFLAGS_WASM+=-DQTS_DEBUG_MODE -CFLAGS_WASM+=-DDUMP_LEAKS=1 -CFLAGS_WASM+=-gsource-map -CFLAGS_WASM+=-s ASSERTIONS=1 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-sourceMapJson.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_WASM+=-DQTS_SANITIZE_LEAK -CFLAGS_WASM+=-fsanitize=leak -CFLAGS_WASM+=-g2 -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=DEBUG=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-wasmfile-debug-sync/README.md b/packages/variant-quickjs-wasmfile-debug-sync/README.md deleted file mode 100644 index b4e586300..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# @jitl/quickjs-wasmfile-debug-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-debug-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: debug - -Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-O0", - "-DQTS_DEBUG_MODE", - "-DDUMP_LEAKS=1", - "-gsource-map", - "-s ASSERTIONS=1", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-sourceMapJson.js", - "--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js", - "-DQTS_SANITIZE_LEAK", - "-fsanitize=leak", - "-g2" -] -``` diff --git a/packages/variant-quickjs-wasmfile-debug-sync/package.json b/packages/variant-quickjs-wasmfile-debug-sync/package.json deleted file mode 100644 index aef521495..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-wasmfile-debug-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-wasmfile-debug-sync/src/ffi.ts b/packages/variant-quickjs-wasmfile-debug-sync/src/ffi.ts deleted file mode 100644 index 323a3abcf..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = true - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-wasmfile-debug-sync/src/index.ts b/packages/variant-quickjs-wasmfile-debug-sync/src/index.ts deleted file mode 100644 index b6f3b99e2..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-wasmfile-debug-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-debug-sync/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | debug | Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-wasmfile-debug-sync/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-wasmfile-debug-sync/tsconfig.json b/packages/variant-quickjs-wasmfile-debug-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-wasmfile-debug-sync/tsup.config.ts b/packages/variant-quickjs-wasmfile-debug-sync/tsup.config.ts deleted file mode 100644 index 89164775a..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-wasmfile-debug-sync/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-wasmfile-debug-sync/typedoc.json b/packages/variant-quickjs-wasmfile-debug-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-wasmfile-debug-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/LICENSE b/packages/variant-quickjs-wasmfile-release-asyncify/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/Makefile b/packages/variant-quickjs-wasmfile-release-asyncify/Makefile deleted file mode 100644 index 84248fd9b..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/Makefile +++ /dev/null @@ -1,187 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=ASYNCIFY - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-s ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY=1 -CFLAGS_WASM+=-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_STACK_SIZE=81920 -CFLAGS_WASM+=-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json -CFLAGS_WASM+=-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json -CFLAGS_WASM+=-lasync.js -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV+=ASYNCIFY=true - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/README.md b/packages/variant-quickjs-wasmfile-release-asyncify/README.md deleted file mode 100644 index ae2c00812..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# @jitl/quickjs-wasmfile-release-asyncify - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-release-asyncify" -import { newQuickJSAsyncWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSAsyncWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? Yes - -Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-s ASYNCIFY=1", - "-DQTS_ASYNCIFY=1", - "-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=81920", - "-s ASYNCIFY_STACK_SIZE=81920", - "-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json", - "-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json", - "-lasync.js", - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/package.json b/packages/variant-quickjs-wasmfile-release-asyncify/package.json deleted file mode 100644 index 984722a10..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-wasmfile-release-asyncify", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/src/ffi.ts b/packages/variant-quickjs-wasmfile-release-asyncify/src/ffi.ts deleted file mode 100644 index 83989cf6d..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/src/ffi.ts +++ /dev/null @@ -1,523 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSAsyncEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, - assertSync, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSAsyncFFI { - constructor(private module: QuickJSAsyncEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", ["number", "number"]), - ) - - QTS_GetSymbolDescriptionOrKey_MaybeAsync: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_GetSymbolDescriptionOrKey", - "number", - ["number", "number"], - ) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_ExecutePendingJob", "number", ["number", "number", "number"]), - ) - - QTS_ExecutePendingJob_MaybeAsync: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_ExecutePendingJob", - "number", - ["number", "number", "number"], - ) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]), - ) - - QTS_GetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetProp", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetPropNumber", "number", ["number", "number", "number"]), - ) - - QTS_GetPropNumber_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = assertSync( - this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]), - ) - - QTS_SetProp_MaybeAsync: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void | Promise = this.module.cwrap("QTS_SetProp", null, [ - "number", - "number", - "number", - "number", - ]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]), - ) - - QTS_GetOwnPropertyNames_MaybeAsync: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer | Promise = this.module.cwrap( - "QTS_GetOwnPropertyNames", - "number", - ["number", "number", "number", "number", "number"], - ) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Call", "number", ["number", "number", "number", "number", "number"]), - ) - - QTS_Call_MaybeAsync: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = assertSync( - this.module.cwrap("QTS_Dump", "number", ["number", "number"]), - ) - - QTS_Dump_MaybeAsync: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer | Promise = this.module.cwrap( - "QTS_Dump", - "number", - ["number", "number"], - ) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = assertSync( - this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]), - ) - - QTS_Eval_MaybeAsync: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer | Promise = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/src/index.ts b/packages/variant-quickjs-wasmfile-release-asyncify/src/index.ts deleted file mode 100644 index 341112dec..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSAsyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-wasmfile-release-asyncify - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-asyncify/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | asyncify | Build run through the ASYNCIFY WebAssembly transform. This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. The extra magic makes this variant slower than sync variants. Note that both variants support regular async functions. Only adopt ASYNCIFY if you need to! The [QuickJSAsyncRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) and [QuickJSAsyncContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSAsyncVariant = { - type: "async", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSAsyncFFI), - importModuleLoader: () => - import("@jitl/quickjs-wasmfile-release-asyncify/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/tsconfig.json b/packages/variant-quickjs-wasmfile-release-asyncify/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/tsup.config.ts b/packages/variant-quickjs-wasmfile-release-asyncify/tsup.config.ts deleted file mode 100644 index b2b3fed99..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-wasmfile-release-asyncify/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-wasmfile-release-asyncify/typedoc.json b/packages/variant-quickjs-wasmfile-release-asyncify/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-wasmfile-release-asyncify/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/packages/variant-quickjs-wasmfile-release-sync/LICENSE b/packages/variant-quickjs-wasmfile-release-sync/LICENSE deleted file mode 100644 index 92facdd2f..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -quickjs-emscripten: -The MIT License - -quickjs-emscripten copyright (c) 2019-2024 Jake Teton-Landis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -quickjs: -QuickJS Javascript Engine - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/variant-quickjs-wasmfile-release-sync/Makefile b/packages/variant-quickjs-wasmfile-release-sync/Makefile deleted file mode 100644 index 735eb2459..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/Makefile +++ /dev/null @@ -1,180 +0,0 @@ -# Tools -EMSDK_VERSION=5.0.1 -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=quickjs - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=SYNC - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_WASM+=-Oz -CFLAGS_WASM+=-flto -CFLAGS_WASM+=--closure 1 -CFLAGS_WASM+=-s FILESYSTEM=0 -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-extension.js -CFLAGS_WASM+=--pre-js $(TEMPLATES)/pre-wasmMemory.js -CFLAGS_CJS+=-s ENVIRONMENT=node -CFLAGS_MJS+=-s ENVIRONMENT=node -CFLAGS_BROWSER+=-s ENVIRONMENT=web,worker -CFLAGS_CLOUDFLARE+=-s ENVIRONMENT=web - -# GENERATE_TS options - variant specific - - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: BROWSER MJS CJS CLOUDFLARE -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/packages/variant-quickjs-wasmfile-release-sync/README.md b/packages/variant-quickjs-wasmfile-release-sync/README.md deleted file mode 100644 index 732a75cf2..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# @jitl/quickjs-wasmfile-release-sync - -Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -```typescript -import variant from "@jitl/quickjs-wasmfile-release-sync" -import { newQuickJSWASMModuleFromVariant } from "quickjs-emscripten-core" -const QuickJS = await newQuickJSWASMModuleFromVariant(variant) -``` - -This variant was built with the following settings: - -## Library: quickjs - -The original [bellard/quickjs](https://github.com/bellard/quickjs) library. - -Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. - -## Release mode: release - -Optimized for performance; use when building/deploying your application. - -## Exports: require import browser workerd - -Exports the following in package.json for the package entrypoint: - -- Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule. -- Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module. -- Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments. -- Targets Cloudflare Workers. - -## Extra async magic? No - -The default, normal build. Note that both variants support regular async functions. - -## Single-file, or separate .wasm file? wasm - -Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. - -## More details - -Full variant JSON description: - -```json -{ - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { - "emscriptenEnvironment": ["node"] - }, - "import": { - "emscriptenEnvironment": ["node"] - }, - "browser": { - "emscriptenEnvironment": ["web", "worker"] - }, - "workerd": { - "emscriptenEnvironment": ["web"] - } - } -} -``` - -Variant-specific Emscripten build flags: - -```json -[ - "-Oz", - "-flto", - "--closure 1", - "-s FILESYSTEM=0", - "--pre-js $(TEMPLATES)/pre-extension.js", - "--pre-js $(TEMPLATES)/pre-wasmMemory.js" -] -``` diff --git a/packages/variant-quickjs-wasmfile-release-sync/package.json b/packages/variant-quickjs-wasmfile-release-sync/package.json deleted file mode 100644 index 402f798b2..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@jitl/quickjs-wasmfile-release-sync", - "license": "MIT", - "version": "0.31.0", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/justjake/quickjs-emscripten" - }, - "author": { - "name": "Jake Teton-Landis", - "url": "https://jake.tl" - }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": [ - "LICENSE", - "README.md", - "dist/**/*", - "!dist/*.tsbuildinfo" - ], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { - "@jitl/quickjs-ffi-types": "workspace:*" - } -} diff --git a/packages/variant-quickjs-wasmfile-release-sync/src/ffi.ts b/packages/variant-quickjs-wasmfile-release-sync/src/ffi.ts deleted file mode 100644 index 419f408d7..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/src/ffi.ts +++ /dev/null @@ -1,419 +0,0 @@ -// This file generated by "generate.ts ffi" in the root of the repo. -import { - QuickJSEmscriptenModule, - JSRuntimePointer, - JSContextPointer, - JSContextPointerPointer, - JSModuleDefPointer, - JSValuePointer, - JSValueConstPointer, - JSValuePointerPointer, - JSValuePointerPointerPointer, - JSValueConstPointerPointer, - QTS_C_To_HostCallbackFuncPointer, - QTS_C_To_HostInterruptFuncPointer, - QTS_C_To_HostLoadModuleFuncPointer, - BorrowedHeapCharPointer, - OwnedHeapCharPointer, - JSBorrowedCharPointer, - JSVoidPointer, - UInt32Pointer, - EvalFlags, - IntrinsicsFlags, - EvalDetectModule, - GetOwnPropertyNamesFlags, - IsEqualOp, - JSPromiseStateEnum, -} from "@jitl/quickjs-ffi-types" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export class QuickJSFFI { - constructor(private module: QuickJSEmscriptenModule) {} - /** Set at compile time. */ - readonly DEBUG = false - - QTS_Throw: ( - ctx: JSContextPointer, - error: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Throw", "number", ["number", "number"]) - - QTS_NewError: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewError", - "number", - ["number"], - ) - - QTS_RuntimeSetMemoryLimit: (rt: JSRuntimePointer, limit: number) => void = this.module.cwrap( - "QTS_RuntimeSetMemoryLimit", - null, - ["number", "number"], - ) - - QTS_RuntimeComputeMemoryUsage: (rt: JSRuntimePointer, ctx: JSContextPointer) => JSValuePointer = - this.module.cwrap("QTS_RuntimeComputeMemoryUsage", "number", ["number", "number"]) - - QTS_RuntimeDumpMemoryUsage: (rt: JSRuntimePointer) => OwnedHeapCharPointer = this.module.cwrap( - "QTS_RuntimeDumpMemoryUsage", - "number", - ["number"], - ) - - QTS_RecoverableLeakCheck: () => number = this.module.cwrap( - "QTS_RecoverableLeakCheck", - "number", - [], - ) - - QTS_BuildIsSanitizeLeak: () => number = this.module.cwrap("QTS_BuildIsSanitizeLeak", "number", []) - - QTS_RuntimeSetMaxStackSize: (rt: JSRuntimePointer, stack_size: number) => void = - this.module.cwrap("QTS_RuntimeSetMaxStackSize", null, ["number", "number"]) - - QTS_GetUndefined: () => JSValueConstPointer = this.module.cwrap("QTS_GetUndefined", "number", []) - - QTS_GetNull: () => JSValueConstPointer = this.module.cwrap("QTS_GetNull", "number", []) - - QTS_GetFalse: () => JSValueConstPointer = this.module.cwrap("QTS_GetFalse", "number", []) - - QTS_GetTrue: () => JSValueConstPointer = this.module.cwrap("QTS_GetTrue", "number", []) - - QTS_NewRuntime: () => JSRuntimePointer = this.module.cwrap("QTS_NewRuntime", "number", []) - - QTS_FreeRuntime: (rt: JSRuntimePointer) => void = this.module.cwrap("QTS_FreeRuntime", null, [ - "number", - ]) - - QTS_NewContext: (rt: JSRuntimePointer, intrinsics: IntrinsicsFlags) => JSContextPointer = - this.module.cwrap("QTS_NewContext", "number", ["number", "number"]) - - QTS_FreeContext: (ctx: JSContextPointer) => void = this.module.cwrap("QTS_FreeContext", null, [ - "number", - ]) - - QTS_FreeValuePointer: (ctx: JSContextPointer, value: JSValuePointer) => void = this.module.cwrap( - "QTS_FreeValuePointer", - null, - ["number", "number"], - ) - - QTS_FreeValuePointerRuntime: (rt: JSRuntimePointer, value: JSValuePointer) => void = - this.module.cwrap("QTS_FreeValuePointerRuntime", null, ["number", "number"]) - - QTS_FreeVoidPointer: (ctx: JSContextPointer, ptr: JSVoidPointer) => void = this.module.cwrap( - "QTS_FreeVoidPointer", - null, - ["number", "number"], - ) - - QTS_FreeCString: (ctx: JSContextPointer, str: JSBorrowedCharPointer) => void = this.module.cwrap( - "QTS_FreeCString", - null, - ["number", "number"], - ) - - QTS_DupValuePointer: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_DupValuePointer", "number", ["number", "number"]) - - QTS_NewObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewObject", - "number", - ["number"], - ) - - QTS_NewObjectProto: ( - ctx: JSContextPointer, - proto: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewObjectProto", "number", ["number", "number"]) - - QTS_NewArray: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_NewArray", - "number", - ["number"], - ) - - QTS_NewArrayBuffer: ( - ctx: JSContextPointer, - buffer: JSVoidPointer, - length: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewArrayBuffer", "number", [ - "number", - "number", - "number", - ]) - - QTS_NewFloat64: (ctx: JSContextPointer, num: number) => JSValuePointer = this.module.cwrap( - "QTS_NewFloat64", - "number", - ["number", "number"], - ) - - QTS_GetFloat64: (ctx: JSContextPointer, value: JSValuePointer | JSValueConstPointer) => number = - this.module.cwrap("QTS_GetFloat64", "number", ["number", "number"]) - - QTS_NewString: (ctx: JSContextPointer, string: BorrowedHeapCharPointer) => JSValuePointer = - this.module.cwrap("QTS_NewString", "number", ["number", "number"]) - - QTS_GetString: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetString", "number", ["number", "number"]) - - QTS_GetArrayBuffer: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSVoidPointer = this.module.cwrap("QTS_GetArrayBuffer", "number", ["number", "number"]) - - QTS_GetArrayBufferLength: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetArrayBufferLength", "number", ["number", "number"]) - - QTS_NewSymbol: ( - ctx: JSContextPointer, - description: BorrowedHeapCharPointer, - isGlobal: number, - ) => JSValuePointer = this.module.cwrap("QTS_NewSymbol", "number", ["number", "number", "number"]) - - QTS_GetSymbolDescriptionOrKey: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_GetSymbolDescriptionOrKey", "number", [ - "number", - "number", - ]) - - QTS_IsGlobalSymbol: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_IsGlobalSymbol", "number", ["number", "number"]) - - QTS_IsJobPending: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_IsJobPending", - "number", - ["number"], - ) - - QTS_ExecutePendingJob: ( - rt: JSRuntimePointer, - maxJobsToExecute: number, - lastJobContext: JSContextPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_ExecutePendingJob", "number", [ - "number", - "number", - "number", - ]) - - QTS_GetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetProp", "number", ["number", "number", "number"]) - - QTS_GetPropNumber: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetPropNumber", "number", [ - "number", - "number", - "number", - ]) - - QTS_SetProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - ) => void = this.module.cwrap("QTS_SetProp", null, ["number", "number", "number", "number"]) - - QTS_DefineProp: ( - ctx: JSContextPointer, - this_val: JSValuePointer | JSValueConstPointer, - prop_name: JSValuePointer | JSValueConstPointer, - prop_value: JSValuePointer | JSValueConstPointer, - get: JSValuePointer | JSValueConstPointer, - set: JSValuePointer | JSValueConstPointer, - configurable: boolean, - enumerable: boolean, - has_value: boolean, - ) => void = this.module.cwrap("QTS_DefineProp", null, [ - "number", - "number", - "number", - "number", - "number", - "number", - "boolean", - "boolean", - "boolean", - ]) - - QTS_GetOwnPropertyNames: ( - ctx: JSContextPointer, - out_ptrs: JSValuePointerPointerPointer, - out_len: UInt32Pointer, - obj: JSValuePointer | JSValueConstPointer, - flags: number, - ) => JSValuePointer = this.module.cwrap("QTS_GetOwnPropertyNames", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_Call: ( - ctx: JSContextPointer, - func_obj: JSValuePointer | JSValueConstPointer, - this_obj: JSValuePointer | JSValueConstPointer, - argc: number, - argv_ptrs: JSValueConstPointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_Call", "number", [ - "number", - "number", - "number", - "number", - "number", - ]) - - QTS_ResolveException: (ctx: JSContextPointer, maybe_exception: JSValuePointer) => JSValuePointer = - this.module.cwrap("QTS_ResolveException", "number", ["number", "number"]) - - QTS_Dump: ( - ctx: JSContextPointer, - obj: JSValuePointer | JSValueConstPointer, - ) => JSBorrowedCharPointer = this.module.cwrap("QTS_Dump", "number", ["number", "number"]) - - QTS_Eval: ( - ctx: JSContextPointer, - js_code: BorrowedHeapCharPointer, - js_code_length: number, - filename: string, - detectModule: EvalDetectModule, - evalFlags: EvalFlags, - ) => JSValuePointer = this.module.cwrap("QTS_Eval", "number", [ - "number", - "number", - "number", - "string", - "number", - "number", - ]) - - QTS_GetModuleNamespace: ( - ctx: JSContextPointer, - module_func_obj: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_GetModuleNamespace", "number", ["number", "number"]) - - QTS_Typeof: ( - ctx: JSContextPointer, - value: JSValuePointer | JSValueConstPointer, - ) => OwnedHeapCharPointer = this.module.cwrap("QTS_Typeof", "number", ["number", "number"]) - - QTS_GetLength: ( - ctx: JSContextPointer, - out_len: UInt32Pointer, - value: JSValuePointer | JSValueConstPointer, - ) => number = this.module.cwrap("QTS_GetLength", "number", ["number", "number", "number"]) - - QTS_IsEqual: ( - ctx: JSContextPointer, - a: JSValuePointer | JSValueConstPointer, - b: JSValuePointer | JSValueConstPointer, - op: IsEqualOp, - ) => number = this.module.cwrap("QTS_IsEqual", "number", ["number", "number", "number", "number"]) - - QTS_GetGlobalObject: (ctx: JSContextPointer) => JSValuePointer = this.module.cwrap( - "QTS_GetGlobalObject", - "number", - ["number"], - ) - - QTS_NewPromiseCapability: ( - ctx: JSContextPointer, - resolve_funcs_out: JSValuePointerPointer, - ) => JSValuePointer = this.module.cwrap("QTS_NewPromiseCapability", "number", [ - "number", - "number", - ]) - - QTS_PromiseState: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSPromiseStateEnum = this.module.cwrap("QTS_PromiseState", "number", ["number", "number"]) - - QTS_PromiseResult: ( - ctx: JSContextPointer, - promise: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_PromiseResult", "number", ["number", "number"]) - - QTS_TestStringArg: (string: string) => void = this.module.cwrap("QTS_TestStringArg", null, [ - "string", - ]) - - QTS_GetDebugLogEnabled: (rt: JSRuntimePointer) => number = this.module.cwrap( - "QTS_GetDebugLogEnabled", - "number", - ["number"], - ) - - QTS_SetDebugLogEnabled: (rt: JSRuntimePointer, is_enabled: number) => void = this.module.cwrap( - "QTS_SetDebugLogEnabled", - null, - ["number", "number"], - ) - - QTS_BuildIsDebug: () => number = this.module.cwrap("QTS_BuildIsDebug", "number", []) - - QTS_BuildIsAsyncify: () => number = this.module.cwrap("QTS_BuildIsAsyncify", "number", []) - - QTS_NewFunction: (ctx: JSContextPointer, func_id: number, name: string) => JSValuePointer = - this.module.cwrap("QTS_NewFunction", "number", ["number", "number", "string"]) - - QTS_ArgvGetJSValueConstPointer: ( - argv: JSValuePointer | JSValueConstPointer, - index: number, - ) => JSValueConstPointer = this.module.cwrap("QTS_ArgvGetJSValueConstPointer", "number", [ - "number", - "number", - ]) - - QTS_RuntimeEnableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeEnableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeDisableInterruptHandler: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableInterruptHandler", - null, - ["number"], - ) - - QTS_RuntimeEnableModuleLoader: (rt: JSRuntimePointer, use_custom_normalize: number) => void = - this.module.cwrap("QTS_RuntimeEnableModuleLoader", null, ["number", "number"]) - - QTS_RuntimeDisableModuleLoader: (rt: JSRuntimePointer) => void = this.module.cwrap( - "QTS_RuntimeDisableModuleLoader", - null, - ["number"], - ) - - QTS_bjson_encode: ( - ctx: JSContextPointer, - val: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_encode", "number", ["number", "number"]) - - QTS_bjson_decode: ( - ctx: JSContextPointer, - data: JSValuePointer | JSValueConstPointer, - ) => JSValuePointer = this.module.cwrap("QTS_bjson_decode", "number", ["number", "number"]) -} diff --git a/packages/variant-quickjs-wasmfile-release-sync/src/index.ts b/packages/variant-quickjs-wasmfile-release-sync/src/index.ts deleted file mode 100644 index 0e5a593f3..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { QuickJSSyncVariant } from "@jitl/quickjs-ffi-types" - -/** - * ### @jitl/quickjs-wasmfile-release-sync - * - * [Docs](https://github.com/justjake/quickjs-emscripten/blob/main/doc/@jitl/quickjs-wasmfile-release-sync/README.md) | - * Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS. - * - * | Variable | Setting | Description | - * | -- | -- | -- | - * | library | quickjs | The original [bellard/quickjs](https://github.com/bellard/quickjs) library. Version [2025-09-13+f1139494](https://github.com/bellard/quickjs/commit/f1139494d18a2053630c5ed3384a42bb70db3c53) vendored to quickjs-emscripten on 2026-02-15. | - * | releaseMode | release | Optimized for performance; use when building/deploying your application. | - * | syncMode | sync | The default, normal build. Note that both variants support regular async functions. | - * | emscriptenInclusion | wasm | Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant. | - * | exports | require import browser workerd | Has these package.json export conditions | - * - */ -const variant: QuickJSSyncVariant = { - type: "sync", - importFFI: () => import("./ffi.js").then((mod) => mod.QuickJSFFI), - importModuleLoader: () => - import("@jitl/quickjs-wasmfile-release-sync/emscripten-module").then((mod) => mod.default), -} as const - -export default variant diff --git a/packages/variant-quickjs-wasmfile-release-sync/tsconfig.json b/packages/variant-quickjs-wasmfile-release-sync/tsconfig.json deleted file mode 100644 index 3a077e276..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "@jitl/tsconfig/tsconfig.json", "include": ["src/*"], "exclude": ["node_modules"] } diff --git a/packages/variant-quickjs-wasmfile-release-sync/tsup.config.ts b/packages/variant-quickjs-wasmfile-release-sync/tsup.config.ts deleted file mode 100644 index c6b1441df..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/tsup.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ["src/index.ts", "src/ffi.ts"], - external: ["@jitl/quickjs-wasmfile-release-sync/emscripten-module"], - format: ["esm", "cjs"], - clean: false, -}) diff --git a/packages/variant-quickjs-wasmfile-release-sync/typedoc.json b/packages/variant-quickjs-wasmfile-release-sync/typedoc.json deleted file mode 100644 index e0f022104..000000000 --- a/packages/variant-quickjs-wasmfile-release-sync/typedoc.json +++ /dev/null @@ -1 +0,0 @@ -{ "extends": "../../typedoc.base.js", "entryPoints": ["./src/index.ts"], "mergeReadme": true } diff --git a/vendor/quickjs/qjs.c b/qjs.c similarity index 99% rename from vendor/quickjs/qjs.c rename to qjs.c index 0224f7cfa..3ee63408d 100644 --- a/vendor/quickjs/qjs.c +++ b/qjs.c @@ -139,7 +139,7 @@ static size_t js_trace_malloc_usable_size(const void *ptr) return malloc_size(ptr); #elif defined(_WIN32) return _msize((void *)ptr); -#elif defined(EMSCRIPTEN) +#elif defined(__EMSCRIPTEN__) return 0; #elif defined(__linux__) || defined(__GLIBC__) return malloc_usable_size((void *)ptr); diff --git a/vendor/quickjs/qjsc.c b/qjsc.c similarity index 100% rename from vendor/quickjs/qjsc.c rename to qjsc.c diff --git a/vendor/quickjs/quickjs-atom.h b/quickjs-atom.h similarity index 98% rename from vendor/quickjs/quickjs-atom.h rename to quickjs-atom.h index dac2df678..13c1ccdb9 100644 --- a/vendor/quickjs/quickjs-atom.h +++ b/quickjs-atom.h @@ -147,6 +147,7 @@ DEF(flags, "flags") DEF(global, "global") DEF(unicode, "unicode") DEF(raw, "raw") +DEF(rawJSON, "rawJSON") DEF(new_target, "new.target") DEF(this_active_func, "this.active_func") DEF(home_object, "") @@ -189,6 +190,10 @@ DEF(unicodeSets, "unicodeSets") DEF(not_equal, "not-equal") DEF(timed_out, "timed-out") DEF(ok, "ok") +DEF(toISOString, "toISOString") +DEF(alphabet, "alphabet") +DEF(lastChunkHandling, "lastChunkHandling") +DEF(omitPadding, "omitPadding") /* */ DEF(toJSON, "toJSON") DEF(maxByteLength, "maxByteLength") diff --git a/vendor/quickjs/quickjs-libc.c b/quickjs-libc.c similarity index 98% rename from vendor/quickjs/quickjs-libc.c rename to quickjs-libc.c index c24b6d53e..26e9683a5 100644 --- a/vendor/quickjs/quickjs-libc.c +++ b/quickjs-libc.c @@ -46,6 +46,7 @@ #include #include #include +#include #if defined(__FreeBSD__) extern char **environ; @@ -87,6 +88,7 @@ typedef sig_t sighandler_t; typedef struct { struct list_head link; int fd; + int poll_fd_index; /* temporary use in js_os_poll() */ JSValue rw_func[2]; } JSOSRWHandler; @@ -134,6 +136,7 @@ typedef struct { struct list_head link; JSWorkerMessagePipe *recv_pipe; JSValue on_message_func; + int poll_fd_index; /* temporary use in js_os_poll() */ } JSWorkerMessageHandler; typedef struct { @@ -152,6 +155,10 @@ typedef struct JSThreadState { int next_timer_id; /* for setTimeout() */ /* not used in the main thread */ JSWorkerMessagePipe *recv_pipe, *send_pipe; +#if !defined(_WIN32) + struct pollfd *poll_fds; + int poll_fds_size; +#endif } JSThreadState; static uint64_t os_pending_signals; @@ -2507,16 +2514,44 @@ static int js_os_poll(JSContext *ctx) #else +static no_inline int js_poll_expand(JSThreadState *ts) +{ + struct pollfd *new_fds; + int new_size = max_int(ts->poll_fds_size + + ts->poll_fds_size / 2, 16); + new_fds = realloc(ts->poll_fds, new_size * sizeof(struct pollfd)); + if (!new_fds) + return -1; + ts->poll_fds = new_fds; + ts->poll_fds_size = new_size; + return 0; +} + +static int js_poll_add_poll_fd(JSThreadState *ts, int *pnfds, int fd, int events) +{ + struct pollfd *fds; + int nfds; + nfds = *pnfds; + if (unlikely(nfds >= ts->poll_fds_size)) { + if (js_poll_expand(ts)) + return -1; + } + fds = &ts->poll_fds[nfds++]; + fds->fd = fd; + fds->events = events; + fds->revents = 0; + *pnfds = nfds; + return 0; +} + static int js_os_poll(JSContext *ctx) { JSRuntime *rt = JS_GetRuntime(ctx); JSThreadState *ts = JS_GetRuntimeOpaque(rt); - int ret, fd_max, min_delay; + int min_delay, nfds; int64_t cur_time, delay; - fd_set rfds, wfds; JSOSRWHandler *rh; struct list_head *el; - struct timeval tv, *tvp; /* only check signals in the main thread */ if (!ts->recv_pipe && @@ -2558,46 +2593,49 @@ static int js_os_poll(JSContext *ctx) min_delay = delay; } } - tv.tv_sec = min_delay / 1000; - tv.tv_usec = (min_delay % 1000) * 1000; - tvp = &tv; } else { - tvp = NULL; + min_delay = -1; /* infinite */ } - FD_ZERO(&rfds); - FD_ZERO(&wfds); - fd_max = -1; + nfds = 0; list_for_each(el, &ts->os_rw_handlers) { + int events; + rh = list_entry(el, JSOSRWHandler, link); - fd_max = max_int(fd_max, rh->fd); + events = 0; if (!JS_IsNull(rh->rw_func[0])) - FD_SET(rh->fd, &rfds); + events |= POLLIN; if (!JS_IsNull(rh->rw_func[1])) - FD_SET(rh->fd, &wfds); + events |= POLLOUT; + if (events) { + rh->poll_fd_index = nfds; + if (js_poll_add_poll_fd(ts, &nfds, rh->fd, events)) + return -1; + } } list_for_each(el, &ts->port_list) { JSWorkerMessageHandler *port = list_entry(el, JSWorkerMessageHandler, link); if (!JS_IsNull(port->on_message_func)) { JSWorkerMessagePipe *ps = port->recv_pipe; - fd_max = max_int(fd_max, ps->waker.read_fd); - FD_SET(ps->waker.read_fd, &rfds); + port->poll_fd_index = nfds; + if (js_poll_add_poll_fd(ts, &nfds, ps->waker.read_fd, POLLIN)) + return -1; } } - ret = select(fd_max + 1, &rfds, &wfds, NULL, tvp); - if (ret > 0) { + nfds = poll(ts->poll_fds, nfds, min_delay); + if (nfds > 0) { list_for_each(el, &ts->os_rw_handlers) { rh = list_entry(el, JSOSRWHandler, link); if (!JS_IsNull(rh->rw_func[0]) && - FD_ISSET(rh->fd, &rfds)) { + (ts->poll_fds[rh->poll_fd_index].revents & (POLLERR | POLLHUP | POLLNVAL | POLLIN))) { call_handler(ctx, rh->rw_func[0]); /* must stop because the list may have been modified */ goto done; } if (!JS_IsNull(rh->rw_func[1]) && - FD_ISSET(rh->fd, &wfds)) { + (ts->poll_fds[rh->poll_fd_index].revents & (POLLERR | POLLHUP | POLLNVAL | POLLOUT))) { call_handler(ctx, rh->rw_func[1]); /* must stop because the list may have been modified */ goto done; @@ -2607,8 +2645,7 @@ static int js_os_poll(JSContext *ctx) list_for_each(el, &ts->port_list) { JSWorkerMessageHandler *port = list_entry(el, JSWorkerMessageHandler, link); if (!JS_IsNull(port->on_message_func)) { - JSWorkerMessagePipe *ps = port->recv_pipe; - if (FD_ISSET(ps->waker.read_fd, &rfds)) { + if (ts->poll_fds[port->poll_fd_index].revents != 0) { if (handle_posted_message(rt, ctx, port)) goto done; } @@ -3268,14 +3305,14 @@ static JSValue js_os_exec(JSContext *ctx, JSValueConst this_val, if (chdir(cwd) < 0) _exit(127); } - if (uid != -1) { - if (setuid(uid) < 0) - _exit(127); - } if (gid != -1) { if (setgid(gid) < 0) _exit(127); } + if (uid != -1) { + if (setuid(uid) < 0) + _exit(127); + } if (!file) file = exec_argv[0]; @@ -3309,7 +3346,7 @@ static JSValue js_os_exec(JSContext *ctx, JSValueConst this_val, for(i = 0; i < exec_argc; i++) JS_FreeCString(ctx, exec_argv[i]); js_free(ctx, exec_argv); - if (envp != environ) { + if (envp && envp != environ) { char **p; p = envp; while (*p != NULL) { @@ -3879,7 +3916,7 @@ void js_std_set_worker_new_context_func(JSContext *(*func)(JSRuntime *rt)) #define OS_PLATFORM "win32" #elif defined(__APPLE__) #define OS_PLATFORM "darwin" -#elif defined(EMSCRIPTEN) +#elif defined(__EMSCRIPTEN__) #define OS_PLATFORM "js" #else #define OS_PLATFORM "linux" @@ -4164,6 +4201,10 @@ void js_std_free_handlers(JSRuntime *rt) } #endif +#if !defined(_WIN32) + free(ts->poll_fds); +#endif + free(ts); JS_SetRuntimeOpaque(rt, NULL); /* fail safe */ } diff --git a/vendor/quickjs/quickjs-libc.h b/quickjs-libc.h similarity index 100% rename from vendor/quickjs/quickjs-libc.h rename to quickjs-libc.h diff --git a/vendor/quickjs/quickjs-opcode.h b/quickjs-opcode.h similarity index 100% rename from vendor/quickjs/quickjs-opcode.h rename to quickjs-opcode.h diff --git a/vendor/quickjs/quickjs.c b/quickjs.c similarity index 95% rename from vendor/quickjs/quickjs.c rename to quickjs.c index e32f0f3d0..e3716a4fa 100644 --- a/vendor/quickjs/quickjs.c +++ b/quickjs.c @@ -49,7 +49,7 @@ #define OPTIMIZE 1 #define SHORT_OPCODES 1 -#if defined(EMSCRIPTEN) +#if defined(__EMSCRIPTEN__) #define DIRECT_DISPATCH 0 #else #define DIRECT_DISPATCH 1 @@ -68,11 +68,11 @@ /* define to include Atomics.* operations which depend on the OS threads */ -#if !defined(EMSCRIPTEN) +#if !defined(__EMSCRIPTEN__) #define CONFIG_ATOMICS #endif -#if !defined(EMSCRIPTEN) +#if !defined(__EMSCRIPTEN__) /* enable stack limitation */ #define CONFIG_STACK_CHECK #endif @@ -107,6 +107,8 @@ //#define DUMP_PROMISE //#define DUMP_READ_OBJECT //#define DUMP_ROPE_REBALANCE +/* add asm labels to each opcode so that it is easier to see the generated code */ +//#define OPCODE_ASM_LABEL /* test the GC by forcing it before each object allocation */ //#define FORCE_GC_AT_MALLOC @@ -168,6 +170,7 @@ enum { JS_CLASS_REGEXP_STRING_ITERATOR, /* u.regexp_string_iterator_data */ JS_CLASS_GENERATOR, /* u.generator_data */ JS_CLASS_GLOBAL_OBJECT, /* u.global_object */ + JS_CLASS_RAWJSON, JS_CLASS_PROXY, /* u.proxy_data */ JS_CLASS_PROMISE, /* u.promise_data */ JS_CLASS_PROMISE_RESOLVE_FUNCTION, /* u.promise_function_data */ @@ -235,9 +238,86 @@ typedef enum { typedef enum OPCodeEnum OPCodeEnum; -struct JSRuntime { +/* JS malloc */ + +#define JS_MALLOC_ALIGN 8 +#define JS_MALLOC_ARENA_SIZE 4096 +#define JS_MALLOC_BLOCK_SIZE_COUNT 31 +#define JS_MALLOC_MIN_SMALL_SIZE 16 +#define JS_MALLOC_MAX_SMALL_SIZE 512 +#if defined(__SANITIZE_ADDRESS__) +/* use the host malloc() for all allocations */ +#define JS_MALLOC_LARGE_BLOCKS_ONLY 1 +#else +#define JS_MALLOC_LARGE_BLOCKS_ONLY 0 +#endif + +/* allow iteration among the allocated blocks. Currently not used. May + be used to suppress the memory overhead of JSGCObjectHeader */ +//#define JS_MALLOC_USE_ITER + +#define FREE_NIL 0xffff + +/* 8 byte header */ +/* Notes: + - the header is necessary at least to recover a pointer to + JSMallocArena because we don't want to enforce a page + alignment on the system malloc(). + - could store the block offset instead of (block_idx, + block_size_idx), but it would require a division to recover the block + index. +*/ +typedef struct JSMallocBlockHeader { + union { + uint16_t block_idx; /* FREE_NIL if large block */ + uint16_t free_next; /* FREE_NIL if none */ + } u; + uint8_t block_size_idx; + uint8_t gc_obj_type : 7; + uint8_t mark : 1; + int ref_count; + __attribute__((aligned(JS_MALLOC_ALIGN))) uint8_t user_data[]; +} JSMallocBlockHeader; + +typedef struct JSMallocLargeBlockHeader { +#ifdef JS_MALLOC_USE_ITER + struct list_head link; +#endif + JSMallocBlockHeader header; +} JSMallocLargeBlockHeader; + +typedef struct { + struct list_head free_link; + struct list_head link; + uint8_t block_size_idx; + uint16_t n_used_blocks; /* number of allocated blocks */ + uint16_t n_blocks; /* total number of blocks */ + uint16_t first_free_block; /* FREE_NIL if none */ +#ifdef JS_MALLOC_USE_ITER + /* bit set to 1 for allocated block */ + uint32_t bitmap[((JS_MALLOC_ARENA_SIZE / JS_MALLOC_MIN_SMALL_SIZE) + 31) / 32]; +#endif + /* n_blocks memory blocks of identical size */ + __attribute__((aligned(JS_MALLOC_ALIGN))) uint8_t blocks[]; +} JSMallocArena; + +typedef struct { + struct list_head arena_list[JS_MALLOC_BLOCK_SIZE_COUNT]; /* list of JSMallocArena.link (all arenas) */ + struct list_head free_arena_list[JS_MALLOC_BLOCK_SIZE_COUNT]; /* list of JSMallocArena.free_link (arenas where n_used_blocks < n_blocks) */ +#ifdef JS_MALLOC_USE_ITER + struct list_head large_block_list; /* list of JSMallocLargeBlockHeader.link */ +#endif + __attribute__((aligned(JS_MALLOC_ALIGN))) uint8_t zero_size_block[sizeof(JSMallocBlockHeader)]; + + /* callbacks to the host malloc */ JSMallocFunctions mf; JSMallocState malloc_state; +} JSMallocContext; + +/* end JS Malloc */ + +struct JSRuntime { + JSMallocContext malloc_ctx; const char *rt_info; int atom_hash_size; /* power of two */ @@ -353,12 +433,6 @@ typedef enum { reference count that can reference other GC objects. JS Objects are a particular type of GC object. */ struct JSGCObjectHeader { - int ref_count; /* must come first, 32-bit */ - JSGCObjectTypeEnum gc_obj_type : 4; - uint8_t mark : 1; /* used by the GC */ - uint8_t dummy0: 3; - uint8_t dummy1; /* not used by the GC */ - uint16_t dummy2; /* not used by the GC */ struct list_head link; }; @@ -374,16 +448,10 @@ typedef struct { } JSWeakRefHeader; typedef struct JSVarRef { - union { - JSGCObjectHeader header; /* must come first */ - struct { - int __gc_ref_count; /* corresponds to header.ref_count */ - uint8_t __gc_mark; /* corresponds to header.mark/gc_obj_type */ - uint8_t is_detached; - uint8_t is_lexical; /* only used with global variables */ - uint8_t is_const; /* only used with global variables */ - }; - }; + JSGCObjectHeader header; /* must come first */ + uint8_t is_detached; + uint8_t is_lexical; /* only used with global variables */ + uint8_t is_const; /* only used with global variables */ JSValue *pvalue; /* pointer to the value, either on the stack or to 'value' */ union { @@ -420,7 +488,6 @@ typedef uint128_t js_dlimb_t; #endif typedef struct JSBigInt { - JSRefCountHeader header; /* must come first, 32-bit */ uint32_t len; /* number of limbs, >= 1 */ js_limb_t tab[]; /* two's complement representation, always normalized so that 'len' is the minimum @@ -514,7 +581,6 @@ typedef enum { #define JS_ATOM_HASH_PRIVATE JS_ATOM_HASH_MASK struct JSString { - JSRefCountHeader header; /* must come first, 32-bit */ uint32_t len : 31; uint8_t is_wide_char : 1; /* 0 = 8 bits, 1 = 16 bits characters */ /* for JS_ATOM_TYPE_SYMBOL: hash = weakref_count, atom_type = 3, @@ -533,7 +599,6 @@ struct JSString { }; typedef struct JSStringRope { - JSRefCountHeader header; /* must come first, 32-bit */ uint32_t len; uint8_t is_wide_char; /* 0 = 8 bits, 1 = 16 bits characters */ uint8_t depth; /* max depth of the rope tree */ @@ -907,47 +972,40 @@ typedef struct JSShapeProperty { } JSShapeProperty; struct JSShape { - /* hash table of size hash_mask + 1 before the start of the - structure (see prop_hash_end()). */ JSGCObjectHeader header; /* true if the shape is inserted in the shape hash table. If not, JSShape.hash is not valid */ uint8_t is_hashed; uint32_t hash; /* current hash value */ - uint32_t prop_hash_mask; + uint32_t prop_hash_mask; /* >= 2 */ int prop_size; /* allocated properties */ int prop_count; /* include deleted properties */ int deleted_prop_count; JSShape *shape_hash_next; /* in JSRuntime.shape_hash[h] list */ JSObject *proto; - JSShapeProperty prop[0]; /* prop_size elements */ + uint32_t hash_table[]; /* prop_hash_mask + 1 elements */ + /* followed by JSShapeProperty prop[prop_size]; */ }; struct JSObject { - union { - JSGCObjectHeader header; - struct { - int __gc_ref_count; /* corresponds to header.ref_count */ - uint8_t __gc_mark : 7; /* corresponds to header.mark/gc_obj_type */ - /* TRUE if the array prototype is "normal": - - no small index properties which are get/set or non writable - - its prototype is Object.prototype - - Object.prototype has no small index properties which are get/set or non writable - - the prototype of Object.prototype is null (always true as it is immutable) - */ - uint8_t is_std_array_prototype : 1; - - uint8_t extensible : 1; - uint8_t free_mark : 1; /* only used when freeing objects with cycles */ - uint8_t is_exotic : 1; /* TRUE if object has exotic property handlers */ - uint8_t fast_array : 1; /* TRUE if u.array is used for get/put (for JS_CLASS_ARRAY, JS_CLASS_ARGUMENTS, JS_CLASS_MAPPED_ARGUMENTS and typed arrays) */ - uint8_t is_constructor : 1; /* TRUE if object is a constructor function */ - uint8_t has_immutable_prototype : 1; /* cannot modify the prototype */ - uint8_t tmp_mark : 1; /* used in JS_WriteObjectRec() */ - uint8_t is_HTMLDDA : 1; /* specific annex B IsHtmlDDA behavior */ - uint16_t class_id; /* see JS_CLASS_x */ - }; - }; + JSGCObjectHeader header; + /* TRUE if the array prototype is "normal": + - no small index properties which are get/set or non writable + - its prototype is Object.prototype + - Object.prototype has no small index properties which are get/set or non writable + - the prototype of Object.prototype is null (always true as it is immutable) + */ + uint8_t is_std_array_prototype : 1; + + uint8_t extensible : 1; + uint8_t free_mark : 1; /* only used when freeing objects with cycles */ + uint8_t is_exotic : 1; /* TRUE if object has exotic property handlers */ + uint8_t fast_array : 1; /* TRUE if u.array is used for get/put (for JS_CLASS_ARRAY, JS_CLASS_ARGUMENTS, JS_CLASS_MAPPED_ARGUMENTS and typed arrays) */ + uint8_t is_constructor : 1; /* TRUE if object is a constructor function */ + uint8_t has_immutable_prototype : 1; /* cannot modify the prototype */ + uint8_t tmp_mark : 1; /* used in JS_WriteObjectRec() */ + uint8_t is_HTMLDDA : 1; /* specific annex B IsHtmlDDA behavior */ + uint16_t class_id; /* see JS_CLASS_x */ /* count the number of weak references to this object. The object structure is freed only if header.ref_count = 0 and weakref_count = 0 */ @@ -1207,7 +1265,7 @@ typedef enum JSStrictEqModeEnum { JS_EQ_SAME_VALUE_ZERO, } JSStrictEqModeEnum; -static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2, +static BOOL js_strict_eq2(JSContext *ctx, JSValueConst op1, JSValueConst op2, JSStrictEqModeEnum eq_mode); static BOOL js_strict_eq(JSContext *ctx, JSValueConst op1, JSValueConst op2); static BOOL js_same_value(JSContext *ctx, JSValueConst op1, JSValueConst op2); @@ -1344,6 +1402,10 @@ static JSValue js_error_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv); static JSVarRef *js_global_object_find_uninitialized_var(JSContext *ctx, JSObject *p, JSAtom atom, BOOL is_lexical); +static int typed_array_init(JSContext *ctx, JSValueConst obj, + JSValue buffer, uint64_t offset, uint64_t len, + BOOL track_rab); + static const JSClassExoticMethods js_arguments_exotic_methods; static const JSClassExoticMethods js_string_exotic_methods; @@ -1351,56 +1413,415 @@ static const JSClassExoticMethods js_proxy_exotic_methods; static const JSClassExoticMethods js_module_ns_exotic_methods; static JSClassID js_class_id_alloc = JS_CLASS_INIT_COUNT; +/* JS malloc */ + +/* max overhead for size >= 64: 12.5% */ +static const uint16_t js_malloc_block_sizes[JS_MALLOC_BLOCK_SIZE_COUNT] = { + 16, + 24, + 32, + 40, + 48, + 56, + 64, + 72, + 80, + 88, + 96, + 104, + 112, + 120, + 128, + 144, + 160, + 176, + 192, + 208, + 224, + 240, + 256, + 288, + 320, + 352, + 384, + 416, + 448, + 480, + 512, +}; + +static int get_block_size_index(size_t size) +{ + if (size <= 16) { + return 0; + } else if (size <= 128) { + return (size + 7) / 8 - 2; + } else if (size <= 256) { + return (size + 15) / 16 + 6; + } else if (size <= 512) { + return (size + 31) / 32 + 14; + } else { + return JS_MALLOC_BLOCK_SIZE_COUNT; + } +} + +static JSMallocBlockHeader *get_zero_size_block(JSMallocContext *s) +{ + return (JSMallocBlockHeader *)s->zero_size_block; +} + +static void js_malloc_init(JSMallocContext *s) +{ + int i; + memset(s, 0, sizeof(*s)); + get_zero_size_block(s)->u.block_idx = FREE_NIL; + for(i = 0; i < JS_MALLOC_BLOCK_SIZE_COUNT; i++) { + init_list_head(&s->arena_list[i]); + init_list_head(&s->free_arena_list[i]); + } +#ifdef JS_MALLOC_USE_ITER + init_list_head(&s->large_block_list); +#endif +} + +static void *get_arena_block(JSMallocArena *ar, unsigned int idx, unsigned int block_size) +{ + return ar->blocks + idx * block_size; +} + +static inline JSMallocBlockHeader *js_rc(void *ptr) +{ + return container_of(ptr, JSMallocBlockHeader, user_data); +} + +static no_inline JSMallocArena *js_malloc_new_arena(JSMallocContext *s, int block_size_idx) +{ + JSMallocBlockHeader *b; + JSMallocArena *ar; + int n_blocks, block_size, i; + + block_size = js_malloc_block_sizes[block_size_idx]; + n_blocks = (JS_MALLOC_ARENA_SIZE - sizeof(JSMallocArena)) / block_size; + ar = s->mf.js_malloc(&s->malloc_state, sizeof(JSMallocArena) + n_blocks * block_size); + if (!ar) + return NULL; + + ar->block_size_idx = block_size_idx; + ar->n_blocks = n_blocks; + ar->n_used_blocks = 0; + ar->first_free_block = 0; +#ifdef JS_MALLOC_USE_ITER + { + int n_bitmap_words = (n_blocks + 31) / 32; + for(i = 0; i < n_bitmap_words; i++) + ar->bitmap[i] = 0; + } +#endif + for(i = 0; i < n_blocks - 1; i++) { + b = get_arena_block(ar, i, block_size); + b->u.free_next = i + 1; + b->block_size_idx = block_size_idx; + } + b = get_arena_block(ar, n_blocks - 1, block_size); + b->u.free_next = FREE_NIL; + b->block_size_idx = block_size_idx; + + /* add to the head */ + list_add(&ar->link, &s->arena_list[block_size_idx]); + list_add(&ar->free_link, &s->free_arena_list[block_size_idx]); + return ar; +} + +static no_inline void *js_malloc_large(JSMallocContext *s, size_t size) +{ + JSMallocLargeBlockHeader *b; + b = s->mf.js_malloc(&s->malloc_state, sizeof(JSMallocLargeBlockHeader) + size); + if (!b) + return NULL; + b->header.u.block_idx = FREE_NIL; + b->header.block_size_idx = 0xff; /* fail safe */ +#ifdef JS_MALLOC_USE_ITER + list_add_tail(&b->link, &s->large_block_list); +#endif + return b->header.user_data; +} + +static void *__js_malloc(JSMallocContext *s, size_t size) +{ + size_t total_size; + if (unlikely(size == 0)) { + JSMallocBlockHeader *b = get_zero_size_block(s); + return b->user_data; + } else { + total_size = ((size + JS_MALLOC_ALIGN - 1) & ~(JS_MALLOC_ALIGN - 1)) + + sizeof(JSMallocBlockHeader); + if (!JS_MALLOC_LARGE_BLOCKS_ONLY && + total_size <= JS_MALLOC_MAX_SMALL_SIZE) { + int block_size_idx; + unsigned int block_idx, block_size; + JSMallocBlockHeader *b; + JSMallocArena *ar; + struct list_head *el, *head; + + block_size_idx = get_block_size_index(total_size); + block_size = js_malloc_block_sizes[block_size_idx]; + head = &s->free_arena_list[block_size_idx]; + el = head->next; + if (unlikely(el == head)) { + ar = js_malloc_new_arena(s, block_size_idx); + if (!ar) + return NULL; + } else { + ar = list_entry(el, JSMallocArena, free_link); + } + block_idx = ar->first_free_block; + b = get_arena_block(ar, ar->first_free_block, block_size); + ar->first_free_block = b->u.free_next; + b->u.block_idx = block_idx; + ar->n_used_blocks++; + if (unlikely(ar->n_used_blocks == ar->n_blocks)) { + list_del(&ar->free_link); + } +#ifdef JS_MALLOC_USE_ITER + ar->bitmap[block_idx / 32] |= 1 << (block_idx % 32); +#endif + return b->user_data; + } else { + return js_malloc_large(s, size); + } + } +} + +static void __js_free(JSMallocContext *s, void *ptr) +{ + JSMallocBlockHeader *b; + + if (!ptr) + return; + b = container_of(ptr, JSMallocBlockHeader, user_data); + if (unlikely(b->u.block_idx == FREE_NIL)) { + /* large or zero size block */ + if (b == get_zero_size_block(s)) { + /* nothing to do */ + } else { + JSMallocLargeBlockHeader *lb = container_of(ptr, JSMallocLargeBlockHeader, header.user_data); +#ifdef JS_MALLOC_USE_ITER + list_del(&lb->link); +#endif + s->mf.js_free(&s->malloc_state, lb); + } + } else { + unsigned int block_idx = b->u.block_idx; + unsigned int block_size_idx = b->block_size_idx; + unsigned int block_size = js_malloc_block_sizes[block_size_idx]; + JSMallocArena *ar = (JSMallocArena *)((uint8_t *)b - block_size * block_idx - sizeof(JSMallocArena)); + b->u.free_next = ar->first_free_block; + ar->first_free_block = block_idx; +#ifdef JS_MALLOC_USE_ITER + ar->bitmap[block_idx / 32] &= ~(1 << (block_idx % 32)); +#endif + /* add back to the free list if needed */ + if (unlikely(ar->n_used_blocks == ar->n_blocks)) { + list_add(&ar->free_link, &s->free_arena_list[block_size_idx]); + } + ar->n_used_blocks--; + if (unlikely(ar->n_used_blocks == 0)) { + list_del(&ar->link); + list_del(&ar->free_link); + s->mf.js_free(&s->malloc_state, ar); + } + } +} + +static void *__js_realloc(JSMallocContext *s, void *ptr, size_t size) +{ + JSMallocBlockHeader *b; + if (ptr == NULL) { + return __js_malloc(s, size); + } else if (size == 0) { + __js_free(s, ptr); + return NULL; + } + b = container_of(ptr, JSMallocBlockHeader, user_data); + if (b->u.block_idx == FREE_NIL) { + if (b == get_zero_size_block(s)) { + return __js_malloc(s, size); + } else { + JSMallocLargeBlockHeader *lb, *new_lb; + lb = container_of(ptr, JSMallocLargeBlockHeader, header.user_data); +#ifdef JS_MALLOC_USE_ITER + list_del(&lb->link); +#endif + new_lb = s->mf.js_realloc(&s->malloc_state, lb, sizeof(JSMallocLargeBlockHeader) + size); + if (!new_lb) { +#ifdef JS_MALLOC_USE_ITER + /* add again in the list */ + list_add_tail(&lb->link, &s->large_block_list); +#endif + return NULL; + } + new_lb->header.u.block_idx = FREE_NIL; + new_lb->header.block_size_idx = 0xff; /* fail safe */ +#ifdef JS_MALLOC_USE_ITER + list_add_tail(&new_lb->link, &s->large_block_list); +#endif + return new_lb->header.user_data; + } + } else { + unsigned int block_size_idx = b->block_size_idx; + size_t block_size = js_malloc_block_sizes[block_size_idx]; + size_t total_size, old_size; + void *new_ptr; + JSMallocBlockHeader *new_b; + + total_size = ((size + JS_MALLOC_ALIGN - 1) & ~(JS_MALLOC_ALIGN - 1)) + + sizeof(JSMallocBlockHeader); + if (total_size <= block_size) + return ptr; + new_ptr = __js_malloc(s, size); + if (!new_ptr) + return NULL; + new_b = container_of(new_ptr, JSMallocBlockHeader, user_data); + /* copy the GC data */ + new_b->gc_obj_type = b->gc_obj_type; + new_b->mark = b->mark; + new_b->ref_count = b->ref_count; + /* copy the data */ + old_size = block_size - sizeof(JSMallocBlockHeader); + if (size > old_size) + size = old_size; + memcpy(new_ptr, ptr, size); + __js_free(s, ptr); + return new_ptr; + } +} + +static size_t __js_malloc_usable_size(JSMallocContext *s, const char *ptr) +{ + JSMallocBlockHeader *b; + if (!ptr) + return 0; + b = container_of(ptr, JSMallocBlockHeader, user_data); + if (b->u.block_idx == FREE_NIL) { + if (b == get_zero_size_block(s)) { + return 0; + } else { + JSMallocLargeBlockHeader *lb; + size_t size; + lb = container_of(ptr, JSMallocLargeBlockHeader, header.user_data); + if (s->mf.js_malloc_usable_size) { + size = s->mf.js_malloc_usable_size(lb); + if (size != 0) + size -= sizeof(JSMallocLargeBlockHeader); + return size; + } else { + return 0; + } + } + } else { + size_t block_size = js_malloc_block_sizes[b->block_size_idx]; + return block_size - sizeof(*b); + } +} + +static __maybe_unused void js_malloc_dump_arenas(JSMallocContext *s) +{ + struct list_head *el; + int block_size_idx; + + printf("%20s %10s %10s\n", "PTR", "BLK_SIZE", "ALLOC"); + for(block_size_idx = 0; block_size_idx < JS_MALLOC_BLOCK_SIZE_COUNT; block_size_idx++) { + int block_size = js_malloc_block_sizes[block_size_idx]; + list_for_each(el, &s->arena_list[block_size_idx]) { + JSMallocArena *ar = list_entry(el, JSMallocArena, link); + printf("%20p %10u %9.1f%%\n", + ar, block_size, + (double)ar->n_used_blocks / ar->n_blocks * 100); + } + } +} + +#ifdef JS_MALLOC_USE_ITER +typedef void JSMallocIterFunc(void *opaque, void *ptr); + +/* iterate thru allocated blocks. The allocated block list should not + be modified while iterating. */ +static __maybe_unused void js_malloc_iter(JSMallocContext *s, JSMallocIterFunc *iter_func, void *iter_opaque) +{ + struct list_head *el; + int block_size_idx; + int i, j, n_words; + uint32_t bmp; + + for(block_size_idx = 0; block_size_idx < JS_MALLOC_BLOCK_SIZE_COUNT; block_size_idx++) { + unsigned int block_size = js_malloc_block_sizes[block_size_idx]; + list_for_each(el, &s->arena_list[block_size_idx]) { + JSMallocArena *ar = list_entry(el, JSMallocArena, link); + n_words = (ar->n_blocks + 31) / 32; + for(i = 0; i < n_words; i++) { + bmp = ar->bitmap[i]; + while (bmp != 0) { + j = ctz32(bmp); + bmp &= ~(1 << j); + iter_func(iter_opaque, get_arena_block(ar, i * 32+ j, block_size)); + } + } + } + } + list_for_each(el, &s->large_block_list) { + JSMallocLargeBlockHeader *lb = list_entry(el, JSMallocLargeBlockHeader, link); + iter_func(iter_opaque, lb->header.user_data); + } +} +#endif + +/* end JS malloc */ + static void js_trigger_gc(JSRuntime *rt, size_t size) { BOOL force_gc; #ifdef FORCE_GC_AT_MALLOC force_gc = TRUE; #else - force_gc = ((rt->malloc_state.malloc_size + size) > + force_gc = ((rt->malloc_ctx.malloc_state.malloc_size + size) > rt->malloc_gc_threshold); #endif if (force_gc) { #ifdef DUMP_GC printf("GC: size=%" PRIu64 "\n", - (uint64_t)rt->malloc_state.malloc_size); + (uint64_t)rt->malloc_ctx.malloc_state.malloc_size); #endif JS_RunGC(rt); - rt->malloc_gc_threshold = rt->malloc_state.malloc_size + - (rt->malloc_state.malloc_size >> 1); + rt->malloc_gc_threshold = rt->malloc_ctx.malloc_state.malloc_size + + (rt->malloc_ctx.malloc_state.malloc_size >> 1); } } -static size_t js_malloc_usable_size_unknown(const void *ptr) -{ - return 0; -} - void *js_malloc_rt(JSRuntime *rt, size_t size) { - return rt->mf.js_malloc(&rt->malloc_state, size); + return __js_malloc(&rt->malloc_ctx, size); } void js_free_rt(JSRuntime *rt, void *ptr) { - rt->mf.js_free(&rt->malloc_state, ptr); + __js_free(&rt->malloc_ctx, ptr); } void *js_realloc_rt(JSRuntime *rt, void *ptr, size_t size) { - return rt->mf.js_realloc(&rt->malloc_state, ptr, size); + return __js_realloc(&rt->malloc_ctx, ptr, size); } size_t js_malloc_usable_size_rt(JSRuntime *rt, const void *ptr) { - return rt->mf.js_malloc_usable_size(ptr); + return __js_malloc_usable_size(&rt->malloc_ctx, ptr); } void *js_mallocz_rt(JSRuntime *rt, size_t size) { void *ptr; ptr = js_malloc_rt(rt, size); - if (!ptr) + if (unlikely(!ptr)) return NULL; return memset(ptr, 0, size); } @@ -1524,7 +1945,7 @@ static void *js_realloc_bytecode_rt(void *opaque, void *ptr, size_t size) avoid some overflows. */ return NULL; } else { - return rt->mf.js_realloc(&rt->malloc_state, ptr, size); + return js_realloc_rt(rt, ptr, size); } } @@ -1597,6 +2018,7 @@ static JSClassShortDef const js_std_class_def[] = { { JS_ATOM_RegExp_String_Iterator, js_regexp_string_iterator_finalizer, js_regexp_string_iterator_mark }, /* JS_CLASS_REGEXP_STRING_ITERATOR */ { JS_ATOM_Generator, js_generator_finalizer, js_generator_mark }, /* JS_CLASS_GENERATOR */ { JS_ATOM_Object, js_global_object_finalizer, js_global_object_mark }, /* JS_CLASS_GLOBAL_OBJECT */ + { JS_ATOM_Object, NULL, NULL }, /* JS_CLASS_RAWJSON */ }; static int init_class_range(JSRuntime *rt, JSClassShortDef const *tab, @@ -1655,12 +2077,9 @@ JSRuntime *JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque) if (!rt) return NULL; memset(rt, 0, sizeof(*rt)); - rt->mf = *mf; - if (!rt->mf.js_malloc_usable_size) { - /* use dummy function if none provided */ - rt->mf.js_malloc_usable_size = js_malloc_usable_size_unknown; - } - rt->malloc_state = ms; + js_malloc_init(&rt->malloc_ctx); + rt->malloc_ctx.mf = *mf; + rt->malloc_ctx.malloc_state = ms; rt->malloc_gc_threshold = 256 * 1024; init_list_head(&rt->context_list); @@ -1721,7 +2140,7 @@ static size_t js_def_malloc_usable_size(const void *ptr) return malloc_size(ptr); #elif defined(_WIN32) return _msize((void *)ptr); -#elif defined(EMSCRIPTEN) +#elif defined(__EMSCRIPTEN__) return 0; #elif defined(__linux__) || defined(__GLIBC__) return malloc_usable_size((void *)ptr); @@ -1801,7 +2220,7 @@ JSRuntime *JS_NewRuntime(void) void JS_SetMemoryLimit(JSRuntime *rt, size_t limit) { - rt->malloc_state.malloc_limit = limit; + rt->malloc_ctx.malloc_state.malloc_limit = limit; } /* use -1 to disable automatic GC */ @@ -1841,15 +2260,17 @@ int JS_GetStripInfo(JSRuntime *rt) return rt->strip_flags; } -/* return 0 if OK, < 0 if exception */ -int JS_EnqueueJob(JSContext *ctx, JSJobFunc *job_func, - int argc, JSValueConst *argv) +static int JS_EnqueueJob2(JSContext *ctx, JSJobFunc *job_func, + int argc, JSValueConst *argv, BOOL no_exception) { JSRuntime *rt = ctx->rt; JSJobEntry *e; int i; - e = js_malloc(ctx, sizeof(*e) + argc * sizeof(JSValue)); + if (no_exception) + e = js_malloc_rt(ctx->rt, sizeof(*e) + argc * sizeof(JSValue)); + else + e = js_malloc(ctx, sizeof(*e) + argc * sizeof(JSValue)); if (!e) return -1; e->realm = JS_DupContext(ctx); @@ -1862,6 +2283,13 @@ int JS_EnqueueJob(JSContext *ctx, JSJobFunc *job_func, return 0; } +/* return 0 if OK, < 0 if exception */ +int JS_EnqueueJob(JSContext *ctx, JSJobFunc *job_func, + int argc, JSValueConst *argv) +{ + return JS_EnqueueJob2(ctx, job_func, argc, argv, FALSE); +} + BOOL JS_IsJobPending(JSRuntime *rt) { return !list_empty(&rt->job_list); @@ -1899,7 +2327,7 @@ int JS_ExecutePendingJob(JSRuntime *rt, JSContext **pctx) JS_FreeValue(ctx, res); js_free(ctx, e); if (pctx) { - if (ctx->header.ref_count > 1) + if (js_rc(ctx)->ref_count > 1) *pctx = ctx; else *pctx = NULL; @@ -1930,7 +2358,7 @@ static JSString *js_alloc_string_rt(JSRuntime *rt, int max_len, int is_wide_char str = js_malloc_rt(rt, sizeof(JSString) + (max_len << is_wide_char) + 1 - is_wide_char); if (unlikely(!str)) return NULL; - str->header.ref_count = 1; + js_rc(str)->ref_count = 1; str->is_wide_char = is_wide_char; str->len = max_len; str->atom_type = 0; @@ -1956,7 +2384,7 @@ static JSString *js_alloc_string(JSContext *ctx, int max_len, int is_wide_char) /* same as JS_FreeValueRT() but faster */ static inline void js_free_string(JSRuntime *rt, JSString *str) { - if (--str->header.ref_count <= 0) { + if (--js_rc(str)->ref_count <= 0) { if (str->atom_type) { JS_FreeAtomStruct(rt, str); } else { @@ -2005,14 +2433,14 @@ void JS_FreeRuntime(JSRuntime *rt) referenced externally */ list_for_each(el, &rt->gc_obj_list) { p = list_entry(el, JSGCObjectHeader, link); - p->mark = 0; + js_rc(p)->mark = 0; } gc_decref(rt); header_done = FALSE; list_for_each(el, &rt->gc_obj_list) { p = list_entry(el, JSGCObjectHeader, link); - if (p->ref_count != 0) { + if (js_rc(p)->ref_count != 0) { if (!header_done) { printf("Object leaks:\n"); JS_DumpObjectHeader(rt); @@ -2025,7 +2453,7 @@ void JS_FreeRuntime(JSRuntime *rt) count = 0; list_for_each(el, &rt->gc_obj_list) { p = list_entry(el, JSGCObjectHeader, link); - if (p->ref_count == 0) { + if (js_rc(p)->ref_count == 0) { count++; } } @@ -2053,7 +2481,7 @@ void JS_FreeRuntime(JSRuntime *rt) for(i = 0; i < rt->atom_size; i++) { JSAtomStruct *p = rt->atom_array[i]; if (!atom_is_free(p) /* && p->str*/) { - if (i >= JS_ATOM_END || p->header.ref_count != 1) { + if (i >= JS_ATOM_END || js_rc(p)->ref_count != 1) { if (!header_done) { header_done = TRUE; if (rt->rt_info) { @@ -2067,7 +2495,7 @@ void JS_FreeRuntime(JSRuntime *rt) if (rt->rt_info) { printf(" "); } else { - printf(" %6u %6u ", i, p->header.ref_count); + printf(" %6u %6u ", i, js_rc(p)->ref_count); } switch (p->atom_type) { case JS_ATOM_TYPE_STRING: @@ -2091,7 +2519,7 @@ void JS_FreeRuntime(JSRuntime *rt) break; } if (rt->rt_info) { - printf(":%u", p->header.ref_count); + printf(":%u", js_rc(p)->ref_count); } else { printf("\n"); } @@ -2130,11 +2558,11 @@ void JS_FreeRuntime(JSRuntime *rt) if (rt->rt_info) { printf(" "); } else { - printf(" %6u ", str->header.ref_count); + printf(" %6u ", js_rc(str)->ref_count); } JS_DumpString(rt, str); if (rt->rt_info) { - printf(":%u", str->header.ref_count); + printf(":%u", js_rc(str)->ref_count); } else { printf("\n"); } @@ -2145,7 +2573,7 @@ void JS_FreeRuntime(JSRuntime *rt) printf("\n"); } { - JSMallocState *s = &rt->malloc_state; + JSMallocState *s = &rt->malloc_ctx.malloc_state; if (s->malloc_count > 1) { if (rt->rt_info) printf("%s:1: ", rt->rt_info); @@ -2157,8 +2585,8 @@ void JS_FreeRuntime(JSRuntime *rt) #endif { - JSMallocState ms = rt->malloc_state; - rt->mf.js_free(&ms, rt); + JSMallocState ms = rt->malloc_ctx.malloc_state; + rt->malloc_ctx.mf.js_free(&ms, rt); } } @@ -2170,7 +2598,7 @@ JSContext *JS_NewContextRaw(JSRuntime *rt) ctx = js_mallocz_rt(rt, sizeof(JSContext)); if (!ctx) return NULL; - ctx->header.ref_count = 1; + js_rc(ctx)->ref_count = 1; add_gc_object(rt, &ctx->header, JS_GC_OBJ_TYPE_JS_CONTEXT); ctx->class_proto = js_malloc_rt(rt, sizeof(ctx->class_proto[0]) * @@ -2281,7 +2709,7 @@ static void js_free_modules(JSContext *ctx, JSFreeModuleEnum flag) JSContext *JS_DupContext(JSContext *ctx) { - ctx->header.ref_count++; + js_rc(ctx)->ref_count++; return ctx; } @@ -2339,9 +2767,9 @@ void JS_FreeContext(JSContext *ctx) JSRuntime *rt = ctx->rt; int i; - if (--ctx->header.ref_count > 0) + if (--js_rc(ctx)->ref_count > 0) return; - assert(ctx->header.ref_count == 0); + assert(js_rc(ctx)->ref_count == 0); #ifdef DUMP_ATOMS JS_DumpAtoms(ctx->rt); @@ -2573,8 +3001,8 @@ static __maybe_unused void JS_DumpString(JSRuntime *rt, const JSString *p) printf(""); return; } - printf("%d", p->header.ref_count); - sep = (p->header.ref_count == 1) ? '\"' : '\''; + printf("%d", js_rc((void *)p)->ref_count); + sep = (js_rc((void *)p)->ref_count == 1) ? '\"' : '\''; putchar(sep); for(i = 0; i < p->len; i++) { JS_DumpChar(stdout, string_get(p, i), sep); @@ -2682,7 +3110,7 @@ static JSAtom JS_DupAtomRT(JSRuntime *rt, JSAtom v) if (!__JS_AtomIsConst(v)) { p = rt->atom_array[v]; - p->header.ref_count++; + js_rc(p)->ref_count++; } return v; } @@ -2695,7 +3123,7 @@ JSAtom JS_DupAtom(JSContext *ctx, JSAtom v) if (!__JS_AtomIsConst(v)) { rt = ctx->rt; p = rt->atom_array[v]; - p->header.ref_count++; + js_rc(p)->ref_count++; } return v; } @@ -2764,7 +3192,7 @@ static JSAtom __JS_NewAtom(JSRuntime *rt, JSString *str, int atom_type) i = js_get_atom_index(rt, str); /* reduce string refcount and increase atom's unless constant */ if (__JS_AtomIsConst(i)) - str->header.ref_count--; + js_rc(str)->ref_count--; return i; } /* try and locate an already registered atom */ @@ -2780,7 +3208,7 @@ static JSAtom __JS_NewAtom(JSRuntime *rt, JSString *str, int atom_type) p->len == len && js_string_memcmp(p, 0, str, 0, len) == 0) { if (!__JS_AtomIsConst(i)) - p->header.ref_count++; + js_rc(p)->ref_count++; goto done; } i = p->hash_next; @@ -2820,7 +3248,7 @@ static JSAtom __JS_NewAtom(JSRuntime *rt, JSString *str, int atom_type) js_free_rt(rt, new_array); goto fail; } - p->header.ref_count = 1; /* not refcounted */ + js_rc(p)->ref_count = 1; /* not refcounted */ p->atom_type = JS_ATOM_TYPE_SYMBOL; #ifdef DUMP_LEAKS list_add_tail(&p->link, &rt->string_list); @@ -2852,7 +3280,7 @@ static JSAtom __JS_NewAtom(JSRuntime *rt, JSString *str, int atom_type) 1 - str->is_wide_char); if (unlikely(!p)) goto fail; - p->header.ref_count = 1; + js_rc(p)->ref_count = 1; p->is_wide_char = str->is_wide_char; p->len = str->len; #ifdef DUMP_LEAKS @@ -2866,7 +3294,7 @@ static JSAtom __JS_NewAtom(JSRuntime *rt, JSString *str, int atom_type) p = js_malloc_rt(rt, sizeof(JSAtomStruct)); /* empty wide string */ if (!p) return JS_ATOM_NULL; - p->header.ref_count = 1; + js_rc(p)->ref_count = 1; p->is_wide_char = 1; /* Hack to represent NULL as a JSString */ p->len = 0; #ifdef DUMP_LEAKS @@ -2935,7 +3363,7 @@ static JSAtom __JS_FindAtom(JSRuntime *rt, const char *str, size_t len, p->is_wide_char == 0 && memcmp(p->u.str8, str, len) == 0) { if (!__JS_AtomIsConst(i)) - p->header.ref_count++; + js_rc(p)->ref_count++; return i; } i = p->hash_next; @@ -2947,7 +3375,7 @@ static void JS_FreeAtomStruct(JSRuntime *rt, JSAtomStruct *p) { #if 0 /* JS_ATOM_NULL is not refcounted: __JS_AtomIsConst() includes 0 */ if (unlikely(i == JS_ATOM_NULL)) { - p->header.ref_count = INT32_MAX / 2; + js_rc(p)->ref_count = INT32_MAX / 2; return; } #endif @@ -2997,7 +3425,7 @@ static void __JS_FreeAtom(JSRuntime *rt, uint32_t i) JSAtomStruct *p; p = rt->atom_array[i]; - if (--p->header.ref_count > 0) + if (--js_rc(p)->ref_count > 0) return; JS_FreeAtomStruct(rt, p); } @@ -4247,7 +4675,7 @@ static BOOL JS_ConcatStringInPlace(JSContext *ctx, JSString *p1, JSValueConst op if (p2->len == 0) return TRUE; - if (p1->header.ref_count != 1) + if (js_rc(p1)->ref_count != 1) return FALSE; size1 = js_malloc_usable_size(ctx, p1); if (p1->is_wide_char) { @@ -4420,7 +4848,7 @@ static JSValue js_linearize_string_rope(JSContext *ctx, JSValue rope) if (string_buffer_concat_value(b, rope)) goto fail; ret = string_buffer_end(b); - if (r->header.ref_count > 1) { + if (js_rc(r)->ref_count > 1) { /* update the rope so that it won't need to be linearized again */ JS_FreeValue(ctx, r->left); JS_FreeValue(ctx, r->right); @@ -4473,7 +4901,7 @@ static JSValue js_new_string_rope(JSContext *ctx, JSValue op1, JSValue op2) r = js_malloc(ctx, sizeof(*r)); if (!r) goto fail; - r->header.ref_count = 1; + js_rc(r)->ref_count = 1; r->len = len; r->is_wide_char = is_wide_char; r->depth = depth + 1; @@ -4692,28 +5120,13 @@ static JSValue JS_ConcatString(JSContext *ctx, JSValue op1, JSValue op2) static inline size_t get_shape_size(size_t hash_size, size_t prop_size) { - return hash_size * sizeof(uint32_t) + sizeof(JSShape) + + return sizeof(JSShape) + hash_size * sizeof(uint32_t) + prop_size * sizeof(JSShapeProperty); } -static inline JSShape *get_shape_from_alloc(void *sh_alloc, size_t hash_size) -{ - return (JSShape *)(void *)((uint32_t *)sh_alloc + hash_size); -} - -static inline uint32_t *prop_hash_end(JSShape *sh) -{ - return (uint32_t *)sh; -} - -static inline void *get_alloc_from_shape(JSShape *sh) -{ - return prop_hash_end(sh) - ((intptr_t)sh->prop_hash_mask + 1); -} - static inline JSShapeProperty *get_shape_prop(JSShape *sh) { - return sh->prop; + return (JSShapeProperty *)((uint32_t *)(sh + 1) + sh->prop_hash_mask + 1); } static int init_shape_hash(JSRuntime *rt) @@ -4802,20 +5215,17 @@ static inline JSShape *js_new_shape_nohash(JSContext *ctx, JSObject *proto, int hash_size, int prop_size) { JSRuntime *rt = ctx->rt; - void *sh_alloc; JSShape *sh; - sh_alloc = js_malloc(ctx, get_shape_size(hash_size, prop_size)); - if (!sh_alloc) + sh = js_malloc(ctx, get_shape_size(hash_size, prop_size)); + if (!sh) return NULL; - sh = get_shape_from_alloc(sh_alloc, hash_size); - sh->header.ref_count = 1; + js_rc(sh)->ref_count = 1; add_gc_object(rt, &sh->header, JS_GC_OBJ_TYPE_SHAPE); if (proto) JS_DupValue(ctx, JS_MKPTR(JS_TAG_OBJECT, proto)); sh->proto = proto; - memset(prop_hash_end(sh) - hash_size, 0, sizeof(prop_hash_end(sh)[0]) * - hash_size); + memset(sh->hash_table, 0, sizeof(sh->hash_table[0]) * hash_size); sh->prop_hash_mask = hash_size - 1; sh->prop_size = prop_size; sh->prop_count = 0; @@ -4858,20 +5268,18 @@ static JSShape *js_new_shape(JSContext *ctx, JSObject *proto) static JSShape *js_clone_shape(JSContext *ctx, JSShape *sh1) { JSShape *sh; - void *sh_alloc, *sh_alloc1; size_t size; JSShapeProperty *pr; uint32_t i, hash_size; hash_size = sh1->prop_hash_mask + 1; size = get_shape_size(hash_size, sh1->prop_size); - sh_alloc = js_malloc(ctx, size); - if (!sh_alloc) + sh = js_malloc(ctx, size); + if (!sh) return NULL; - sh_alloc1 = get_alloc_from_shape(sh1); - memcpy(sh_alloc, sh_alloc1, size); - sh = get_shape_from_alloc(sh_alloc, hash_size); - sh->header.ref_count = 1; + memcpy(&sh->header + 1, &sh1->header + 1, + size - sizeof(JSGCObjectHeader)); + js_rc(sh)->ref_count = 1; add_gc_object(ctx->rt, &sh->header, JS_GC_OBJ_TYPE_SHAPE); sh->is_hashed = FALSE; if (sh->proto) { @@ -4885,7 +5293,7 @@ static JSShape *js_clone_shape(JSContext *ctx, JSShape *sh1) static JSShape *js_dup_shape(JSShape *sh) { - sh->header.ref_count++; + js_rc(sh)->ref_count++; return sh; } @@ -4894,7 +5302,7 @@ static void js_free_shape0(JSRuntime *rt, JSShape *sh) uint32_t i; JSShapeProperty *pr; - assert(sh->header.ref_count == 0); + assert(js_rc(sh)->ref_count == 0); if (sh->is_hashed) js_shape_hash_unlink(rt, sh); if (sh->proto != NULL) { @@ -4906,12 +5314,12 @@ static void js_free_shape0(JSRuntime *rt, JSShape *sh) pr++; } remove_gc_object(&sh->header); - js_free_rt(rt, get_alloc_from_shape(sh)); + js_free_rt(rt, sh); } static void js_free_shape(JSRuntime *rt, JSShape *sh) { - if (unlikely(--sh->header.ref_count <= 0)) { + if (unlikely(--js_rc(sh)->ref_count <= 0)) { js_free_shape0(rt, sh); } } @@ -4929,7 +5337,6 @@ static no_inline int resize_properties(JSContext *ctx, JSShape **psh, JSShape *sh; uint32_t new_size, new_hash_size, new_hash_mask, i; JSShapeProperty *pr; - void *sh_alloc; intptr_t h; JSShape *old_sh; @@ -4950,35 +5357,41 @@ static no_inline int resize_properties(JSContext *ctx, JSShape **psh, /* resize the property shapes. Using js_realloc() is not possible in case the GC runs during the allocation */ old_sh = sh; - sh_alloc = js_malloc(ctx, get_shape_size(new_hash_size, new_size)); - if (!sh_alloc) + sh = js_malloc(ctx, get_shape_size(new_hash_size, new_size)); + if (!sh) return -1; - sh = get_shape_from_alloc(sh_alloc, new_hash_size); - list_del(&old_sh->header.link); - /* copy all the shape properties */ - memcpy(sh, old_sh, - sizeof(JSShape) + sizeof(sh->prop[0]) * old_sh->prop_count); - list_add_tail(&sh->header.link, &ctx->rt->gc_obj_list); + remove_gc_object(&old_sh->header); + + js_rc(sh)->ref_count = 1; + add_gc_object(ctx->rt, &sh->header, JS_GC_OBJ_TYPE_SHAPE); + memcpy(&sh->header + 1, &old_sh->header + 1, + sizeof(JSShape) - sizeof(JSGCObjectHeader)); + if (new_hash_size != (sh->prop_hash_mask + 1)) { /* resize the hash table and the properties */ new_hash_mask = new_hash_size - 1; sh->prop_hash_mask = new_hash_mask; - memset(prop_hash_end(sh) - new_hash_size, 0, - sizeof(prop_hash_end(sh)[0]) * new_hash_size); - for(i = 0, pr = sh->prop; i < sh->prop_count; i++, pr++) { + memset(sh->hash_table, 0, + sizeof(sh->hash_table[0]) * new_hash_size); + memcpy(get_shape_prop(sh), get_shape_prop(old_sh), + sizeof(JSShapeProperty) * old_sh->prop_count); + for(i = 0, pr = get_shape_prop(sh); i < sh->prop_count; i++, pr++) { if (pr->atom != JS_ATOM_NULL) { h = ((uintptr_t)pr->atom & new_hash_mask); - pr->hash_next = prop_hash_end(sh)[-h - 1]; - prop_hash_end(sh)[-h - 1] = i + 1; + pr->hash_next = sh->hash_table[h]; + sh->hash_table[h] = i + 1; } } } else { - /* just copy the previous hash table */ - memcpy(prop_hash_end(sh) - new_hash_size, prop_hash_end(old_sh) - new_hash_size, - sizeof(prop_hash_end(sh)[0]) * new_hash_size); + /* just copy the previous hash table and the properties */ + memcpy(sh->hash_table, old_sh->hash_table, + sizeof(sh->hash_table[0]) * new_hash_size); + + memcpy(get_shape_prop(sh), get_shape_prop(old_sh), + sizeof(JSShapeProperty) * old_sh->prop_count); } - js_free(ctx, get_alloc_from_shape(old_sh)); + js_free(ctx, old_sh); *psh = sh; sh->prop_size = new_size; return 0; @@ -4988,7 +5401,6 @@ static no_inline int resize_properties(JSContext *ctx, JSShape **psh, static int compact_properties(JSContext *ctx, JSObject *p) { JSShape *sh, *old_sh; - void *sh_alloc; intptr_t h; uint32_t new_hash_size, i, j, new_hash_mask, new_size; JSShapeProperty *old_pr, *pr; @@ -5008,28 +5420,31 @@ static int compact_properties(JSContext *ctx, JSObject *p) /* resize the hash table and the properties */ old_sh = sh; - sh_alloc = js_malloc(ctx, get_shape_size(new_hash_size, new_size)); - if (!sh_alloc) + sh = js_malloc(ctx, get_shape_size(new_hash_size, new_size)); + if (!sh) return -1; - sh = get_shape_from_alloc(sh_alloc, new_hash_size); - list_del(&old_sh->header.link); - memcpy(sh, old_sh, sizeof(JSShape)); - list_add_tail(&sh->header.link, &ctx->rt->gc_obj_list); + remove_gc_object(&old_sh->header); - memset(prop_hash_end(sh) - new_hash_size, 0, - sizeof(prop_hash_end(sh)[0]) * new_hash_size); + js_rc(sh)->ref_count = 1; + add_gc_object(ctx->rt, &sh->header, JS_GC_OBJ_TYPE_SHAPE); + + memcpy(&sh->header + 1, &old_sh->header + 1, + sizeof(JSShape) - sizeof(JSGCObjectHeader)); + + memset(sh->hash_table, 0, sizeof(sh->hash_table[0]) * new_hash_size); + sh->prop_hash_mask = new_hash_mask; j = 0; - old_pr = old_sh->prop; - pr = sh->prop; + old_pr = get_shape_prop(old_sh); + pr = get_shape_prop(sh); prop = p->prop; for(i = 0; i < sh->prop_count; i++) { if (old_pr->atom != JS_ATOM_NULL) { pr->atom = old_pr->atom; pr->flags = old_pr->flags; h = ((uintptr_t)old_pr->atom & new_hash_mask); - pr->hash_next = prop_hash_end(sh)[-h - 1]; - prop_hash_end(sh)[-h - 1] = j + 1; + pr->hash_next = sh->hash_table[h]; + sh->hash_table[h] = j + 1; prop[j] = prop[i]; j++; pr++; @@ -5037,13 +5452,12 @@ static int compact_properties(JSContext *ctx, JSObject *p) old_pr++; } assert(j == (sh->prop_count - sh->deleted_prop_count)); - sh->prop_hash_mask = new_hash_mask; sh->prop_size = new_size; sh->deleted_prop_count = 0; sh->prop_count = j; p->shape = sh; - js_free(ctx, get_alloc_from_shape(old_sh)); + js_free(ctx, old_sh); /* reduce the size of the object properties */ new_prop = js_realloc(ctx, p->prop, sizeof(new_prop[0]) * new_size); @@ -5090,8 +5504,8 @@ static int add_shape_property(JSContext *ctx, JSShape **psh, /* add in hash table */ hash_mask = sh->prop_hash_mask; h = atom & hash_mask; - pr->hash_next = prop_hash_end(sh)[-h - 1]; - prop_hash_end(sh)[-h - 1] = sh->prop_count; + pr->hash_next = sh->hash_table[h]; + sh->hash_table[h] = sh->prop_count; return 0; } @@ -5132,13 +5546,15 @@ static JSShape *find_hashed_shape_prop(JSRuntime *rt, JSShape *sh, if (sh1->hash == h && sh1->proto == sh->proto && sh1->prop_count == ((n = sh->prop_count) + 1)) { + JSShapeProperty *prop = get_shape_prop(sh); + JSShapeProperty *prop1 = get_shape_prop(sh1); for(i = 0; i < n; i++) { - if (unlikely(sh1->prop[i].atom != sh->prop[i].atom) || - unlikely(sh1->prop[i].flags != sh->prop[i].flags)) + if (unlikely(prop1[i].atom != prop[i].atom) || + unlikely(prop1[i].flags != prop[i].flags)) goto next; } - if (unlikely(sh1->prop[n].atom != atom) || - unlikely(sh1->prop[n].flags != prop_flags)) + if (unlikely(prop1[n].atom != atom) || + unlikely(prop1[n].flags != prop_flags)) goto next; return sh1; } @@ -5154,11 +5570,11 @@ static __maybe_unused void JS_DumpShape(JSRuntime *rt, int i, JSShape *sh) /* XXX: should output readable class prototype */ printf("%5d %3d%c %14p %5d %5d", i, - sh->header.ref_count, " *"[sh->is_hashed], + js_rc(sh)->ref_count, " *"[sh->is_hashed], (void *)sh->proto, sh->prop_size, sh->prop_count); for(j = 0; j < sh->prop_count; j++) { printf(" %s", JS_AtomGetStrRT(rt, atom_buf, sizeof(atom_buf), - sh->prop[j].atom)); + get_shape_prop(sh)[j].atom)); } printf("\n"); } @@ -5182,7 +5598,7 @@ static __maybe_unused void JS_DumpShapes(JSRuntime *rt) /* dump non-hashed shapes */ list_for_each(el, &rt->gc_obj_list) { gp = list_entry(el, JSGCObjectHeader, link); - if (gp->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { + if (js_rc(gp)->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { p = (JSObject *)gp; if (!p->shape->is_hashed) { JS_DumpShape(rt, -1, p->shape); @@ -5306,7 +5722,7 @@ static JSValue JS_NewObjectFromShape(JSContext *ctx, JSShape *sh, JSClassID clas } break; } - p->header.ref_count = 1; + js_rc(p)->ref_count = 1; add_gc_object(ctx->rt, &p->header, JS_GC_OBJ_TYPE_JS_OBJECT); if (props) { for(i = 0; i < sh->prop_count; i++) @@ -5704,7 +6120,7 @@ static force_inline JSShapeProperty *find_own_property1(JSObject *p, intptr_t h; sh = p->shape; h = (uintptr_t)atom & sh->prop_hash_mask; - h = prop_hash_end(sh)[-h - 1]; + h = sh->hash_table[h]; prop = get_shape_prop(sh); while (h) { pr = &prop[h - 1]; @@ -5725,7 +6141,7 @@ static force_inline JSShapeProperty *find_own_property(JSProperty **ppr, intptr_t h; sh = p->shape; h = (uintptr_t)atom & sh->prop_hash_mask; - h = prop_hash_end(sh)[-h - 1]; + h = sh->hash_table[h]; prop = get_shape_prop(sh); while (h) { pr = &prop[h - 1]; @@ -5748,8 +6164,8 @@ static void set_cycle_flag(JSContext *ctx, JSValueConst obj) static void free_var_ref(JSRuntime *rt, JSVarRef *var_ref) { if (var_ref) { - assert(var_ref->header.ref_count > 0); - if (--var_ref->header.ref_count == 0) { + assert(js_rc(var_ref)->ref_count > 0); + if (--js_rc(var_ref)->ref_count == 0) { if (var_ref->is_detached) { JS_FreeValueRT(rt, var_ref->value); } else { @@ -5958,7 +6374,7 @@ static void free_object(JSRuntime *rt, JSObject *p) remove_gc_object(&p->header); if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES) { - if (p->header.ref_count == 0 && p->weakref_count == 0) { + if (js_rc(p)->ref_count == 0 && p->weakref_count == 0) { js_free_rt(rt, p); } else { /* keep the object structure because there are may be @@ -5970,14 +6386,14 @@ static void free_object(JSRuntime *rt, JSObject *p) if (p->weakref_count == 0) { js_free_rt(rt, p); } else { - p->header.mark = 0; /* reset the mark so that the weakref can be freed */ + js_rc(p)->mark = 0; /* reset the mark so that the weakref can be freed */ } } } static void free_gc_object(JSRuntime *rt, JSGCObjectHeader *gp) { - switch(gp->gc_obj_type) { + switch(js_rc(gp)->gc_obj_type) { case JS_GC_OBJ_TYPE_JS_OBJECT: free_object(rt, (JSObject *)gp); break; @@ -6006,7 +6422,7 @@ static void free_zero_refcount(JSRuntime *rt) if (el == &rt->gc_zero_ref_count_list) break; p = list_entry(el, JSGCObjectHeader, link); - assert(p->ref_count == 0); + assert(js_rc(p)->ref_count == 0); free_gc_object(rt, p); } rt->gc_phase = JS_GC_PHASE_NONE; @@ -6060,7 +6476,7 @@ void __JS_FreeValueRT(JSRuntime *rt, JSValue v) if (rt->gc_phase != JS_GC_PHASE_REMOVE_CYCLES) { list_del(&p->link); list_add(&p->link, &rt->gc_zero_ref_count_list); - p->mark = 1; /* indicate that the object is about to be freed */ + js_rc(p)->mark = 1; /* indicate that the object is about to be freed */ if (rt->gc_phase == JS_GC_PHASE_NONE) { free_zero_refcount(rt); } @@ -6124,8 +6540,8 @@ static void gc_remove_weak_objects(JSRuntime *rt) static void add_gc_object(JSRuntime *rt, JSGCObjectHeader *h, JSGCObjectTypeEnum type) { - h->mark = 0; - h->gc_obj_type = type; + js_rc(h)->mark = 0; + js_rc(h)->gc_obj_type = type; list_add_tail(&h->link, &rt->gc_obj_list); } @@ -6152,7 +6568,7 @@ void JS_MarkValue(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_func) static void mark_children(JSRuntime *rt, JSGCObjectHeader *gp, JS_MarkFunc *mark_func) { - switch(gp->gc_obj_type) { + switch(js_rc(gp)->gc_obj_type) { case JS_GC_OBJ_TYPE_JS_OBJECT: { JSObject *p = (JSObject *)gp; @@ -6270,9 +6686,9 @@ static void mark_children(JSRuntime *rt, JSGCObjectHeader *gp, static void gc_decref_child(JSRuntime *rt, JSGCObjectHeader *p) { - assert(p->ref_count > 0); - p->ref_count--; - if (p->ref_count == 0 && p->mark == 1) { + assert(js_rc(p)->ref_count > 0); + js_rc(p)->ref_count--; + if (js_rc(p)->ref_count == 0 && js_rc(p)->mark == 1) { list_del(&p->link); list_add_tail(&p->link, &rt->tmp_obj_list); } @@ -6290,10 +6706,10 @@ static void gc_decref(JSRuntime *rt) tmp_obj_list */ list_for_each_safe(el, el1, &rt->gc_obj_list) { p = list_entry(el, JSGCObjectHeader, link); - assert(p->mark == 0); + assert(js_rc(p)->mark == 0); mark_children(rt, p, gc_decref_child); - p->mark = 1; - if (p->ref_count == 0) { + js_rc(p)->mark = 1; + if (js_rc(p)->ref_count == 0) { list_del(&p->link); list_add_tail(&p->link, &rt->tmp_obj_list); } @@ -6302,19 +6718,19 @@ static void gc_decref(JSRuntime *rt) static void gc_scan_incref_child(JSRuntime *rt, JSGCObjectHeader *p) { - p->ref_count++; - if (p->ref_count == 1) { + js_rc(p)->ref_count++; + if (js_rc(p)->ref_count == 1) { /* ref_count was 0: remove from tmp_obj_list and add at the end of gc_obj_list */ list_del(&p->link); list_add_tail(&p->link, &rt->gc_obj_list); - p->mark = 0; /* reset the mark for the next GC call */ + js_rc(p)->mark = 0; /* reset the mark for the next GC call */ } } static void gc_scan_incref_child2(JSRuntime *rt, JSGCObjectHeader *p) { - p->ref_count++; + js_rc(p)->ref_count++; } static void gc_scan(JSRuntime *rt) @@ -6325,8 +6741,8 @@ static void gc_scan(JSRuntime *rt) /* keep the objects with a refcount > 0 and their children. */ list_for_each(el, &rt->gc_obj_list) { p = list_entry(el, JSGCObjectHeader, link); - assert(p->ref_count > 0); - p->mark = 0; /* reset the mark for the next GC call */ + assert(js_rc(p)->ref_count > 0); + js_rc(p)->mark = 0; /* reset the mark for the next GC call */ mark_children(rt, p, gc_scan_incref_child); } @@ -6355,7 +6771,7 @@ static void gc_free_cycles(JSRuntime *rt) /* Only need to free the GC object associated with JS values or async functions. The rest will be automatically removed because they must be referenced by them. */ - switch(p->gc_obj_type) { + switch(js_rc(p)->gc_obj_type) { case JS_GC_OBJ_TYPE_JS_OBJECT: case JS_GC_OBJ_TYPE_FUNCTION_BYTECODE: case JS_GC_OBJ_TYPE_ASYNC_FUNCTION: @@ -6380,14 +6796,14 @@ static void gc_free_cycles(JSRuntime *rt) list_for_each_safe(el, el1, &rt->gc_zero_ref_count_list) { p = list_entry(el, JSGCObjectHeader, link); - assert(p->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT || - p->gc_obj_type == JS_GC_OBJ_TYPE_FUNCTION_BYTECODE || - p->gc_obj_type == JS_GC_OBJ_TYPE_ASYNC_FUNCTION || - p->gc_obj_type == JS_GC_OBJ_TYPE_MODULE); - if (p->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT && + assert(js_rc(p)->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT || + js_rc(p)->gc_obj_type == JS_GC_OBJ_TYPE_FUNCTION_BYTECODE || + js_rc(p)->gc_obj_type == JS_GC_OBJ_TYPE_ASYNC_FUNCTION || + js_rc(p)->gc_obj_type == JS_GC_OBJ_TYPE_MODULE); + if (js_rc(p)->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT && ((JSObject *)p)->weakref_count != 0) { /* keep the object because there are weak references to it */ - p->mark = 0; + js_rc(p)->mark = 0; } else { js_free_rt(rt, p); } @@ -6451,7 +6867,7 @@ static void compute_value_size(JSValueConst val, JSMemoryUsage_helper *hp); static void compute_jsstring_size(JSString *str, JSMemoryUsage_helper *hp) { if (!str->atom_type) { /* atoms are handled separately */ - double s_ref_count = str->header.ref_count; + double s_ref_count = js_rc(str)->ref_count; hp->str_count += 1 / s_ref_count; hp->str_size += ((sizeof(*str) + (str->len << str->is_wide_char) + 1 - str->is_wide_char) / s_ref_count); @@ -6516,9 +6932,9 @@ void JS_ComputeMemoryUsage(JSRuntime *rt, JSMemoryUsage *s) JSMemoryUsage_helper mem = { 0 }, *hp = &mem; memset(s, 0, sizeof(*s)); - s->malloc_count = rt->malloc_state.malloc_count; - s->malloc_size = rt->malloc_state.malloc_size; - s->malloc_limit = rt->malloc_state.malloc_limit; + s->malloc_count = rt->malloc_ctx.malloc_state.malloc_count; + s->malloc_size = rt->malloc_ctx.malloc_state.malloc_size; + s->malloc_limit = rt->malloc_ctx.malloc_state.malloc_limit; s->memory_used_count = 2; /* rt + rt->class_array */ s->memory_used_size = sizeof(JSRuntime) + sizeof(JSValue) * rt->class_count; @@ -6578,10 +6994,10 @@ void JS_ComputeMemoryUsage(JSRuntime *rt, JSMemoryUsage *s) JSShapeProperty *prs; /* XXX: could count the other GC object types too */ - if (gp->gc_obj_type == JS_GC_OBJ_TYPE_FUNCTION_BYTECODE) { + if (js_rc(gp)->gc_obj_type == JS_GC_OBJ_TYPE_FUNCTION_BYTECODE) { compute_bytecode_size((JSFunctionBytecode *)gp, hp); continue; - } else if (gp->gc_obj_type != JS_GC_OBJ_TYPE_JS_OBJECT) { + } else if (js_rc(gp)->gc_obj_type != JS_GC_OBJ_TYPE_JS_OBJECT) { continue; } p = (JSObject *)gp; @@ -6659,7 +7075,7 @@ void JS_ComputeMemoryUsage(JSRuntime *rt, JSMemoryUsage *s) s->js_func_size += b->closure_var_count * sizeof(*var_refs); for (i = 0; i < b->closure_var_count; i++) { if (var_refs[i]) { - double ref_count = var_refs[i]->header.ref_count; + double ref_count = js_rc(var_refs[i])->ref_count; s->memory_used_count += 1 / ref_count; s->js_func_size += sizeof(*var_refs[i]) / ref_count; /* handle non object closed values */ @@ -6845,7 +7261,7 @@ void JS_DumpMemoryUsage(FILE *fp, const JSMemoryUsage *s, JSRuntime *rt) list_for_each(el, &rt->gc_obj_list) { JSGCObjectHeader *gp = list_entry(el, JSGCObjectHeader, link); JSObject *p; - if (gp->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { + if (js_rc(gp)->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { p = (JSObject *)gp; obj_classes[min_uint32(p->class_id, JS_CLASS_INIT_COUNT)]++; } @@ -7774,7 +8190,7 @@ static int JS_AutoInitProperty(JSContext *ctx, JSObject *p, JSAtom prop, /* WARNING: a varref is returned as a string ! */ prs->flags |= JS_PROP_VARREF; pr->u.var_ref = JS_VALUE_GET_PTR(val); - pr->u.var_ref->header.ref_count++; + js_rc(pr->u.var_ref)->ref_count++; } else if (p->class_id == JS_CLASS_GLOBAL_OBJECT) { JSVarRef *var_ref; /* in the global object we use references */ @@ -8804,7 +9220,7 @@ static JSProperty *add_property(JSContext *ctx, p->shape = js_dup_shape(new_sh); js_free_shape(ctx->rt, sh); return &p->prop[new_sh->prop_count - 1]; - } else if (sh->header.ref_count != 1) { + } else if (js_rc(sh)->ref_count != 1) { /* if the shape is shared, clone it */ new_sh = js_clone_shape(ctx, sh); if (!new_sh) @@ -8816,7 +9232,7 @@ static JSProperty *add_property(JSContext *ctx, p->shape = new_sh; } } - assert(p->shape->header.ref_count == 1); + assert(js_rc(p->shape)->ref_count == 1); if (add_shape_property(ctx, &p->shape, p, prop, prop_flags)) return NULL; return &p->prop[p->shape->prop_count - 1]; @@ -8877,14 +9293,14 @@ static int remove_global_object_property(JSContext *ctx, JSObject *p, JSProperty *pr1; var_ref = pr->u.var_ref; - if (var_ref->header.ref_count == 1) + if (js_rc(var_ref)->ref_count == 1) return 0; p1 = JS_VALUE_GET_OBJ(p->u.global_object.uninitialized_vars); pr1 = add_property(ctx, p1, prs->atom, JS_PROP_C_W_E | JS_PROP_VARREF); if (!pr1) return -1; pr1->u.var_ref = var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; JS_FreeValue(ctx, var_ref->value); var_ref->is_lexical = FALSE; var_ref->is_const = FALSE; @@ -8903,7 +9319,7 @@ static int delete_property(JSContext *ctx, JSObject *p, JSAtom atom) redo: sh = p->shape; h1 = atom & sh->prop_hash_mask; - h = prop_hash_end(sh)[-h1 - 1]; + h = sh->hash_table[h1]; prop = get_shape_prop(sh); lpr = NULL; lpr_idx = 0; /* prevent warning */ @@ -8924,7 +9340,7 @@ static int delete_property(JSContext *ctx, JSObject *p, JSAtom atom) lpr = get_shape_prop(sh) + lpr_idx; lpr->hash_next = pr->hash_next; } else { - prop_hash_end(sh)[-h1 - 1] = pr->hash_next; + sh->hash_table[h1] = pr->hash_next; } sh->deleted_prop_count++; /* free the entry */ @@ -9025,7 +9441,7 @@ static int set_array_length(JSContext *ctx, JSObject *p, JSValue val, if (ret) return -1; /* JS_ToArrayLengthFree() must be done before the read-only test */ - if (unlikely(!(p->shape->prop[0].flags & JS_PROP_WRITABLE))) + if (unlikely(!(get_shape_prop(p->shape)[0].flags & JS_PROP_WRITABLE))) return JS_ThrowTypeErrorReadOnly(ctx, flags, JS_ATOM_length); if (likely(p->fast_array)) { @@ -9153,14 +9569,15 @@ static inline int add_fast_array_element(JSContext *ctx, JSObject *p, return TRUE; } -/* Allocate a new fast array. Its 'length' property is set to zero. It - maximum size is 2^31-1 elements. For convenience, 'len' is a 64 bit - integer. WARNING: the content of the array is not initialized. */ +/* Allocate a new fast array initialized to JS_UNDEFINED. Its maximum + size is 2^31-1 elements. For convenience, 'len' is a 64 bit + integer. */ static JSValue js_allocate_fast_array(JSContext *ctx, int64_t len) { JSValue arr; JSObject *p; - + int i; + if (len > INT32_MAX) return JS_ThrowRangeError(ctx, "invalid array length"); arr = JS_NewArray(ctx); @@ -9173,6 +9590,10 @@ static JSValue js_allocate_fast_array(JSContext *ctx, int64_t len) return JS_EXCEPTION; } p->u.array.count = len; + for(i = 0; i < len; i++) + p->u.array.u.values[i] = JS_UNDEFINED; + /* update the 'length' field */ + set_value(ctx, &p->prop[0].u.value, JS_NewInt32(ctx, len)); } return arr; } @@ -9801,7 +10222,7 @@ static int JS_CreateProperty(JSContext *ctx, JSObject *p, if (prs1) { delete_obj = p1; var_ref = pr1->u.var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; } else { var_ref = js_create_var_ref(ctx, FALSE); if (!var_ref) @@ -9886,7 +10307,7 @@ static int js_shape_prepare_update(JSContext *ctx, JSObject *p, sh = p->shape; if (sh->is_hashed) { - if (sh->header.ref_count != 1) { + if (js_rc(sh)->ref_count != 1) { if (pprs) idx = *pprs - get_shape_prop(sh); /* clone the shape (the resulting one is no longer hashed) */ @@ -11177,7 +11598,7 @@ static JSBigInt *js_bigint_new(JSContext *ctx, int len) r = js_malloc(ctx, sizeof(JSBigInt) + len * sizeof(js_limb_t)); if (!r) return NULL; - r->header.ref_count = 1; + js_rc(r)->ref_count = 1; r->len = len; return r; } @@ -11185,7 +11606,6 @@ static JSBigInt *js_bigint_new(JSContext *ctx, int len) static JSBigInt *js_bigint_set_si(JSBigIntBuf *buf, js_slimb_t a) { JSBigInt *r = (JSBigInt *)buf->big_int_buf; - r->header.ref_count = 0; /* fail safe */ r->len = 1; r->tab[0] = a; return r; @@ -11197,7 +11617,6 @@ static JSBigInt *js_bigint_set_si64(JSBigIntBuf *buf, int64_t a) return js_bigint_set_si(buf, a); #else JSBigInt *r = (JSBigInt *)buf->big_int_buf; - r->header.ref_count = 0; /* fail safe */ if (a >= INT32_MIN && a <= INT32_MAX) { r->len = 1; r->tab[0] = a; @@ -11312,7 +11731,7 @@ static JSBigInt *js_bigint_normalize1(JSContext *ctx, JSBigInt *a, int l) { js_limb_t v; - assert(a->header.ref_count == 1); + assert(js_rc(a)->ref_count == 1); while (l > 1) { v = a->tab[l - 1]; if ((v != 0 && v != -1) || @@ -12127,7 +12546,11 @@ static JSBigInt *js_bigint_from_string(JSContext *ctx, } /* 2 <= base <= 36 */ -static char const digits[36] = "0123456789abcdefghijklmnopqrstuvwxyz"; +static char const digits[36] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', + 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' +}; /* special version going backwards */ /* XXX: use dtoa.c */ @@ -12422,7 +12845,7 @@ static JSValue js_atof(JSContext *ctx, const char *str, const char **pp, to_digit((uint8_t)p[1]) < radix)) { p++; } - if (!(flags & ATOD_INT_ONLY)) { + if (!(flags & ATOD_INT_ONLY) && radix == 10) { if (*p == '.' && (p > p_start || to_digit((uint8_t)p[1]) < radix)) { is_float = TRUE; p++; @@ -12432,9 +12855,7 @@ static JSValue js_atof(JSContext *ctx, const char *str, const char **pp, (*p == sep && to_digit((uint8_t)p[1]) < radix)) p++; } - if (p > p_start && - (((*p == 'e' || *p == 'E') && radix == 10) || - ((*p == 'p' || *p == 'P') && (radix == 2 || radix == 8 || radix == 16)))) { + if (p > p_start && (*p == 'e' || *p == 'E')) { const char *p1 = p + 1; is_float = TRUE; if (*p1 == '+') { @@ -12471,19 +12892,9 @@ static JSValue js_atof(JSContext *ctx, const char *str, const char **pp, } buf[j] = '\0'; - if (flags & ATOD_ACCEPT_SUFFIX) { - if (*p == 'n') { - p++; - atod_type = ATOD_TYPE_BIG_INT; - } else { - if (is_float && radix != 10) - goto fail; - } - } else { - if (atod_type == ATOD_TYPE_FLOAT64) { - if (is_float && radix != 10) - goto fail; - } + if ((flags & ATOD_ACCEPT_SUFFIX) && *p == 'n') { + p++; + atod_type = ATOD_TYPE_BIG_INT; } switch(atod_type) { @@ -13403,8 +13814,8 @@ static void js_print_string(JSPrintValueState *s, JSValueConst val) int sep; if (s->options.raw_dump && JS_VALUE_GET_TAG(val) == JS_TAG_STRING) { JSString *p = JS_VALUE_GET_STRING(val); - js_printf(s, "%d", p->header.ref_count); - sep = (p->header.ref_count == 1) ? '\"' : '\''; + js_printf(s, "%d", js_rc(p)->ref_count); + sep = (js_rc(p)->ref_count == 1) ? '\"' : '\''; } else { sep = '\"'; } @@ -14086,10 +14497,10 @@ static __maybe_unused void JS_DumpObject(JSRuntime *rt, JSObject *p) sh = p->shape; /* the shape can be NULL while freeing an object */ printf("%14p %4d ", (void *)p, - p->header.ref_count); + js_rc(p)->ref_count); if (sh) { printf("%3d%c %14p ", - sh->header.ref_count, + js_rc(sh)->ref_count, " *"[sh->is_hashed], (void *)sh->proto); } else { @@ -14107,13 +14518,13 @@ static __maybe_unused void JS_DumpObject(JSRuntime *rt, JSObject *p) static __maybe_unused void JS_DumpGCObject(JSRuntime *rt, JSGCObjectHeader *p) { - if (p->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { + if (js_rc(p)->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { JS_DumpObject(rt, (JSObject *)p); } else { printf("%14p %4d ", (void *)p, - p->ref_count); - switch(p->gc_obj_type) { + js_rc(p)->ref_count); + switch(js_rc(p)->gc_obj_type) { case JS_GC_OBJ_TYPE_FUNCTION_BYTECODE: printf("[function bytecode]"); break; @@ -14133,7 +14544,7 @@ static __maybe_unused void JS_DumpGCObject(JSRuntime *rt, JSGCObjectHeader *p) printf("[module]"); break; default: - printf("[unknown %d]", p->gc_obj_type); + printf("[unknown %d]", js_rc(p)->gc_obj_type); break; } printf("\n"); @@ -15231,12 +15642,16 @@ static no_inline __exception int js_eq_slow(JSContext *ctx, JSValue *sp, } } else if (tag1 == tag2) { res = js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT); + JS_FreeValue(ctx, op1); + JS_FreeValue(ctx, op2); } else if ((tag1 == JS_TAG_NULL && tag2 == JS_TAG_UNDEFINED) || (tag2 == JS_TAG_NULL && tag1 == JS_TAG_UNDEFINED)) { res = TRUE; } else if (tag_is_string(tag1) && tag_is_string(tag2)) { /* needed when comparing strings and ropes */ res = js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT); + JS_FreeValue(ctx, op1); + JS_FreeValue(ctx, op2); } else if ((tag_is_string(tag1) && tag_is_number(tag2)) || (tag_is_string(tag2) && tag_is_number(tag1))) { @@ -15272,6 +15687,8 @@ static no_inline __exception int js_eq_slow(JSContext *ctx, JSValue *sp, } } res = js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT); + JS_FreeValue(ctx, op1); + JS_FreeValue(ctx, op2); } else if (tag1 == JS_TAG_BOOL) { op1 = JS_NewInt32(ctx, JS_VALUE_GET_INT(op1)); goto redo; @@ -15353,8 +15770,7 @@ static no_inline int js_shr_slow(JSContext *ctx, JSValue *sp) return -1; } -/* XXX: Should take JSValueConst arguments */ -static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2, +static BOOL js_strict_eq2(JSContext *ctx, JSValueConst op1, JSValueConst op2, JSStrictEqModeEnum eq_mode) { BOOL res; @@ -15369,7 +15785,6 @@ static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2, res = FALSE; } else { res = JS_VALUE_GET_INT(op1) == JS_VALUE_GET_INT(op2); - goto done_no_free; } break; case JS_TAG_NULL: @@ -15445,7 +15860,7 @@ static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2, } else { res = (d1 == d2); /* if NaN return false and +0 == -0 */ } - goto done_no_free; + break; case JS_TAG_SHORT_BIG_INT: case JS_TAG_BIG_INT: { @@ -15473,17 +15888,12 @@ static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2, res = FALSE; break; } - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - done_no_free: return res; } static BOOL js_strict_eq(JSContext *ctx, JSValueConst op1, JSValueConst op2) { - return js_strict_eq2(ctx, - JS_DupValue(ctx, op1), JS_DupValue(ctx, op2), - JS_EQ_STRICT); + return js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT); } BOOL JS_StrictEq(JSContext *ctx, JSValueConst op1, JSValueConst op2) @@ -15493,9 +15903,7 @@ BOOL JS_StrictEq(JSContext *ctx, JSValueConst op1, JSValueConst op2) static BOOL js_same_value(JSContext *ctx, JSValueConst op1, JSValueConst op2) { - return js_strict_eq2(ctx, - JS_DupValue(ctx, op1), JS_DupValue(ctx, op2), - JS_EQ_SAME_VALUE); + return js_strict_eq2(ctx, op1, op2, JS_EQ_SAME_VALUE); } BOOL JS_SameValue(JSContext *ctx, JSValueConst op1, JSValueConst op2) @@ -15505,9 +15913,7 @@ BOOL JS_SameValue(JSContext *ctx, JSValueConst op1, JSValueConst op2) static BOOL js_same_value_zero(JSContext *ctx, JSValueConst op1, JSValueConst op2) { - return js_strict_eq2(ctx, - JS_DupValue(ctx, op1), JS_DupValue(ctx, op2), - JS_EQ_SAME_VALUE_ZERO); + return js_strict_eq2(ctx, op1, op2, JS_EQ_SAME_VALUE_ZERO); } BOOL JS_SameValueZero(JSContext *ctx, JSValueConst op1, JSValueConst op2) @@ -15515,15 +15921,6 @@ BOOL JS_SameValueZero(JSContext *ctx, JSValueConst op1, JSValueConst op2) return js_same_value_zero(ctx, op1, op2); } -static no_inline int js_strict_eq_slow(JSContext *ctx, JSValue *sp, - BOOL is_neq) -{ - BOOL res; - res = js_strict_eq2(ctx, sp[-2], sp[-1], JS_EQ_STRICT); - sp[-2] = JS_NewBool(ctx, res ^ is_neq); - return 0; -} - static __exception int js_operator_in(JSContext *ctx, JSValue *sp) { JSValue op1, op2; @@ -16398,18 +16795,6 @@ static JSValue js_array_iterator_next(JSContext *ctx, JSValueConst this_val, static JSValue js_create_array_iterator(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic); -static BOOL js_is_fast_array(JSContext *ctx, JSValueConst obj) -{ - /* Try and handle fast arrays explicitly */ - if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { - JSObject *p = JS_VALUE_GET_OBJ(obj); - if (p->class_id == JS_CLASS_ARRAY && p->fast_array) { - return TRUE; - } - } - return FALSE; -} - /* Access an Array's internal JSValue array if available */ static BOOL js_get_fast_array(JSContext *ctx, JSValueConst obj, JSValue **arrpp, uint32_t *countp) @@ -16596,7 +16981,7 @@ static JSVarRef *js_create_var_ref(JSContext *ctx, BOOL is_lexical) var_ref = js_malloc(ctx, sizeof(JSVarRef)); if (!var_ref) return NULL; - var_ref->header.ref_count = 1; + js_rc(var_ref)->ref_count = 1; if (is_lexical) var_ref->value = JS_UNINITIALIZED; else @@ -16636,7 +17021,7 @@ static JSVarRef *get_var_ref(JSContext *ctx, JSStackFrame *sf, int var_idx, if (var_ref) { /* reference to the already created local variable */ assert(var_ref->pvalue == pvalue); - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; return var_ref; } @@ -16644,7 +17029,7 @@ static JSVarRef *get_var_ref(JSContext *ctx, JSStackFrame *sf, int var_idx, var_ref = js_malloc(ctx, sizeof(JSVarRef)); if (!var_ref) return NULL; - var_ref->header.ref_count = 1; + js_rc(var_ref)->ref_count = 1; add_gc_object(ctx->rt, &var_ref->header, JS_GC_OBJ_TYPE_VAR_REF); var_ref->is_detached = FALSE; var_ref->is_lexical = FALSE; @@ -16662,7 +17047,7 @@ static JSVarRef *get_var_ref(JSContext *ctx, JSStackFrame *sf, int var_idx, the JSVarRef of async functions during the GC. It would have the advantage of allowing the release of unused stack frames in a cycle. */ - async_func->header.ref_count++; + js_rc(async_func)->ref_count++; } var_ref->pvalue = pvalue; return var_ref; @@ -16693,7 +17078,7 @@ static JSVarRef *js_global_object_get_uninitialized_var(JSContext *ctx, JSObject if (prs) { assert((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF); var_ref = pr->u.var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; return var_ref; } @@ -16706,7 +17091,7 @@ static JSVarRef *js_global_object_get_uninitialized_var(JSContext *ctx, JSObject return NULL; } pr->u.var_ref = var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; return var_ref; } @@ -16725,7 +17110,7 @@ static JSVarRef *js_global_object_find_uninitialized_var(JSContext *ctx, JSObjec if (prs) { assert((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF); var_ref = pr->u.var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; delete_property(ctx, p1, atom); if (!is_lexical) var_ref->value = JS_UNDEFINED; @@ -16756,7 +17141,7 @@ static JSVarRef *js_closure_define_global_var(JSContext *ctx, JSClosureVar *cv, if (prs) { assert((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF); var_ref = pr->u.var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; return var_ref; } @@ -16794,7 +17179,7 @@ static JSVarRef *js_closure_define_global_var(JSContext *ctx, JSClosureVar *cv, return NULL; } else { var_ref = pr->u.var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; } if (cv->var_kind == JS_VAR_GLOBAL_FUNCTION_DECL && (prs->flags & JS_PROP_CONFIGURABLE)) { @@ -16804,7 +17189,7 @@ static JSVarRef *js_closure_define_global_var(JSContext *ctx, JSClosureVar *cv, free_property(ctx->rt, pr, prs->flags); prs->flags = flags | JS_PROP_VARREF; pr->u.var_ref = var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; } else { assert((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF); prs->flags = (prs->flags & ~JS_PROP_C_W_E) | flags; @@ -16836,7 +17221,7 @@ static JSVarRef *js_closure_define_global_var(JSContext *ctx, JSClosureVar *cv, return NULL; } pr->u.var_ref = var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; return var_ref; } @@ -16852,7 +17237,7 @@ static JSVarRef *js_closure_global_var(JSContext *ctx, JSClosureVar *cv) if (prs) { assert((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF); var_ref = pr->u.var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; return var_ref; } p = JS_VALUE_GET_OBJ(ctx->global_obj); @@ -16867,7 +17252,7 @@ static JSVarRef *js_closure_global_var(JSContext *ctx, JSClosureVar *cv) } if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { var_ref = pr->u.var_ref; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; return var_ref; } } @@ -16936,7 +17321,7 @@ static JSValue js_closure2(JSContext *ctx, JSValue func_obj, case JS_CLOSURE_REF: case JS_CLOSURE_GLOBAL_REF: var_ref = cur_var_refs[cv->var_idx]; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; break; default: abort(); @@ -17352,6 +17737,11 @@ typedef enum { #define FUNC_RET_YIELD_STAR 2 #define FUNC_RET_INITIAL_YIELD 3 +#ifdef OPCODE_ASM_LABEL +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-label" +#endif + /* argv[] is modified if (flags & JS_CALL_FLAG_COPY_ARGV) = 0. */ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, JSValueConst this_obj, JSValueConst new_target, @@ -17385,7 +17775,11 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, [ OP_COUNT ... 255 ] = &&case_default }; #define SWITCH(pc) goto *dispatch_table[opcode = *pc++]; +#ifdef OPCODE_ASM_LABEL +#define CASE(op) case_ ## op: asm volatile("label_" #op ":\n.globl label_" #op); dummy_case_ ## op +#else #define CASE(op) case_ ## op +#endif #define DEFAULT case_default #define BREAK SWITCH(pc) #endif @@ -18396,7 +18790,7 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, goto exception; if (opcode == OP_make_var_ref_ref) { var_ref = var_refs[idx]; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; } else { var_ref = get_var_ref(ctx, sf, idx, opcode == OP_make_arg_ref); if (!var_ref) @@ -19313,9 +19707,24 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, sp[-2] = JS_NewInt32(ctx, r); } sp--; - } else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2)) { - sp[-2] = __JS_NewFloat64(ctx, JS_VALUE_GET_FLOAT64(op1) + - JS_VALUE_GET_FLOAT64(op2)); + } else if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) || + JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { + double d1, d2; + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1))) { + d1 = JS_VALUE_GET_FLOAT64(op1); + } else if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { + d1 = JS_VALUE_GET_INT(op1); + } else { + goto add_slow_case; + } + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { + d2 = JS_VALUE_GET_FLOAT64(op2); + } else if (JS_VALUE_GET_TAG(op2) == JS_TAG_INT) { + d2 = JS_VALUE_GET_INT(op2); + } else { + goto add_slow_case; + } + sp[-2] = __JS_NewFloat64(ctx, d1 + d2); sp--; } else if (JS_IsString(op1) && JS_IsString(op2)) { sp[-2] = JS_ConcatString(ctx, op1, op2); @@ -19323,6 +19732,7 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, if (JS_IsException(sp[-1])) goto exception; } else { + add_slow_case: sf->cur_pc = pc; if (js_add_slow(ctx, sp)) goto exception; @@ -19393,9 +19803,24 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, sp[-2] = JS_NewInt32(ctx, r); } sp--; - } else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2)) { - sp[-2] = __JS_NewFloat64(ctx, JS_VALUE_GET_FLOAT64(op1) - - JS_VALUE_GET_FLOAT64(op2)); + } else if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) || + JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { + double d1, d2; + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1))) { + d1 = JS_VALUE_GET_FLOAT64(op1); + } else if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { + d1 = JS_VALUE_GET_INT(op1); + } else { + goto binary_arith_slow; + } + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { + d2 = JS_VALUE_GET_FLOAT64(op2); + } else if (JS_VALUE_GET_TAG(op2) == JS_TAG_INT) { + d2 = JS_VALUE_GET_INT(op2); + } else { + goto binary_arith_slow; + } + sp[-2] = __JS_NewFloat64(ctx, d1 - d2); sp--; } else { goto binary_arith_slow; @@ -19425,8 +19850,24 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, } sp[-2] = JS_NewInt32(ctx, r); sp--; - } else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2)) { - d = JS_VALUE_GET_FLOAT64(op1) * JS_VALUE_GET_FLOAT64(op2); + } else if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) || + JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { + double d1, d2; + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1))) { + d1 = JS_VALUE_GET_FLOAT64(op1); + } else if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { + d1 = JS_VALUE_GET_INT(op1); + } else { + goto binary_arith_slow; + } + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { + d2 = JS_VALUE_GET_FLOAT64(op2); + } else if (JS_VALUE_GET_TAG(op2) == JS_TAG_INT) { + d2 = JS_VALUE_GET_INT(op2); + } else { + goto binary_arith_slow; + } + d = d1 * d2; mul_fp_res: sp[-2] = __JS_NewFloat64(ctx, d); sp--; @@ -19786,16 +20227,36 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, BREAK; -#define OP_CMP(opcode, binary_op, slow_call) \ - CASE(opcode): \ - { \ - JSValue op1, op2; \ - op1 = sp[-2]; \ - op2 = sp[-1]; \ +#define OP_CMP(opcode, binary_op, slow_call) \ + CASE(opcode): \ + { \ + JSValue op1, op2; \ + op1 = sp[-2]; \ + op2 = sp[-1]; \ if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { \ sp[-2] = JS_NewBool(ctx, JS_VALUE_GET_INT(op1) binary_op JS_VALUE_GET_INT(op2)); \ sp--; \ + } else if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1)) || \ + JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { \ + double d1, d2; \ + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1))) { \ + d1 = JS_VALUE_GET_FLOAT64(op1); \ + } else if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { \ + d1 = JS_VALUE_GET_INT(op1); \ + } else { \ + goto opcode ## _slow_case; \ + } \ + if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op2))) { \ + d2 = JS_VALUE_GET_FLOAT64(op2); \ + } else if (JS_VALUE_GET_TAG(op2) == JS_TAG_INT) { \ + d2 = JS_VALUE_GET_INT(op2); \ + } else { \ + goto opcode ## _slow_case; \ + } \ + sp[-2] = JS_NewBool(ctx, d1 binary_op d2); \ + sp--; \ } else { \ + opcode ## _slow_case: \ sf->cur_pc = pc; \ if (slow_call) \ goto exception; \ @@ -19808,10 +20269,133 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, OP_CMP(OP_lte, <=, js_relational_slow(ctx, sp, opcode)); OP_CMP(OP_gt, >, js_relational_slow(ctx, sp, opcode)); OP_CMP(OP_gte, >=, js_relational_slow(ctx, sp, opcode)); - OP_CMP(OP_eq, ==, js_eq_slow(ctx, sp, 0)); - OP_CMP(OP_neq, !=, js_eq_slow(ctx, sp, 1)); - OP_CMP(OP_strict_eq, ==, js_strict_eq_slow(ctx, sp, 0)); - OP_CMP(OP_strict_neq, !=, js_strict_eq_slow(ctx, sp, 1)); + +#define OP_CMP_EQ(opcode, inv) \ + CASE(opcode): \ + { \ + JSValue op1, op2; \ + int res; \ + uint32_t tag1, tag2; \ + op1 = sp[-2]; \ + op2 = sp[-1]; \ + tag1 = JS_VALUE_GET_TAG(op1); \ + tag2 = JS_VALUE_GET_TAG(op2); \ + if (likely(tag1 == JS_TAG_INT)) { \ + if (tag2 == JS_TAG_INT) { \ + res = JS_VALUE_GET_INT(op1) == JS_VALUE_GET_INT(op2); \ + } else if (JS_TAG_IS_FLOAT64(tag2)) { \ + res = (JS_VALUE_GET_INT(op1) == JS_VALUE_GET_FLOAT64(op2)); \ + } else { \ + goto slow_eq ## inv; \ + } \ + } else if (JS_TAG_IS_FLOAT64(tag1)) { \ + if (tag2 == JS_TAG_INT) { \ + res = JS_VALUE_GET_FLOAT64(op1) == JS_VALUE_GET_INT(op2); \ + } else if (JS_TAG_IS_FLOAT64(tag2)) { \ + res = (JS_VALUE_GET_FLOAT64(op1) == JS_VALUE_GET_FLOAT64(op2)); \ + } else { \ + goto slow_eq ## inv; \ + } \ + } else if (tag1 == JS_TAG_OBJECT) { \ + if (tag2 == JS_TAG_NULL || tag2 == JS_TAG_UNDEFINED) { \ + JSObject *p = JS_VALUE_GET_OBJ(op1); \ + res = p->is_HTMLDDA; \ + JS_FreeValue(ctx, op1); \ + } else if (tag2 == JS_TAG_OBJECT) { \ + res = JS_VALUE_GET_OBJ(op1) == JS_VALUE_GET_OBJ(op2); \ + JS_FreeValue(ctx, op1); \ + JS_FreeValue(ctx, op2); \ + } else { \ + goto slow_eq ## inv; \ + } \ + } else if (tag1 == JS_TAG_NULL || tag1 == JS_TAG_UNDEFINED) { \ + if (tag2 == JS_TAG_NULL || tag2 == JS_TAG_UNDEFINED) { \ + res = TRUE; \ + } else if (tag2 == JS_TAG_OBJECT) { \ + JSObject *p = JS_VALUE_GET_OBJ(op2); \ + res = p->is_HTMLDDA; \ + JS_FreeValue(ctx, op2); \ + } else { \ + goto slow_eq ## inv; \ + } \ + } else if (tag1 == JS_TAG_STRING && tag2 == JS_TAG_STRING) { \ + res = js_string_eq(ctx, JS_VALUE_GET_STRING(op1), \ + JS_VALUE_GET_STRING(op2)); \ + JS_FreeValue(ctx, op1); \ + JS_FreeValue(ctx, op2); \ + } else { \ + slow_eq ## inv: \ + sf->cur_pc = pc; \ + if (js_eq_slow(ctx, sp, inv)) \ + goto exception; \ + sp--; \ + goto slow_eq_done ## inv; \ + } \ + sp[-2] = JS_NewBool(ctx, res ^ inv); \ + sp--; \ + slow_eq_done ## inv: ; \ + } \ + BREAK + + OP_CMP_EQ(OP_eq, 0); + OP_CMP_EQ(OP_neq, 1); + +#define OP_CMP_STRICT_EQ(opcode, inv) \ + CASE(opcode): \ + { \ + JSValue op1, op2; \ + int res; \ + uint32_t tag1, tag2; \ + op1 = sp[-2]; \ + op2 = sp[-1]; \ + tag1 = JS_VALUE_GET_TAG(op1); \ + tag2 = JS_VALUE_GET_TAG(op2); \ + if (likely(tag1 == JS_TAG_INT)) { \ + if (tag2 == JS_TAG_INT) { \ + res = JS_VALUE_GET_INT(op1) == JS_VALUE_GET_INT(op2); \ + } else if (JS_TAG_IS_FLOAT64(tag2)) { \ + res = (JS_VALUE_GET_INT(op1) == JS_VALUE_GET_FLOAT64(op2)); \ + } else { \ + JS_FreeValue(ctx, op2); \ + res = FALSE; \ + } \ + } else if (JS_TAG_IS_FLOAT64(tag1)) { \ + if (tag2 == JS_TAG_INT) { \ + res = JS_VALUE_GET_FLOAT64(op1) == JS_VALUE_GET_INT(op2); \ + } else if (JS_TAG_IS_FLOAT64(tag2)) { \ + res = (JS_VALUE_GET_FLOAT64(op1) == JS_VALUE_GET_FLOAT64(op2)); \ + } else { \ + JS_FreeValue(ctx, op2); \ + res = FALSE; \ + } \ + } else if (tag1 == JS_TAG_OBJECT) { \ + if (tag2 == JS_TAG_OBJECT) { \ + res = JS_VALUE_GET_OBJ(op1) == JS_VALUE_GET_OBJ(op2); \ + } else { \ + res = FALSE; \ + } \ + JS_FreeValue(ctx, op1); \ + JS_FreeValue(ctx, op2); \ + } else if (tag1 == JS_TAG_NULL || tag1 == JS_TAG_UNDEFINED) { \ + res = (tag1 == tag2); \ + JS_FreeValue(ctx, op2); \ + } else if (tag1 == JS_TAG_STRING && tag2 == JS_TAG_STRING) { \ + res = js_string_eq(ctx, JS_VALUE_GET_STRING(op1), \ + JS_VALUE_GET_STRING(op2)); \ + JS_FreeValue(ctx, op1); \ + JS_FreeValue(ctx, op2); \ + } else { \ + res = js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT); \ + JS_FreeValue(ctx, op1); \ + JS_FreeValue(ctx, op2); \ + } \ + sp[-2] = JS_NewBool(ctx, res ^ inv); \ + sp--; \ + } \ + BREAK + + OP_CMP_STRICT_EQ(OP_strict_eq, 0); + OP_CMP_STRICT_EQ(OP_strict_neq, 1); CASE(OP_in): sf->cur_pc = pc; @@ -20126,6 +20710,10 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj, return ret_val; } +#ifdef OPCODE_ASM_LABEL +#pragma GCC diagnostic pop +#endif + JSValue JS_Call(JSContext *ctx, JSValueConst func_obj, JSValueConst this_obj, int argc, JSValueConst *argv) { @@ -20319,7 +20907,7 @@ static JSAsyncFunctionState *async_func_init(JSContext *ctx, if (!s) return NULL; memset(s, 0, sizeof(*s)); - s->header.ref_count = 1; + js_rc(s)->ref_count = 1; add_gc_object(ctx->rt, &s->header, JS_GC_OBJ_TYPE_ASYNC_FUNCTION); sf = &s->frame; @@ -20409,7 +20997,7 @@ static void __async_func_free(JSRuntime *rt, JSAsyncFunctionState *s) JS_FreeValueRT(rt, s->resolving_funcs[1]); remove_gc_object(&s->header); - if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES && s->header.ref_count != 0) { + if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES && js_rc(s)->ref_count != 0) { list_add_tail(&s->header.link, &rt->gc_zero_ref_count_list); } else { js_free_rt(rt, s); @@ -20418,7 +21006,7 @@ static void __async_func_free(JSRuntime *rt, JSAsyncFunctionState *s) static void async_func_free(JSRuntime *rt, JSAsyncFunctionState *s) { - if (--s->header.ref_count == 0) { + if (--js_rc(s)->ref_count == 0) { if (rt->gc_phase != JS_GC_PHASE_REMOVE_CYCLES) { list_del(&s->header.link); list_add(&s->header.link, &rt->gc_zero_ref_count_list); @@ -20641,7 +21229,7 @@ static int js_async_function_resolve_create(JSContext *ctx, return -1; } p = JS_VALUE_GET_OBJ(resolving_funcs[i]); - s->header.ref_count++; + js_rc(s)->ref_count++; p->u.async_function_data = s; } return 0; @@ -21100,9 +21688,8 @@ static JSValue js_async_generator_resolve_function(JSContext *ctx, } else { js_async_generator_resolve(ctx, s, arg, TRUE); } - } else { + } else if (s->state == JS_ASYNC_GENERATOR_STATE_EXECUTING) { /* restart function execution after await() */ - assert(s->state == JS_ASYNC_GENERATOR_STATE_EXECUTING); s->func_state->throw_flag = is_reject; if (is_reject) { JS_Throw(ctx, JS_DupValue(ctx, arg)); @@ -21558,7 +22145,7 @@ typedef struct JSParseState { JSFunctionDef *cur_func; BOOL is_module; /* parsing a module */ BOOL allow_html_comments; - BOOL ext_json; /* true if accepting JSON superset */ + BOOL ext_json; /* JSON parsing: true if accepting JSON superset */ GetLineColCache get_line_col_cache; } JSParseState; @@ -27953,6 +28540,7 @@ static __exception int js_parse_var(JSParseState *s, int parse_flags, int tok, } if (s->token.val == '=') { + const uint8_t *source_ptr = s->token.ptr; if (next_token(s)) goto var_error; if (need_var_reference(s, tok)) { @@ -27970,12 +28558,14 @@ static __exception int js_parse_var(JSParseState *s, int parse_flags, int tok, goto var_error; } set_object_name(s, name); + emit_source_pos(s, source_ptr); put_lvalue(s, opcode, scope, name1, label, PUT_LVALUE_NOKEEP, FALSE); } else { if (js_parse_assign_expr2(s, parse_flags)) goto var_error; set_object_name(s, name); + emit_source_pos(s, source_ptr); emit_op(s, (tok == TOK_CONST || tok == TOK_LET) ? OP_scope_put_var_init : OP_scope_put_var); emit_atom(s, name); @@ -28191,8 +28781,7 @@ static __exception int js_parse_for_in_of(JSParseState *s, int label_name, JS_FreeAtom(ctx, var_name); if (token_is_pseudo_keyword(s, JS_ATOM_of)) { - break_entry.has_iterator = is_for_of = TRUE; - break_entry.drop_count += 2; + is_for_of = TRUE; if (has_initializer) goto initializer_error; } else if (s->token.val == TOK_IN) { @@ -28221,6 +28810,11 @@ static __exception int js_parse_for_in_of(JSParseState *s, int label_name, the TDZ values are in the closures */ close_scopes(s, s->cur_func->scope_level, block_scope_level); if (is_for_of) { + /* set has_iterator after the iterable expression is parsed so + that a yield in the expression does not try to close a + not-yet-created iterator */ + break_entry.has_iterator = TRUE; + break_entry.drop_count += 2; if (is_async) emit_op(s, OP_for_await_of_start); else @@ -28241,7 +28835,8 @@ static __exception int js_parse_for_in_of(JSParseState *s, int label_name, int chunk_size = pos_expr - pos_next; int offset = bc->size - pos_next; int i; - dbuf_claim(bc, chunk_size); + if (dbuf_claim(bc, chunk_size)) + return -1; dbuf_put(bc, bc->buf + pos_next, chunk_size); memset(bc->buf + pos_next, OP_nop, chunk_size); /* `next` part ends with a goto */ @@ -28647,7 +29242,8 @@ static __exception int js_parse_statement_or_decl(JSParseState *s, int chunk_size = pos_body - pos_cont; int offset = bc->size - pos_cont; int i; - dbuf_claim(bc, chunk_size); + if (dbuf_claim(bc, chunk_size)) + goto fail; dbuf_put(bc, bc->buf + pos_cont, chunk_size); memset(bc->buf + pos_cont, OP_nop, chunk_size); /* increment part ends with a goto */ @@ -28774,7 +29370,7 @@ static __exception int js_parse_statement_or_decl(JSParseState *s, if (js_parse_expect(s, '}')) goto fail; if (default_label_pos >= 0) { - /* Ugly patch for the the `default` label, shameful and risky */ + /* Ugly patch for the `default` label, shameful and risky */ put_u32(s->cur_func->byte_code.buf + default_label_pos, label_case); s->cur_func->label_slots[label_case].pos = default_label_pos + 4; @@ -29073,7 +29669,7 @@ static JSModuleDef *js_new_module_def(JSContext *ctx, JSAtom name) JS_FreeAtom(ctx, name); return NULL; } - m->header.ref_count = 1; + js_rc(m)->ref_count = 1; add_gc_object(ctx->rt, &m->header, JS_GC_OBJ_TYPE_MODULE); m->module_name = name; m->module_ns = JS_UNDEFINED; @@ -29161,7 +29757,7 @@ static void js_free_module_def(JSRuntime *rt, JSModuleDef *m) list_del(&m->link); } remove_gc_object(&m->header); - if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES && m->header.ref_count != 0) { + if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES && js_rc(m)->ref_count != 0) { list_add_tail(&m->header.link, &rt->gc_zero_ref_count_list); } else { js_free_rt(rt, m); @@ -29881,7 +30477,7 @@ static JSValue js_build_module_ns(JSContext *ctx, JSModuleDef *m) JS_PROP_VARREF); if (!pr) goto fail; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; pr->u.var_ref = var_ref; } break; @@ -30172,7 +30768,7 @@ static int js_inner_module_linking(JSContext *ctx, JSModuleDef *m, p1 = JS_VALUE_GET_OBJ(res_m->func_obj); var_ref = p1->u.func.var_refs[res_me->u.local.var_idx]; } - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; var_refs[mi->var_idx] = var_ref; #ifdef DUMP_MODULE_RESOLVE printf("local export (var_ref=%p)\n", var_ref); @@ -30188,7 +30784,7 @@ static int js_inner_module_linking(JSContext *ctx, JSModuleDef *m, JSExportEntry *me = &m->export_entries[i]; if (me->export_type == JS_EXPORT_TYPE_LOCAL) { var_ref = var_refs[me->u.local.var_idx]; - var_ref->header.ref_count++; + js_rc(var_ref)->ref_count++; me->u.local.var_ref = var_ref; } } @@ -31662,7 +32258,7 @@ static void dump_byte_code(JSContext *ctx, int pass, const JSOpCode *oi; int pos, pos_next, op, size, idx, addr, line, line1, in_source, line_num; uint8_t *bits = js_mallocz(ctx, len * sizeof(*bits)); - BOOL use_short_opcodes = (b != NULL); + BOOL use_short_opcodes = (b != NULL), dump_pc; if (b) { int col_num; @@ -31768,7 +32364,12 @@ static void dump_byte_code(JSContext *ctx, int pass, printf("%*s", x0 + 20 - x, ""); } #endif - if (bits[pos]) { +#if defined(DUMP_BYTECODE) && (DUMP_BYTECODE & 32) + dump_pc = TRUE; +#else + dump_pc = bits[pos]; +#endif + if (dump_pc) { printf("%5d: ", pos); } else { printf(" "); @@ -34118,7 +34719,6 @@ static void push_short_int(DynBuf *bc_out, int val) dbuf_putc(bc_out, OP_push_0 + val); return; } -#if !defined(__EMSCRIPTEN__) // Workaround for WebKit WASM https://github.com/justjake/quickjs-emscripten/issues/166 if (val == (int8_t)val) { dbuf_putc(bc_out, OP_push_i8); dbuf_putc(bc_out, val); @@ -34129,7 +34729,6 @@ static void push_short_int(DynBuf *bc_out, int val) dbuf_put_u16(bc_out, val); return; } -#endif // !defined(__EMSCRIPTEN__) #endif dbuf_putc(bc_out, OP_push_i32); dbuf_put_u32(bc_out, val); @@ -35536,7 +36135,7 @@ static JSValue js_create_function(JSContext *ctx, JSFunctionDef *fd) b = js_mallocz(ctx, function_size); if (!b) goto fail; - b->header.ref_count = 1; + js_rc(b)->ref_count = 1; b->byte_code_buf = (void *)((uint8_t*)b + byte_code_offset); b->byte_code_len = fd->byte_code.size; @@ -35718,7 +36317,7 @@ static void free_function_bytecode(JSRuntime *rt, JSFunctionBytecode *b) } remove_gc_object(&b->header); - if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES && b->header.ref_count != 0) { + if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES && js_rc(b)->ref_count != 0) { list_add_tail(&b->header.link, &rt->gc_zero_ref_count_list); } else { js_free_rt(rt, b); @@ -36739,7 +37338,6 @@ static JSValue JS_EvalObject(JSContext *ctx, JSValueConst this_obj, ret = JS_EvalInternal(ctx, this_obj, str, len, "", flags, scope_idx); JS_FreeCString(ctx, str); return ret; - } JSValue JS_EvalThis(JSContext *ctx, JSValueConst this_obj, @@ -37573,11 +38171,14 @@ static int JS_WriteObjectRec(BCWriterState *s, JSValueConst obj) case JS_TAG_STRING_ROPE: { JSValue str; + int ret; str = JS_ToString(s->ctx, obj); if (JS_IsException(str)) goto fail; - JS_WriteObjectRec(s, str); + ret = JS_WriteObjectRec(s, str); JS_FreeValue(s->ctx, str); + if (ret) + goto fail; } break; case JS_TAG_FUNCTION_BYTECODE: @@ -38148,12 +38749,11 @@ static JSValue JS_ReadFunctionTag(BCReaderState *s) uint16_t v16; uint8_t v8; int idx, i, local_count; - int function_size, cpool_offset, byte_code_offset; + int cpool_offset, byte_code_offset; int closure_var_offset, vardefs_offset; - + uint64_t function_size; + memset(&bc, 0, sizeof(bc)); - bc.header.ref_count = 1; - //bc.gc_header.mark = 0; if (bc_get_u16(s, &v16)) goto fail; @@ -38200,22 +38800,24 @@ static JSValue JS_ReadFunctionTag(BCReaderState *s) function_size = offsetof(JSFunctionBytecode, debug); } cpool_offset = function_size; - function_size += bc.cpool_count * sizeof(*bc.cpool); + function_size += (uint64_t)bc.cpool_count * sizeof(*bc.cpool); vardefs_offset = function_size; - function_size += local_count * sizeof(*bc.vardefs); + function_size += (uint64_t)local_count * sizeof(*bc.vardefs); closure_var_offset = function_size; - function_size += bc.closure_var_count * sizeof(*bc.closure_var); + function_size += (uint64_t)bc.closure_var_count * sizeof(*bc.closure_var); byte_code_offset = function_size; if (!bc.read_only_bytecode) { function_size += bc.byte_code_len; } + if (function_size > INT32_MAX) + return JS_ThrowOutOfMemory(ctx); + b = js_mallocz(ctx, function_size); if (!b) return JS_EXCEPTION; memcpy(b, &bc, offsetof(JSFunctionBytecode, debug)); - b->header.ref_count = 1; if (local_count != 0) { b->vardefs = (void *)((uint8_t*)b + vardefs_offset); } @@ -38226,6 +38828,7 @@ static JSValue JS_ReadFunctionTag(BCReaderState *s) b->cpool = (void *)((uint8_t*)b + cpool_offset); } + js_rc(b)->ref_count = 1; add_gc_object(ctx->rt, &b->header, JS_GC_OBJ_TYPE_FUNCTION_BYTECODE); obj = JS_MKPTR(JS_TAG_FUNCTION_BYTECODE, b); @@ -41254,10 +41857,10 @@ static JSValue js_get_this(JSContext *ctx, return JS_DupValue(ctx, this_val); } -static JSValue JS_ArraySpeciesCreate(JSContext *ctx, JSValueConst obj, - JSValueConst len_val) +/* XXX: optimize */ +static JSValue JS_ArraySpeciesGetCtor(JSContext *ctx, JSValueConst obj) { - JSValue ctor, ret, species; + JSValue ctor, species; int res; JSContext *realm; @@ -41265,7 +41868,7 @@ static JSValue JS_ArraySpeciesCreate(JSContext *ctx, JSValueConst obj, if (res < 0) return JS_EXCEPTION; if (!res) - return js_array_constructor(ctx, JS_UNDEFINED, 1, &len_val); + return JS_UNDEFINED; ctor = JS_GetProperty(ctx, obj, JS_ATOM_constructor); if (JS_IsException(ctor)) return ctor; @@ -41291,13 +41894,39 @@ static JSValue JS_ArraySpeciesCreate(JSContext *ctx, JSValueConst obj, if (JS_IsNull(ctor)) ctor = JS_UNDEFINED; } + if (!JS_IsUndefined(ctor) && + js_same_value(ctx, ctor, ctx->array_ctor)) { + JS_FreeValue(ctx, ctor); + ctor = JS_UNDEFINED; + } + return ctor; +} + +static JSValue JS_ArrayCreateFromCtor(JSContext *ctx, JSValueConst ctor, int64_t len) +{ + JSValue len_val, ret; + + len_val = JS_NewInt64(ctx, len); if (JS_IsUndefined(ctor)) { - return js_array_constructor(ctx, JS_UNDEFINED, 1, &len_val); + ret = js_array_constructor(ctx, JS_UNDEFINED, 1, (JSValueConst *)&len_val); } else { - ret = JS_CallConstructor(ctx, ctor, 1, &len_val); - JS_FreeValue(ctx, ctor); - return ret; + ret = JS_CallConstructor(ctx, ctor, 1, (JSValueConst *)&len_val); } + JS_FreeValue(ctx, len_val); + return ret; +} + +/* len must be >= 0 */ +static JSValue JS_ArraySpeciesCreate(JSContext *ctx, JSValueConst obj, int64_t len) +{ + JSValue ctor, ret; + + ctor = JS_ArraySpeciesGetCtor(ctx, obj); + if (JS_IsException(ctor)) + return ctor; + ret = JS_ArrayCreateFromCtor(ctx, ctor, len); + JS_FreeValue(ctx, ctor); + return ret; } static const JSCFunctionListEntry js_array_funcs[] = { @@ -41397,21 +42026,14 @@ static JSValue js_array_with(JSContext *ctx, JSValueConst this_val, } else { for (; i < idx; i++, pval++) if (-1 == JS_TryGetPropertyInt64(ctx, obj, i, pval)) - goto fill_and_fail; + goto exception; *pval = JS_DupValue(ctx, argv[1]); for (i++, pval++; i < len; i++, pval++) { - if (-1 == JS_TryGetPropertyInt64(ctx, obj, i, pval)) { - fill_and_fail: - for (; i < len; i++, pval++) - *pval = JS_UNDEFINED; + if (-1 == JS_TryGetPropertyInt64(ctx, obj, i, pval)) goto exception; - } } } - if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, len)) < 0) - goto exception; - ret = arr; arr = JS_UNDEFINED; @@ -41434,7 +42056,7 @@ static JSValue js_array_concat(JSContext *ctx, JSValueConst this_val, if (JS_IsException(obj)) goto exception; - arr = JS_ArraySpeciesCreate(ctx, obj, JS_NewInt32(ctx, 0)); + arr = JS_ArraySpeciesCreate(ctx, obj, 0); if (JS_IsException(arr)) goto exception; n = 0; @@ -41537,13 +42159,12 @@ static JSValue js_array_every(JSContext *ctx, JSValueConst this_val, ret = JS_FALSE; break; case special_map: - /* XXX: JS_ArraySpeciesCreate should take int64_t */ - ret = JS_ArraySpeciesCreate(ctx, obj, JS_NewInt64(ctx, len)); + ret = JS_ArraySpeciesCreate(ctx, obj, len); if (JS_IsException(ret)) goto exception; break; case special_filter: - ret = JS_ArraySpeciesCreate(ctx, obj, JS_NewInt32(ctx, 0)); + ret = JS_ArraySpeciesCreate(ctx, obj, 0); if (JS_IsException(ret)) goto exception; break; @@ -41804,8 +42425,7 @@ static JSValue js_array_includes(JSContext *ctx, JSValueConst this_val, } if (js_get_fast_array(ctx, obj, &arrp, &count)) { for (; n < count; n++) { - if (js_strict_eq2(ctx, JS_DupValue(ctx, argv[0]), - JS_DupValue(ctx, arrp[n]), + if (js_strict_eq2(ctx, argv[0], arrp[n], JS_EQ_SAME_VALUE_ZERO)) { res = TRUE; goto done; @@ -41816,11 +42436,13 @@ static JSValue js_array_includes(JSContext *ctx, JSValueConst this_val, val = JS_GetPropertyInt64(ctx, obj, n); if (JS_IsException(val)) goto exception; - if (js_strict_eq2(ctx, JS_DupValue(ctx, argv[0]), val, + if (js_strict_eq2(ctx, argv[0], val, JS_EQ_SAME_VALUE_ZERO)) { + JS_FreeValue(ctx, val); res = TRUE; break; } + JS_FreeValue(ctx, val); } } done: @@ -41853,8 +42475,7 @@ static JSValue js_array_indexOf(JSContext *ctx, JSValueConst this_val, } if (js_get_fast_array(ctx, obj, &arrp, &count)) { for (; n < count; n++) { - if (js_strict_eq2(ctx, JS_DupValue(ctx, argv[0]), - JS_DupValue(ctx, arrp[n]), JS_EQ_STRICT)) { + if (js_strict_eq2(ctx, argv[0], arrp[n], JS_EQ_STRICT)) { res = n; goto done; } @@ -41865,10 +42486,12 @@ static JSValue js_array_indexOf(JSContext *ctx, JSValueConst this_val, if (present < 0) goto exception; if (present) { - if (js_strict_eq2(ctx, JS_DupValue(ctx, argv[0]), val, JS_EQ_STRICT)) { + if (js_strict_eq2(ctx, argv[0], val, JS_EQ_STRICT)) { + JS_FreeValue(ctx, val); res = n; break; } + JS_FreeValue(ctx, val); } } } @@ -41905,10 +42528,12 @@ static JSValue js_array_lastIndexOf(JSContext *ctx, JSValueConst this_val, if (present < 0) goto exception; if (present) { - if (js_strict_eq2(ctx, JS_DupValue(ctx, argv[0]), val, JS_EQ_STRICT)) { + if (js_strict_eq2(ctx, argv[0], val, JS_EQ_STRICT)) { + JS_FreeValue(ctx, val); res = n; break; } + JS_FreeValue(ctx, val); } } } @@ -42295,17 +42920,10 @@ static JSValue js_array_toReversed(JSContext *ctx, JSValueConst this_val, } else { // Query order is observable; test262 expects descending order. for (; i >= 0; i--, pval++) { - if (-1 == JS_TryGetPropertyInt64(ctx, obj, i, pval)) { - // Exception; initialize remaining elements. - for (; i >= 0; i--, pval++) - *pval = JS_UNDEFINED; + if (-1 == JS_TryGetPropertyInt64(ctx, obj, i, pval)) goto exception; - } } } - - if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, len)) < 0) - goto exception; } ret = arr; @@ -42318,13 +42936,13 @@ static JSValue js_array_toReversed(JSContext *ctx, JSValueConst this_val, } static JSValue js_array_slice(JSContext *ctx, JSValueConst this_val, - int argc, JSValueConst *argv, int splice) + int argc, JSValueConst *argv) { - JSValue obj, arr, val, len_val; - int64_t len, start, k, final, n, count, del_count, new_len; + JSValue obj, arr, val, ctor; + int64_t len, start, k, final, n, count; int kPresent; JSValue *arrp; - uint32_t count32, i, item_count; + uint32_t count32; arr = JS_UNDEFINED; obj = JS_ToObject(ctx, this_val); @@ -42334,69 +42952,150 @@ static JSValue js_array_slice(JSContext *ctx, JSValueConst this_val, if (JS_ToInt64Clamp(ctx, &start, argv[0], 0, len, len)) goto exception; - if (splice) { - if (argc == 0) { - item_count = 0; - del_count = 0; - } else - if (argc == 1) { - item_count = 0; - del_count = len - start; - } else { - item_count = argc - 2; - if (JS_ToInt64Clamp(ctx, &del_count, argv[1], 0, len - start, 0)) - goto exception; - } - if (len + item_count - del_count > MAX_SAFE_INTEGER) { - JS_ThrowTypeError(ctx, "Array loo long"); + final = len; + if (!JS_IsUndefined(argv[1])) { + if (JS_ToInt64Clamp(ctx, &final, argv[1], 0, len, len)) goto exception; - } - count = del_count; - } else { - item_count = 0; /* avoid warning */ - final = len; - if (!JS_IsUndefined(argv[1])) { - if (JS_ToInt64Clamp(ctx, &final, argv[1], 0, len, len)) - goto exception; - } - count = max_int64(final - start, 0); } - len_val = JS_NewInt64(ctx, count); - arr = JS_ArraySpeciesCreate(ctx, obj, len_val); - JS_FreeValue(ctx, len_val); - if (JS_IsException(arr)) + count = max_int64(final - start, 0); + + ctor = JS_ArraySpeciesGetCtor(ctx, obj); + if (JS_IsException(ctor)) goto exception; - k = start; final = start + count; - n = 0; - /* The fast array test on arr ensures that - JS_CreateDataPropertyUint32() won't modify obj in case arr is - an exotic object */ - /* Special case fast arrays */ - if (js_get_fast_array(ctx, obj, &arrp, &count32) && - js_is_fast_array(ctx, arr)) { - /* XXX: should share code with fast array constructor */ - for (; k < final && k < count32; k++, n++) { - if (JS_CreateDataPropertyUint32(ctx, arr, n, JS_DupValue(ctx, arrp[k]), JS_PROP_THROW) < 0) + if (JS_IsUndefined(ctor) && + js_get_fast_array(ctx, obj, &arrp, &count32) && + final <= count32) { + /* fast case */ + arr = js_create_array(ctx, count, (JSValueConst *)arrp + start); + } else { + arr = JS_ArrayCreateFromCtor(ctx, ctor, count); + JS_FreeValue(ctx, ctor); + if (JS_IsException(arr)) + goto exception; + + n = 0; + for (k = start; k < final; k++, n++) { + kPresent = JS_TryGetPropertyInt64(ctx, obj, k, &val); + if (kPresent < 0) goto exception; + if (kPresent) { + if (JS_CreateDataPropertyUint32(ctx, arr, n, val, JS_PROP_THROW) < 0) + goto exception; + } } + if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, n)) < 0) + goto exception; } - /* Copy the remaining elements if any (handle case of inherited properties) */ - for (; k < final; k++, n++) { - kPresent = JS_TryGetPropertyInt64(ctx, obj, k, &val); - if (kPresent < 0) + JS_FreeValue(ctx, obj); + return arr; + + exception: + JS_FreeValue(ctx, obj); + JS_FreeValue(ctx, arr); + return JS_EXCEPTION; +} + +static JSValue js_array_splice(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + JSValue obj, arr, val, ctor; + int64_t len, start, k, final, n, del_count, new_len; + int kPresent; + uint32_t i, item_count; + JSObject *p; + + arr = JS_UNDEFINED; + obj = JS_ToObject(ctx, this_val); + if (js_get_length64(ctx, &len, obj)) + goto exception; + + if (JS_ToInt64Clamp(ctx, &start, argv[0], 0, len, len)) + goto exception; + + if (argc == 0) { + item_count = 0; + del_count = 0; + } else if (argc == 1) { + item_count = 0; + del_count = len - start; + } else { + item_count = argc - 2; + if (JS_ToInt64Clamp(ctx, &del_count, argv[1], 0, len - start, 0)) goto exception; - if (kPresent) { - if (JS_CreateDataPropertyUint32(ctx, arr, n, val, JS_PROP_THROW) < 0) - goto exception; - } } - if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, n)) < 0) + if (len + item_count - del_count > MAX_SAFE_INTEGER) { + JS_ThrowTypeError(ctx, "Array loo long"); + goto exception; + } + final = start + del_count; + /* warning: 'len' may be different from the actual array length + because it may have been modified */ + new_len = len + item_count - del_count; + + ctor = JS_ArraySpeciesGetCtor(ctx, obj); + if (JS_IsException(ctor)) goto exception; - if (splice) { - new_len = len + item_count - del_count; + p = JS_VALUE_GET_PTR(obj); + if (JS_IsUndefined(ctor) && + p->class_id == JS_CLASS_ARRAY && + p->fast_array && + final <= p->u.array.count && + (get_shape_prop(p->shape)->flags & JS_PROP_WRITABLE) && /* writable array length */ + can_extend_fast_array(p)) { + uint32_t count32 = p->u.array.count; + JSValue *arrp = p->u.array.u.values; + + /* fast case */ + arr = js_create_array(ctx, del_count, (JSValueConst *)arrp + start); + if (JS_IsException(arr)) + goto exception; + + if (item_count != del_count) { + /* resize */ + uint32_t new_count32; + new_count32 = count32 + item_count - del_count; + if (del_count > item_count) { + for(i = 0; i < del_count - item_count; i++) + JS_FreeValue(ctx, arrp[start + item_count + i]); + memmove(arrp + start + item_count, arrp + final, + (count32 - final) * sizeof(arrp[0])); + } else { + if (unlikely(new_count32 > p->u.array.u1.size)) { + if (expand_fast_array(ctx, p, new_count32)) + goto exception; + arrp = p->u.array.u.values; + } + memmove(arrp + start + item_count, arrp + final, + (count32 - final) * sizeof(arrp[0])); + for(i = 0; i < item_count - del_count; i++) + arrp[start + del_count + i] = JS_UNDEFINED; + } + p->u.array.count = new_count32; + } + for(i = 0; i < item_count; i++) + set_value(ctx, &arrp[start + i], JS_DupValue(ctx, argv[i + 2])); + } else { + arr = JS_ArrayCreateFromCtor(ctx, ctor, del_count); + JS_FreeValue(ctx, ctor); + if (JS_IsException(arr)) + goto exception; + + n = 0; + for (k = start; k < final; k++, n++) { + kPresent = JS_TryGetPropertyInt64(ctx, obj, k, &val); + if (kPresent < 0) + goto exception; + if (kPresent) { + if (JS_CreateDataPropertyUint32(ctx, arr, n, val, JS_PROP_THROW) < 0) + goto exception; + } + } + if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, n)) < 0) + goto exception; + if (item_count != del_count) { if (JS_CopySubArray(ctx, obj, start + item_count, start + del_count, len - (start + del_count), @@ -42412,9 +43111,9 @@ static JSValue js_array_slice(JSContext *ctx, JSValueConst this_val, if (JS_SetPropertyInt64(ctx, obj, start + i, JS_DupValue(ctx, argv[i + 2])) < 0) goto exception; } - if (JS_SetProperty(ctx, obj, JS_ATOM_length, JS_NewInt64(ctx, new_len)) < 0) - goto exception; } + if (JS_SetProperty(ctx, obj, JS_ATOM_length, JS_NewInt64(ctx, new_len)) < 0) + goto exception; JS_FreeValue(ctx, obj); return arr; @@ -42494,17 +43193,11 @@ static JSValue js_array_toSpliced(JSContext *ctx, JSValueConst this_val, assert(pval == last); - if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, newlen)) < 0) - goto exception; - done: ret = arr; arr = JS_UNDEFINED; exception: - while (pval != last) - *pval++ = JS_UNDEFINED; - JS_FreeValue(ctx, arr); JS_FreeValue(ctx, obj); return ret; @@ -42636,7 +43329,7 @@ static JSValue js_array_flatten(JSContext *ctx, JSValueConst this_val, goto exception; } } - arr = JS_ArraySpeciesCreate(ctx, obj, JS_NewInt32(ctx, 0)); + arr = JS_ArraySpeciesCreate(ctx, obj, 0); if (JS_IsException(arr)) goto exception; if (JS_FlattenIntoArray(ctx, arr, obj, sourceLen, 0, depthNum, @@ -42849,16 +43542,10 @@ static JSValue js_array_toSorted(JSContext *ctx, JSValueConst this_val, *pval = JS_DupValue(ctx, arrp[i]); } else { for (; i < len; i++, pval++) { - if (-1 == JS_TryGetPropertyInt64(ctx, obj, i, pval)) { - for (; i < len; i++, pval++) - *pval = JS_UNDEFINED; + if (-1 == JS_TryGetPropertyInt64(ctx, obj, i, pval)) goto exception; - } } } - - if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, len)) < 0) - goto exception; } ret = js_array_sort(ctx, arr, argc, argv); @@ -43979,6 +44666,7 @@ static JSValue js_iterator_helper_next(JSContext *ctx, JSValueConst this_val, args[1] = index_val; ret = JS_Call(ctx, it->func, JS_UNDEFINED, countof(args), args); JS_FreeValue(ctx, index_val); + JS_FreeValue(ctx, item); if (JS_IsException(ret)) goto fail; goto done; @@ -44104,8 +44792,8 @@ static const JSCFunctionListEntry js_array_proto_funcs[] = { JS_CFUNC_DEF("toReversed", 0, js_array_toReversed ), JS_CFUNC_DEF("sort", 1, js_array_sort ), JS_CFUNC_DEF("toSorted", 1, js_array_toSorted ), - JS_CFUNC_MAGIC_DEF("slice", 2, js_array_slice, 0 ), - JS_CFUNC_MAGIC_DEF("splice", 2, js_array_slice, 1 ), + JS_CFUNC_DEF("slice", 2, js_array_slice ), + JS_CFUNC_DEF("splice", 2, js_array_splice ), JS_CFUNC_DEF("toSpliced", 2, js_array_toSpliced ), JS_CFUNC_DEF("copyWithin", 2, js_array_copyWithin ), JS_CFUNC_MAGIC_DEF("flatMap", 1, js_array_flatten, 1 ), @@ -47336,9 +48024,10 @@ static JSValue js_regexp_escape(JSContext *ctx, JSValueConst this_val, JSValue str; StringBuffer b_s, *b = &b_s; JSString *p; - uint32_t c, i; + uint32_t c; char s[16]; - + int i, i0; + if (!JS_IsString(argv[0])) return JS_ThrowTypeError(ctx, "not a string"); str = JS_ToString(ctx, argv[0]); /* must call it to linearlize ropes */ @@ -47346,8 +48035,9 @@ static JSValue js_regexp_escape(JSContext *ctx, JSValueConst this_val, return JS_EXCEPTION; p = JS_VALUE_GET_STRING(str); string_buffer_init2(ctx, b, 0, p->is_wide_char); - for (i = 0; i < p->len; i++) { - c = string_get(p, i); + for (i = 0; i < p->len; ) { + i0 = i; + c = string_getc(p, &i); if (c < 33) { if (c >= 9 && c <= 13) { string_buffer_putc8(b, '\\'); @@ -47359,7 +48049,7 @@ static JSValue js_regexp_escape(JSContext *ctx, JSValueConst this_val, if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { - if (i == 0) + if (i0 == 0) goto hex2; } else if (strchr(",-=<>#&!%:;@~'`\"", c)) { goto hex2; @@ -47375,7 +48065,7 @@ static JSValue js_regexp_escape(JSContext *ctx, JSValueConst this_val, snprintf(s, sizeof(s), "\\u%04x", c); string_buffer_puts8(b, s); } else { - string_buffer_putc16(b, c); + string_buffer_putc(b, c); } } JS_FreeValue(ctx, str); @@ -48110,6 +48800,8 @@ static BOOL check_regexp_getter(JSContext *ctx, return FALSE; if ((prs->flags & JS_PROP_TMASK) != JS_PROP_GETSET) return FALSE; + if (!pr->u.getset.getter) + return FALSE; return JS_IsCFunction(ctx, JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.getter), func, magic); } @@ -48633,23 +49325,189 @@ static int json_parse_expect(JSParseState *s, int tok) return json_next_token(s); } -static JSValue json_parse_value(JSParseState *s) + +typedef struct { + int count; + uint32_t hash_size; + struct JSONParseRecordEntry *entries; + uint32_t *hash_table; +} JSONParseRecordObject; + +typedef struct JSONParseRecord { + JSValue value; + union { + JSONParseRecordObject obj; + struct { + int count; + struct JSONParseRecord *elements; + } array; + struct { + uint32_t source_pos; + uint32_t source_len; + } primitive; + } u; +} JSONParseRecord; + +typedef struct JSONParseRecordEntry { + JSAtom atom; + uint32_t hash_next; + JSONParseRecord parse_record; +} JSONParseRecordEntry; + +static void json_parse_record_init_obj(JSContext *ctx, JSONParseRecord *pr, JSValueConst val) +{ + pr->value = JS_DupValue(ctx, val); + pr->u.obj.count = 0; + pr->u.obj.entries = NULL; + pr->u.obj.hash_table = NULL; + pr->u.obj.hash_size = 0; +} + +static void json_parse_record_init_array(JSContext *ctx, JSONParseRecord *pr, JSValueConst val) +{ + pr->value = JS_DupValue(ctx, val); + pr->u.array.count = 0; + pr->u.array.elements = NULL; +} + +static void json_parse_record_init_primitive(JSContext *ctx, JSONParseRecord *pr, JSValueConst val, + uint32_t source_pos, uint32_t source_len) +{ + pr->value = JS_DupValue(ctx, val); + pr->u.primitive.source_pos = source_pos; + pr->u.primitive.source_len = source_len; +} + +static int json_parse_record_resize_hash(JSContext *ctx, JSONParseRecordObject *po, uint32_t new_hash_size) +{ + uint32_t i, h, *new_hash_table; + JSONParseRecordEntry *e; + + new_hash_table = js_malloc(ctx, sizeof(new_hash_table[0]) * new_hash_size); + if (!new_hash_table) + return -1; + js_free(ctx, po->hash_table); + po->hash_table = new_hash_table; + po->hash_size = new_hash_size; + + for(i = 0; i < po->hash_size; i++) { + po->hash_table[i] = -1; + } + for(i = 0; i < po->count; i++) { + e = &po->entries[i]; + h = e->atom & (po->hash_size - 1); + e->hash_next = po->hash_table[h]; + po->hash_table[h] = i; + } + return 0; +} + +static JSONParseRecord *json_parse_record_add(JSContext *ctx, JSONParseRecord *pr, JSAtom key, int *psize) +{ + JSONParseRecordObject *po = &pr->u.obj; + JSONParseRecordEntry *e; + JSONParseRecord *pr1; + uint32_t h; + + if (js_resize_array(ctx, (void **)&po->entries, sizeof(po->entries[0]), + psize, po->count + 1)) { + return NULL; + } + /* don't use a hash table when the number of entries is small */ + if (po->count >= 8 && (po->count + 1) > po->hash_size) { + int hash_bits = 32 - clz32(po->count); + if (json_parse_record_resize_hash(ctx, po, 1 << hash_bits)) + return NULL; + } + + e = &po->entries[po->count++]; + e->atom = JS_DupAtom(ctx, key); + pr1 = &e->parse_record; + pr1->value = JS_UNDEFINED; + if (po->hash_size != 0) { + h = key & (po->hash_size - 1); + e->hash_next = po->hash_table[h]; + po->hash_table[h] = po->count - 1; + } + return pr1; +} + +static JSONParseRecord *json_parse_record_find(JSONParseRecord *pr, JSAtom key) +{ + JSONParseRecordObject *po = &pr->u.obj; + JSONParseRecordEntry *e; + uint32_t h, i; + + if (po->hash_size == 0) { + for(i = 0; i < po->count; i++) { + if (po->entries[i].atom == key) + return &po->entries[i].parse_record; + } + } else { + h = key & (po->hash_size - 1); + i = po->hash_table[h]; + while (i != -1) { + e = &po->entries[i]; + if (e->atom == key) + return &e->parse_record; + i = e->hash_next; + } + } + return NULL; +} + +static void json_free_parse_record(JSContext *ctx, JSONParseRecord *pr) +{ + int i; + if (!pr) + return; + if (JS_IsObject(pr->value)) { + if (JS_IsArray(ctx, pr->value)) { + for(i = 0; i < pr->u.array.count; i++) { + json_free_parse_record(ctx, &pr->u.array.elements[i]); + } + js_free(ctx, pr->u.array.elements); + } else { + for(i = 0; i < pr->u.obj.count; i++) { + JS_FreeAtom(ctx, pr->u.obj.entries[i].atom); + json_free_parse_record(ctx, &pr->u.obj.entries[i].parse_record); + } + js_free(ctx, pr->u.obj.entries); + js_free(ctx, pr->u.obj.hash_table); + } + } + JS_FreeValue(ctx, pr->value); + pr->value = JS_UNDEFINED; /* fail safe */ +} + +/* 'pr' can be NULL */ +static JSValue json_parse_value(JSParseState *s, JSONParseRecord *pr) { JSContext *ctx = s->ctx; JSValue val = JS_NULL; int ret; + if (pr) { + pr->value = JS_UNDEFINED; + } + switch(s->token.val) { case '{': { JSValue prop_val; JSAtom prop_name; - + JSONParseRecord *pr1; + int pr_size; + if (json_next_token(s)) goto fail; val = JS_NewObject(ctx); if (JS_IsException(val)) goto fail; + if (pr) { + json_parse_record_init_obj(ctx, pr, val); + pr_size = 0; + } if (s->token.val != '}') { for(;;) { if (s->token.val == TOK_STRING) { @@ -48666,7 +49524,14 @@ static JSValue json_parse_value(JSParseState *s) goto fail1; if (json_parse_expect(s, ':')) goto fail1; - prop_val = json_parse_value(s); + if (pr) { + pr1 = json_parse_record_add(ctx, pr, prop_name, &pr_size); + if (!pr1) + goto fail1; + } else { + pr1 = NULL; + } + prop_val = json_parse_value(s, pr1); if (JS_IsException(prop_val)) { fail1: JS_FreeAtom(ctx, prop_name); @@ -48694,16 +49559,31 @@ static JSValue json_parse_value(JSParseState *s) { JSValue el; uint32_t idx; - + JSONParseRecord *pr1; + int pr_size; + if (json_next_token(s)) goto fail; val = JS_NewArray(ctx); if (JS_IsException(val)) goto fail; + if (pr) { + json_parse_record_init_array(ctx, pr, val); + pr_size = 0; + } if (s->token.val != ']') { idx = 0; for(;;) { - el = json_parse_value(s); + if (pr) { + if (js_resize_array(ctx, (void **)&pr->u.array.elements, sizeof(pr->u.array.elements[0]), + &pr_size, pr->u.array.count + 1)) + goto fail; + pr1 = &pr->u.array.elements[pr->u.array.count++]; + pr1->value = JS_UNDEFINED; + } else { + pr1 = NULL; + } + el = json_parse_value(s, pr1); if (JS_IsException(el)) goto fail; ret = JS_DefinePropertyValueUint32(ctx, val, idx, el, JS_PROP_C_W_E); @@ -48724,11 +49604,21 @@ static JSValue json_parse_value(JSParseState *s) break; case TOK_STRING: val = JS_DupValue(ctx, s->token.u.str.str); + if (pr) { + json_parse_record_init_primitive(ctx, pr, val, + s->token.ptr - s->buf_start, + s->buf_ptr - s->token.ptr); + } if (json_next_token(s)) goto fail; break; case TOK_NUMBER: val = s->token.u.num.val; + if (pr) { + json_parse_record_init_primitive(ctx, pr, val, + s->token.ptr - s->buf_start, + s->buf_ptr - s->token.ptr); + } if (json_next_token(s)) goto fail; break; @@ -48736,8 +49626,18 @@ static JSValue json_parse_value(JSParseState *s) if (s->token.u.ident.atom == JS_ATOM_false || s->token.u.ident.atom == JS_ATOM_true) { val = JS_NewBool(ctx, s->token.u.ident.atom == JS_ATOM_true); + if (pr) { + json_parse_record_init_primitive(ctx, pr, val, + s->token.ptr - s->buf_start, + s->buf_ptr - s->token.ptr); + } } else if (s->token.u.ident.atom == JS_ATOM_null) { val = JS_NULL; + if (pr) { + json_parse_record_init_primitive(ctx, pr, val, + s->token.ptr - s->buf_start, + s->buf_ptr - s->token.ptr); + } } else if (s->token.u.ident.atom == JS_ATOM_NaN && s->ext_json) { /* Note: json5 identifier handling is ambiguous e.g. is '{ NaN: 1 }' a valid JSON5 production ? */ @@ -48762,12 +49662,13 @@ static JSValue json_parse_value(JSParseState *s) } return val; fail: + json_free_parse_record(ctx, pr); JS_FreeValue(ctx, val); return JS_EXCEPTION; } -JSValue JS_ParseJSON2(JSContext *ctx, const char *buf, size_t buf_len, - const char *filename, int flags) +JSValue JS_ParseJSON3(JSContext *ctx, const char *buf, size_t buf_len, + const char *filename, int flags, JSONParseRecord *pr) { JSParseState s1, *s = &s1; JSValue val = JS_UNDEFINED; @@ -48776,12 +49677,14 @@ JSValue JS_ParseJSON2(JSContext *ctx, const char *buf, size_t buf_len, s->ext_json = ((flags & JS_PARSE_JSON_EXT) != 0); if (json_next_token(s)) goto fail; - val = json_parse_value(s); + val = json_parse_value(s, pr); if (JS_IsException(val)) goto fail; if (s->token.val != TOK_EOF) { - if (js_parse_error(s, "unexpected data at the end")) + if (js_parse_error(s, "unexpected data at the end")) { + json_free_parse_record(ctx, pr); goto fail; + } } return val; fail: @@ -48790,17 +49693,25 @@ JSValue JS_ParseJSON2(JSContext *ctx, const char *buf, size_t buf_len, return JS_EXCEPTION; } +JSValue JS_ParseJSON2(JSContext *ctx, const char *buf, size_t buf_len, + const char *filename, int flags) +{ + return JS_ParseJSON3(ctx, buf, buf_len, filename, flags, NULL); +} + JSValue JS_ParseJSON(JSContext *ctx, const char *buf, size_t buf_len, const char *filename) { - return JS_ParseJSON2(ctx, buf, buf_len, filename, 0); + return JS_ParseJSON3(ctx, buf, buf_len, filename, 0, NULL); } +/* if pr != NULL, then pr->value = holder by construction */ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder, - JSAtom name, JSValueConst reviver) + JSAtom name, JSValueConst reviver, + const char *text_str, JSONParseRecord *pr) { - JSValue val, new_el, name_val, res; - JSValueConst args[2]; + JSValue val, new_el, name_val, res, context; + JSValueConst args[3]; int ret, is_array; uint32_t i, len = 0; JSAtom prop; @@ -48813,6 +49724,29 @@ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder, val = JS_GetProperty(ctx, holder, name); if (JS_IsException(val)) return val; + + if (pr) { + if (JS_IsArray(ctx, pr->value)) { + if (__JS_AtomIsTaggedInt(name)) { + uint32_t idx = __JS_AtomToUInt32(name); + if (idx < pr->u.array.count) { + pr = &pr->u.array.elements[idx]; + } else { + pr = NULL; + } + } + } else { + pr = json_parse_record_find(pr, name); + } + if (pr && !js_same_value(ctx, pr->value, val)) { + pr = NULL; + } + } + + context = JS_NewObject(ctx); + if (JS_IsException(context)) + goto fail; + if (JS_IsObject(val)) { is_array = JS_IsArray(ctx, val); if (is_array < 0) @@ -48833,7 +49767,7 @@ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder, } else { prop = JS_DupAtom(ctx, atoms[i].atom); } - new_el = internalize_json_property(ctx, val, prop, reviver); + new_el = internalize_json_property(ctx, val, prop, reviver, text_str, pr); if (JS_IsException(new_el)) { JS_FreeAtom(ctx, prop); goto fail; @@ -48847,6 +49781,15 @@ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder, if (ret < 0) goto fail; } + } else { + if (pr) { + new_el = JS_NewStringLen(ctx, text_str + pr->u.primitive.source_pos, + pr->u.primitive.source_len); + if (JS_IsException(new_el)) + goto fail; + if (JS_DefinePropertyValue(ctx, context, JS_ATOM_source, new_el, JS_PROP_C_W_E) < 0) + goto fail; + } } JS_FreePropertyEnum(ctx, atoms, len); atoms = NULL; @@ -48855,12 +49798,15 @@ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder, goto fail; args[0] = name_val; args[1] = val; - res = JS_Call(ctx, reviver, holder, 2, args); + args[2] = context; + res = JS_Call(ctx, reviver, holder, 3, args); JS_FreeValue(ctx, name_val); JS_FreeValue(ctx, val); + JS_FreeValue(ctx, context); return res; fail: JS_FreePropertyEnum(ctx, atoms, len); + JS_FreeValue(ctx, context); JS_FreeValue(ctx, val); return JS_EXCEPTION; } @@ -48868,37 +49814,113 @@ static JSValue internalize_json_property(JSContext *ctx, JSValueConst holder, static JSValue js_json_parse(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { - JSValue obj, root; - JSValueConst reviver; + JSValue obj; const char *str; size_t len; - + str = JS_ToCStringLen(ctx, &len, argv[0]); if (!str) return JS_EXCEPTION; - obj = JS_ParseJSON(ctx, str, len, ""); - JS_FreeCString(ctx, str); - if (JS_IsException(obj)) - return obj; if (argc > 1 && JS_IsFunction(ctx, argv[1])) { + JSONParseRecord pr_s, *pr = &pr_s, *pr1; + JSValue root; + JSValueConst reviver; + int size; + reviver = argv[1]; root = JS_NewObject(ctx); - if (JS_IsException(root)) { - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } + if (JS_IsException(root)) + goto fail; + json_parse_record_init_obj(ctx, pr, root); + size = 0; + pr1 = json_parse_record_add(ctx, pr, JS_ATOM_empty_string, &size); + if (!pr1) + goto fail1; + + obj = JS_ParseJSON3(ctx, str, len, "", 0, pr1); + if (JS_IsException(obj)) + goto fail1; + if (JS_DefinePropertyValue(ctx, root, JS_ATOM_empty_string, obj, JS_PROP_C_W_E) < 0) { + JS_FreeValue(ctx, obj); + fail1: + json_free_parse_record(ctx, pr); JS_FreeValue(ctx, root); - return JS_EXCEPTION; + goto fail; } + obj = internalize_json_property(ctx, root, JS_ATOM_empty_string, - reviver); + reviver, str, pr); + json_free_parse_record(ctx, pr); JS_FreeValue(ctx, root); + } else { + obj = JS_ParseJSON3(ctx, str, len, "", 0, NULL); + } + JS_FreeCString(ctx, str); + return obj; + fail: + JS_FreeCString(ctx, str); + return JS_EXCEPTION; +} + +static JSValue js_json_isRawJSON(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + JSValueConst obj = argv[0]; + if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { + JSObject *p = JS_VALUE_GET_OBJ(obj); + return JS_NewBool(ctx, p->class_id == JS_CLASS_RAWJSON); + } else { + return JS_FALSE; + } +} + +static BOOL is_valid_raw_json_char(int c) +{ + return ((c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '-' || + c == '"'); +} + +static JSValue js_json_rawJSON(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + JSValue str, res, obj; + JSString *p; + str = JS_ToString(ctx, argv[0]); + if (JS_IsException(str)) + return str; + p = JS_VALUE_GET_STRING(str); + if (p->len == 0 || + !is_valid_raw_json_char(string_get(p, 0)) || + !is_valid_raw_json_char(string_get(p, p->len - 1))) { + goto syntax_error; + } + res = js_json_parse(ctx, JS_UNDEFINED, 1, (JSValueConst *)&str); + if (JS_IsException(res)) { + syntax_error: + JS_ThrowSyntaxError(ctx, "invalid rawJSON string"); + goto fail; } + JS_FreeValue(ctx, res); + + obj = JS_NewObjectProtoClass(ctx, JS_NULL, JS_CLASS_RAWJSON); + if (JS_IsException(obj)) + goto fail; + if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_rawJSON, str, JS_PROP_ENUMERABLE) < 0) { + JS_FreeValue(ctx, obj); + return JS_EXCEPTION; + } + JS_PreventExtensions(ctx, obj); return obj; + fail: + JS_FreeValue(ctx, str); + return JS_EXCEPTION; } + typedef struct JSONStringifyContext { JSValueConst replacer_func; JSValue stack; @@ -49068,11 +50090,18 @@ static int js_json_to_str(JSContext *ctx, JSONStringifyContext *jsc, if (JS_IsException(val)) goto exception; goto concat_primitive; - } else if (cl == JS_CLASS_BOOLEAN || cl == JS_CLASS_BIG_INT) - { + } else if (cl == JS_CLASS_BOOLEAN || cl == JS_CLASS_BIG_INT) { /* This will thow the same error as for the primitive object */ set_value(ctx, &val, JS_DupValue(ctx, p->u.object_data)); goto concat_primitive; + } else if (cl == JS_CLASS_RAWJSON) { + JSValue val1; + val1 = JS_GetProperty(ctx, val, JS_ATOM_rawJSON); + if (JS_IsException(val1)) + goto exception; + JS_FreeValue(ctx, val); + val = val1; + goto concat_value; } v = js_array_includes(ctx, jsc->stack, 1, (JSValueConst *)&val); if (JS_IsException(v)) @@ -49361,7 +50390,9 @@ static JSValue js_json_stringify(JSContext *ctx, JSValueConst this_val, } static const JSCFunctionListEntry js_json_funcs[] = { + JS_CFUNC_DEF("isRawJSON", 1, js_json_isRawJSON ), JS_CFUNC_DEF("parse", 2, js_json_parse ), + JS_CFUNC_DEF("rawJSON", 1, js_json_rawJSON ), JS_CFUNC_DEF("stringify", 3, js_json_stringify ), JS_PROP_STRING_DEF("[Symbol.toStringTag]", "JSON", JS_PROP_CONFIGURABLE ), }; @@ -50681,11 +51712,11 @@ static BOOL js_weakref_is_target(JSValueConst val) /* XXX: add a specific JSWeakRef value type ? */ static BOOL js_weakref_is_live(JSValueConst val) { - int *pref_count; + void *p; if (JS_IsUndefined(val)) return TRUE; - pref_count = JS_VALUE_GET_PTR(val); - return (*pref_count != 0); + p = JS_VALUE_GET_PTR(val); + return (js_rc(p)->ref_count != 0); } /* 'val' can be JS_UNDEFINED */ @@ -50698,15 +51729,15 @@ static void js_weakref_free(JSRuntime *rt, JSValue val) /* 'mark' is tested to avoid freeing the object structure when it is about to be freed in a cycle or in free_zero_refcount() */ - if (p->weakref_count == 0 && p->header.ref_count == 0 && - p->header.mark == 0) { + if (p->weakref_count == 0 && js_rc(p)->ref_count == 0 && + js_rc(p)->mark == 0) { js_free_rt(rt, p); } } else if (JS_VALUE_GET_TAG(val) == JS_TAG_SYMBOL) { JSString *p = JS_VALUE_GET_STRING(val); assert(p->hash >= 1); p->hash--; - if (p->hash == 0 && p->header.ref_count == 0) { + if (p->hash == 0 && js_rc(p)->ref_count == 0) { /* can remove the dummy structure */ js_free_rt(rt, p); } @@ -55040,7 +56071,7 @@ static JSValue js_date_toJSON(JSContext *ctx, JSValueConst this_val, goto done; } } - method = JS_GetPropertyStr(ctx, obj, "toISOString"); + method = JS_GetProperty(ctx, obj, JS_ATOM_toISOString); if (JS_IsException(method)) goto exception; if (!JS_IsFunction(ctx, method)) { @@ -56091,6 +57122,7 @@ static JSValue js_array_buffer_transfer(JSContext *ctx, { JSArrayBuffer *abuf; uint64_t new_len, *pmax_len, max_len; + JSValue res; abuf = JS_GetOpaque2(ctx, this_val, JS_CLASS_ARRAY_BUFFER); if (!abuf) @@ -56114,18 +57146,17 @@ static JSValue js_array_buffer_transfer(JSContext *ctx, pmax_len = &max_len; } } + /* create an empty AB */ if (new_len == 0) { + res = js_array_buffer_constructor2(ctx, JS_UNDEFINED, 0, pmax_len, JS_CLASS_ARRAY_BUFFER); + if (JS_IsException(res)) + return res; JS_DetachArrayBuffer(ctx, this_val); - return js_array_buffer_constructor2(ctx, JS_UNDEFINED, 0, pmax_len, JS_CLASS_ARRAY_BUFFER); } else { uint64_t old_len; - uint8_t *bs, *new_bs; - JSFreeArrayBufferDataFunc *free_func; - bs = abuf->data; old_len = abuf->byte_length; - free_func = abuf->free_func; /* if length mismatch, realloc. Otherwise, use the same backing buffer. */ if (new_len != old_len) { @@ -56133,35 +57164,53 @@ static JSValue js_array_buffer_transfer(JSContext *ctx, if (new_len > INT32_MAX) return JS_ThrowRangeError(ctx, "invalid array buffer length"); - if (free_func != js_array_buffer_free) { + if (abuf->free_func != js_array_buffer_free) { + JSArrayBuffer *new_abuf; /* cannot use js_realloc() because the buffer was allocated with a custom allocator */ - new_bs = js_mallocz(ctx, new_len); - if (!new_bs) - return JS_EXCEPTION; - memcpy(new_bs, bs, min_int(old_len, new_len)); - abuf->free_func(ctx->rt, abuf->opaque, bs); - bs = new_bs; - free_func = js_array_buffer_free; + res = js_array_buffer_constructor2(ctx, JS_UNDEFINED, new_len, pmax_len, JS_CLASS_ARRAY_BUFFER); + if (JS_IsException(res)) + return res; + new_abuf = JS_GetOpaque2(ctx, res, JS_CLASS_ARRAY_BUFFER); + memcpy(new_abuf->data, abuf->data, min_int(old_len, new_len)); + abuf->free_func(ctx->rt, abuf->opaque, abuf->data); } else { - new_bs = js_realloc(ctx, bs, new_len); - if (!new_bs) + JSArrayBuffer *new_abuf; + uint8_t *new_bs; + /* reallocate the buffer after the new array buffer is + created in case the new array buffer creation + fails. */ + res = js_array_buffer_constructor2(ctx, JS_UNDEFINED, 0, pmax_len, JS_CLASS_ARRAY_BUFFER); + if (JS_IsException(res)) + return res; + new_bs = js_realloc(ctx, abuf->data, new_len); + if (!new_bs) { + JS_FreeValue(ctx, res); return JS_EXCEPTION; - bs = new_bs; + } if (new_len > old_len) - memset(bs + old_len, 0, new_len - old_len); + memset(new_bs + old_len, 0, new_len - old_len); + new_abuf = JS_GetOpaque2(ctx, res, JS_CLASS_ARRAY_BUFFER); + js_free(ctx, new_abuf->data); + new_abuf->data = new_bs; + new_abuf->byte_length = new_len; } + } else { + /* can keep the custom free function */ + res = js_array_buffer_constructor3(ctx, JS_UNDEFINED, new_len, pmax_len, + JS_CLASS_ARRAY_BUFFER, + abuf->data, abuf->free_func, + abuf->opaque, FALSE); + if (JS_IsException(res)) + return res; } /* neuter the backing buffer */ abuf->data = NULL; abuf->byte_length = 0; abuf->detached = TRUE; js_array_buffer_update_typed_arrays(abuf); - return js_array_buffer_constructor3(ctx, JS_UNDEFINED, new_len, pmax_len, - JS_CLASS_ARRAY_BUFFER, - bs, free_func, - NULL, FALSE); } + return res; } static JSValue js_array_buffer_resize(JSContext *ctx, JSValueConst this_val, @@ -56623,6 +57672,8 @@ static JSValue js_typed_array_with(JSContext *ctx, JSValueConst this_val, if (typed_array_is_oob(p) || idx < 0 || idx >= p->u.array.count) return JS_ThrowRangeError(ctx, "invalid array index"); + /* warning: 'this_val' may have been resized, so 'len' may be + larger than its length */ arr = js_typed_array_constructor_ta(ctx, JS_UNDEFINED, this_val, p->class_id, len); if (JS_IsException(arr)) { @@ -57699,7 +58750,7 @@ static JSValue js_TA_get_float64(JSContext *ctx, const void *a) { struct TA_sort_context { JSContext *ctx; int exception; /* 1 = exception, 2 = detached typed array */ - JSValueConst arr; + uint8_t *array; JSValueConst cmp; JSValue (*getfun)(JSContext *ctx, const void *a); int elt_size; @@ -57712,7 +58763,6 @@ static int js_TA_cmp_generic(const void *a, const void *b, void *opaque) { JSValueConst argv[2]; JSValue res; int cmp; - JSObject *p; cmp = 0; if (!psc->exception) { @@ -57720,15 +58770,9 @@ static int js_TA_cmp_generic(const void *a, const void *b, void *opaque) { error */ a_idx = *(uint32_t *)a; b_idx = *(uint32_t *)b; - p = JS_VALUE_GET_PTR(psc->arr); - if (a_idx >= p->u.array.count || b_idx >= p->u.array.count) { - /* OOB case */ - psc->exception = 2; - return 0; - } - argv[0] = psc->getfun(ctx, p->u.array.u.uint8_ptr + + argv[0] = psc->getfun(ctx, psc->array + a_idx * (size_t)psc->elt_size); - argv[1] = psc->getfun(ctx, p->u.array.u.uint8_ptr + + argv[1] = psc->getfun(ctx, psc->array + b_idx * (size_t)(psc->elt_size)); res = JS_Call(ctx, psc->cmp, JS_UNDEFINED, 2, argv); if (JS_IsException(res)) { @@ -57769,7 +58813,6 @@ static JSValue js_typed_array_sort(JSContext *ctx, JSValueConst this_val, tsc.ctx = ctx; tsc.exception = 0; - tsc.arr = this_val; tsc.cmp = argv[0]; if (!JS_IsUndefined(tsc.cmp) && check_function(ctx, tsc.cmp)) @@ -57832,65 +58875,69 @@ static JSValue js_typed_array_sort(JSContext *ctx, JSValueConst this_val, elt_size = 1 << typed_array_size_log2(p->class_id); if (!JS_IsUndefined(tsc.cmp)) { uint32_t *array_idx; - void *array_tmp; + void *array; size_t i, j; - /* XXX: a stable sort would use less memory */ + /* the array must be copied because the comparison + function may modify it */ + array = js_malloc(ctx, len * elt_size); + if (!array) + return JS_EXCEPTION; + memcpy(array, p->u.array.u.ptr, len * elt_size); + + /* array_idx is needed to have a stable sort */ array_idx = js_malloc(ctx, len * sizeof(array_idx[0])); - if (!array_idx) + if (!array_idx) { + js_free(ctx, array); return JS_EXCEPTION; + } for(i = 0; i < len; i++) array_idx[i] = i; tsc.elt_size = elt_size; + tsc.array = array; rqsort(array_idx, len, sizeof(array_idx[0]), js_TA_cmp_generic, &tsc); if (tsc.exception) { - if (tsc.exception == 1) - goto fail; + if (tsc.exception == 1) { + js_free(ctx, array_idx); + js_free(ctx, array); + return JS_EXCEPTION; + } /* detached typed array during the sort: no error */ } else { void *array_ptr = p->u.array.u.ptr; len = min_int(len, p->u.array.count); - if (len != 0) { - array_tmp = js_malloc(ctx, len * elt_size); - if (!array_tmp) { - fail: - js_free(ctx, array_idx); - return JS_EXCEPTION; + switch(elt_size) { + case 1: + for(i = 0; i < len; i++) { + j = array_idx[i]; + ((uint8_t *)array_ptr)[i] = ((uint8_t *)array)[j]; } - memcpy(array_tmp, array_ptr, len * elt_size); - switch(elt_size) { - case 1: - for(i = 0; i < len; i++) { - j = array_idx[i]; - ((uint8_t *)array_ptr)[i] = ((uint8_t *)array_tmp)[j]; - } - break; - case 2: - for(i = 0; i < len; i++) { - j = array_idx[i]; - ((uint16_t *)array_ptr)[i] = ((uint16_t *)array_tmp)[j]; - } - break; - case 4: - for(i = 0; i < len; i++) { - j = array_idx[i]; - ((uint32_t *)array_ptr)[i] = ((uint32_t *)array_tmp)[j]; - } - break; - case 8: - for(i = 0; i < len; i++) { - j = array_idx[i]; - ((uint64_t *)array_ptr)[i] = ((uint64_t *)array_tmp)[j]; - } - break; - default: - abort(); + break; + case 2: + for(i = 0; i < len; i++) { + j = array_idx[i]; + ((uint16_t *)array_ptr)[i] = ((uint16_t *)array)[j]; + } + break; + case 4: + for(i = 0; i < len; i++) { + j = array_idx[i]; + ((uint32_t *)array_ptr)[i] = ((uint32_t *)array)[j]; } - js_free(ctx, array_tmp); + break; + case 8: + for(i = 0; i < len; i++) { + j = array_idx[i]; + ((uint64_t *)array_ptr)[i] = ((uint64_t *)array)[j]; + } + break; + default: + abort(); } } js_free(ctx, array_idx); + js_free(ctx, array); } else { rqsort(p->u.array.u.ptr, len, elt_size, cmpfun, &tsc); if (tsc.exception) @@ -57918,6 +58965,797 @@ static JSValue js_typed_array_toSorted(JSContext *ctx, JSValueConst this_val, return ret; } +/* Uint8Array base64/hex (tc39 proposal-arraybuffer-base64) */ + +enum { + B64_ALPHABET_BASE64 = 0, + B64_ALPHABET_BASE64URL = 1, +}; + +enum { + B64_LAST_LOOSE = 0, + B64_LAST_STRICT = 1, + B64_LAST_STOP_BEFORE_PARTIAL = 2, +}; + +static const unsigned char b64_enc[64] = { + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X','Y','Z', + 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', + 'q','r','s','t','u','v','w','x','y','z', + '0','1','2','3','4','5','6','7','8','9', + '+','/' +}; + +static const unsigned char b64url_enc[64] = { + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X','Y','Z', + 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', + 'q','r','s','t','u','v','w','x','y','z', + '0','1','2','3','4','5','6','7','8','9', + '-','_' +}; + +#define K_WS 64 +#define K_ER 65 + +static const uint8_t b64_dec[256] = { + [ 0]=K_ER, [ 1]=K_ER, [ 2]=K_ER, [ 3]=K_ER, [ 4]=K_ER, [ 5]=K_ER, [ 6]=K_ER, [ 7]=K_ER, + [ 8]=K_ER, [ 9]=K_WS, [ 10]=K_WS, [ 11]=K_ER, [ 12]=K_WS, [ 13]=K_WS, [ 14]=K_ER, [ 15]=K_ER, + [ 16]=K_ER, [ 17]=K_ER, [ 18]=K_ER, [ 19]=K_ER, [ 20]=K_ER, [ 21]=K_ER, [ 22]=K_ER, [ 23]=K_ER, + [ 24]=K_ER, [ 25]=K_ER, [ 26]=K_ER, [ 27]=K_ER, [ 28]=K_ER, [ 29]=K_ER, [ 30]=K_ER, [ 31]=K_ER, + [' ']=K_WS, ['!']=K_ER, ['"']=K_ER, ['#']=K_ER, ['$']=K_ER, ['%']=K_ER, ['&']=K_ER, [ 39]=K_ER, + ['(']=K_ER, [')']=K_ER, ['*']=K_ER, ['+']= 62, [',']=K_ER, ['-']=K_ER, ['.']=K_ER, ['/']= 63, + ['0']= 52, ['1']= 53, ['2']= 54, ['3']= 55, ['4']= 56, ['5']= 57, ['6']= 58, ['7']= 59, + ['8']= 60, ['9']= 61, [':']=K_ER, [';']=K_ER, ['<']=K_ER, ['=']=K_ER, ['>']=K_ER, ['?']=K_ER, + ['@']=K_ER, ['A']= 0, ['B']= 1, ['C']= 2, ['D']= 3, ['E']= 4, ['F']= 5, ['G']= 6, + ['H']= 7, ['I']= 8, ['J']= 9, ['K']= 10, ['L']= 11, ['M']= 12, ['N']= 13, ['O']= 14, + ['P']= 15, ['Q']= 16, ['R']= 17, ['S']= 18, ['T']= 19, ['U']= 20, ['V']= 21, ['W']= 22, + ['X']= 23, ['Y']= 24, ['Z']= 25, ['[']=K_ER, [ 92]=K_ER, [']']=K_ER, ['^']=K_ER, ['_']=K_ER, + ['`']=K_ER, ['a']= 26, ['b']= 27, ['c']= 28, ['d']= 29, ['e']= 30, ['f']= 31, ['g']= 32, + ['h']= 33, ['i']= 34, ['j']= 35, ['k']= 36, ['l']= 37, ['m']= 38, ['n']= 39, ['o']= 40, + ['p']= 41, ['q']= 42, ['r']= 43, ['s']= 44, ['t']= 45, ['u']= 46, ['v']= 47, ['w']= 48, + ['x']= 49, ['y']= 50, ['z']= 51, ['{']=K_ER, ['|']=K_ER, ['}']=K_ER, ['~']=K_ER, [127]=K_ER, + [128]=K_ER, [129]=K_ER, [130]=K_ER, [131]=K_ER, [132]=K_ER, [133]=K_ER, [134]=K_ER, [135]=K_ER, + [136]=K_ER, [137]=K_ER, [138]=K_ER, [139]=K_ER, [140]=K_ER, [141]=K_ER, [142]=K_ER, [143]=K_ER, + [144]=K_ER, [145]=K_ER, [146]=K_ER, [147]=K_ER, [148]=K_ER, [149]=K_ER, [150]=K_ER, [151]=K_ER, + [152]=K_ER, [153]=K_ER, [154]=K_ER, [155]=K_ER, [156]=K_ER, [157]=K_ER, [158]=K_ER, [159]=K_ER, + [160]=K_ER, [161]=K_ER, [162]=K_ER, [163]=K_ER, [164]=K_ER, [165]=K_ER, [166]=K_ER, [167]=K_ER, + [168]=K_ER, [169]=K_ER, [170]=K_ER, [171]=K_ER, [172]=K_ER, [173]=K_ER, [174]=K_ER, [175]=K_ER, + [176]=K_ER, [177]=K_ER, [178]=K_ER, [179]=K_ER, [180]=K_ER, [181]=K_ER, [182]=K_ER, [183]=K_ER, + [184]=K_ER, [185]=K_ER, [186]=K_ER, [187]=K_ER, [188]=K_ER, [189]=K_ER, [190]=K_ER, [191]=K_ER, + [192]=K_ER, [193]=K_ER, [194]=K_ER, [195]=K_ER, [196]=K_ER, [197]=K_ER, [198]=K_ER, [199]=K_ER, + [200]=K_ER, [201]=K_ER, [202]=K_ER, [203]=K_ER, [204]=K_ER, [205]=K_ER, [206]=K_ER, [207]=K_ER, + [208]=K_ER, [209]=K_ER, [210]=K_ER, [211]=K_ER, [212]=K_ER, [213]=K_ER, [214]=K_ER, [215]=K_ER, + [216]=K_ER, [217]=K_ER, [218]=K_ER, [219]=K_ER, [220]=K_ER, [221]=K_ER, [222]=K_ER, [223]=K_ER, + [224]=K_ER, [225]=K_ER, [226]=K_ER, [227]=K_ER, [228]=K_ER, [229]=K_ER, [230]=K_ER, [231]=K_ER, + [232]=K_ER, [233]=K_ER, [234]=K_ER, [235]=K_ER, [236]=K_ER, [237]=K_ER, [238]=K_ER, [239]=K_ER, + [240]=K_ER, [241]=K_ER, [242]=K_ER, [243]=K_ER, [244]=K_ER, [245]=K_ER, [246]=K_ER, [247]=K_ER, + [248]=K_ER, [249]=K_ER, [250]=K_ER, [251]=K_ER, [252]=K_ER, [253]=K_ER, [254]=K_ER, [255]=K_ER, +}; + +static const uint8_t b64url_dec[256] = { + [ 0]=K_ER, [ 1]=K_ER, [ 2]=K_ER, [ 3]=K_ER, [ 4]=K_ER, [ 5]=K_ER, [ 6]=K_ER, [ 7]=K_ER, + [ 8]=K_ER, [ 9]=K_WS, [ 10]=K_WS, [ 11]=K_ER, [ 12]=K_WS, [ 13]=K_WS, [ 14]=K_ER, [ 15]=K_ER, + [ 16]=K_ER, [ 17]=K_ER, [ 18]=K_ER, [ 19]=K_ER, [ 20]=K_ER, [ 21]=K_ER, [ 22]=K_ER, [ 23]=K_ER, + [ 24]=K_ER, [ 25]=K_ER, [ 26]=K_ER, [ 27]=K_ER, [ 28]=K_ER, [ 29]=K_ER, [ 30]=K_ER, [ 31]=K_ER, + [' ']=K_WS, ['!']=K_ER, ['"']=K_ER, ['#']=K_ER, ['$']=K_ER, ['%']=K_ER, ['&']=K_ER, [ 39]=K_ER, + ['(']=K_ER, [')']=K_ER, ['*']=K_ER, ['+']=K_ER, [',']=K_ER, ['-']= 62, ['.']=K_ER, ['/']=K_ER, + ['0']= 52, ['1']= 53, ['2']= 54, ['3']= 55, ['4']= 56, ['5']= 57, ['6']= 58, ['7']= 59, + ['8']= 60, ['9']= 61, [':']=K_ER, [';']=K_ER, ['<']=K_ER, ['=']=K_ER, ['>']=K_ER, ['?']=K_ER, + ['@']=K_ER, ['A']= 0, ['B']= 1, ['C']= 2, ['D']= 3, ['E']= 4, ['F']= 5, ['G']= 6, + ['H']= 7, ['I']= 8, ['J']= 9, ['K']= 10, ['L']= 11, ['M']= 12, ['N']= 13, ['O']= 14, + ['P']= 15, ['Q']= 16, ['R']= 17, ['S']= 18, ['T']= 19, ['U']= 20, ['V']= 21, ['W']= 22, + ['X']= 23, ['Y']= 24, ['Z']= 25, ['[']=K_ER, [ 92]=K_ER, [']']=K_ER, ['^']=K_ER, ['_']= 63, + ['`']=K_ER, ['a']= 26, ['b']= 27, ['c']= 28, ['d']= 29, ['e']= 30, ['f']= 31, ['g']= 32, + ['h']= 33, ['i']= 34, ['j']= 35, ['k']= 36, ['l']= 37, ['m']= 38, ['n']= 39, ['o']= 40, + ['p']= 41, ['q']= 42, ['r']= 43, ['s']= 44, ['t']= 45, ['u']= 46, ['v']= 47, ['w']= 48, + ['x']= 49, ['y']= 50, ['z']= 51, ['{']=K_ER, ['|']=K_ER, ['}']=K_ER, ['~']=K_ER, [127]=K_ER, + [128]=K_ER, [129]=K_ER, [130]=K_ER, [131]=K_ER, [132]=K_ER, [133]=K_ER, [134]=K_ER, [135]=K_ER, + [136]=K_ER, [137]=K_ER, [138]=K_ER, [139]=K_ER, [140]=K_ER, [141]=K_ER, [142]=K_ER, [143]=K_ER, + [144]=K_ER, [145]=K_ER, [146]=K_ER, [147]=K_ER, [148]=K_ER, [149]=K_ER, [150]=K_ER, [151]=K_ER, + [152]=K_ER, [153]=K_ER, [154]=K_ER, [155]=K_ER, [156]=K_ER, [157]=K_ER, [158]=K_ER, [159]=K_ER, + [160]=K_ER, [161]=K_ER, [162]=K_ER, [163]=K_ER, [164]=K_ER, [165]=K_ER, [166]=K_ER, [167]=K_ER, + [168]=K_ER, [169]=K_ER, [170]=K_ER, [171]=K_ER, [172]=K_ER, [173]=K_ER, [174]=K_ER, [175]=K_ER, + [176]=K_ER, [177]=K_ER, [178]=K_ER, [179]=K_ER, [180]=K_ER, [181]=K_ER, [182]=K_ER, [183]=K_ER, + [184]=K_ER, [185]=K_ER, [186]=K_ER, [187]=K_ER, [188]=K_ER, [189]=K_ER, [190]=K_ER, [191]=K_ER, + [192]=K_ER, [193]=K_ER, [194]=K_ER, [195]=K_ER, [196]=K_ER, [197]=K_ER, [198]=K_ER, [199]=K_ER, + [200]=K_ER, [201]=K_ER, [202]=K_ER, [203]=K_ER, [204]=K_ER, [205]=K_ER, [206]=K_ER, [207]=K_ER, + [208]=K_ER, [209]=K_ER, [210]=K_ER, [211]=K_ER, [212]=K_ER, [213]=K_ER, [214]=K_ER, [215]=K_ER, + [216]=K_ER, [217]=K_ER, [218]=K_ER, [219]=K_ER, [220]=K_ER, [221]=K_ER, [222]=K_ER, [223]=K_ER, + [224]=K_ER, [225]=K_ER, [226]=K_ER, [227]=K_ER, [228]=K_ER, [229]=K_ER, [230]=K_ER, [231]=K_ER, + [232]=K_ER, [233]=K_ER, [234]=K_ER, [235]=K_ER, [236]=K_ER, [237]=K_ER, [238]=K_ER, [239]=K_ER, + [240]=K_ER, [241]=K_ER, [242]=K_ER, [243]=K_ER, [244]=K_ER, [245]=K_ER, [246]=K_ER, [247]=K_ER, + [248]=K_ER, [249]=K_ER, [250]=K_ER, [251]=K_ER, [252]=K_ER, [253]=K_ER, [254]=K_ER, [255]=K_ER, +}; + +static size_t b64_encode(const uint8_t *src, size_t len, char *dst, + const unsigned char *alpha) +{ + size_t i, j; + + for (i = 0, j = 0; i + 3 <= len; i += 3, j += 4) { + uint32_t v = 65536*src[i] + 256*src[i + 1] + src[i + 2]; + dst[j + 0] = alpha[(v >> 18) & 63]; + dst[j + 1] = alpha[(v >> 12) & 63]; + dst[j + 2] = alpha[(v >> 6) & 63]; + dst[j + 3] = alpha[v & 63]; + } + + size_t rem = len - i; + if (rem == 1) { + uint32_t v = 65536*src[i]; + dst[j++] = alpha[(v >> 18) & 63]; + dst[j++] = alpha[(v >> 12) & 63]; + dst[j++] = '='; + dst[j++] = '='; + } else if (rem == 2) { + uint32_t v = 65536*src[i] + 256*src[i + 1]; + dst[j++] = alpha[(v >> 18) & 63]; + dst[j++] = alpha[(v >> 12) & 63]; + dst[j++] = alpha[(v >> 6) & 63]; + dst[j++] = '='; + } + return j; +} + +static size_t b64_skip_ws(const char *src, size_t len, size_t index, + const uint8_t *dec_table) +{ + while (index < len && dec_table[(unsigned char)src[index]] == K_WS) + index++; + return index; +} + +/* Implements the FromBase64 abstract operation. + src/src_len: the input string (must be ASCII/latin1) + dst/max_len: output buffer + flags: b64_flags or b64_flags_url (selects valid characters) + last_chunk: B64_LAST_LOOSE, B64_LAST_STRICT, or B64_LAST_STOP_BEFORE_PARTIAL + *p_read: set to number of input characters consumed + *p_err: set to 1 on error, 0 on success + Returns: number of bytes written to dst */ +static size_t from_base64(const char *src, size_t src_len, + uint8_t *dst, size_t max_len, + const uint8_t *dec_table, int last_chunk, + size_t *p_read, int *p_err) +{ + size_t read = 0, written = 0; + uint32_t v, acc = 0; + int seen = 0; + size_t index = 0; + uint8_t ch; + + *p_err = 0; + + if (max_len == 0) { + *p_read = 0; + return 0; + } + + for (;;) { + if (seen == 0) { + /* Fast path: decode complete groups of 4 valid characters. + Breaks out on whitespace, padding, invalid chars, or capacity. */ + while (index + 4 <= src_len && written + 3 <= max_len) { + uint32_t v0, v1, v2, v3; + v0 = dec_table[(unsigned char)src[index]]; + v1 = dec_table[(unsigned char)src[index + 1]]; + v2 = dec_table[(unsigned char)src[index + 2]]; + v3 = dec_table[(unsigned char)src[index + 3]]; + if ((v0 | v1 | v2 | v3) >= 64) + break; + v = (v0 << 18) | (v1 << 12) | (v2 << 6) | v3; + dst[written] = (uint8_t)(v >> 16); + dst[written + 1] = (uint8_t)(v >> 8); + dst[written + 2] = (uint8_t)(v); + written += 3; + index += 4; + } + read = index; + + if (written >= max_len) { + *p_read = read; + return written; + } + } + + /* Slow path: handle whitespace, padding, partial groups, capacity. */ + index = b64_skip_ws(src, src_len, index, dec_table); + + if (index == src_len) { + if (seen > 0) { + if (last_chunk == B64_LAST_STOP_BEFORE_PARTIAL) { + *p_read = read; + return written; + } + if (last_chunk == B64_LAST_STRICT) { + *p_err = 1; + return 0; + } + /* loose */ + if (seen == 1) { + *p_err = 1; + return 0; + } + break; + } + *p_read = src_len; + return written; + } + + ch = src[index++]; + + if (ch == '=') { + if (seen < 2) { + *p_err = 1; + return 0; + } + index = b64_skip_ws(src, src_len, index, dec_table); + if (seen == 2) { + if (index == src_len) { + if (last_chunk == B64_LAST_STOP_BEFORE_PARTIAL) { + *p_read = read; + return written; + } + *p_err = 1; + return 0; + } + if (src[index] == '=') { + index++; + index = b64_skip_ws(src, src_len, index, dec_table); + } else { + *p_err = 1; + return 0; + } + } + /* After padding, only whitespace is allowed */ + if (index != src_len) { + *p_err = 1; + return 0; + } + if (last_chunk == B64_LAST_STRICT) { + uint32_t mask = (seen == 2) ? 0xF : 0x3; + if (acc & mask) { + *p_err = 1; + return 0; + } + } + break; + } + + v = dec_table[ch]; + if (v >= 64) { + *p_err = 1; + return 0; + } + + /* Check remaining capacity before committing to this group */ + { + size_t remaining = max_len - written; + if ((remaining == 1 && seen == 2) || + (remaining == 2 && seen == 3)) { + *p_read = read; + return written; + } + } + + acc = (acc << 6) | v; + seen++; + + if (seen == 4) { + dst[written] = (uint8_t)(acc >> 16); + dst[written + 1] = (uint8_t)(acc >> 8); + dst[written + 2] = (uint8_t)(acc); + written += 3; + acc = 0; + seen = 0; + read = index; + if (written >= max_len) { + *p_read = read; + return written; + } + } + } + + if (seen == 2) { + dst[written++] = (uint8_t)(acc >> 4); + } else if (seen == 3) { + dst[written] = (uint8_t)(acc >> 10); + dst[written + 1] = (uint8_t)(acc >> 2); + written += 2; + } + *p_read = src_len; + return written; +} + +/* Hex helpers */ +static const char u8a_hex_digits[] = "0123456789abcdef"; + +static size_t u8a_hex_encode(const uint8_t *src, size_t len, char *dst) +{ + for (size_t i = 0; i < len; i++) { + dst[i * 2] = u8a_hex_digits[src[i] >> 4]; + dst[i * 2 + 1] = u8a_hex_digits[src[i] & 0xF]; + } + return len * 2; +} + +/* Decode hex string to bytes. + Returns bytes written. Sets *p_read to chars consumed, *p_err on error. */ +static size_t u8a_hex_decode(const char *src, size_t src_len, + uint8_t *dst, size_t max_len, + size_t *p_read, int *p_err) +{ + size_t written = 0, i = 0; + *p_err = 0; + + if (src_len & 1) { + *p_err = 1; + return 0; + } + + while (i < src_len && written < max_len) { + int hi = from_hex(src[i]); + int lo = from_hex(src[i + 1]); + if (hi < 0 || lo < 0) { + *p_err = 1; + return 0; + } + dst[written++] = (uint8_t)((hi << 4) | lo); + i += 2; + } + + *p_read = i; + return written; +} + +static JSValue JS_NewUint8ArrayCopy(JSContext *ctx, const uint8_t *buf, size_t len) +{ + JSValue buffer, obj; + JSArrayBuffer *abuf; + + buffer = js_array_buffer_constructor3(ctx, JS_UNDEFINED, len, NULL, + JS_CLASS_ARRAY_BUFFER, + (uint8_t *)buf, + js_array_buffer_free, NULL, + TRUE); + if (JS_IsException(buffer)) + return JS_EXCEPTION; + obj = js_create_from_ctor(ctx, JS_UNDEFINED, JS_CLASS_UINT8_ARRAY); + if (JS_IsException(obj)) { + JS_FreeValue(ctx, buffer); + return JS_EXCEPTION; + } + abuf = js_get_array_buffer(ctx, buffer); + assert(abuf != NULL); + if (typed_array_init(ctx, obj, buffer, 0, abuf->byte_length, /*track_rab*/FALSE)) { + // 'buffer' is freed on error above. + JS_FreeValue(ctx, obj); + return JS_EXCEPTION; + } + return obj; +} + +/* Validate that this_val is a Uint8Array (type check only, no detach check). + Returns the JSObject pointer or NULL on error (throws). */ +static JSObject *check_uint8array(JSContext *ctx, JSValueConst this_val) +{ + JSObject *p; + + if (JS_VALUE_GET_TAG(this_val) != JS_TAG_OBJECT) + goto fail; + p = JS_VALUE_GET_OBJ(this_val); + if (p->class_id != JS_CLASS_UINT8_ARRAY) + goto fail; + return p; +fail: + JS_ThrowTypeError(ctx, "not a Uint8Array"); + return NULL; +} + +/* Get the data pointer and length of a Uint8Array, checking for detached + buffers. Must be called after options are read (per spec ordering). + Returns 0 on success, -1 on error (throws). */ +static int get_uint8array_bytes(JSContext *ctx, JSObject *p, + uint8_t **pdata, size_t *plen) +{ + if (typed_array_is_oob(p)) { + JS_ThrowTypeErrorArrayBufferOOB(ctx); + *pdata = NULL; /* fail safe */ + *plen = 0; + return -1; + } + *pdata = p->u.array.u.uint8_ptr; + *plen = p->u.array.count; + return 0; +} + +/* Validate options is undefined or an object (GetOptionsObject). + Returns 0 on success, -1 on error (throws). */ +static int check_options_object(JSContext *ctx, JSValueConst options) +{ + if (JS_IsUndefined(options)) + return 0; + if (!JS_IsObject(options)) { + JS_ThrowTypeError(ctx, "options must be an object"); + return -1; + } + return 0; +} + +/* Parse the 'alphabet' option from an options object. + Returns B64_ALPHABET_BASE64 or B64_ALPHABET_BASE64URL, or -1 on error. */ +static int parse_alphabet_option(JSContext *ctx, JSValueConst options) +{ + JSValue val; + const char *str; + int ret; + + if (JS_IsUndefined(options)) + return B64_ALPHABET_BASE64; + + val = JS_GetProperty(ctx, options, JS_ATOM_alphabet); + if (JS_IsException(val)) + return -1; + if (JS_IsUndefined(val)) + return B64_ALPHABET_BASE64; + if (!JS_IsString(val)) { + JS_FreeValue(ctx, val); + JS_ThrowTypeError(ctx, "expected string for alphabet"); + return -1; + } + + str = JS_ToCString(ctx, val); + JS_FreeValue(ctx, val); + if (!str) + return -1; + + if (!strcmp(str, "base64")) + ret = B64_ALPHABET_BASE64; + else if (!strcmp(str, "base64url")) + ret = B64_ALPHABET_BASE64URL; + else { + JS_ThrowTypeError(ctx, "invalid alphabet"); + ret = -1; + } + JS_FreeCString(ctx, str); + return ret; +} + +/* Parse the 'lastChunkHandling' option. Returns mode or -1 on error. */ +static int parse_last_chunk_option(JSContext *ctx, JSValueConst options) +{ + JSValue val; + const char *str; + int ret; + + if (JS_IsUndefined(options)) + return B64_LAST_LOOSE; + + val = JS_GetProperty(ctx, options, JS_ATOM_lastChunkHandling); + if (JS_IsException(val)) + return -1; + if (JS_IsUndefined(val)) + return B64_LAST_LOOSE; + if (!JS_IsString(val)) { + JS_FreeValue(ctx, val); + JS_ThrowTypeError(ctx, "expected string for lastChunkHandling"); + return -1; + } + + str = JS_ToCString(ctx, val); + JS_FreeValue(ctx, val); + if (!str) + return -1; + + if (!strcmp(str, "loose")) + ret = B64_LAST_LOOSE; + else if (!strcmp(str, "strict")) + ret = B64_LAST_STRICT; + else if (!strcmp(str, "stop-before-partial")) + ret = B64_LAST_STOP_BEFORE_PARTIAL; + else { + JS_ThrowTypeError(ctx, "invalid lastChunkHandling option"); + ret = -1; + } + JS_FreeCString(ctx, str); + return ret; +} + +/* Uint8Array.prototype.toBase64([options]) */ +static JSValue js_uint8array_to_base64(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + uint8_t *data; + size_t len; + JSValueConst options; + JSObject *p; + int alphabet, omit_padding; + size_t out_len, written; + JSString *ostr; + char *dst; + + p = check_uint8array(ctx, this_val); + if (!p) + return JS_EXCEPTION; + + options = argc > 0 ? argv[0] : JS_UNDEFINED; + if (check_options_object(ctx, options)) + return JS_EXCEPTION; + alphabet = parse_alphabet_option(ctx, options); + if (alphabet < 0) + return JS_EXCEPTION; + + omit_padding = 0; + if (!JS_IsUndefined(options)) { + JSValue op_val = JS_GetProperty(ctx, options, JS_ATOM_omitPadding); + if (JS_IsException(op_val)) + return JS_EXCEPTION; + omit_padding = JS_ToBool(ctx, op_val); + JS_FreeValue(ctx, op_val); + } + + if (get_uint8array_bytes(ctx, p, &data, &len)) + return JS_EXCEPTION; + + out_len = 4 * ((len + 2) / 3); + + if (unlikely(out_len > JS_STRING_LEN_MAX)) + return JS_ThrowRangeError(ctx, "output too large"); + + ostr = js_alloc_string(ctx, out_len, 0); + if (!ostr) + return JS_EXCEPTION; + + dst = (char *)ostr->u.str8; + written = b64_encode(data, len, dst, + alphabet == B64_ALPHABET_BASE64URL ? b64url_enc : b64_enc); + if (omit_padding) { + while (written > 0 && dst[written - 1] == '=') + written--; + } + dst[written] = '\0'; + + ostr->len = written; + return JS_MKPTR(JS_TAG_STRING, ostr); +} + +/* Uint8Array.prototype.toHex() */ +static JSValue js_uint8array_to_hex(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + uint8_t *data; + size_t len, out_len; + JSObject *p; + JSString *ostr; + + p = check_uint8array(ctx, this_val); + if (!p) + return JS_EXCEPTION; + if (get_uint8array_bytes(ctx, p, &data, &len)) + return JS_EXCEPTION; + + out_len = len * 2; + if (unlikely(out_len > JS_STRING_LEN_MAX)) + return JS_ThrowRangeError(ctx, "output too large"); + + ostr = js_alloc_string(ctx, out_len, 0); + if (!ostr) + return JS_EXCEPTION; + + u8a_hex_encode(data, len, (char *)ostr->u.str8); + ostr->u.str8[out_len] = '\0'; + return JS_MKPTR(JS_TAG_STRING, ostr); +} + +/* Uint8Array.fromBase64(string[, options]) */ +static JSValue js_uint8array_from_base64(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + const char *str; + size_t str_len, read_pos, decoded_len, out_cap; + int alphabet, last_chunk, err; + uint8_t *buf; + JSValue result; + JSValueConst options; + + if (!JS_IsString(argv[0])) + return JS_ThrowTypeError(ctx, "expected string"); + + str = JS_ToCStringLen(ctx, &str_len, argv[0]); + if (!str) + return JS_EXCEPTION; + + options = argc > 1 ? argv[1] : JS_UNDEFINED; + if (check_options_object(ctx, options)) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + alphabet = parse_alphabet_option(ctx, options); + if (alphabet < 0) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + last_chunk = parse_last_chunk_option(ctx, options); + if (last_chunk < 0) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + + out_cap = (str_len / 4) * 3 + 3; + buf = js_malloc(ctx, out_cap); + if (!buf) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + + decoded_len = from_base64(str, str_len, buf, out_cap, + alphabet == B64_ALPHABET_BASE64URL + ? b64url_dec : b64_dec, + last_chunk, &read_pos, &err); + JS_FreeCString(ctx, str); + + if (err) { + js_free(ctx, buf); + return JS_ThrowSyntaxError(ctx, "invalid base64 string"); + } + + result = JS_NewUint8ArrayCopy(ctx, buf, decoded_len); + js_free(ctx, buf); + return result; +} + +/* Uint8Array.fromHex(string) */ +static JSValue js_uint8array_from_hex(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + const char *str; + size_t str_len, read_pos, decoded_len, out_cap; + int err; + uint8_t *buf; + JSValue result; + + if (!JS_IsString(argv[0])) + return JS_ThrowTypeError(ctx, "expected string"); + + str = JS_ToCStringLen(ctx, &str_len, argv[0]); + if (!str) + return JS_EXCEPTION; + + out_cap = str_len / 2 + 1; + buf = js_malloc(ctx, out_cap); + if (!buf) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + + decoded_len = u8a_hex_decode(str, str_len, buf, out_cap, &read_pos, &err); + JS_FreeCString(ctx, str); + + if (err) { + js_free(ctx, buf); + return JS_ThrowSyntaxError(ctx, "invalid hex string"); + } + + /* XXX: could avoid the copy */ + result = JS_NewUint8ArrayCopy(ctx, buf, decoded_len); + js_free(ctx, buf); + return result; +} + +/* Return a { read, written } result object */ +static JSValue js_make_read_written(JSContext *ctx, size_t read, size_t written) +{ + JSValue obj = JS_NewObject(ctx); + if (JS_IsException(obj)) + return JS_EXCEPTION; + if (JS_DefinePropertyValueStr(ctx, obj, "read", + JS_NewUint32(ctx, read), JS_PROP_C_W_E) < 0) + goto fail; + if (JS_DefinePropertyValueStr(ctx, obj, "written", + JS_NewUint32(ctx, written), JS_PROP_C_W_E) < 0) + goto fail; + return obj; +fail: + JS_FreeValue(ctx, obj); + return JS_EXCEPTION; +} + +/* Uint8Array.prototype.setFromBase64(string[, options]) */ +static JSValue js_uint8array_set_from_base64(JSContext *ctx, + JSValueConst this_val, + int argc, JSValueConst *argv) +{ + uint8_t *data; + size_t len; + const char *str; + size_t str_len, read_pos, decoded_len; + JSObject *p; + int alphabet, last_chunk, err; + JSValueConst options; + + p = check_uint8array(ctx, this_val); + if (!p) + return JS_EXCEPTION; + + if (!JS_IsString(argv[0])) + return JS_ThrowTypeError(ctx, "expected string"); + + str = JS_ToCStringLen(ctx, &str_len, argv[0]); + if (!str) + return JS_EXCEPTION; + + options = argc > 1 ? argv[1] : JS_UNDEFINED; + if (check_options_object(ctx, options)) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + alphabet = parse_alphabet_option(ctx, options); + if (alphabet < 0) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + last_chunk = parse_last_chunk_option(ctx, options); + if (last_chunk < 0) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + + if (get_uint8array_bytes(ctx, p, &data, &len)) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + + decoded_len = from_base64(str, str_len, data, len, + alphabet == B64_ALPHABET_BASE64URL + ? b64url_dec : b64_dec, + last_chunk, &read_pos, &err); + JS_FreeCString(ctx, str); + + if (err) + return JS_ThrowSyntaxError(ctx, "invalid base64 string"); + + return js_make_read_written(ctx, read_pos, decoded_len); +} + +/* Uint8Array.prototype.setFromHex(string) */ +static JSValue js_uint8array_set_from_hex(JSContext *ctx, + JSValueConst this_val, + int argc, JSValueConst *argv) +{ + uint8_t *data; + size_t len; + const char *str; + size_t str_len, read_pos, decoded_len; + JSObject *p; + int err; + + p = check_uint8array(ctx, this_val); + if (!p) + return JS_EXCEPTION; + + if (!JS_IsString(argv[0])) + return JS_ThrowTypeError(ctx, "expected string"); + + str = JS_ToCStringLen(ctx, &str_len, argv[0]); + if (!str) + return JS_EXCEPTION; + + if (get_uint8array_bytes(ctx, p, &data, &len)) { + JS_FreeCString(ctx, str); + return JS_EXCEPTION; + } + + decoded_len = u8a_hex_decode(str, str_len, data, len, &read_pos, &err); + JS_FreeCString(ctx, str); + + if (err) + return JS_ThrowSyntaxError(ctx, "invalid hex string"); + + return js_make_read_written(ctx, read_pos, decoded_len); +} + static const JSCFunctionListEntry js_typed_array_base_funcs[] = { JS_CFUNC_DEF("from", 1, js_typed_array_from ), JS_CFUNC_DEF("of", 0, js_typed_array_of ), @@ -57971,6 +59809,20 @@ static const JSCFunctionListEntry js_typed_array_funcs[] = { JS_PROP_INT32_DEF("BYTES_PER_ELEMENT", 8, 0), }; +static const JSCFunctionListEntry js_uint8array_proto_funcs[] = { + JS_PROP_INT32_DEF("BYTES_PER_ELEMENT", 1, 0), + JS_CFUNC_DEF("toBase64", 0, js_uint8array_to_base64), + JS_CFUNC_DEF("toHex", 0, js_uint8array_to_hex), + JS_CFUNC_DEF("setFromBase64", 1, js_uint8array_set_from_base64), + JS_CFUNC_DEF("setFromHex", 1, js_uint8array_set_from_hex), +}; + +static const JSCFunctionListEntry js_uint8array_funcs[] = { + JS_PROP_INT32_DEF("BYTES_PER_ELEMENT", 1, 0), + JS_CFUNC_DEF("fromBase64", 1, js_uint8array_from_base64), + JS_CFUNC_DEF("fromHex", 1, js_uint8array_from_hex), +}; + static JSValue js_typed_array_base_constructor(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) @@ -58123,9 +59975,6 @@ static JSValue js_typed_array_constructor_ta(JSContext *ctx, JS_ThrowTypeErrorArrayBufferOOB(ctx); goto fail; } - ta = p->u.typed_array; - src_buffer = ta->buffer; - src_abuf = src_buffer->u.array_buffer; size_log2 = typed_array_size_log2(classid); buffer = js_array_buffer_constructor1(ctx, JS_UNDEFINED, (uint64_t)len << size_log2, @@ -58141,8 +59990,12 @@ static JSValue js_typed_array_constructor_ta(JSContext *ctx, abuf = JS_GetOpaque(buffer, JS_CLASS_ARRAY_BUFFER); if (typed_array_init(ctx, obj, buffer, 0, len, /*track_rab*/FALSE)) goto fail; - if (p->class_id == classid) { - /* same type: copy the content */ + ta = p->u.typed_array; + src_buffer = ta->buffer; + src_abuf = src_buffer->u.array_buffer; + if (p->class_id == classid && + (int64_t)ta->offset + (int64_t)abuf->byte_length <= src_abuf->byte_length) { + /* same type and no overflow: copy the content */ memcpy(abuf->data, src_abuf->data + ta->offset, abuf->byte_length); } else { for(i = 0; i < len; i++) { @@ -58175,38 +60028,54 @@ static JSValue js_typed_array_constructor(JSContext *ctx, if (JS_VALUE_GET_TAG(argv[0]) != JS_TAG_OBJECT) { if (JS_ToIndex(ctx, &len, argv[0])) return JS_EXCEPTION; + obj = js_create_from_ctor(ctx, new_target, classid); + if (JS_IsException(obj)) + return JS_EXCEPTION; buffer = js_array_buffer_constructor1(ctx, JS_UNDEFINED, len << size_log2, NULL); if (JS_IsException(buffer)) - return JS_EXCEPTION; + goto fail; offset = 0; } else { JSObject *p = JS_VALUE_GET_OBJ(argv[0]); if (p->class_id == JS_CLASS_ARRAY_BUFFER || p->class_id == JS_CLASS_SHARED_ARRAY_BUFFER) { - abuf = p->u.array_buffer; - if (JS_ToIndex(ctx, &offset, argv[1])) + obj = js_create_from_ctor(ctx, new_target, classid); + if (JS_IsException(obj)) return JS_EXCEPTION; - if (abuf->detached) - return JS_ThrowTypeErrorDetachedArrayBuffer(ctx); - if ((offset & ((1 << size_log2) - 1)) != 0 || - offset > abuf->byte_length) - return JS_ThrowRangeError(ctx, "invalid offset"); + if (JS_ToIndex(ctx, &offset, argv[1])) + goto fail; + if ((offset & ((1 << size_log2) - 1)) != 0) + goto invalid_offset; + abuf = p->u.array_buffer; if (JS_IsUndefined(argv[2])) { + if (abuf->detached) { + JS_ThrowTypeErrorDetachedArrayBuffer(ctx); + goto fail; + } + if (offset > abuf->byte_length) { + invalid_offset: + JS_ThrowRangeError(ctx, "invalid offset"); + goto fail; + } track_rab = array_buffer_is_resizable(abuf); - if (!track_rab) + if (!track_rab) { if ((abuf->byte_length & ((1 << size_log2) - 1)) != 0) goto invalid_length; + } len = (abuf->byte_length - offset) >> size_log2; } else { if (JS_ToIndex(ctx, &len, argv[2])) - return JS_EXCEPTION; - if (abuf->detached) - return JS_ThrowTypeErrorDetachedArrayBuffer(ctx); + goto fail; + if (abuf->detached) { + JS_ThrowTypeErrorDetachedArrayBuffer(ctx); + goto fail; + } if ((offset + (len << size_log2)) > abuf->byte_length) { invalid_length: - return JS_ThrowRangeError(ctx, "invalid length"); + JS_ThrowRangeError(ctx, "invalid length"); + goto fail; } } buffer = JS_DupValue(ctx, argv[0]); @@ -58220,17 +60089,12 @@ static JSValue js_typed_array_constructor(JSContext *ctx, } } } - - obj = js_create_from_ctor(ctx, new_target, classid); - if (JS_IsException(obj)) { - JS_FreeValue(ctx, buffer); - return JS_EXCEPTION; - } - if (typed_array_init(ctx, obj, buffer, offset, len, track_rab)) { - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } + if (typed_array_init(ctx, obj, buffer, offset, len, track_rab)) + goto fail; return obj; + fail: + JS_FreeValue(ctx, obj); + return JS_EXCEPTION; } static void js_typed_array_finalizer(JSRuntime *rt, JSValue val) @@ -58659,20 +60523,16 @@ typedef enum AtomicsOpEnum { ATOMICS_OP_LOAD, } AtomicsOpEnum; -static int js_atomics_get_ptr(JSContext *ctx, - void **pptr, - JSArrayBuffer **pabuf, - int *psize_log2, JSClassID *pclass_id, - JSValueConst obj, JSValueConst idx_val, - int is_waitable) +static JSObject *js_atomics_get_buf(JSContext *ctx, + JSValueConst obj, JSValueConst idx_val, + uint64_t *pidx, int is_waitable) { JSObject *p; JSTypedArray *ta; JSArrayBuffer *abuf; - void *ptr; uint64_t idx; BOOL err; - int size_log2, old_len; + int old_len; if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) goto fail; @@ -58686,56 +60546,44 @@ static int js_atomics_get_ptr(JSContext *ctx, if (err) { fail: JS_ThrowTypeError(ctx, "integer TypedArray expected"); - return -1; + return NULL; } ta = p->u.typed_array; abuf = ta->buffer->u.array_buffer; if (!abuf->shared) { if (is_waitable == 2) { JS_ThrowTypeError(ctx, "not a SharedArrayBuffer TypedArray"); - return -1; + return NULL; } if (abuf->detached) { JS_ThrowTypeErrorDetachedArrayBuffer(ctx); - return -1; + return NULL; } } old_len = p->u.array.count; if (JS_ToIndex(ctx, &idx, idx_val)) { - return -1; + return NULL; } if (idx >= old_len) goto oob; - if (is_waitable == 1) { - /* notify(): just avoid having an invalid pointer if overflow */ - if (idx >= p->u.array.count) - ptr = NULL; - } else { + if (is_waitable != 1) { /* RevalidateAtomicAccess() */ if (typed_array_is_oob(p)) { JS_ThrowTypeErrorArrayBufferOOB(ctx); - return -1; + return NULL; } if (idx >= p->u.array.count) { oob: JS_ThrowRangeError(ctx, "out-of-bound access"); - return -1; + return NULL; } } - size_log2 = typed_array_size_log2(p->class_id); - ptr = p->u.array.u.uint8_ptr + ((uintptr_t)idx << size_log2); - if (pabuf) - *pabuf = abuf; - if (psize_log2) - *psize_log2 = size_log2; - if (pclass_id) - *pclass_id = p->class_id; - *pptr = ptr; - return 0; + *pidx = idx; + return p; } static JSValue js_atomics_op(JSContext *ctx, @@ -58743,15 +60591,15 @@ static JSValue js_atomics_op(JSContext *ctx, int argc, JSValueConst *argv, int op) { int size_log2; - uint64_t v, a, rep_val; + uint64_t v, a, rep_val, idx; void *ptr; JSValue ret; - JSClassID class_id; - JSArrayBuffer *abuf; - - if (js_atomics_get_ptr(ctx, &ptr, &abuf, &size_log2, &class_id, - argv[0], argv[1], 0)) + JSObject *p; + + p = js_atomics_get_buf(ctx, argv[0], argv[1], &idx, 0); + if (!p) return JS_EXCEPTION; + size_log2 = typed_array_size_log2(p->class_id); rep_val = 0; if (op == ATOMICS_OP_LOAD) { v = 0; @@ -58777,11 +60625,14 @@ static JSValue js_atomics_op(JSContext *ctx, rep_val = v32; } } - if (abuf->detached) + if (typed_array_is_oob(p)) return JS_ThrowTypeErrorDetachedArrayBuffer(ctx); - } - - switch(op | (size_log2 << 3)) { + if (idx >= p->u.array.count) + return JS_ThrowRangeError(ctx, "out-of-bound access"); + } + ptr = p->u.array.u.uint8_ptr + ((uintptr_t)idx << size_log2); + + switch(op | (size_log2 << 3)) { #define OP(op_name, func_name) \ case ATOMICS_OP_ ## op_name | (0 << 3): \ @@ -58850,7 +60701,7 @@ static JSValue js_atomics_op(JSContext *ctx, abort(); } - switch(class_id) { + switch(p->class_id) { case JS_CLASS_INT8_ARRAY: a = (int8_t)a; goto done; @@ -58889,48 +60740,56 @@ static JSValue js_atomics_store(JSContext *ctx, int size_log2; void *ptr; JSValue ret; - JSArrayBuffer *abuf; + JSObject *p; + uint64_t idx; + int64_t v; - if (js_atomics_get_ptr(ctx, &ptr, &abuf, &size_log2, NULL, - argv[0], argv[1], 0)) + p = js_atomics_get_buf(ctx, argv[0], argv[1], &idx, 0); + if (!p) return JS_EXCEPTION; + size_log2 = typed_array_size_log2(p->class_id); if (size_log2 == 3) { - int64_t v64; ret = JS_ToBigIntFree(ctx, JS_DupValue(ctx, argv[2])); if (JS_IsException(ret)) return ret; - if (JS_ToBigInt64(ctx, &v64, ret)) { + if (JS_ToBigInt64(ctx, &v, ret)) { JS_FreeValue(ctx, ret); return JS_EXCEPTION; } - if (abuf->detached) - return JS_ThrowTypeErrorDetachedArrayBuffer(ctx); - atomic_store((_Atomic(uint64_t) *)ptr, v64); } else { - uint32_t v; + uint32_t v32; /* XXX: spec, would be simpler to return the written value */ ret = JS_ToIntegerFree(ctx, JS_DupValue(ctx, argv[2])); if (JS_IsException(ret)) return ret; - if (JS_ToUint32(ctx, &v, ret)) { + if (JS_ToUint32(ctx, &v32, ret)) { JS_FreeValue(ctx, ret); return JS_EXCEPTION; } - if (abuf->detached) - return JS_ThrowTypeErrorDetachedArrayBuffer(ctx); - switch(size_log2) { - case 0: - atomic_store((_Atomic(uint8_t) *)ptr, v); - break; - case 1: - atomic_store((_Atomic(uint16_t) *)ptr, v); - break; - case 2: - atomic_store((_Atomic(uint32_t) *)ptr, v); - break; - default: - abort(); - } + v = v32; + } + if (typed_array_is_oob(p)) + return JS_ThrowTypeErrorDetachedArrayBuffer(ctx); + if (idx >= p->u.array.count) + return JS_ThrowRangeError(ctx, "out-of-bound access"); + + ptr = p->u.array.u.uint8_ptr + ((uintptr_t)idx << size_log2); + + switch(size_log2) { + case 0: + atomic_store((_Atomic(uint8_t) *)ptr, v); + break; + case 1: + atomic_store((_Atomic(uint16_t) *)ptr, v); + break; + case 2: + atomic_store((_Atomic(uint32_t) *)ptr, v); + break; + case 3: + atomic_store((_Atomic(uint64_t) *)ptr, v); + break; + default: + abort(); } return ret; } @@ -59004,8 +60863,10 @@ static JSValue js_atomics_wait(JSContext *ctx, JSValueConst this_obj, int argc, JSValueConst *argv) { + JSObject *p; int64_t v; int32_t v32; + uint64_t idx; void *ptr; int64_t timeout; struct timespec ts; @@ -59013,9 +60874,13 @@ static JSValue js_atomics_wait(JSContext *ctx, int ret, size_log2, res; double d; - if (js_atomics_get_ptr(ctx, &ptr, NULL, &size_log2, NULL, - argv[0], argv[1], 2)) + p = js_atomics_get_buf(ctx, argv[0], argv[1], &idx, 2); + if (!p) return JS_EXCEPTION; + size_log2 = typed_array_size_log2(p->class_id); + ptr = p->u.array.u.uint8_ptr + ((uintptr_t)idx << size_log2); + + /* 'argv[0]' is a SharedArrayBuffer so it cannot be detached nor reduced */ if (size_log2 == 3) { if (JS_ToBigInt64(ctx, &v, argv[2])) return JS_EXCEPTION; @@ -59088,12 +60953,17 @@ static JSValue js_atomics_notify(JSContext *ctx, { struct list_head *el, *el1, waiter_list; int32_t count, n; + uint64_t idx; + int size_log2; void *ptr; JSAtomicsWaiter *waiter; JSArrayBuffer *abuf; - - if (js_atomics_get_ptr(ctx, &ptr, &abuf, NULL, NULL, argv[0], argv[1], 1)) + JSObject *p; + + p = js_atomics_get_buf(ctx, argv[0], argv[1], &idx, 1); + if (!p) return JS_EXCEPTION; + size_log2 = typed_array_size_log2(p->class_id); if (JS_IsUndefined(argv[2])) { count = INT32_MAX; @@ -59103,7 +60973,10 @@ static JSValue js_atomics_notify(JSContext *ctx, } n = 0; + abuf = p->u.typed_array->buffer->u.array_buffer; if (abuf->shared && count > 0) { + /* 'argv[0]' is a SharedArrayBuffer so it cannot be detached nor reduced */ + ptr = p->u.array.u.uint8_ptr + ((uintptr_t)idx << size_log2); pthread_mutex_lock(&js_atomics_mutex); init_list_head(&waiter_list); list_for_each_safe(el, el1, &js_atomics_waiter_list) { @@ -59210,17 +61083,25 @@ int JS_AddIntrinsicTypedArrays(JSContext *ctx) for(i = JS_CLASS_UINT8C_ARRAY; i < JS_CLASS_UINT8C_ARRAY + JS_TYPED_ARRAY_COUNT; i++) { char buf[ATOM_GET_STR_BUF_SIZE]; const char *name; - const JSCFunctionListEntry *bpe; name = JS_AtomGetStr(ctx, buf, sizeof(buf), JS_ATOM_Uint8ClampedArray + i - JS_CLASS_UINT8C_ARRAY); - bpe = js_typed_array_funcs + typed_array_size_log2(i); - obj = JS_NewCConstructor(ctx, i, name, - ft.generic, 3, JS_CFUNC_constructor_magic, i, - typed_array_base_func, - bpe, 1, - bpe, 1, - 0); + if (i == JS_CLASS_UINT8_ARRAY) { + obj = JS_NewCConstructor(ctx, i, name, + ft.generic, 3, JS_CFUNC_constructor_magic, i, + typed_array_base_func, + js_uint8array_funcs, countof(js_uint8array_funcs), + js_uint8array_proto_funcs, countof(js_uint8array_proto_funcs), + 0); + } else { + const JSCFunctionListEntry *bpe = js_typed_array_funcs + typed_array_size_log2(i); + obj = JS_NewCConstructor(ctx, i, name, + ft.generic, 3, JS_CFUNC_constructor_magic, i, + typed_array_base_func, + bpe, 1, + bpe, 1, + 0); + } if (JS_IsException(obj)) { fail: JS_FreeValue(ctx, typed_array_base_func); @@ -59392,7 +61273,8 @@ static void finrec_delete_weakref(JSRuntime *rt, JSWeakRefHeader *wh) JSValueConst args[2]; args[0] = frd->cb; args[1] = fre->held_val; - JS_EnqueueJob(frd->realm, js_finrec_job, 2, args); + /* no exception is raised to avoid recursing into the GC */ + JS_EnqueueJob2(frd->realm, js_finrec_job, 2, args, TRUE); js_weakref_free(rt, fre->target); js_weakref_free(rt, fre->token); diff --git a/vendor/quickjs/quickjs.h b/quickjs.h similarity index 98% rename from vendor/quickjs/quickjs.h rename to quickjs.h index 92cc000d0..476d73513 100644 --- a/vendor/quickjs/quickjs.h +++ b/quickjs.h @@ -95,6 +95,7 @@ enum { /* any larger tag is FLOAT64 if JS_NAN_BOXING */ }; +/* must match the layout of 'JSMallocBlockHeader' */ typedef struct JSRefCountHeader { int ref_count; } JSRefCountHeader; @@ -215,7 +216,7 @@ static inline JSValue __JS_NewShortBigInt(JSContext *ctx, int32_t d) #else /* !JS_NAN_BOXING */ typedef union JSValueUnion { - int32_t int32; + uint64_t uint64; double float64; void *ptr; #if JS_SHORT_BIG_INT_BITS == 32 @@ -235,13 +236,15 @@ typedef struct JSValue { #define JS_VALUE_GET_TAG(v) ((int32_t)(v).tag) /* same as JS_VALUE_GET_TAG, but return JS_TAG_FLOAT64 with NaN boxing */ #define JS_VALUE_GET_NORM_TAG(v) JS_VALUE_GET_TAG(v) -#define JS_VALUE_GET_INT(v) ((v).u.int32) -#define JS_VALUE_GET_BOOL(v) ((v).u.int32) +#define JS_VALUE_GET_INT(v) ((int)(v).u.uint64) +#define JS_VALUE_GET_BOOL(v) ((int)(v).u.uint64) #define JS_VALUE_GET_FLOAT64(v) ((v).u.float64) #define JS_VALUE_GET_SHORT_BIG_INT(v) ((v).u.short_big_int) #define JS_VALUE_GET_PTR(v) ((v).u.ptr) -#define JS_MKVAL(tag, val) (JSValue){ (JSValueUnion){ .int32 = val }, tag } +/* avoid uninitialized data by using a 64 bit field even if only 32 + bits are needed because some compilers generate slower code */ +#define JS_MKVAL(tag, val) (JSValue){ (JSValueUnion){ .uint64 = (uint32_t)(val) }, tag } #define JS_MKPTR(tag, p) (JSValue){ (JSValueUnion){ .ptr = p }, tag } #define JS_TAG_IS_FLOAT64(tag) ((unsigned)(tag) == JS_TAG_FLOAT64) @@ -675,10 +678,16 @@ JSValue __js_printf_like(2, 3) JS_ThrowInternalError(JSContext *ctx, const char JSValue JS_ThrowOutOfMemory(JSContext *ctx); void __JS_FreeValue(JSContext *ctx, JSValue v); + +static inline JSRefCountHeader *__js_rc(void *ptr) +{ + return (JSRefCountHeader *)((uint32_t *)ptr - 1); +} + static inline void JS_FreeValue(JSContext *ctx, JSValue v) { if (JS_VALUE_HAS_REF_COUNT(v)) { - JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v); + JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v)); if (--p->ref_count <= 0) { __JS_FreeValue(ctx, v); } @@ -688,7 +697,7 @@ void __JS_FreeValueRT(JSRuntime *rt, JSValue v); static inline void JS_FreeValueRT(JSRuntime *rt, JSValue v) { if (JS_VALUE_HAS_REF_COUNT(v)) { - JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v); + JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v)); if (--p->ref_count <= 0) { __JS_FreeValueRT(rt, v); } @@ -698,7 +707,7 @@ static inline void JS_FreeValueRT(JSRuntime *rt, JSValue v) static inline JSValue JS_DupValue(JSContext *ctx, JSValueConst v) { if (JS_VALUE_HAS_REF_COUNT(v)) { - JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v); + JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v)); p->ref_count++; } return (JSValue)v; @@ -707,7 +716,7 @@ static inline JSValue JS_DupValue(JSContext *ctx, JSValueConst v) static inline JSValue JS_DupValueRT(JSRuntime *rt, JSValueConst v) { if (JS_VALUE_HAS_REF_COUNT(v)) { - JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v); + JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v)); p->ref_count++; } return (JSValue)v; diff --git a/vendor/quickjs/readme-cosmo.txt b/readme-cosmo.txt similarity index 100% rename from vendor/quickjs/readme-cosmo.txt rename to readme-cosmo.txt diff --git a/vendor/quickjs/readme.txt b/readme.txt similarity index 100% rename from vendor/quickjs/readme.txt rename to readme.txt diff --git a/vendor/quickjs/release.sh b/release.sh similarity index 98% rename from vendor/quickjs/release.sh rename to release.sh index 6f4bdf509..0edbd4dd8 100755 --- a/vendor/quickjs/release.sh +++ b/release.sh @@ -32,7 +32,7 @@ rm -rf $outdir mkdir -p $outdir $outdir/unicode $outdir/tests cp unicode/* $outdir/unicode -cp -a tests/bench-v8 $outdir/tests +cp -a tests/bench-v8 tests/octane tests/cli $outdir/tests ( cd /tmp && tar Jcvf /tmp/${name}.tar.xz ${d} ) diff --git a/vendor/quickjs/repl.js b/repl.js similarity index 100% rename from vendor/quickjs/repl.js rename to repl.js diff --git a/vendor/quickjs/run-test262.c b/run-test262.c similarity index 82% rename from vendor/quickjs/run-test262.c rename to run-test262.c index 100ed134a..9d03964e4 100644 --- a/vendor/quickjs/run-test262.c +++ b/run-test262.c @@ -34,26 +34,67 @@ #include #include #include +#include +#include +#ifdef _WIN32 +#include +#endif #include "cutils.h" #include "list.h" #include "quickjs-libc.h" -/* enable test262 thread support to test SharedArrayBuffer and Atomics */ -#define CONFIG_AGENT - #define CMD_NAME "run-test262" typedef struct namelist_t { char **array; int count; int size; - unsigned int sorted : 1; } namelist_t; +/* per execution thread context */ +typedef struct { + pthread_mutex_t agent_mutex; + pthread_cond_t agent_cond; + /* list of Test262Agent.link */ + struct list_head agent_list; + + pthread_mutex_t report_mutex; + /* list of AgentReport.link */ + struct list_head report_list; + + int async_done; +} ThreadLocalStorage; + +typedef struct { + struct list_head link; + ThreadLocalStorage *tls; + pthread_t tid; + char *script; + JSValue broadcast_func; + BOOL broadcast_pending; + JSValue broadcast_sab; /* in the main context */ + uint8_t *broadcast_sab_buf; + size_t broadcast_sab_size; + int32_t broadcast_val; +} Test262Agent; + +typedef struct { + struct list_head link; + char *str; +} AgentReport; + namelist_t test_list; namelist_t exclude_list; namelist_t exclude_dir_list; +namelist_t error_list; +pthread_mutex_t error_list_mutex; + +int nthreads; +pthread_t progress_thread; +BOOL progress_exit_request; +pthread_cond_t progress_cond; +pthread_mutex_t progress_mutex; FILE *outfile; enum test_mode_t { @@ -73,6 +114,7 @@ int stats_count; JSMemoryUsage stats_all, stats_avg, stats_min, stats_max; char *stats_min_filename; char *stats_max_filename; +pthread_mutex_t stats_mutex; int verbose; char *harness_dir; char *harness_exclude; @@ -81,16 +123,117 @@ char *harness_skip_features; int *harness_skip_features_count; char *error_filename; char *error_file; -FILE *error_out; char *report_filename; int update_errors; -int test_count, test_failed, test_index, test_skipped, test_excluded; -int new_errors, changed_errors, fixed_errors; -int async_done; +int slow_test_threshold; +int start_index, stop_index; +int test_excluded; +_Atomic int test_count, test_failed, test_skipped; +_Atomic int new_errors, changed_errors, fixed_errors; void warning(const char *, ...) __attribute__((__format__(__printf__, 1, 2))); void fatal(int, const char *, ...) __attribute__((__format__(__printf__, 2, 3))); +void atomic_inc(volatile _Atomic int *p) +{ + atomic_fetch_add(p, 1); +} + +#if defined(_WIN32) +static int cpu_count(void) +{ + DWORD_PTR procmask, sysmask; + long count; + int i; + + count = 0; + if (GetProcessAffinityMask(GetCurrentProcess(), &procmask, &sysmask)) + for (i = 0; i < 8 * sizeof(procmask); i++) + count += 1 & (procmask >> i); + return count; +} +#elif defined(__linux__) +/* return the number of available physical cores or -1 if not available */ +static int get_cpu_info_physical_cores(void) +{ + FILE *f; + int nb_cores, physical_id; + char line[1024], *p; + char *field, *value; + int len; + + f = fopen("/proc/cpuinfo", "rb"); + if (!f) + return -1; + nb_cores = 0; + physical_id = -1; + for(;;) { + if (fgets(line, sizeof(line), f) == NULL) + break; + len = strlen(line); + while (len > 0 && isspace(line[len - 1])) + len--; + line[len] = '\0'; + field = line; + p = line; + if (*p == '#') + continue; + while (*p != ':' && *p != '\0') + p++; + if (*p == '\0') + continue; + *p = '\0'; + p++; + while (isspace(*p)) + p++; + value = p; + + len = strlen(field); + while (len > 0 && isspace(field[len - 1])) + len--; + field[len] = '\0'; + + // printf("'%s' '%s'\n", field, value); + if (!strcmp(field, "cpu cores")) { + if (nb_cores == 0) { + nb_cores = strtol(value, NULL, 0); + } + } else if (!strcmp(field, "physical id")) { + physical_id = max_int(physical_id, strtol(value, NULL, 0)); + } + } + fclose(f); + // printf("nb_cores=%d physical_id=%d\n", nb_cores, physical_id); + if (nb_cores <= 0 || physical_id < 0) + return -1; + return nb_cores * (physical_id + 1); +} + +static int cpu_count(void) +{ + int n = get_cpu_info_physical_cores(); + if (n <= 0) + n = 1; + return n; +} +#else /* __linux__ */ +static int cpu_count(void) +{ + return sysconf(_SC_NPROCESSORS_ONLN); +} +#endif /* !__linux__ */ + +static void init_thread_local_storage(ThreadLocalStorage *tls) +{ + memset(tls, 0, sizeof(*tls)); + pthread_mutex_init(&tls->agent_mutex, NULL); + pthread_cond_init(&tls->agent_cond, NULL); + init_list_head(&tls->agent_list); + + pthread_mutex_init(&tls->report_mutex, NULL); + init_list_head(&tls->report_list); +} + void warning(const char *fmt, ...) { va_list ap; @@ -248,31 +391,30 @@ int namelist_cmp_indirect(const void *a, const void *b) return namelist_cmp(*(const char **)a, *(const char **)b); } -void namelist_sort(namelist_t *lp) +void namelist_sort(namelist_t *lp, BOOL remove_duplicates) { int i, count; if (lp->count > 1) { qsort(lp->array, lp->count, sizeof(*lp->array), namelist_cmp_indirect); /* remove duplicates */ - for (count = i = 1; i < lp->count; i++) { - if (namelist_cmp(lp->array[count - 1], lp->array[i]) == 0) { - free(lp->array[i]); - } else { - lp->array[count++] = lp->array[i]; + if (remove_duplicates) { + for (count = i = 1; i < lp->count; i++) { + if (namelist_cmp(lp->array[count - 1], lp->array[i]) == 0) { + free(lp->array[i]); + } else { + lp->array[count++] = lp->array[i]; + } } + lp->count = count; } - lp->count = count; } - lp->sorted = 1; } -int namelist_find(namelist_t *lp, const char *name) +/* the list must be sorted */ +int namelist_find(const namelist_t *lp, const char *name) { int a, b, m, cmp; - if (!lp->sorted) { - namelist_sort(lp); - } for (a = 0, b = lp->count; a < b;) { m = a + (b - a) / 2; cmp = namelist_cmp(lp->array[m], name); @@ -382,33 +524,37 @@ static void js_print_value_write(void *opaque, const char *buf, size_t len) static JSValue js_print(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { + ThreadLocalStorage *tls = JS_GetRuntimeOpaque(JS_GetRuntime(ctx)); int i; JSValueConst v; - if (outfile) { - for (i = 0; i < argc; i++) { - if (i != 0) - fputc(' ', outfile); - v = argv[i]; - if (JS_IsString(v)) { - const char *str; - size_t len; - str = JS_ToCStringLen(ctx, &len, v); - if (!str) - return JS_EXCEPTION; - if (!strcmp(str, "Test262:AsyncTestComplete")) { - async_done++; - } else if (strstart(str, "Test262:AsyncTestFailure", NULL)) { - async_done = 2; /* force an error */ - } + for (i = 0; i < argc; i++) { + if (i != 0 && outfile) + fputc(' ', outfile); + v = argv[i]; + if (JS_IsString(v)) { + const char *str; + size_t len; + str = JS_ToCStringLen(ctx, &len, v); + if (!str) + return JS_EXCEPTION; + if (!strcmp(str, "Test262:AsyncTestComplete")) { + tls->async_done++; + } else if (strstart(str, "Test262:AsyncTestFailure", NULL)) { + tls->async_done = 2; /* force an error */ + } + if (outfile) { fwrite(str, 1, len, outfile); - JS_FreeCString(ctx, str); - } else { + } + JS_FreeCString(ctx, str); + } else { + if (outfile) { JS_PrintValue(ctx, js_print_value_write, outfile, v, NULL); } } - fputc('\n', outfile); } + if (outfile) + fputc('\n', outfile); return JS_UNDEFINED; } @@ -433,42 +579,13 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val, return ret; } -#ifdef CONFIG_AGENT - -#include - -typedef struct { - struct list_head link; - pthread_t tid; - char *script; - JSValue broadcast_func; - BOOL broadcast_pending; - JSValue broadcast_sab; /* in the main context */ - uint8_t *broadcast_sab_buf; - size_t broadcast_sab_size; - int32_t broadcast_val; -} Test262Agent; - -typedef struct { - struct list_head link; - char *str; -} AgentReport; - static JSValue add_helpers1(JSContext *ctx); static void add_helpers(JSContext *ctx); -static pthread_mutex_t agent_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t agent_cond = PTHREAD_COND_INITIALIZER; -/* list of Test262Agent.link */ -static struct list_head agent_list = LIST_HEAD_INIT(agent_list); - -static pthread_mutex_t report_mutex = PTHREAD_MUTEX_INITIALIZER; -/* list of AgentReport.link */ -static struct list_head report_list = LIST_HEAD_INIT(report_list); - static void *agent_start(void *arg) { Test262Agent *agent = arg; + ThreadLocalStorage *tls = agent->tls; JSRuntime *rt; JSContext *ctx; JSValue ret_val; @@ -478,6 +595,7 @@ static void *agent_start(void *arg) if (rt == NULL) { fatal(1, "JS_NewRuntime failure"); } + JS_SetRuntimeOpaque(rt, tls); ctx = JS_NewContext(rt); if (ctx == NULL) { JS_FreeRuntime(rt); @@ -507,15 +625,15 @@ static void *agent_start(void *arg) } else { JSValue args[2]; - pthread_mutex_lock(&agent_mutex); + pthread_mutex_lock(&tls->agent_mutex); while (!agent->broadcast_pending) { - pthread_cond_wait(&agent_cond, &agent_mutex); + pthread_cond_wait(&tls->agent_cond, &tls->agent_mutex); } agent->broadcast_pending = FALSE; - pthread_cond_signal(&agent_cond); + pthread_cond_signal(&tls->agent_cond); - pthread_mutex_unlock(&agent_mutex); + pthread_mutex_unlock(&tls->agent_mutex); args[0] = JS_NewArrayBuffer(ctx, agent->broadcast_sab_buf, agent->broadcast_sab_size, @@ -543,6 +661,7 @@ static void *agent_start(void *arg) static JSValue js_agent_start(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) { + ThreadLocalStorage *tls = JS_GetRuntimeOpaque(JS_GetRuntime(ctx)); const char *script; Test262Agent *agent; pthread_attr_t attr; @@ -555,11 +674,12 @@ static JSValue js_agent_start(JSContext *ctx, JSValue this_val, return JS_EXCEPTION; agent = malloc(sizeof(*agent)); memset(agent, 0, sizeof(*agent)); + agent->tls = tls; agent->broadcast_func = JS_UNDEFINED; agent->broadcast_sab = JS_UNDEFINED; agent->script = strdup(script); JS_FreeCString(ctx, script); - list_add_tail(&agent->link, &agent_list); + list_add_tail(&agent->link, &tls->agent_list); pthread_attr_init(&attr); // musl libc gives threads 80 kb stacks, much smaller than // JS_DEFAULT_STACK_SIZE (256 kb) @@ -571,10 +691,11 @@ static JSValue js_agent_start(JSContext *ctx, JSValue this_val, static void js_agent_free(JSContext *ctx) { + ThreadLocalStorage *tls = JS_GetRuntimeOpaque(JS_GetRuntime(ctx)); struct list_head *el, *el1; Test262Agent *agent; - list_for_each_safe(el, el1, &agent_list) { + list_for_each_safe(el, el1, &tls->agent_list) { agent = list_entry(el, Test262Agent, link); pthread_join(agent->tid, NULL); JS_FreeValue(ctx, agent->broadcast_sab); @@ -593,11 +714,11 @@ static JSValue js_agent_leaving(JSContext *ctx, JSValue this_val, return JS_UNDEFINED; } -static BOOL is_broadcast_pending(void) +static BOOL is_broadcast_pending(ThreadLocalStorage *tls) { struct list_head *el; Test262Agent *agent; - list_for_each(el, &agent_list) { + list_for_each(el, &tls->agent_list) { agent = list_entry(el, Test262Agent, link); if (agent->broadcast_pending) return TRUE; @@ -608,6 +729,7 @@ static BOOL is_broadcast_pending(void) static JSValue js_agent_broadcast(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) { + ThreadLocalStorage *tls = JS_GetRuntimeOpaque(JS_GetRuntime(ctx)); JSValueConst sab = argv[0]; struct list_head *el; Test262Agent *agent; @@ -626,8 +748,8 @@ static JSValue js_agent_broadcast(JSContext *ctx, JSValue this_val, /* broadcast the values and wait until all agents have started calling their callbacks */ - pthread_mutex_lock(&agent_mutex); - list_for_each(el, &agent_list) { + pthread_mutex_lock(&tls->agent_mutex); + list_for_each(el, &tls->agent_list) { agent = list_entry(el, Test262Agent, link); agent->broadcast_pending = TRUE; /* the shared array buffer is used by the thread, so increment @@ -637,12 +759,12 @@ static JSValue js_agent_broadcast(JSContext *ctx, JSValue this_val, agent->broadcast_sab_size = buf_size; agent->broadcast_val = val; } - pthread_cond_broadcast(&agent_cond); + pthread_cond_broadcast(&tls->agent_cond); - while (is_broadcast_pending()) { - pthread_cond_wait(&agent_cond, &agent_mutex); + while (is_broadcast_pending(tls)) { + pthread_cond_wait(&tls->agent_cond, &tls->agent_mutex); } - pthread_mutex_unlock(&agent_mutex); + pthread_mutex_unlock(&tls->agent_mutex); return JS_UNDEFINED; } @@ -685,17 +807,18 @@ static JSValue js_agent_monotonicNow(JSContext *ctx, JSValue this_val, static JSValue js_agent_getReport(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) { + ThreadLocalStorage *tls = JS_GetRuntimeOpaque(JS_GetRuntime(ctx)); AgentReport *rep; JSValue ret; - pthread_mutex_lock(&report_mutex); - if (list_empty(&report_list)) { + pthread_mutex_lock(&tls->report_mutex); + if (list_empty(&tls->report_list)) { rep = NULL; } else { - rep = list_entry(report_list.next, AgentReport, link); + rep = list_entry(tls->report_list.next, AgentReport, link); list_del(&rep->link); } - pthread_mutex_unlock(&report_mutex); + pthread_mutex_unlock(&tls->report_mutex); if (rep) { ret = JS_NewString(ctx, rep->str); free(rep->str); @@ -709,6 +832,7 @@ static JSValue js_agent_getReport(JSContext *ctx, JSValue this_val, static JSValue js_agent_report(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) { + ThreadLocalStorage *tls = JS_GetRuntimeOpaque(JS_GetRuntime(ctx)); const char *str; AgentReport *rep; @@ -719,9 +843,9 @@ static JSValue js_agent_report(JSContext *ctx, JSValue this_val, rep->str = strdup(str); JS_FreeCString(ctx, str); - pthread_mutex_lock(&report_mutex); - list_add_tail(&rep->link, &report_list); - pthread_mutex_unlock(&report_mutex); + pthread_mutex_lock(&tls->report_mutex); + list_add_tail(&rep->link, &tls->report_list); + pthread_mutex_unlock(&tls->report_mutex); return JS_UNDEFINED; } @@ -747,7 +871,6 @@ static JSValue js_new_agent(JSContext *ctx) countof(js_agent_funcs)); return agent; } -#endif static JSValue js_createRealm(JSContext *ctx, JSValue this_val, int argc, JSValue *argv) @@ -798,9 +921,7 @@ static JSValue add_helpers1(JSContext *ctx) JS_SetPropertyStr(ctx, obj262, "codePointRange", JS_NewCFunction(ctx, js_string_codePointRange, "codePointRange", 2)); -#ifdef CONFIG_AGENT JS_SetPropertyStr(ctx, obj262, "agent", js_new_agent(ctx)); -#endif JS_SetPropertyStr(ctx, obj262, "global", JS_DupValue(ctx, global_obj)); @@ -947,7 +1068,7 @@ void update_exclude_dirs(void) char *name; int i, j, count; - /* split directpries from exclude_list */ + /* split directories from exclude_list */ for (count = i = 0; i < ep->count; i++) { name = ep->array[i]; if (has_suffix(name, "/")) { @@ -959,7 +1080,7 @@ void update_exclude_dirs(void) } ep->count = count; - namelist_sort(dp); + namelist_sort(dp, TRUE); /* filter out excluded directories */ for (count = i = 0; i < lp->count; i++) { @@ -1240,11 +1361,28 @@ int longest_match(const char *str, const char *find, int pos, int *ppos, int lin return maxlen; } +static __attribute__((__format__(__printf__, 1, 2))) void print_error(const char *fmt, ...) +{ + char buf[1024]; + va_list ap; + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + if (update_errors) { + pthread_mutex_lock(&error_list_mutex); + namelist_add(&error_list, NULL, buf); + pthread_mutex_unlock(&error_list_mutex); + } else { + fputs(buf, stdout); + } +} + static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, const char *filename, int is_test, int is_negative, const char *error_type, FILE *outfile, int eval_flags, int is_async) { + ThreadLocalStorage *tls = JS_GetRuntimeOpaque(JS_GetRuntime(ctx)); JSValue res_val, exception_val; int ret, error_line, pos, pos_line; BOOL is_error, has_error_line, ret_promise; @@ -1258,7 +1396,7 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, /* a module evaluation returns a promise */ ret_promise = ((eval_flags & JS_EVAL_TYPE_MODULE) != 0); - async_done = 0; /* counter of "Test262:AsyncTestComplete" messages */ + tls->async_done = 0; /* counter of "Test262:AsyncTestComplete" messages */ res_val = JS_Eval(ctx, buf, buf_len, filename, eval_flags); @@ -1277,7 +1415,7 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, } else if (ret == 0) { if (is_async) { /* test if the test called $DONE() once */ - if (async_done != 1) { + if (tls->async_done != 1) { res_val = JS_ThrowTypeError(ctx, "$DONE() not called"); } else { res_val = JS_UNDEFINED; @@ -1386,11 +1524,11 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, } else { if (!s) { // not yet reported if (msg) { - fprintf(error_out, "%s:%d: %sunexpected error type: %s\n", - filename, error_line, strict_mode, msg); + print_error("%s:%d: %sunexpected error type: %s\n", + filename, error_line, strict_mode, msg); } else { - fprintf(error_out, "%s:%d: %sexpected error\n", - filename, error_line, strict_mode); + print_error("%s:%d: %sexpected error\n", + filename, error_line, strict_mode); } new_errors++; } @@ -1406,8 +1544,8 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len, longest_match(buf, p, pos, &pos, pos_line, &error_line); } } - fprintf(error_out, "%s:%d: %s%s%s\n", filename, error_line, strict_mode, - error_file ? "unexpected error: " : "", msg); + print_error("%s:%d: %s%s%s\n", filename, error_line, strict_mode, + error_file ? "unexpected error: " : "", msg); if (s && (!str_equal(s, msg) || error_line != s_line)) { printf("%s:%d: %sprevious error: %s\n", filename, s_line, strict_mode, s); @@ -1545,6 +1683,8 @@ static char *get_option(char **pp, int *state) void update_stats(JSRuntime *rt, const char *filename) { JSMemoryUsage stats; JS_ComputeMemoryUsage(rt, &stats); + + pthread_mutex_lock(&stats_mutex); if (stats_count++ == 0) { stats_avg = stats_all = stats_min = stats_max = stats; stats_min_filename = strdup(filename); @@ -1587,9 +1727,11 @@ void update_stats(JSRuntime *rt, const char *filename) { update(fast_array_elements); } #undef update + pthread_mutex_unlock(&stats_mutex); } -int run_test_buf(const char *filename, const char *harness, namelist_t *ip, +int run_test_buf(ThreadLocalStorage *tls, + const char *filename, const char *harness, namelist_t *ip, char *buf, size_t buf_len, const char* error_type, int eval_flags, BOOL is_negative, BOOL is_async, BOOL can_block) @@ -1602,6 +1744,7 @@ int run_test_buf(const char *filename, const char *harness, namelist_t *ip, if (rt == NULL) { fatal(1, "JS_NewRuntime failure"); } + JS_SetRuntimeOpaque(rt, tls); ctx = JS_NewContext(rt); if (ctx == NULL) { JS_FreeRuntime(rt); @@ -1630,15 +1773,13 @@ int run_test_buf(const char *filename, const char *harness, namelist_t *ip, if (dump_memory) { update_stats(rt, filename); } -#ifdef CONFIG_AGENT js_agent_free(ctx); -#endif JS_FreeContext(ctx); JS_FreeRuntime(rt); - test_count++; + atomic_inc(&test_count); if (ret) { - test_failed++; + atomic_inc(&test_failed); if (outfile) { /* do not output a failure number to minimize diff */ fprintf(outfile, " FAILED\n"); @@ -1647,7 +1788,7 @@ int run_test_buf(const char *filename, const char *harness, namelist_t *ip, return ret; } -int run_test(const char *filename, int index) +int run_test(ThreadLocalStorage *tls, const char *filename, int index) { char harnessbuf[1024]; char *harness; @@ -1853,7 +1994,7 @@ int run_test(const char *filename, int index) } if (skip || use_strict + use_nostrict == 0) { - test_skipped++; + atomic_inc(&test_skipped); ret = -2; } else { clock_t clocks; @@ -1866,12 +2007,12 @@ int run_test(const char *filename, int index) clocks = clock(); ret = 0; if (use_nostrict) { - ret = run_test_buf(filename, harness, ip, buf, buf_len, + ret = run_test_buf(tls, filename, harness, ip, buf, buf_len, error_type, eval_flags, is_negative, is_async, can_block); } if (use_strict) { - ret |= run_test_buf(filename, harness, ip, buf, buf_len, + ret |= run_test_buf(tls, filename, harness, ip, buf, buf_len, error_type, eval_flags | JS_EVAL_FLAG_STRICT, is_negative, is_async, can_block); } @@ -1889,7 +2030,8 @@ int run_test(const char *filename, int index) } /* run a test when called by test262-harness+eshost */ -int run_test262_harness_test(const char *filename, BOOL is_module) +int run_test262_harness_test(ThreadLocalStorage *tls, + const char *filename, BOOL is_module, BOOL can_block) { JSRuntime *rt; JSContext *ctx; @@ -1897,7 +2039,6 @@ int run_test262_harness_test(const char *filename, BOOL is_module) size_t buf_len; int eval_flags, ret_code, ret; JSValue res_val; - BOOL can_block; outfile = stdout; /* for js_print */ @@ -1905,6 +2046,7 @@ int run_test262_harness_test(const char *filename, BOOL is_module) if (rt == NULL) { fatal(1, "JS_NewRuntime failure"); } + JS_SetRuntimeOpaque(rt, tls); ctx = JS_NewContext(rt); if (ctx == NULL) { JS_FreeRuntime(rt); @@ -1912,7 +2054,6 @@ int run_test262_harness_test(const char *filename, BOOL is_module) } JS_SetRuntimeInfo(rt, filename); - can_block = TRUE; JS_SetCanBlock(rt, can_block); /* loader for ES6 modules */ @@ -1960,78 +2101,115 @@ int run_test262_harness_test(const char *filename, BOOL is_module) JS_FreeValue(ctx, promise); } free(buf); -#ifdef CONFIG_AGENT js_agent_free(ctx); -#endif JS_FreeContext(ctx); JS_FreeRuntime(rt); return ret_code; } -clock_t last_clock; +static int pthread_cond_timedwait2(pthread_cond_t *cond, pthread_mutex_t *mutex, int timeout) +{ + struct timespec ts; + + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += timeout / 1000; + ts.tv_nsec += (timeout % 1000) * 1000000; + if (ts.tv_nsec >= 1000000000) { + ts.tv_nsec -= 1000000000; + ts.tv_sec++; + } + return pthread_cond_timedwait(cond, mutex, &ts); +} + +void *show_progress(void *opaque) +{ + int test_skipped1, test_failed1, test_count1; + + pthread_mutex_lock(&progress_mutex); + for(;;) { + pthread_cond_timedwait2(&progress_cond, &progress_mutex, 50); + + test_failed1 = atomic_load(&test_failed); + test_count1 = atomic_load(&test_count); + test_skipped1 = atomic_load(&test_skipped); -void show_progress(int force) { - clock_t t = clock(); - if (force || !last_clock || (t - last_clock) > CLOCKS_PER_SEC / 20) { - last_clock = t; if (compact) { static int last_test_skipped; static int last_test_failed; static int dots; char c = '.'; - if (test_skipped > last_test_skipped) + + if (test_skipped1 > last_test_skipped) c = '-'; - if (test_failed > last_test_failed) + if (test_failed1 > last_test_failed) c = '!'; - last_test_skipped = test_skipped; - last_test_failed = test_failed; + last_test_skipped = test_skipped1; + last_test_failed = test_failed1; + fputc(c, stderr); - if (force || ++dots % 60 == 0) { + if (progress_exit_request || ++dots % 60 == 0) { fprintf(stderr, " %d/%d/%d\n", - test_failed, test_count, test_skipped); + test_failed1, test_count1, test_skipped1); } } else { /* output progress indicator: erase end of line and return to col 0 */ fprintf(stderr, "%d/%d/%d\033[K\r", - test_failed, test_count, test_skipped); + test_failed1, test_count1, test_skipped1); } fflush(stderr); + if (progress_exit_request) + break; } + pthread_mutex_unlock(&progress_mutex); + return NULL; } -static int slow_test_threshold; +enum { INCLUDE, EXCLUDE, SKIP }; -void run_test_dir_list(namelist_t *lp, int start_index, int stop_index) +int include_exclude_or_skip(int i) // naming is hard... { - int i; + if (namelist_find(&exclude_list, test_list.array[i]) >= 0) + return EXCLUDE; + if (i < start_index) + return SKIP; + if (stop_index >= 0 && i > stop_index) + return SKIP; + return INCLUDE; +} - namelist_sort(lp); - for (i = 0; i < lp->count; i++) { +typedef struct { + pthread_t tid; + int thread_index; +} RunTestDirThread; + +void *run_test_dir_list(void *opaque) +{ + RunTestDirThread *th = opaque; + ThreadLocalStorage tls_s, *tls = &tls_s; + namelist_t *lp = &test_list; + int i; + + init_thread_local_storage(tls); + + for (i = th->thread_index; i < lp->count; i += nthreads) { const char *p = lp->array[i]; - if (namelist_find(&exclude_list, p) >= 0) { - test_excluded++; - } else if (test_index < start_index) { - test_skipped++; - } else if (stop_index >= 0 && test_index > stop_index) { - test_skipped++; + int ti; + if (INCLUDE != include_exclude_or_skip(i)) + continue; + + if (slow_test_threshold != 0) { + ti = get_clock_ms(); } else { - int ti; - if (slow_test_threshold != 0) { - ti = get_clock_ms(); - } else { - ti = 0; - } - run_test(p, test_index); - if (slow_test_threshold != 0) { - ti = get_clock_ms() - ti; - if (ti >= slow_test_threshold) - fprintf(stderr, "\n%s (%d ms)\n", p, ti); - } - show_progress(FALSE); + ti = 0; + } + run_test(tls, p, i); + if (slow_test_threshold != 0) { + ti = get_clock_ms() - ti; + if (ti >= slow_test_threshold) + fprintf(stderr, "\n%s (%d ms)\n", p, ti); } - test_index++; } - show_progress(TRUE); + return NULL; } void help(void) @@ -2049,13 +2227,15 @@ void help(void) "-t show timings\n" "-u update error file\n" "-v verbose: output error messages\n" - "-T duration display tests taking more than 'duration' ms\n" + "-D duration display tests taking more than 'duration' ms\n" + "-T threads number of parallel threads\n" "-c file read configuration from 'file'\n" "-d dir run all test files in directory tree 'dir'\n" "-e file load the known errors from 'file'\n" "-f file execute single test from 'file'\n" "-r file set the report file name (default=none)\n" - "-x file exclude tests listed in 'file'\n"); + "-x file exclude tests listed in 'file'\n" + "--no-can-block set [[CanBlock]] to false (Atomics.wait will throw)\n"); exit(1); } @@ -2069,15 +2249,21 @@ char *get_opt_arg(const char *option, char *arg) int main(int argc, char **argv) { - int optind, start_index, stop_index; + ThreadLocalStorage tls_s, *tls = &tls_s; + int optind; BOOL is_dir_list; BOOL only_check_errors = FALSE; const char *filename; const char *ignore = ""; BOOL is_test262_harness = FALSE; BOOL is_module = FALSE; + BOOL can_block = TRUE; BOOL count_skipped_features = FALSE; clock_t clocks; + + init_thread_local_storage(tls); + pthread_mutex_init(&stats_mutex, NULL); + pthread_mutex_init(&error_list_mutex, NULL); #if !defined(_WIN32) compact = !isatty(STDERR_FILENO); @@ -2091,7 +2277,7 @@ int main(int argc, char **argv) if (*arg != '-') break; optind++; - if (strstr("-c -d -e -x -f -r -E -T", arg)) + if (strstr("-c -d -e -x -f -r -E -D -T", arg)) optind++; if (strstr("-d -f", arg)) ignore = "testdir"; // run only the tests from -d or -f @@ -2138,12 +2324,16 @@ int main(int argc, char **argv) report_filename = get_opt_arg(arg, argv[optind++]); } else if (str_equal(arg, "-E")) { only_check_errors = TRUE; - } else if (str_equal(arg, "-T")) { + } else if (str_equal(arg, "-D")) { slow_test_threshold = atoi(get_opt_arg(arg, argv[optind++])); + } else if (str_equal(arg, "-T")) { + nthreads = atoi(get_opt_arg(arg, argv[optind++])); } else if (str_equal(arg, "-N")) { is_test262_harness = TRUE; } else if (str_equal(arg, "--module")) { is_module = TRUE; + } else if (str_equal(arg, "--no-can-block")) { + can_block = FALSE; } else if (str_equal(arg, "--count_skipped_features")) { count_skipped_features = TRUE; } else { @@ -2156,10 +2346,18 @@ int main(int argc, char **argv) help(); if (is_test262_harness) { - return run_test262_harness_test(argv[optind], is_module); + return run_test262_harness_test(tls, argv[optind], is_module, can_block); + } + + if (nthreads == 0) { + nthreads = cpu_count(); + if (nthreads >= 8) { + // minus one to not (over)commit the system completely + nthreads--; + } } + nthreads = max_int(nthreads, 1); - error_out = stdout; if (error_filename) { error_file = load_file(error_filename, NULL); if (only_check_errors && error_file) { @@ -2169,10 +2367,6 @@ int main(int argc, char **argv) if (update_errors) { free(error_file); error_file = NULL; - error_out = fopen(error_filename, "w"); - if (!error_out) { - perror_exit(1, error_filename); - } } } @@ -2189,10 +2383,14 @@ int main(int argc, char **argv) } if (is_dir_list) { + RunTestDirThread *threads; + int i; + if (optind < argc && !isdigit((unsigned char)argv[optind][0])) { filename = argv[optind++]; namelist_load(&test_list, filename); } + start_index = 0; stop_index = -1; if (optind < argc) { @@ -2201,7 +2399,8 @@ int main(int argc, char **argv) stop_index = atoi(argv[optind++]); } } - if (!report_filename || str_equal(report_filename, "none")) { + /* XXX: could reorder the report and the errors when nthreads > 1 */ + if (!report_filename || str_equal(report_filename, "none") || nthreads > 1) { outfile = NULL; } else if (str_equal(report_filename, "-")) { outfile = stdout; @@ -2211,7 +2410,50 @@ int main(int argc, char **argv) perror_exit(1, report_filename); } } - run_test_dir_list(&test_list, start_index, stop_index); + + // exclude_dir_list has already been sorted by update_exclude_dirs() + namelist_sort(&test_list, TRUE); + namelist_sort(&exclude_list, TRUE); + + for (i = 0; i < test_list.count; i++) { + switch (include_exclude_or_skip(i)) { + case EXCLUDE: + test_excluded++; + break; + case SKIP: + test_skipped++; + break; + } + } + + pthread_cond_init(&progress_cond, NULL); + pthread_mutex_init(&progress_mutex, NULL); + pthread_create(&progress_thread, NULL, show_progress, NULL); + + threads = malloc(sizeof(threads[0]) * nthreads); + for (i = 0; i < nthreads; i++) { + RunTestDirThread *th = &threads[i]; + pthread_attr_t attr; + + th->thread_index = i; + + pthread_attr_init(&attr); + pthread_attr_setstacksize(&attr, 2 << 20); // 2 MB, glibc default + pthread_create(&th->tid, &attr, run_test_dir_list, th); + pthread_attr_destroy(&attr); + } + for (i = 0; i < nthreads; i++) + pthread_join(threads[i].tid, NULL); + free(threads); + + pthread_mutex_lock(&progress_mutex); + progress_exit_request = TRUE; + pthread_cond_signal(&progress_cond); + pthread_mutex_unlock(&progress_mutex); + pthread_join(progress_thread, NULL); + + pthread_mutex_destroy(&progress_mutex); + pthread_cond_destroy(&progress_cond); if (outfile && outfile != stdout) { fclose(outfile); @@ -2220,7 +2462,7 @@ int main(int argc, char **argv) } else { outfile = stdout; while (optind < argc) { - run_test(argv[optind++], -1); + run_test(tls, argv[optind++], -1); } } @@ -2279,17 +2521,28 @@ int main(int argc, char **argv) } fprintf(stderr, "\n"); if (show_timings) - fprintf(stderr, "Total time: %.3fs\n", (double)clocks / CLOCKS_PER_SEC); + fprintf(stderr, "Total user time: %.3fs (nthreads=%d)\n", (double)clocks / CLOCKS_PER_SEC, nthreads); } - if (error_out && error_out != stdout) { + if (update_errors) { + FILE *error_out = fopen(error_filename, "w"); + int i; + if (!error_out) { + perror_exit(1, error_filename); + } + /* sort the error list so that its order does not depend on + the thread scheduling */ + namelist_sort(&error_list, FALSE); + for (i = 0; i < error_list.count; i++) { + fputs(error_list.array[i], error_out); + } fclose(error_out); - error_out = NULL; } namelist_free(&test_list); namelist_free(&exclude_list); namelist_free(&exclude_dir_list); + namelist_free(&error_list); free(harness_dir); free(harness_skip_features); free(harness_skip_features_count); diff --git a/scripts/check-packages-built.ts b/scripts/check-packages-built.ts deleted file mode 100755 index 25944c39d..000000000 --- a/scripts/check-packages-built.ts +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env -S npx tsx -import fs from "node:fs" -import * as glob from "glob" -import * as sh from "./helpers" - -function hasMagic(str: string) { - return glob.hasMagic(str) || str.includes("!") -} - -function checkFiles(pkg: sh.WorkspaceJson, packageJson: sh.PackageJson) { - const mustExist = (fileName: string, msg: string) => { - const abs = fileName.startsWith(pkg.location) ? fileName : sh.resolve(pkg.location, fileName) - if (!fs.existsSync(abs)) { - throw new Error(`${msg}: ${abs}`) - } - } - - const globs = packageJson.files?.map((file) => sh.resolve(pkg.location, file)) - if (!globs) return - - const noMagic = globs.filter((str) => !hasMagic(str)) - for (const mustExist of noMagic) { - if (!fs.existsSync(mustExist)) { - throw new Error(`package.json files entry ${mustExist} does not exist`) - } - } - - const magic = globs.filter(hasMagic) - if (magic.length) { - const files = glob.sync(magic, { nodir: true }) - if (!files.length) { - throw new Error(`package.json globs ${JSON.stringify(magic)} did not match any files`) - } - } - - for (const [exportName, exportConditions] of Object.entries(packageJson.exports ?? {})) { - if (typeof exportConditions === "string") { - mustExist(exportConditions, `export ${exportName} file does not exist`) - } else if (!exportConditions) { - throw new Error(`export ${exportName} has no conditions`) - } else { - for (const [condition, exportFile] of Object.entries(exportConditions)) { - if (!exportFile) { - throw new Error(`export ${exportName} condition ${condition} has no file`) - } - mustExist(exportFile, `export ${exportName} condition ${condition} file does not exist`) - } - } - } - - packageJson.main && mustExist(packageJson.main, `package.json main file does not exist`) - packageJson.module && mustExist(packageJson.module, `package.json module file does not exist`) - packageJson.types && mustExist(packageJson.types, `package.json types file does not exist`) -} - -function checkReadme( - pkg: sh.WorkspaceJson, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _packageJson: sh.PackageJson, -) { - if (!fs.existsSync(sh.resolve(pkg.location, "README.md"))) { - throw new Error(`package.json files entry must include README.md`) - } -} - -function checkProperties(pkg: sh.WorkspaceJson, packageJson: sh.PackageJson) { - if (!packageJson.name) { - throw new Error(`package.json must include name`) - } - if (!packageJson.version) { - throw new Error(`package.json must include name`) - } - - if (packageJson.files || packageJson.exports) { - if (!packageJson.main) { - throw new Error(`package.json must include main`) - } - - if (packageJson.main) { - if (!packageJson.types) { - throw new Error(`package.json must include types`) - } - } - } -} - -for (const pkg of sh.getYarnWorkspaces()) { - const packageJson: sh.PackageJson = sh.readJson(sh.resolve(pkg.location, "package.json")) - if (packageJson.private) { - continue - } - - try { - checkFiles(pkg, packageJson) - checkReadme(pkg, packageJson) - checkProperties(pkg, packageJson) - } catch (error: any) { - error.message = `${pkg.location}: ${error.message}` - throw error - } -} diff --git a/scripts/downloadEcmaScriptModules.ts b/scripts/downloadEcmaScriptModules.ts deleted file mode 100755 index 082a9c30a..000000000 --- a/scripts/downloadEcmaScriptModules.ts +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env -S npx tsx - -import * as pathlib from "path" -import * as fs from "fs-extra" -import fetch from "node-fetch-commonjs" -import { matchAll, replaceAll } from "./generate" - -const CONFIG = { - destination: pathlib.resolve(process.env.DESTINATION || "./examples/imports"), - URLs: process.argv.slice(2), -} - -const IMPORT_FROM_RE = /from\s*"([^"]+)"/g -const IMPORT_EXPRESSION_RE = /import\s*\("([^"]+)"\)/g - -async function main() { - const { destination } = CONFIG - const queue = Array.from(CONFIG.URLs) - const queued = new Set(queue) - - function enqueue(url: string, baseUrl: string) { - const absoluteUrl = new URL(url, baseUrl).toString() - if (!queued.has(absoluteUrl)) { - console.log("enqueue", absoluteUrl) - queue.push(absoluteUrl) - queued.add(absoluteUrl) - } - } - - function nameFile(args: { target: string; baseUrl: string }) { - const { target, baseUrl } = args - const url = new URL(target, baseUrl) - return pathlib.join(destination, url.hostname, url.pathname) - } - - function renameImport(args: { target: string; baseUrl: string; fileName: string }) { - const targetFile = nameFile(args) - return pathlib.relative(pathlib.dirname(args.fileName), targetFile) - } - - async function process(url: string) { - const log = (...args: any[]) => console.log(`${url}`, ...args) - log("download") - const filename = nameFile({ target: url, baseUrl: url }) - const text = await (await fetch(url)).text() - const importFrom = matchAll(IMPORT_FROM_RE, text).map((match) => match[0]) - const importExpression = matchAll(IMPORT_EXPRESSION_RE, text).map((match) => match[0]) - log("parsed", { filename, importFrom, importExpression }) - let replaced = replaceAll(IMPORT_FROM_RE, text, (match) => { - const importTarget = match[1] - enqueue(importTarget, url) - const renamed = renameImport({ - target: importTarget, - baseUrl: url, - fileName: filename, - }) - log("replaced", importTarget, "->", renamed) - return `from "${renamed}"` - }) - replaced = replaceAll(IMPORT_EXPRESSION_RE, replaced, (match) => { - const importTarget = match[1] - enqueue(importTarget, url) - const renamed = renameImport({ - target: importTarget, - baseUrl: url, - fileName: filename, - }) - log("replaced", importTarget, "->", renamed) - return `import("${renamed}")` - }) - - await fs.mkdirp(pathlib.dirname(filename)) - await fs.writeFile(filename, replaced) - } - - while (queue.length > 0) { - const url = queue.shift()! - await process(url) - } -} - -main() diff --git a/scripts/emcc.sh b/scripts/emcc.sh deleted file mode 100755 index b9903ea75..000000000 --- a/scripts/emcc.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# Use system emcc if installed, otherwise use Docker. -set -eo pipefail - -if [[ -z "$EMSDK_USE_DOCKER" ]] && command -v emcc >/dev/null; then - if emcc --version | grep "$EMSDK_VERSION" >/dev/null; then - exec emcc "$@" - fi -fi - -if [[ -z "$EMSDK_PROJECT_ROOT" ]]; then - echo "EMSDK_PROJECT_ROOT must be set to a path" - exit 1 -fi - -DOCKER_ARGV=( - run --rm - -v "$EMSDK_PROJECT_ROOT:$EMSDK_PROJECT_ROOT" - -v "$(pwd):$(pwd)" - -u "$(id -u):$(id -g)" - -w "$(pwd)" -) - -if [[ -n "$EMSDK_DOCKER_CACHE" ]]; then - # There are some files that are not pre-build in the Docker image, - # and take a while to be automatically generated by emsdk. - # We cache these on the host inside EMSDK_DOCKER_CACHE. - EMSDK_DOCKER_CACHE_PATHS=( - sysroot/lib/wasm32-emscripten/lto - sysroot/lib/wasm32-emscripten/thinlto - sysroot/lib/wasm32-emscripten/pic - symbol_lists - ) - for dir in "${EMSDK_DOCKER_CACHE_PATHS[@]}"; do - host="$EMSDK_DOCKER_CACHE/$dir" - guest="/emsdk/upstream/emscripten/cache/$dir" - - mkdir -p "$host" - DOCKER_ARGV+=( - -v "$host:$guest" - ) - done -fi - -DOCKER_ARGV+=( - "${EMSDK_DOCKER_IMAGE}" emcc "$@" -) - -set -x -exec docker "${DOCKER_ARGV[@]}" diff --git a/scripts/generate.ts b/scripts/generate.ts deleted file mode 100755 index aac0ddaf1..000000000 --- a/scripts/generate.ts +++ /dev/null @@ -1,412 +0,0 @@ -#!/usr/bin/env -S npx tsx -// Generate symbols list -// Generate header file -import * as pathlib from "path" -import * as crypto from "crypto" -import * as fs from "fs-extra" -import { repoRoot } from "./helpers" -const USAGE = - "Usage: generate.ts [symbols | header | ffi] WRITE_PATH" + - "\ngenerate.ts hash READ_PATH WRITE_PATH" - -const rooted = (path: string) => pathlib.join(repoRoot, path) - -export class Context { - public INTERFACE_FILE_PATH = process.env.HEADER_FILE_PATH || rooted("./c/interface.c") - public FFI_TYPES_PATH = - process.env.FFI_TYPES_PATH || rooted("packages/quickjs-ffi-types/src/ffi-types.ts") - public DEBUG = process.env.DEBUG === "true" - public ASYNCIFY = process.env.ASYNCIFY === "true" - public TYPE_ONLY = process.env.TYPE_ONLY === "true" -} - -const ASSERT_SYNC_FN = "assertSync" - -const INCLUDE_RE = /^#include.*$/gm -const TYPEDEF_RE = /^\s*typedef\s+(.+)$/gm -const DECL_RE = /^([\w()* ]+[\s*]+)(QTS_\w+)(\((.*?)\)) ?{$/gm -const TS_EXPORT_TYPE_RE = /^export type (\w+)/gm -const EM_JS_RE = /^\s*EM_JS\((.+), ?\{$/gm - -function writeFile(filename: string, content: string) { - if (filename === "-") { - console.log(content) - return - } - - fs.writeFileSync(filename, content + "\n", "utf-8") -} - -export function getMatches(context: Context) { - const interfaceFile = fs.readFileSync(context.INTERFACE_FILE_PATH, "utf-8") - const matches = matchAll(DECL_RE, interfaceFile) - const includeMatches = matchAll(INCLUDE_RE, interfaceFile) - const typedefMatches = matchAll(TYPEDEF_RE, interfaceFile) - const emJsMatches = matchAll(EM_JS_RE, interfaceFile) - return { - matches, - includeMatches, - typedefMatches, - emJsMatches, - } -} - -function main() { - const [, , command, destination, hashDestination] = process.argv - const context = new Context() - - if (!command || !destination) { - throw new Error(USAGE) - } - - const { matches, includeMatches, typedefMatches, emJsMatches } = getMatches(context) - - if (command === "symbols") { - const symbols = buildSymbols(context, matches) - writeFile(destination, JSON.stringify(symbols)) - return - } - - if (command === "sync-symbols") { - const symbols = buildSyncSymbols(context, matches) - writeFile(destination, JSON.stringify(symbols)) - return - } - - if (command === "async-callback-symbols") { - const symbols = buildAsyncifySymbols(emJsMatches) - writeFile(destination, JSON.stringify(symbols)) - return - } - - if (command === "header") { - const includes = includeMatches - .map((match) => match[0]) - .filter((match) => !match.includes("emscripten")) - .join("\n") - const typedefs = typedefMatches.map((match) => match[0]).join("\n") - const decls = matches - .map((match) => { - const returnType = match[1] - const name = match[2] - const params = match[3] - return `${returnType}${name}${params};` - }) - .join("\n") - writeFile(destination, [includes, typedefs, decls].join("\n\n")) - return - } - - if (command === "ffi") { - writeFile(destination, buildFFI(context, matches)) - return - } - - if (command === "hash") { - updateHashFile(destination, hashDestination) - return - } - - throw new Error(`Bad command "${command}". ${USAGE}`) -} - -// $1: attribute name -// $2: inner type -const ATTRIBUTE_REGEX = /^(\w+)\((.+)\)$/ -type Attribute = "MaybeAsync" | "AsyncifyOnly" | "DebugOnly" - -function parseAttributes(type: string) { - let text = type - let match: RegExpExecArray | null = null - const attributes = new Set() - while ((match = ATTRIBUTE_REGEX.exec(text.trim())) !== null) { - attributes.add(match[1] as Attribute) - text = match[2] - } - - if (text.includes(")")) { - throw new Error(`parseAttributes should consume all attributes, but did not: ${text}`) - } - - return { type: text, attributes } -} - -interface ParsedType { - typescript: string - ffi: string | null - ctype: string - attributes: Set -} - -function cTypeToTypescriptType(ctype: string): ParsedType { - // eslint-disable-next-line prefer-const - let { type, attributes } = parseAttributes(ctype) - - // simplify - // remove const: ignored in JS - type = type.replace(/\bconst\b/, "").trim() - // collapse spaces (around a *, maybe) - type = type.split(" ").join("") - - // mapping - if (type.includes("char*")) { - return { ffi: "string", typescript: "string", ctype, attributes } - } - - if (type === "uint32_t*") { - return { ffi: "number", typescript: "UInt32Pointer", ctype, attributes } - } - - if (type.startsWith("enum")) { - return { ffi: "number", typescript: "number", ctype, attributes } - } - - let typescript = type.replace(/\*/g, "Pointer") - let ffi: string | null = "number" - - if (type === "bool") { - ffi = "boolean" - typescript = "boolean" - } - if (type === "void") { - ffi = null - } - if ( - type === "double" || - type === "int" || - type === "size_t" || - type === "uint16_t" || - type === "uint32_t" - ) { - ffi = "number" - typescript = "number" - } - if (type.includes("*")) { - ffi = "number" - } - - return { typescript, ffi, ctype, attributes } -} - -function renderFunction(args: { - context: Context - functionName: string - returnType: ParsedType - params: Array<{ name: string; type: ParsedType }> - async: boolean -}) { - const { functionName, returnType, params, async, context } = args - const typescriptParams = params - .map((param) => { - // Allow JSValue wherever JSValueConst is accepted. - const tsType = - param.type.typescript === "JSValueConstPointer" - ? "JSValuePointer | JSValueConstPointer" - : param.type.typescript - return `${param.name}: ${tsType}` - }) - .join(", ") - - const forceSync = context.ASYNCIFY && !async && returnType.attributes.has("MaybeAsync") - const markAsync = async && returnType.attributes.has("MaybeAsync") - - let typescriptFunctionName = functionName - if (markAsync) { - typescriptFunctionName += "_MaybeAsync" - } - - const typescriptReturnType = - async && returnType.attributes.has("MaybeAsync") - ? `${returnType.typescript} | Promise<${returnType.typescript}>` - : returnType.typescript - const typescriptFunctionType = `(${typescriptParams}) => ${typescriptReturnType}` - - const ffiParams = JSON.stringify(params.map((param) => param.type.ffi)) - const cwrapArgs = [JSON.stringify(functionName), JSON.stringify(returnType.ffi), ffiParams] - if (context.DEBUG && async) { - // https://emscripten.org/docs/porting/asyncify.html#usage-with-ccall - // Passing {async:true} to cwrap/ccall will wrap all return values in - // Promise.resolve(...), even if the c code doesn't suspend and returns a - // primitive value. - // - // When compiled with -s ASSERTIONS=1, Emscripten will throw if the - // function suspends and {async: true} wasn't passed. - // - // However, we'd like to avoid Promise/async overhead if the call can - // return a primitive value directly. So, we compile in {async:true} - // only in DEBUG mode, where assertions are enabled. - // - // Then we rely on our type system to ensure our code supports both - // primitive and promise-wrapped return values in production mode. - cwrapArgs.push("{ async: true }") - } - - let cwrap = `this.module.cwrap(${cwrapArgs.join(", ")})` - if (forceSync) { - cwrap = `${ASSERT_SYNC_FN}(${cwrap})` - } - - let result = ` ${typescriptFunctionName}: ${typescriptFunctionType}` - if (!context.TYPE_ONLY) { - result += ` =\n ${cwrap}` - } - - return result -} - -function getAvailableDefinitions(context: Context, matches: RegExpMatchArray[]) { - const parsed = matches.map((match) => { - const [, returnType, functionName, , rawParams] = match - const params = parseParams(rawParams) - return { functionName, returnType: cTypeToTypescriptType(returnType.trim()), params } - }) - const filtered = parsed.filter((fn) => { - if (fn.returnType.attributes.has("AsyncifyOnly")) { - return context.ASYNCIFY - } - - if (fn.returnType.attributes.has("DebugOnly")) { - return context.DEBUG - } - - return true - }) - return filtered -} - -function buildSymbols(context: Context, matches: RegExpMatchArray[]) { - const names = getAvailableDefinitions(context, matches).map((fn) => "_" + fn.functionName) - return names.concat("_malloc", "_free") -} - -function buildSyncSymbols(context: Context, matches: RegExpMatchArray[]) { - const parsed = getAvailableDefinitions(context, matches) - const filtered = parsed.filter((fn) => !fn.returnType.attributes.has("MaybeAsync")) - // Note: emscripten 5.0.1+ uses function names without underscore prefix in ASYNCIFY_REMOVE - return filtered.map((fn) => fn.functionName) -} - -// Input: EM_JS(MaybeAsync(JSValue *), qts_host_call_function, (JSContext * ctx, JSValueConst *this_ptr, int argc, JSValueConst *argv, uint32_t magic_func_id), { -// Match: MaybeAsync(JSValue *), qts_host_call_function, (JSContext * ctx, JSValueConst *this_ptr, int argc, JSValueConst *argv, uint32_t magic_func_id) -function buildAsyncifySymbols(matches: RegExpMatchArray[]) { - const parsed = matches.map((match) => { - const [, contents] = match - const [returnType, functionName] = contents.split(/\s*,/g).map((x) => x.trim()) - return { functionName, returnType: cTypeToTypescriptType(returnType) } - }) - const filtered = parsed.filter((fn) => fn.returnType.attributes.has("MaybeAsync")) - // TODO: does this need _? - return filtered.map((fn) => fn.functionName) -} - -export function buildFFI(context: Context, matches: RegExpExecArray[]) { - const parsed = getAvailableDefinitions(context, matches) - const decls: string[] = [] - parsed.forEach((fn) => { - if (!fn.returnType.attributes.has("AsyncifyOnly") || context.ASYNCIFY) { - decls.push(renderFunction({ ...fn, async: false, context })) - } - - if (fn.returnType.attributes.has("MaybeAsync") && context.ASYNCIFY) { - decls.push(renderFunction({ ...fn, async: true, context })) - } - }) - - const { FFI_TYPES_PATH, ASYNCIFY, TYPE_ONLY, DEBUG } = context - const ffiTypes = fs.readFileSync(FFI_TYPES_PATH, "utf-8") - const importFromFfiTypes = matchAll(TS_EXPORT_TYPE_RE, ffiTypes).map((match) => match[1]) - if (ASYNCIFY) { - importFromFfiTypes.push(ASSERT_SYNC_FN) - } - - const ffiClassName = ASYNCIFY ? "QuickJSAsyncFFI" : "QuickJSFFI" - const moduleTypeName = ASYNCIFY ? "QuickJSAsyncEmscriptenModule" : "QuickJSEmscriptenModule" - const declType = TYPE_ONLY ? "interface" : "class" - const importFrom = TYPE_ONLY ? "." : "@jitl/quickjs-ffi-types" - - const classString = ` -// This file generated by "generate.ts ffi" in the root of the repo. -import { - ${moduleTypeName}, - ${importFromFfiTypes.join(",\n ")} -} from "${importFrom}" - -/** - * Low-level FFI bindings to QuickJS's Emscripten module. - * See instead {@link QuickJSContext}, the public Javascript interface exposed by this - * library. - * - * @unstable The FFI interface is considered private and may change. - */ -export ${declType} ${ffiClassName} { - ${TYPE_ONLY ? "" : `constructor(private module: ${moduleTypeName}) {}`} - /** Set at compile time. */ - ${TYPE_ONLY ? "readonly DEBUG: boolean" : `readonly DEBUG = ${DEBUG}`} - -${decls.join(TYPE_ONLY ? "\n" : "\n\n")} -} - `.trim() - return classString -} - -function parseParams(paramListString: string) { - if (paramListString.trim().length === 0) { - return [] - } - const params = paramListString.split(",") - return params.map((paramString) => { - const lastWord = /\b\w+$/ - const name = paramString.match(lastWord) - const type = paramString.replace(lastWord, "").trim() - return { name: name ? name[0] : "", type: cTypeToTypescriptType(type) } - }) -} - -export function matchAll(regexp: RegExp, text: string) { - // We're using .exec, which mutates the regexp by setting the .lastIndex - const initialLastIndex = regexp.lastIndex - const result: RegExpExecArray[] = [] - let match: RegExpExecArray | null = null - while ((match = regexp.exec(text)) !== null) { - result.push(match) - } - regexp.lastIndex = initialLastIndex - return result -} - -export function replaceAll( - regexp: RegExp, - text: string, - replacement: (match: RegExpExecArray) => string, -) { - const matches = matchAll(regexp, text) - let i = 0 - const result = text.replace(regexp, () => { - const match = matches[i] - i++ - const result = replacement(match) - return result - }) - if (i !== matches.length) { - throw new Error(`Expected ${matches.length} matches, but got ${i}`) - } - return result -} - -function updateHashFile(src: string, dest: string) { - const bytes = fs.readFileSync(src) - const hash = crypto.createHash("md5").update(bytes).digest("hex") + "\n" - try { - const existing = fs.readFileSync(dest, "utf-8") - if (existing === hash) { - return - } - } catch (e) { - // pass - } - fs.writeFileSync(dest, hash) -} - -if (require.main === module) { - main() -} diff --git a/scripts/helpers.ts b/scripts/helpers.ts deleted file mode 100644 index a16b18e4c..000000000 --- a/scripts/helpers.ts +++ /dev/null @@ -1,204 +0,0 @@ -import path from "node:path" -import fs from "node:fs" -import p from "node:child_process" -import prettier from "prettier" - -export const repoRoot = path.resolve(__dirname, "..") -const packagesDir = path.resolve(repoRoot, "./packages") -const tarDir = path.resolve(repoRoot, "./build/tar") -let packageSubdirs: string[] | undefined - -const INSTALL_FROM_REGISTRY = Boolean(process.env.INSTALL_FROM_REGISTRY) - -function getPackageJson(packageName: string) { - packageSubdirs ??= fs.readdirSync(packagesDir).map((dir) => path.join(packagesDir, dir)) - const subname = packageName.split("/").at(-1) ?? "none" - let searchDirs = packageSubdirs.filter((dir) => dir.endsWith(subname)) - if (searchDirs.length === 0) { - searchDirs = packageSubdirs - } - for (const dir of searchDirs) { - try { - const packageJson = JSON.parse(fs.readFileSync(path.join(dir, "package.json"), "utf8")) - if (packageJson.name === packageName) { - return packageJson - } - } catch (e) { - console.warn(e) - } - } - throw new Error(`Could not find package.json for ${packageName} in ${searchDirs}`) -} - -function getTarFile(packageName: string) { - return path.join(tarDir, packageName.replace("/", "-") + ".tgz") -} - -export function exec(command: string) { - console.log(`+ ${command}`) - p.execSync(command, { encoding: "utf-8", stdio: "inherit" }) -} - -class InstallFlow { - removed = new Set() - added = new Set() - - constructor( - public into: string, - public commands: { install: string; remove: string; fromRegistry: boolean }, - ) {} - - add(packageName: string) { - this.visit(packageName, { - after: (pkg) => { - this.removed.add(pkg.name) - }, - }) - - this.visit(packageName, { - after: (pkg) => { - if (this.commands.fromRegistry) { - if (pkg.name === packageName) { - this.added.add(`${pkg.name}@${pkg.version}`) - } - return - } - - const tarFile = getTarFile(pkg.name) - this.added.add(`${pkg.name}@${tarFile}`) - }, - }) - - return this - } - - private visit( - packageName: string, - handle: { before?(pkg: PackageJson): void; after?(pkg: PackageJson): void }, - ) { - const packageJson = getPackageJson(packageName) - handle.before?.(packageJson) - for (const dependency of Object.keys(packageJson.dependencies ?? {})) { - this.visit(dependency, handle) - } - handle.after?.(packageJson) - } - - run() { - if (this.removed.size > 0) { - exec(`cd ${this.into} && ${this.commands.remove} ${[...this.removed].join(" ")}`) - } - - if (this.added.size > 0) { - exec(`cd ${this.into} && ${this.commands.install} ${[...this.added].join(" ")}`) - } - } -} - -export function installDependencyGraphFromTar( - into: string, - packageNameOrNames: string | string[], - cmds: { - install: string - remove: string - fromRegistry: boolean - } = { - install: "npm install", - remove: "npm remove", - fromRegistry: INSTALL_FROM_REGISTRY, - }, -) { - const packageNames = Array.isArray(packageNameOrNames) ? packageNameOrNames : [packageNameOrNames] - const flow = new InstallFlow(into, cmds) - for (const packageName of packageNames) { - flow.add(packageName) - } - flow.run() -} - -export function resolve(...parts: string[]) { - return path.resolve(...parts) -} - -export async function writePretty(filePath: string, text: string) { - let output = text - - const isPrettierUnsupportedType = - filePath.endsWith(".mk") || filePath.endsWith("Makefile") || path.extname(filePath) === "" - if (!isPrettierUnsupportedType) { - const prettierConfig = (await prettier.resolveConfig(filePath)) ?? {} - output = await prettier.format(text, { - ...prettierConfig, - filepath: filePath, - }) - } - console.warn(`write`, path.relative(process.cwd(), filePath)) - fs.writeFileSync(filePath, output) -} - -export interface WorkspaceJson { - location: string - name: string -} - -export function getYarnWorkspaces(): WorkspaceJson[] { - return p - .execSync("yarn workspaces list --json", { encoding: "utf-8" }) - .split("\n") - .filter(Boolean) - .map((line) => JSON.parse(line) as WorkspaceJson) -} - -export function readJson(filepath: string): T { - return JSON.parse(fs.readFileSync(filepath, "utf8")) -} - -export function tryReadJson(filepath: string): T | undefined { - try { - return readJson(filepath) - } catch (e) { - return undefined - } -} - -export interface PackageJson { - name: string - license: "MIT" | undefined - type?: "module" - private?: boolean - version: string - description: string - sideEffects: false - repository: { - type: string - url: string - } - scripts: Record - files: string[] - dependencies: Record - devDependencies?: Record - exports: Record< - string, - | { - types: string - browser?: string - module?: string - iife?: string - workerd?: string - import: string | undefined - require: string | undefined - default: string | undefined - } - | string - | undefined - > - types?: string - main?: string - module?: string - browser?: string - author: { - name: string - email?: string - url: string - } -} diff --git a/scripts/prepareVariants.ts b/scripts/prepareVariants.ts deleted file mode 100755 index fd523f4b6..000000000 --- a/scripts/prepareVariants.ts +++ /dev/null @@ -1,930 +0,0 @@ -#!/usr/bin/env -S npx tsx - -/** - * This file defines all the different variants of the quickjs WASM library. - */ - -import path from "node:path" -import fs from "node:fs" -import child_process from "node:child_process" -import type { TypeDocOptions } from "typedoc" -import type { PackageJson } from "./helpers" -import { writePretty, tryReadJson, repoRoot } from "./helpers" -import { Context, getMatches, buildFFI } from "./generate" - -const CLEAN = Boolean(process.env.CLEAN) - -// Variant variables. - -enum ReleaseMode { - Debug = "debug", - Release = "release", -} - -enum SyncMode { - Sync = "sync", - Asyncify = "asyncify", -} - -enum CLibrary { - QuickJS = "quickjs", - NG = "quickjs-ng", -} - -enum EmscriptenInclusion { - SingleFile = "singlefile", - Separate = "wasm", - AsmJs = "asmjs", -} - -// https://github.com/emscripten-core/emscripten/blob/7bed0e2477000603c26766897e1f455c08bc3358/src/settings.js#L647 -enum EmscriptenEnvironment { - web = "web", - webview = "webview", - worker = "worker", - node = "node", -} - -const DEFAULT_EMSCRIPTEN_VERSION = "5.0.1" -// Use older emscripten for asmjs to avoid relying on newer browser APIs -const ASMJS_EMSCRIPTEN_VERSION = "3.1.43" - -interface BuildVariant { - description: string - releaseMode: ReleaseMode - syncMode: SyncMode - library: CLibrary - emscriptenInclusion: EmscriptenInclusion - /** Emscripten SDK version. Defaults to DEFAULT_EMSCRIPTEN_VERSION. */ - emscriptenVersion?: string - exports: { - browser?: { - emscriptenEnvironment: EmscriptenEnvironment[] - } - import?: { - emscriptenEnvironment: EmscriptenEnvironment[] - } - require?: { - emscriptenEnvironment: EmscriptenEnvironment[] - } - workerd?: { - emscriptenEnvironment: EmscriptenEnvironment[] - } - } -} - -const SEPARATE_FILE_INCLUSION: BuildVariant["exports"] = { - require: { - emscriptenEnvironment: [EmscriptenEnvironment.node], - }, - import: { - emscriptenEnvironment: [EmscriptenEnvironment.node], - }, - browser: { - emscriptenEnvironment: [EmscriptenEnvironment.web, EmscriptenEnvironment.worker], - }, - workerd: { - // note: EmscriptenEnvironment.worker is broken in Cloudflare Workers - // see https://github.com/cloudflare/worker-emscripten-template/blob/master/pre.js - emscriptenEnvironment: [EmscriptenEnvironment.web], - }, -} - -const buildMatrix = { - library: [CLibrary.QuickJS, CLibrary.NG], - releaseMode: [ReleaseMode.Debug, ReleaseMode.Release], - syncMode: [SyncMode.Sync, SyncMode.Asyncify], -} as const - -// Targets: groups of variants. - -const targets = { - wasmfile: makeTarget({ - description: `Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.`, - emscriptenInclusion: EmscriptenInclusion.Separate, - exports: SEPARATE_FILE_INCLUSION, - }), - "singlefile-cjs": makeTarget({ - description: `Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.`, - emscriptenInclusion: EmscriptenInclusion.SingleFile, - exports: { - require: { - emscriptenEnvironment: [ - EmscriptenEnvironment.web, - EmscriptenEnvironment.worker, - EmscriptenEnvironment.node, - ], - }, - }, - }), - "singlefile-mjs": makeTarget({ - description: `Variant with the WASM data embedded into a NodeJS ESModule.`, - emscriptenInclusion: EmscriptenInclusion.SingleFile, - exports: { - import: SEPARATE_FILE_INCLUSION.import, - }, - }), - "singlefile-browser": makeTarget({ - description: `Variant with the WASM data embedded into a browser ESModule.`, - emscriptenInclusion: EmscriptenInclusion.SingleFile, - exports: { - browser: SEPARATE_FILE_INCLUSION.browser, - }, - }), - "asmjs-mjs": makeTarget({ - description: `Compiled to pure Javascript, no WebAssembly required.`, - emscriptenInclusion: EmscriptenInclusion.AsmJs, - emscriptenVersion: ASMJS_EMSCRIPTEN_VERSION, - releaseMode: ReleaseMode.Release, - syncMode: SyncMode.Sync, - library: CLibrary.QuickJS, - exports: { - import: { - emscriptenEnvironment: [ - EmscriptenEnvironment.web, - EmscriptenEnvironment.worker, - EmscriptenEnvironment.node, - ], - }, - }, - }), -} - -type TargetSpec = Partial & - Pick> -function makeTarget(partialVariant: TargetSpec): BuildVariant[] { - const allVariants = buildMatrix.library.flatMap((library) => { - return buildMatrix.releaseMode.flatMap((releaseMode) => { - return buildMatrix.syncMode.flatMap((syncMode) => { - const variant = { - library, - releaseMode, - syncMode, - ...partialVariant, - } - - // Eliminate singlefile builds for quickjs-ng - if ( - variant.library === CLibrary.NG && - variant.emscriptenInclusion === EmscriptenInclusion.SingleFile - ) { - return [] - } - - return variant - }) - }) - }) - - const seen = new Set() - return allVariants.filter((variant) => { - const key = JSON.stringify(variant) - if (seen.has(key)) { - return false - } else { - seen.add(key) - return true - } - }) -} - -// Build settings for variables - -const ASYNCIFY_STACK_SIZE = 81920 -const SyncModeFlags = { - [SyncMode.Sync]: [], - [SyncMode.Asyncify]: [ - `-s ASYNCIFY=1`, - `-DQTS_ASYNCIFY=1`, - `-DQTS_ASYNCIFY_DEFAULT_STACK_SIZE=${ASYNCIFY_STACK_SIZE}`, - `-s ASYNCIFY_STACK_SIZE=${ASYNCIFY_STACK_SIZE}`, - `-s ASYNCIFY_REMOVE=@$(BUILD_WRAPPER)/asyncify-remove.json`, - `-s ASYNCIFY_IMPORTS=@$(BUILD_WRAPPER)/asyncify-imports.json`, - `-lasync.js`, - ], -} - -const ReleaseModeFlags = { - [ReleaseMode.Release]: [ - `-Oz`, - `-flto`, - `--closure 1`, - `-s FILESYSTEM=0`, - `--pre-js $(TEMPLATES)/pre-extension.js`, - `--pre-js $(TEMPLATES)/pre-wasmMemory.js`, - ], - [ReleaseMode.Debug]: [ - `-O0`, - "-DQTS_DEBUG_MODE", - `-DDUMP_LEAKS=1`, - `-gsource-map`, - `-s ASSERTIONS=1`, - `--pre-js $(TEMPLATES)/pre-extension.js`, - `--pre-js $(TEMPLATES)/pre-sourceMapJson.js`, - `--pre-js $(TEMPLATES)/pre-wasmOffsetConverter.js`, - `--pre-js $(TEMPLATES)/pre-wasmMemory.js`, - ], -} - -const EmscriptenInclusionFlags = { - [EmscriptenInclusion.Separate]: [], - [EmscriptenInclusion.SingleFile]: [`-s SINGLE_FILE=1`], - [EmscriptenInclusion.AsmJs]: [`-s WASM=0`, `-s SINGLE_FILE=1`, `-s WASM_ASYNC_COMPILATION=0`], -} - -function getCflags(targetName: string, variant: BuildVariant) { - const flags: string[] = [] - - flags.push(...SyncModeFlags[variant.syncMode]) - flags.push(...ReleaseModeFlags[variant.releaseMode]) - flags.push(...EmscriptenInclusionFlags[variant.emscriptenInclusion]) - - if (variant.releaseMode === ReleaseMode.Debug) { - switch (variant.syncMode) { - case SyncMode.Sync: - flags.push() - flags.push("-DQTS_SANITIZE_LEAK") - flags.push("-fsanitize=leak") - flags.push("-g2") - break - case SyncMode.Asyncify: - // flags.push("-s ASYNCIFY_ADVISE=1") - flags.push( - // # Need to use -O3 - otherwise ASYNCIFY leads to stack overflows (why?) - "-O3", - ) - break - } - } - - return flags -} - -function getExportCflags(variant: BuildVariant, exportName: keyof BuildVariant["exports"]) { - const exportVariant = variant.exports[exportName] - if (!exportVariant) { - return [] - } - - const emscriptenEnvironment = exportVariant.emscriptenEnvironment.join(",") - const flags = [`-s ENVIRONMENT=${emscriptenEnvironment}`] - - return flags -} - -function getGenerateTsEnv(targetName: string, variant: BuildVariant): Record { - const env: Record = {} - - if (variant.syncMode === SyncMode.Asyncify) { - env.ASYNCIFY = "true" - } - - if (variant.releaseMode === ReleaseMode.Debug) { - env.DEBUG = "true" - } - - return env -} - -// Action - -if (require.main === module) { - main().catch((error) => { - console.error(error) - process.exit(2) - }) -} - -interface TsConfig { - extends: string - include: string[] - files?: string[] - exclude: string[] -} - -interface FinalVariant { - basename: string - targetName: string - dir: string - packageJson: PackageJson - variant: BuildVariant -} - -async function main() { - const variantsJson: Record = {} - const coreReadmeVariantDescriptions: string[] = [] - - const ffiTypesDir = path.join(repoRoot, "packages/quickjs-ffi-types") - await writePretty( - path.join(ffiTypesDir, "src/ffi.ts"), - buildFFI( - ...createContext({ - TYPE_ONLY: true, - ASYNCIFY: false, - }), - ), - ) - await writePretty( - path.join(ffiTypesDir, "src/ffi-async.ts"), - buildFFI( - ...createContext({ - TYPE_ONLY: true, - ASYNCIFY: true, - }), - ), - ) - - // Maintain license files - const coreDir = path.join(repoRoot, "packages/quickjs-emscripten-core") - const mainDir = path.join(repoRoot, "packages/quickjs-emscripten") - for (const ownPackage of [coreDir, mainDir, ffiTypesDir]) { - fs.copyFileSync(path.join(repoRoot, "LICENSE"), path.join(ownPackage, "LICENSE")) - } - - for (const [targetName, variants] of Object.entries(targets)) { - for (const variant of variants) { - const basename = getTargetPackageSuffix(targetName, variant) - const dir = path.join(repoRoot, "packages", `variant-${basename}`) - const dist = path.join(dir, "dist") - const src = path.join(dir, "src") - - const makeDirs = [dist, src] - for (const dirToMake of makeDirs) { - if (CLEAN) { - try { - fs.rmdirSync(dirToMake, { recursive: true }) - } catch (e) { - console.log("ignore", e) - } - } - fs.mkdirSync(dirToMake, { recursive: true }) - } - - const rootPackageJson: PackageJson | undefined = tryReadJson( - path.join(repoRoot, "package.json"), - ) - const packageJsonPath = path.join(dir, "package.json") - const existingPackageJson: PackageJson | undefined = tryReadJson(packageJsonPath) - - const { js, mjs } = getTsupExtensions(variant) - const indexExports = { - types: js ? "./dist/index.d.ts" : "./dist/index.d.mts", - main: js ? "./dist/index.js" : "./dist/index.mjs", - module: mjs ? "./dist/index.mjs" : undefined, - } - const ffiExports = { - types: js ? "./dist/ffi.d.ts" : "./dist/ffi.d.mts", - import: mjs ? "./dist/ffi.mjs" : "./dist/ffi.js", - require: js ? "./dist/ffi.js" : undefined, - default: js ? "./dist/ffi.js" : "./dist/ffi.mjs", - } - const emscriptenExports = { - types: variant.exports.browser - ? "./dist/emscripten-module.browser.d.ts" - : "./dist/emscripten-module.d.ts", - iife: variant.exports.require ? "./dist/emscripten-module.cjs" : undefined, - workerd: variant.exports.workerd ? "./dist/emscripten-module.cloudflare.cjs" : undefined, - browser: variant.exports.browser ? "./dist/emscripten-module.browser.mjs" : undefined, - import: variant.exports.import - ? "./dist/emscripten-module.mjs" - : variant.exports.browser - ? "./dist/emscripten-module.browser.mjs" - : "./dist/emscripten-module.cjs", - require: variant.exports.require ? "./dist/emscripten-module.cjs" : undefined, - default: variant.exports.require ? "./dist/emscripten-module.cjs" : undefined, - } - emscriptenExports.default = - emscriptenExports.default ?? - emscriptenExports.require ?? - emscriptenExports.import ?? - emscriptenExports.browser - - const packageJson: PackageJson = { - name: `@jitl/${basename}`, - license: rootPackageJson?.license, - version: existingPackageJson?.version ?? rootPackageJson?.version ?? "0.0.0", - description: `Variant of quickjs library: ${variant.description}`, - sideEffects: false, - repository: { - type: "git", - url: "https://github.com/justjake/quickjs-emscripten", - }, - author: { - name: "Jake Teton-Landis", - url: "https://jake.tl", - }, - scripts: { - build: "yarn build:c && yarn build:ts", - "build:c": variant.exports.import && variant.exports.require ? "make" : "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - clean: "make clean", - prepare: "yarn clean && yarn build", - }, - files: ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - types: indexExports.types, - main: indexExports.main, - module: indexExports.module, - browser: variant.exports.browser ? "./dist/index.mjs" : undefined, - exports: { - ".": { - types: indexExports.types, - import: indexExports.module ?? indexExports.main, - require: js ? "./dist/index.js" : undefined, - default: indexExports.main, - }, - "./package.json": "./package.json", - "./ffi": - variant.emscriptenInclusion !== EmscriptenInclusion.AsmJs ? ffiExports : undefined, - "./wasm": - variant.emscriptenInclusion === EmscriptenInclusion.Separate - ? "./dist/emscripten-module.wasm" - : undefined, - "./emscripten-module": emscriptenExports, - }, - dependencies: { - "@jitl/quickjs-ffi-types": "workspace:*", - }, - } - - const tsConfig: TsConfig = { - extends: "@jitl/tsconfig/tsconfig.json", - include: ["src/*"], - exclude: ["node_modules"], - } - - const typedocConfig: Partial & { extends?: string; mergeReadme?: boolean } = { - extends: "../../typedoc.base.js", - entryPoints: ["./src/index.ts"], - mergeReadme: true, - } - - const finalVariant: FinalVariant = { - basename, - targetName, - dir: path.relative(repoRoot, dir), - packageJson, - variant, - } - - if (finalVariant.dir in variantsJson) { - throw new Error(`Duplicate variant dir ${finalVariant.dir}`) - } - variantsJson[finalVariant.dir] = { - ...finalVariant, - packageJson: { - ...finalVariant.packageJson, - version: "(omitted)", - }, - } - - await writePretty(path.join(dir, "package.json"), JSON.stringify(packageJson)) - await writePretty(path.join(dir, "LICENSE"), renderLicense(targetName, variant)) - await writePretty(path.join(dir, "tsconfig.json"), JSON.stringify(tsConfig)) - await writePretty(path.join(dir, "typedoc.json"), JSON.stringify(typedocConfig)) - await writePretty(path.join(dir, "README.md"), renderReadme(targetName, variant, packageJson)) - await writePretty(path.join(dir, "Makefile"), renderMakefile(targetName, variant)) - await writePretty(path.join(dir, "tsup.config.ts"), renderTsupConfig(variant, packageJson)) - const readmeSummary = renderReadmeSummary(targetName, variant, packageJson) - await writePretty( - path.join(src, "index.ts"), - renderIndexTs(targetName, variant, readmeSummary, packageJson), - ) - await writePretty(path.join(src, "ffi.ts"), renderFfiTs(targetName, variant)) - coreReadmeVariantDescriptions.push(readmeSummary) - } - } - - await writePretty( - path.join(repoRoot, "packages/quickjs-emscripten-core/README.md"), - renderCoreReadme(coreReadmeVariantDescriptions), - ) - await writePretty(path.join(repoRoot, "variants.json"), JSON.stringify(variantsJson)) -} - -const describeInclusion = { - [EmscriptenInclusion.SingleFile]: `The WASM runtime is included directly in the JS file. Use if you run into issues with missing .wasm files when building or deploying your app.`, - [EmscriptenInclusion.Separate]: `Has a separate .wasm file. May offer better caching in your browser, and reduces the size of your JS bundle. If you have issues, try a 'singlefile' variant.`, - [EmscriptenInclusion.AsmJs]: `The C library code is compiled to Javascript, no WebAssembly used. Sometimes called "asmjs". This is the slowest possible option, and is intended for constrained environments that do not support WebAssembly, like quickjs-for-quickjs.`, -} - -const describeMode = { - [ReleaseMode.Debug]: `Enables assertions and memory sanitizers. Try to run your tests against debug variants, in addition to your preferred production variant, to catch more bugs.`, - [ReleaseMode.Release]: `Optimized for performance; use when building/deploying your application.`, -} - -const DOC_ROOT_URL = `https://github.com/justjake/quickjs-emscripten/blob/main/doc` - -const describeSyncMode = { - [SyncMode.Sync]: `The default, normal build. Note that both variants support regular async functions.`, - [SyncMode.Asyncify]: ` -Build run through the ASYNCIFY WebAssembly transform. -This imposes substantial size (2x the size of sync) and speed penalties (40% the speed of sync). -In return, allows synchronous calls from the QuickJS WASM runtime to async functions on the host. -The extra magic makes this variant slower than sync variants. -Note that both variants support regular async functions. -Only adopt ASYNCIFY if you need to! -The [QuickJSAsyncRuntime](${DOC_ROOT_URL}/quickjs-emscripten/classes/QuickJSAsyncRuntime.md) -and [QuickJSAsyncContext](${DOC_ROOT_URL}/quickjs-emscripten/classes/QuickJSAsyncContext.md) classes expose the ASYNCIFY-specific APIs. -` - .trim() - .split("\n") - .join(" "), -} - -const describeLibrary = { - [CLibrary.QuickJS]: `The original [bellard/quickjs](https://github.com/bellard/quickjs) library.`, - [CLibrary.NG]: `[quickjs-ng](https://github.com/quickjs-ng/quickjs) is a fork of quickjs that tends to add features more quickly.`, -} - -const describeModuleFactory = { - [SyncMode.Sync]: `newQuickJSWASMModuleFromVariant`, - [SyncMode.Asyncify]: `newQuickJSAsyncWASMModuleFromVariant`, -} - -const describeExport = { - browser: `Exports a browser-compatible ESModule, designed to work in browsers and browser-like environments.`, - require: `Exports a NodeJS-compatible CommonJS module, which is faster to load and run compared to an ESModule.`, - import: `Exports a NodeJS-compatible ESModule. Cannot be imported synchronously from a NodeJS CommonJS module.`, - workerd: `Targets Cloudflare Workers.`, -} - -function renderCoreReadme(variantDescriptions: string[]): string { - const template = new TemplateFile( - fs.readFileSync( - path.join(repoRoot, "packages/quickjs-emscripten-core/README.template.md"), - "utf-8", - ), - ) - template.replace("", variantDescriptions.join("\n\n")) - template.replace( - "__EDIT_THIS_FILE_NOT_README_MD__", - "DO NOT EDIT THIS FILE. Edit README.template.md instead.", - ) - return template.text -} - -function renderReadmeSummary( - targetName: string, - variant: BuildVariant, - packageJson: PackageJson, -): string { - const baseURL = "https://github.com/justjake/quickjs-emscripten/blob/main/doc" - const packageURL = `${baseURL}/${packageJson.name}/README.md` - const inclusion = describeInclusion[variant.emscriptenInclusion] - const hasExports = Object.keys(variant.exports).join(" ") - return `### ${packageJson.name} - -[Docs](${packageURL}) | -${variant.description} - -| Variable | Setting | Description | -| -- | -- | -- | -| library | ${variant.library} | ${ - describeLibrary[variant.library] - } Version ${getLibraryVersionLink(variant.library)} | -| releaseMode | ${variant.releaseMode} | ${describeMode[variant.releaseMode]} | -| syncMode | ${variant.syncMode} | ${describeSyncMode[variant.syncMode]} | -| emscriptenInclusion | ${variant.emscriptenInclusion} | ${inclusion} | -| exports | ${hasExports} | Has these package.json export conditions | -` -} - -function renderReadme(targetName: string, variant: BuildVariant, packageJson: PackageJson): string { - const codeFence = (lang: string, text: string) => `\`\`\`${lang}\n${text}\n\`\`\`` - const json = (obj: any) => codeFence("json", JSON.stringify(obj, null, 2)) - const create = describeModuleFactory[variant.syncMode] - const hasExports = Object.keys(variant.exports).join(" ") - const exportsList = (Object.keys(variant.exports) as Array) - .map((exportName) => `- ${describeExport[exportName]}`) - .join("\n") - - return `# ${packageJson.name} - -${variant.description} - -This generated package is part of [quickjs-emscripten](https://github.com/justjake/quickjs-emscripten). -It contains a variant of the quickjs WASM library, and can be used with quickjs-emscripten-core. - -${codeFence( - "typescript", - ` -import variant from '${packageJson.name}' -import { ${create} } from 'quickjs-emscripten-core' -const QuickJS = await ${create}(variant) -`, -)} - -This variant was built with the following settings: - -## Library: ${variant.library} - -${describeLibrary[variant.library]} - -Version ${getLibraryVersionLink(variant.library)} - -## Release mode: ${variant.releaseMode} - -${describeMode[variant.releaseMode]} - -## Exports: ${hasExports} - -Exports the following in package.json for the package entrypoint: - -${exportsList} - -## Extra async magic? ${variant.syncMode === SyncMode.Asyncify ? "Yes" : "No"} - -${describeSyncMode[variant.syncMode]} - -## Single-file, or separate .wasm file? ${variant.emscriptenInclusion} - -${describeInclusion[variant.emscriptenInclusion]} - -## More details - -Full variant JSON description: - -${json(variant)} - -Variant-specific Emscripten build flags: - -${json(getCflags(targetName, variant))} -` -} - -class TemplateFile { - constructor(public text: string) {} - - replace(pattern: string | RegExp, replacement: string) { - const nextText = this.text.replace(pattern, replacement) - if (nextText === this.text) { - throw new Error(`Failed to replace ${pattern} with ${replacement}`) - } - this.text = nextText - } - - toString() { - return this.text - } -} - -function renderMakefile(targetName: string, variant: BuildVariant): string { - const template = new TemplateFile( - fs.readFileSync(path.join(repoRoot, "templates/Variant.mk"), "utf-8"), - ) - - const appendEnvVars = (varname: string, flags: string[]) => - flags.map((flag) => `${varname}+=${flag}`).join("\n") - - const emscriptenVersion = variant.emscriptenVersion ?? DEFAULT_EMSCRIPTEN_VERSION - template.replace("REPLACE_EMSDK_VERSION", emscriptenVersion) - - template.replace("QUICKJS_LIB=REPLACE_THIS", `QUICKJS_LIB=${variant.library}`) - - template.replace( - "CFLAGS_ALL=REPLACE_THIS", - appendEnvVars("CFLAGS_WASM", getCflags(targetName, variant)), - ) - - template.replace( - "CFLAGS_CJS=REPLACE_THIS", - appendEnvVars("CFLAGS_CJS", getExportCflags(variant, "require")), - ) - - template.replace( - "CFLAGS_MJS=REPLACE_THIS", - appendEnvVars("CFLAGS_MJS", getExportCflags(variant, "import")), - ) - - template.replace( - "CFLAGS_BROWSER=REPLACE_THIS", - appendEnvVars("CFLAGS_BROWSER", getExportCflags(variant, "browser")), - ) - - template.replace( - "CFLAGS_CLOUDFLARE=REPLACE_THIS", - appendEnvVars("CFLAGS_CLOUDFLARE", getExportCflags(variant, "workerd")), - ) - - template.replace( - "GENERATE_TS_ENV_VARIANT=REPLACE_THIS", - appendEnvVars( - "GENERATE_TS_ENV", - Object.entries(getGenerateTsEnv(targetName, variant)).map( - ([key, value]) => `${key}=${value}`, - ), - ), - ) - - template.replace("SYNC=REPLACE_THIS", `SYNC=${variant.syncMode.toUpperCase()}`) - - const targets: string[] = [] - if (variant.exports.browser) { - targets.push("BROWSER") - } - if (variant.exports.import) { - targets.push("MJS") - } - if (variant.exports.require) { - targets.push("CJS") - } - if (variant.exports.workerd) { - targets.push("CLOUDFLARE") - } - template.replace(/^EXPORTS: __REPLACE_THIS__/gm, `EXPORTS: ${targets.join(" ")}`) - - if (template.text.includes("REPLACE_THIS")) { - throw new Error(`Didn't replace all REPLACE_THIS in Variant.mk`) - } - - return template.text -} - -function renderIndexTs( - targetName: string, - variant: BuildVariant, - docCommentContents: string, - packageJson: PackageJson, -): string { - const docComment = docCommentContents - .split("\n") - .map((line) => ` * ${line}`) - .join("\n") - - const className = { - [SyncMode.Sync]: "QuickJSFFI", - [SyncMode.Asyncify]: "QuickJSAsyncFFI", - }[variant.syncMode] - - const modeName = { - [SyncMode.Sync]: "sync", - [SyncMode.Asyncify]: "async", - }[variant.syncMode] - - const variantTypeName = { - [SyncMode.Sync]: "QuickJSSyncVariant", - [SyncMode.Asyncify]: "QuickJSAsyncVariant", - }[variant.syncMode] - - if (variant.emscriptenInclusion === EmscriptenInclusion.AsmJs) { - // Eager loading please! - return ` -import type { ${variantTypeName} } from '@jitl/quickjs-ffi-types' -import moduleLoader from '${packageJson.name}/emscripten-module' -import { ${className} } from './ffi.js' -/** -${docComment} - */ -const variant: ${variantTypeName} = { - type: '${modeName}', - importFFI: () => Promise.resolve(${className}), - importModuleLoader: () => Promise.resolve(moduleLoader), -} as const -export default variant -` - } - - return ` -import type { ${variantTypeName} } from '@jitl/quickjs-ffi-types' - -/** -${docComment} - */ -const variant: ${variantTypeName} = { - type: '${modeName}', - importFFI: () => import('./ffi.js').then(mod => mod.${className}), - importModuleLoader: () => import('${packageJson.name}/emscripten-module').then(mod => mod.default), -} as const - -export default variant -` -} - -function renderFfiTs(targetName: string, variant: BuildVariant): string { - const env = getGenerateTsEnv(targetName, variant) - return buildFFI(...createContext(env)) -} - -function renderLicense(targetName: string, variant: BuildVariant): string { - const baseLicense = fs.readFileSync(path.join(repoRoot, "LICENSE"), "utf-8") - const libraryLicense = fs.readFileSync( - path.join(repoRoot, CLibrarySubtree[variant.library], "LICENSE"), - "utf-8", - ) - return `quickjs-emscripten:\n${baseLicense}\n\n${variant.library}:\n${libraryLicense}` -} - -function getTsupExtensions(variant: BuildVariant) { - const wantsESM = Boolean(variant.exports.import || variant.exports.browser) - const wantsCJS = Boolean(variant.exports.require) - return { - js: wantsCJS, - mjs: wantsESM, - } -} - -function renderTsupConfig(variant: BuildVariant, packageJson: PackageJson): string { - const { js, mjs } = getTsupExtensions(variant) - const external: string[] = [] - const needsExternal = - [variant.exports.browser, variant.exports.import, variant.exports.require].filter(Boolean) - .length > 1 - if (needsExternal) { - external.push(`${packageJson.name}/emscripten-module`) - } - - const entry = ["src/index.ts"] - if (variant.emscriptenInclusion !== EmscriptenInclusion.AsmJs) { - entry.push("src/ffi.ts") - } - - const formats = [mjs && "esm", js && "cjs"].filter(Boolean) - return ` -import { extendConfig } from "@jitl/tsconfig/tsup.base.config.js" -export default extendConfig({ - entry: ${JSON.stringify(entry)}, - external: ${JSON.stringify(external)}, - format: ${JSON.stringify(formats)}, - clean: false, -}) -` -} - -function createContext(merged: Partial = {}) { - const context = new Context() - Object.assign(context, merged) - const matches = getMatches(context).matches - return [context, matches] as const -} - -function getTargetPackageSuffix(targetName: string, variant: BuildVariant): string { - const { releaseMode, syncMode, library } = variant - const filename = [ - library, // quickjs - targetName, // node-cjs - releaseMode, // debug - syncMode, // sync - ].join("-") - return filename -} - -const CLibrarySubtree: Record = { - quickjs: "vendor/quickjs", - "quickjs-ng": "vendor/quickjs-ng", -} - -const CLibraryGithubRepo: Record = { - quickjs: "bellard/quickjs", - "quickjs-ng": "quickjs-ng/quickjs", -} - -function getLibraryVersionLink(library: CLibrary): string { - if (getLibraryVersionMemo.has(library)) { - return getLibraryVersionMemo.get(library)! - } - - const { sha, date } = getGitSubtreeSha(CLibrarySubtree[library]) - let version = "git" - try { - version = fs.readFileSync(path.join(CLibrarySubtree[library], "VERSION"), "utf-8").trim() - } catch (err) { - const error = err as NodeJS.ErrnoException - if (error.code === "ENOENT") { - // pass - } else { - throw error - } - } - - const result = `[${version}+${sha.slice(0, 8)}](https://github.com/${ - CLibraryGithubRepo[library] - }/commit/${sha}) vendored to quickjs-emscripten on ${date}.` - getLibraryVersionMemo.set(library, result) - return result -} - -const getLibraryVersionMemo = new Map() - -function getGitSubtreeSha(subtree: string) { - const log = child_process.execFileSync( - "git", - [ - "log", - `--all-match`, - `--grep=git-subtree-dir: ${subtree}$`, - `--grep=git-subtree-split:`, - `--date=format:%Y-%m-%d`, - "-1", - ], - { - encoding: "utf-8", - }, - ) - const sha = log.match(/git-subtree-split: ([^\n]+)/)?.[1] - const date = log.match(/Date: ([^\n]+)/)?.[1] - if (!sha || !date) { - throw new Error(`${subtree}: date or git-subtree-split not found in log: \n${log}`) - } - return { sha: sha.trim(), date: date.trim() } -} diff --git a/scripts/set-version.ts b/scripts/set-version.ts deleted file mode 100755 index f31da5524..000000000 --- a/scripts/set-version.ts +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env -S npx tsx -import type { PackageJson } from "./helpers.js" -import { getYarnWorkspaces, readJson, writePretty } from "./helpers.js" - -async function main() { - const NEXT_VERSION = process.argv[2] - if (!NEXT_VERSION) { - throw new Error(`Usage: ${process.argv[0]} `) - } - - const set: Record = {} - for (const workspace of getYarnWorkspaces()) { - const packageJson: PackageJson = readJson(workspace.location + "/package.json") - if (packageJson.version === NEXT_VERSION) { - set[packageJson.name] = `unchanged (${NEXT_VERSION})` - continue - } - - set[packageJson.name] = `${packageJson.version} -> ${NEXT_VERSION}` - packageJson.version = NEXT_VERSION - // get rid of annoying Yarn thingy - ;(packageJson as any).stableVersion = undefined - await writePretty(workspace.location + "/package.json", JSON.stringify(packageJson, null, 2)) - } - console.log(set) -} - -main().catch((e) => { - console.error(e) - process.exit(1) -}) diff --git a/scripts/smoketest-create-react-app.ts b/scripts/smoketest-create-react-app.ts deleted file mode 100755 index d94813d35..000000000 --- a/scripts/smoketest-create-react-app.ts +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env -S npx tsx -import * as sh from "./helpers" - -const target = sh.resolve(__dirname, "../examples/create-react-app") -sh.installDependencyGraphFromTar(target, "quickjs-emscripten") -sh.exec(`cd ${target} && npm run build`) diff --git a/scripts/smoketest-deno.ts b/scripts/smoketest-deno.ts deleted file mode 100755 index 48ea24d97..000000000 --- a/scripts/smoketest-deno.ts +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env -S npx tsx -import * as sh from "./helpers" - -const target = sh.resolve(__dirname, "../examples/deno") -sh.installDependencyGraphFromTar(target, "quickjs-emscripten", { - fromRegistry: true, - install: "npm install", - remove: "npm remove", -}) -sh.exec(`cd ${target} && ./main.ts`) diff --git a/scripts/smoketest-node-minimal.ts b/scripts/smoketest-node-minimal.ts deleted file mode 100755 index 48b8e995a..000000000 --- a/scripts/smoketest-node-minimal.ts +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env -S npx tsx -import * as sh from "./helpers" - -const target = sh.resolve(__dirname, "../examples/node-minimal") -sh.installDependencyGraphFromTar(target, [ - "quickjs-emscripten-core", - "@jitl/quickjs-wasmfile-release-sync", -]) -sh.exec(`cd ${target} && node main.mjs`) diff --git a/scripts/smoketest-node.ts b/scripts/smoketest-node.ts deleted file mode 100755 index 12d030a2d..000000000 --- a/scripts/smoketest-node.ts +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env -S npx tsx -import * as sh from "./helpers" - -const target = sh.resolve(__dirname, "../examples/node-typescript") -sh.installDependencyGraphFromTar(target, "quickjs-emscripten") -sh.exec(`cd ${target} && npx tsc --project .`) -sh.exec(`cd ${target} && node index.js`) diff --git a/scripts/smoketest-vite.ts b/scripts/smoketest-vite.ts deleted file mode 100755 index c6f941156..000000000 --- a/scripts/smoketest-vite.ts +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env -S npx tsx -import * as sh from "./helpers" - -const target = sh.resolve(__dirname, "../examples/vite-vue") -sh.installDependencyGraphFromTar(target, "quickjs-emscripten") -sh.exec(`cd ${target} && npm run build`) diff --git a/templates/Variant.mk b/templates/Variant.mk deleted file mode 100644 index 2fb1a6272..000000000 --- a/templates/Variant.mk +++ /dev/null @@ -1,175 +0,0 @@ -# Tools -EMSDK_VERSION=REPLACE_EMSDK_VERSION -EMSDK_DOCKER_IMAGE=emscripten/emsdk:$(EMSDK_VERSION) -EMCC_SRC=../../scripts/emcc.sh -EMCC=EMSDK_VERSION=$(EMSDK_VERSION) EMSDK_DOCKER_IMAGE=$(EMSDK_DOCKER_IMAGE) EMSDK_PROJECT_ROOT=$(REPO_ROOT) EMSDK_DOCKER_CACHE=$(REPO_ROOT)/emsdk-cache/$(EMSDK_VERSION) $(EMCC_SRC) -GENERATE_TS=$(GENERATE_TS_ENV) ../../scripts/generate.ts -THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -REPO_ROOT := $(abspath $(THIS_DIR)/../..) - -QUICKJS_LIB=REPLACE_THIS - -# Paths -QUICKJS_ROOT=../../vendor/$(QUICKJS_LIB) -WRAPPER_ROOT=../../c -TEMPLATES=../../templates -# Intermediate build files -BUILD_ROOT=build -BUILD_WRAPPER=$(BUILD_ROOT)/wrapper -BUILD_QUICKJS=$(BUILD_ROOT)/quickjs -# Distributed to users -DIST=dist - -# QuickJS -ifeq ($(QUICKJS_LIB),quickjs-ng) - # quickjs-ng uses different source files than bellard/quickjs - QUICKJS_OBJS=quickjs.o libbf.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_DEFINES:=-D_GNU_SOURCE - CFLAGS_WASM+=-DQTS_USE_QUICKJS_NG -else - # bellard/quickjs uses separate source files - QUICKJS_OBJS=quickjs.o dtoa.o libregexp.o libunicode.o cutils.o quickjs-libc.o - QUICKJS_CONFIG_VERSION=$(shell cat $(QUICKJS_ROOT)/VERSION) - QUICKJS_DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(QUICKJS_CONFIG_VERSION)\" -DCONFIG_STACK_CHECK -endif -VARIANT_QUICKJS_OBJS=$(patsubst %.o, $(BUILD_QUICKJS)/%.o, $(QUICKJS_OBJS)) - -# quickjs-emscripten -WRAPPER_DEFINES+=-Wcast-function-type # Likewise, warns about some quickjs casts we don't control. -EMCC_EXPORTED_FUNCS+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.json -EMCC_EXPORTED_FUNCS_ASYNCIFY+=-s EXPORTED_FUNCTIONS=@$(BUILD_WRAPPER)/symbols.asyncify.json - -# Emscripten options -# EXPORTED_RUNTIME_METHODS set below after SYNC is defined -CFLAGS_WASM+=-s MODULARIZE=1 -CFLAGS_WASM+=-s IMPORTED_MEMORY=1 # Allow passing WASM memory to Emscripten -CFLAGS_WASM+=-s EXPORT_NAME=QuickJSRaw -CFLAGS_WASM+=-s INVOKE_RUN=0 -CFLAGS_WASM+=-s ALLOW_MEMORY_GROWTH=1 -CFLAGS_WASM+=-s ALLOW_TABLE_GROWTH=1 -CFLAGS_WASM+=-s STACK_SIZE=5MB -# CFLAGS_WASM+=-s MINIMAL_RUNTIME=1 # Appears to break MODULARIZE -CFLAGS_WASM+=-s SUPPORT_ERRNO=0 - -# Emscripten options - like STRICT -# https://github.com/emscripten-core/emscripten/blob/fa339b76424ca9fbe5cf15faea0295d2ac8d58cc/src/settings.js#L1095-L1109 -# CFLAGS_WASM+=-s STRICT_JS=1 # Doesn't work with MODULARIZE -CFLAGS_WASM+=-s IGNORE_MISSING_MAIN=0 --no-entry -CFLAGS_WASM+=-s AUTO_JS_LIBRARIES=0 -CFLAGS_WASM+=-s -lccall.js -CFLAGS_WASM+=-s AUTO_NATIVE_LIBRARIES=0 -CFLAGS_WASM+=-s AUTO_ARCHIVE_INDEXES=0 -CFLAGS_WASM+=-s DEFAULT_TO_CXX=0 -CFLAGS_WASM+=-s ALLOW_UNIMPLEMENTED_SYSCALLS=0 - -# Emscripten options - NodeJS -CFLAGS_WASM+=-s MIN_NODE_VERSION=160000 -CFLAGS_WASM+=-s NODEJS_CATCH_EXIT=0 - -CFLAGS_MJS+=-s EXPORT_ES6=1 -CFLAGS_BROWSER+=-s EXPORT_ES6=1 - -# VARIANT -SYNC=REPLACE_THIS - -# Set EXPORTED_RUNTIME_METHODS based on sync mode (Asyncify only available in asyncify builds) -ifeq ($(SYNC),ASYNCIFY) -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.asyncify.json -else -CFLAGS_WASM+=-s EXPORTED_RUNTIME_METHODS=@../../exportedRuntimeMethods.json -endif - -CFLAGS_WASM_BROWSER=$(CFLAGS_WASM) - -# Emscripten options - variant & target specific -CFLAGS_ALL=REPLACE_THIS -CFLAGS_CJS=REPLACE_THIS -CFLAGS_MJS=REPLACE_THIS -CFLAGS_BROWSER=REPLACE_THIS -CFLAGS_CLOUDFLARE=REPLACE_THIS - -# GENERATE_TS options - variant specific -GENERATE_TS_ENV_VARIANT=REPLACE_THIS - - -ifdef DEBUG_MAKE - MKDIRP=@echo "\n=====[["" target: $@, deps: $<, variant: $(VARIANT) ""]]=====" ; mkdir -p $(dir $@) -else - MKDIRP=@mkdir -p $(dir $@) - CFLAGS+=-Wunused-command-line-argument=0 -endif - -############################################################################### -# High-level -all: EXPORTS - -clean: - git clean -fx $(DIST) $(BUILD_ROOT) - -############################################################################### -# Emscripten output targets -EXPORTS: __REPLACE_THIS__ -CJS: $(DIST)/emscripten-module.cjs $(DIST)/emscripten-module.d.ts -MJS: $(DIST)/emscripten-module.mjs $(DIST)/emscripten-module.d.ts -BROWSER: $(DIST)/emscripten-module.browser.mjs $(DIST)/emscripten-module.browser.d.ts -CLOUDFLARE: $(DIST)/emscripten-module.cloudflare.cjs $(DIST)/emscripten-module.cloudflare.d.ts - -$(DIST)/emscripten-module.mjs: CFLAGS_WASM+=$(CFLAGS_ESM) -$(DIST)/emscripten-module.mjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.cjs: CFLAGS_WASM+=$(CFLAGS_CJS) -$(DIST)/emscripten-module.cjs: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -$(DIST)/emscripten-module.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -$(DIST)/emscripten-module%.d.ts: $(TEMPLATES)/emscripten-module.$(SYNC).d.ts - $(MKDIRP) - echo '// Generated from $<' > $@ - cat $< >> $@ - -# Browser target needs intermediate build to avoid two copies of .wasm -$(DIST)/emscripten-module.%.mjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(DIST)/emscripten-module.%.cjs: $(BUILD_WRAPPER)/%/emscripten-module.js - $(MKDIRP) - if [ -e $(basename $<).wasm ] ; then cp -v $(basename $<).wasm* $(dir $@); fi - cp $< $@ - -$(BUILD_WRAPPER)/browser/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_BROWSER) -$(BUILD_WRAPPER)/cloudflare/emscripten-module.js: CFLAGS_WASM+=$(CFLAGS_CLOUDFLARE) -$(BUILD_WRAPPER)/%/emscripten-module.js: $(BUILD_WRAPPER)/interface.o $(VARIANT_QUICKJS_OBJS) $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) $(EMCC_EXPORTED_FUNCS) -o $@ $< $(VARIANT_QUICKJS_OBJS) - -############################################################################### -# Emscripten intermediate files -WASM_SYMBOLS=$(BUILD_WRAPPER)/symbols.json $(BUILD_WRAPPER)/asyncify-remove.json $(BUILD_WRAPPER)/asyncify-imports.json -$(BUILD_WRAPPER)/%.o: $(WRAPPER_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(WRAPPER_DEFINES) -c -o $@ $< - -$(BUILD_QUICKJS)/%.o: $(QUICKJS_ROOT)/%.c $(WASM_SYMBOLS) | $(EMCC_SRC) - $(MKDIRP) - $(EMCC) $(CFLAGS_WASM) $(QUICKJS_DEFINES) -c -o $@ $< - -$(BUILD_WRAPPER)/symbols.json: - $(MKDIRP) - $(GENERATE_TS) symbols $@ - -$(BUILD_WRAPPER)/asyncify-remove.json: - $(MKDIRP) - $(GENERATE_TS) sync-symbols $@ - -$(BUILD_WRAPPER)/asyncify-imports.json: - $(MKDIRP) - $(GENERATE_TS) async-callback-symbols $@ diff --git a/templates/emscripten-module.ASYNCIFY.d.ts b/templates/emscripten-module.ASYNCIFY.d.ts deleted file mode 100644 index a0b346891..000000000 --- a/templates/emscripten-module.ASYNCIFY.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { EmscriptenModuleLoader, QuickJSAsyncEmscriptenModule } from "@jitl/quickjs-ffi-types" -/** - * Emscripten module built from [`quickjs/quickjs.h`](../quickjs/quickjs.h) and - * our FFI support functions [c/interface.c](../c/interface.c), compiled with -s - * ASYNCIFY=1. - * - * Because this version is built with ASYNCIFY, the C code can call asynchronous - * Javascript functions as though they were synchronous. - * - * Note that emscripten modules returned by a `MODULARIZE=1` emscripten build - * (like this one) load asynchronously. - */ -declare const ModuleLoader: EmscriptenModuleLoader -export default ModuleLoader diff --git a/templates/emscripten-module.SYNC.d.ts b/templates/emscripten-module.SYNC.d.ts deleted file mode 100644 index e7fef4407..000000000 --- a/templates/emscripten-module.SYNC.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { EmscriptenModuleLoader, QuickJSEmscriptenModule } from "@jitl/quickjs-ffi-types" -/** - * Emscripten module built from the unmodified [`quickjs/quickjs.h`](../quickjs/quickjs.h) - * and our FFI support functions [c/interface.c](../c/interface.c). - * - * Note that emscripten modules returned by a `MODULARIZE=1` emscripten build - * (like this one) load asynchronously. - */ -declare const ModuleLoader: EmscriptenModuleLoader -export default ModuleLoader diff --git a/templates/pre-extension.js b/templates/pre-extension.js deleted file mode 100644 index 526c7c376..000000000 --- a/templates/pre-extension.js +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable no-undef */ -// quickjs-emscripten code injected into emscripten-module.js -// We use this to expose and patch up issues with Emscripten's source map handling... -function quickjsEmscriptenInit(debugLog) { - const log = debugLog || function () {} - // Everything goes in a function so we can defer running until other variables - // are initialized in case they change. - const extension = { log } - for (const init of quickjsEmscriptenInit.inits) { - init(extension) - } - Module["quickJSEmscriptenExtensions"] = extension - return extension -} -quickjsEmscriptenInit.inits = [] -Module["quickjsEmscriptenInit"] = quickjsEmscriptenInit diff --git a/templates/pre-sourceMapJson.js b/templates/pre-sourceMapJson.js deleted file mode 100644 index 2ad141028..000000000 --- a/templates/pre-sourceMapJson.js +++ /dev/null @@ -1,13 +0,0 @@ -/* eslint-disable no-undef */ -quickjsEmscriptenInit.inits.push((extension) => { - if (typeof receiveSourceMapJSON !== "undefined") { - extension["receiveSourceMapJSON"] = (data) => { - if (typeof wasmSourceMap === "undefined") { - extension.log("receiveSourceMapJSON: received", data) - return receiveSourceMapJSON(data) - } else { - extension.log("receiveSourceMapJSON: already have data:", wasmSourceMap, "ignoring", data) - } - } - } -}) diff --git a/templates/pre-wasmMemory.js b/templates/pre-wasmMemory.js deleted file mode 100644 index eb85a3779..000000000 --- a/templates/pre-wasmMemory.js +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint-disable no-undef */ -quickjsEmscriptenInit.inits.push((extension) => { - extension["getWasmMemory"] = function () { - return wasmMemory - } -}) diff --git a/templates/pre-wasmOffsetConverter.js b/templates/pre-wasmOffsetConverter.js deleted file mode 100644 index 6722fcdd0..000000000 --- a/templates/pre-wasmOffsetConverter.js +++ /dev/null @@ -1,26 +0,0 @@ -/* eslint-disable no-undef */ -quickjsEmscriptenInit.inits.push((extension) => { - if (typeof WasmOffsetConverter !== "undefined") { - extension["WasmOffsetConverter"] = WasmOffsetConverter - // Expose function to receive WasmOffsetConverter, set to wasmOffsetConverter local variable - // if it exists - try { - // Check if wasmOffsetConverter variable exists. If it isn't defined, this - // will throw and we'll skip the rest of the branch. - extension["existingWasmOffsetConverter"] = wasmOffsetConverter - extension["receiveWasmOffsetConverter"] = function (wasmBinary, wasmModule) { - if (!wasmOffsetConverter) { - extension.log("wasmOffsetConverter set") - wasmOffsetConverter = new WasmOffsetConverter(wasmBinary, wasmModule) - } else { - extension.log("wasmOffsetConverter already set, ignored") - } - } - } catch (error) { - // Nothing. - extension["receiveWasmOffsetConverter"] = function () { - extension.log("wasmOffsetConverter variable not defined, this is a no-op") - } - } - } -}) diff --git a/vendor/quickjs/test262.conf b/test262.conf similarity index 91% rename from vendor/quickjs/test262.conf rename to test262.conf index aa76e6395..af5cd6474 100644 --- a/vendor/quickjs/test262.conf +++ b/test262.conf @@ -71,6 +71,7 @@ async-iteration Atomics Atomics.pause Atomics.waitAsync=skip +await-dictionary=skip BigInt caller canonical-tz=skip @@ -119,7 +120,9 @@ hashbang host-gc-required immutable-arraybuffer=skip import-attributes +import-bytes=skip import-defer=skip +import-text=skip import.meta joint-iteration=skip Int16Array @@ -135,6 +138,7 @@ Intl.DateTimeFormat-fractionalSecondDigits=skip Intl.DisplayNames-v2=skip Intl.DisplayNames=skip Intl.DurationFormat=skip +Intl.Era-monthcode=skip Intl.ListFormat=skip Intl.Locale-info=skip Intl.Locale=skip @@ -146,7 +150,7 @@ IsHTMLDDA iterator-helpers iterator-sequencing json-modules -json-parse-with-source=skip +json-parse-with-source json-superset legacy-regexp=skip let @@ -232,7 +236,7 @@ u180e Uint16Array Uint32Array Uint8Array -uint8array-base64=skip +uint8array-base64 Uint8ClampedArray upsert WeakMap @@ -296,5 +300,15 @@ test262/test/staging/sm/syntax/syntax-parsed-arrow-then-directive.js # returning "bound fn" as initialName for a function is permitted by the spec test262/test/staging/sm/Function/function-toString-builtin.js +# very slow tests which only test DST offset caching (QuickJS does not optimize it) +test262/test/staging/sm/Date/dst-offset-caching-1-of-8.js +test262/test/staging/sm/Date/dst-offset-caching-2-of-8.js +test262/test/staging/sm/Date/dst-offset-caching-3-of-8.js +test262/test/staging/sm/Date/dst-offset-caching-4-of-8.js +test262/test/staging/sm/Date/dst-offset-caching-5-of-8.js +test262/test/staging/sm/Date/dst-offset-caching-6-of-8.js +test262/test/staging/sm/Date/dst-offset-caching-7-of-8.js +test262/test/staging/sm/Date/dst-offset-caching-8-of-8.js + [tests] # list test files or use config.testdir diff --git a/vendor/quickjs/test262_errors.txt b/test262_errors.txt similarity index 89% rename from vendor/quickjs/test262_errors.txt rename to test262_errors.txt index faeb58958..66e83f205 100644 --- a/vendor/quickjs/test262_errors.txt +++ b/test262_errors.txt @@ -31,14 +31,6 @@ test262/test/staging/sm/Function/function-name-for.js:13: Test262Error: Expected test262/test/staging/sm/Function/implicit-this-in-parameter-expression.js:12: Test262Error: Expected SameValue(«[object Object]», «undefined») to be true test262/test/staging/sm/Function/invalid-parameter-list.js:13: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all test262/test/staging/sm/Function/invalid-parameter-list.js:13: strict mode: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all -test262/test/staging/sm/String/string-upper-lower-mapping.js:16: Test262Error: Expected SameValue(«"꟏"», «"꟎"») to be true -test262/test/staging/sm/String/string-upper-lower-mapping.js:16: strict mode: Test262Error: Expected SameValue(«"꟏"», «"꟎"») to be true -test262/test/staging/sm/TypedArray/constructor-buffer-sequence.js:29: Test262Error: Expected a ExpectedError but got a Error -test262/test/staging/sm/TypedArray/constructor-buffer-sequence.js:29: strict mode: Test262Error: Expected a ExpectedError but got a Error -test262/test/staging/sm/TypedArray/prototype-constructor-identity.js:17: Test262Error: Expected SameValue(«2», «6») to be true -test262/test/staging/sm/TypedArray/prototype-constructor-identity.js:17: strict mode: Test262Error: Expected SameValue(«2», «6») to be true -test262/test/staging/sm/TypedArray/sort_modifications.js:9: Test262Error: Int8Array at index 0 for size 4 Expected SameValue(«0», «1») to be true -test262/test/staging/sm/TypedArray/sort_modifications.js:9: strict mode: Test262Error: Int8Array at index 0 for size 4 Expected SameValue(«0», «1») to be true test262/test/staging/sm/async-functions/async-contains-unicode-escape.js:11: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all test262/test/staging/sm/async-functions/async-contains-unicode-escape.js:11: strict mode: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all test262/test/staging/sm/async-functions/await-in-arrow-parameters.js:10: Test262Error: AsyncFunction:(a = (b = await/r/g) => {}) => {} Expected a SyntaxError to be thrown but no exception was thrown at all diff --git a/vendor/quickjs/test262o.conf b/test262o.conf similarity index 100% rename from vendor/quickjs/test262o.conf rename to test262o.conf diff --git a/vendor/quickjs/test262o_errors.txt b/test262o_errors.txt similarity index 100% rename from vendor/quickjs/test262o_errors.txt rename to test262o_errors.txt diff --git a/vendor/quickjs/tests/assert.js b/tests/assert.js similarity index 100% rename from vendor/quickjs/tests/assert.js rename to tests/assert.js diff --git a/vendor/quickjs/tests/bjson.c b/tests/bjson.c similarity index 100% rename from vendor/quickjs/tests/bjson.c rename to tests/bjson.c diff --git a/vendor/quickjs/tests/fixture_cyclic_import.js b/tests/fixture_cyclic_import.js similarity index 100% rename from vendor/quickjs/tests/fixture_cyclic_import.js rename to tests/fixture_cyclic_import.js diff --git a/vendor/quickjs/tests/microbench.js b/tests/microbench.js similarity index 99% rename from vendor/quickjs/tests/microbench.js rename to tests/microbench.js index a9fc5f17a..37e6a279f 100644 --- a/vendor/quickjs/tests/microbench.js +++ b/tests/microbench.js @@ -1577,8 +1577,14 @@ function main(argc, argv, g) } if (typeof scriptArgs === "undefined") { - scriptArgs = []; - if (typeof process.argv === "object") + if (typeof process !== "undefined" && typeof process.argv === "object") { + /* node case */ scriptArgs = process.argv.slice(1); + } else if (typeof arguments !== "undefined") { + /* d8 case */ + scriptArgs = arguments; + } else { + scriptArgs = []; + } } main(scriptArgs.length, scriptArgs, this); diff --git a/vendor/quickjs/tests/test262.patch b/tests/test262.patch similarity index 100% rename from vendor/quickjs/tests/test262.patch rename to tests/test262.patch diff --git a/vendor/quickjs/tests/test_bigint.js b/tests/test_bigint.js similarity index 100% rename from vendor/quickjs/tests/test_bigint.js rename to tests/test_bigint.js diff --git a/vendor/quickjs/tests/test_bjson.js b/tests/test_bjson.js similarity index 100% rename from vendor/quickjs/tests/test_bjson.js rename to tests/test_bjson.js diff --git a/vendor/quickjs/tests/test_builtin.js b/tests/test_builtin.js similarity index 100% rename from vendor/quickjs/tests/test_builtin.js rename to tests/test_builtin.js diff --git a/vendor/quickjs-ng/tests/test_closure.js b/tests/test_closure.js similarity index 100% rename from vendor/quickjs-ng/tests/test_closure.js rename to tests/test_closure.js diff --git a/vendor/quickjs/tests/test_cyclic_import.js b/tests/test_cyclic_import.js similarity index 100% rename from vendor/quickjs/tests/test_cyclic_import.js rename to tests/test_cyclic_import.js diff --git a/vendor/quickjs/tests/test_language.js b/tests/test_language.js similarity index 98% rename from vendor/quickjs/tests/test_language.js rename to tests/test_language.js index 5c51f0df5..f65804478 100644 --- a/vendor/quickjs/tests/test_language.js +++ b/tests/test_language.js @@ -664,6 +664,16 @@ function test_global_var_opt() assert(gvar1, 5); } +function test_number_literals() +{ + assert(0.1.a, undefined); + assert(0x1.a, undefined); + assert(0b1.a, undefined); + assert(01.a, undefined); + assert(0o1.a, undefined); + assert_throws(SyntaxError, () => eval('0.a')); +} + test_op1(); test_cvt(); test_eq(); @@ -690,3 +700,4 @@ test_optional_chaining(); test_parse_arrow_function(); test_unicode_ident(); test_global_var_opt(); +test_number_literals(); diff --git a/vendor/quickjs/tests/test_loop.js b/tests/test_loop.js similarity index 100% rename from vendor/quickjs/tests/test_loop.js rename to tests/test_loop.js diff --git a/tests/test_rw_handler.js b/tests/test_rw_handler.js new file mode 100644 index 000000000..c4cd19af1 --- /dev/null +++ b/tests/test_rw_handler.js @@ -0,0 +1,57 @@ +import * as std from "std"; +import * as os from "os"; + +function assert(actual, expected, message) { + if (arguments.length == 1) + expected = true; + + if (Object.is(actual, expected)) + return; + + if (actual !== null && expected !== null + && typeof actual == 'object' && typeof expected == 'object' + && actual.toString() === expected.toString()) + return; + + throw Error("assertion failed: got |" + actual + "|" + + ", expected |" + expected + "|" + + (message ? " (" + message + ")" : "")); +} + +function handle_read(fd_r, fd_w, i) +{ + var buf = new Uint32Array(1); + var val, len; + len = os.read(fd_r, buf.buffer, 0, 4); + os.setReadHandler(fd_r, null); + val = buf[0]; +// print("read fd=", fd_r, "val=", val, "len=", len); + assert(val, i); +} + +function handle_write(fd_r, fd_w, i) +{ + var buf = new Uint32Array(1); + buf[0] = i; + os.write(fd_w, buf.buffer, 0, 4); + os.setWriteHandler(fd_w, null); +} + +function test_rw_handlers(n) +{ + var tab, fd_r, fd_w, i; + tab = []; + for(i = 0; i < n; i++) { + tab[i] = os.pipe(); + fd_r = tab[i][0]; + fd_w = tab[i][1]; + os.setReadHandler(fd_r, handle_read.bind(null, fd_r, fd_w, i)); + } + for(i = n - 1; i >= 0; i--) { + fd_r = tab[i][0]; + fd_w = tab[i][1]; + os.setWriteHandler(fd_w, handle_write.bind(null, fd_r, fd_w, i)); + } +} + +test_rw_handlers(100); diff --git a/vendor/quickjs/tests/test_std.js b/tests/test_std.js similarity index 100% rename from vendor/quickjs/tests/test_std.js rename to tests/test_std.js diff --git a/vendor/quickjs/tests/test_worker.js b/tests/test_worker.js similarity index 100% rename from vendor/quickjs/tests/test_worker.js rename to tests/test_worker.js diff --git a/vendor/quickjs/tests/test_worker_module.js b/tests/test_worker_module.js similarity index 100% rename from vendor/quickjs/tests/test_worker_module.js rename to tests/test_worker_module.js diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 1fd6a2a5f..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "@jitl/tsconfig/tsconfig.json", - "compilerOptions": { - "noEmit": true - }, - "include": ["scripts/**/*", "packages/*/*"] -} diff --git a/typedoc.base.js b/typedoc.base.js deleted file mode 100644 index f16d00aed..000000000 --- a/typedoc.base.js +++ /dev/null @@ -1,23 +0,0 @@ -const NO_THANKS = ["**/node_modules/**", "./quickjs/**"] - -module.exports = { - // link to main instead of the current git SHA - // which is borked with our strategy of deploying the docs - // in the repo. - gitRevision: "main", - excludePrivate: true, - excludeExternals: true, - categorizeByGroup: true, - plugin: ["typedoc-plugin-markdown"], - exclude: NO_THANKS, - externalPattern: NO_THANKS[0], - // excludeReferences: true, - - // Experimental - // https://github.com/tgreyuk/typedoc-plugin-markdown/blob/next/packages/typedoc-plugin-markdown/docs/plugin-options.md - // useCodeBlocks: true, - // outputFileStrategy: "modules" - // mergeReadme: true, - entryFileName: "README.md", - membersWithOwnFile: ["Class", "Interface"], -} diff --git a/typedoc.js b/typedoc.js deleted file mode 100644 index 2208cb359..000000000 --- a/typedoc.js +++ /dev/null @@ -1,15 +0,0 @@ -const variants = require("./variants.json") - -const ROOT_PACKAGES = ["quickjs-emscripten", "quickjs-emscripten-core", "quickjs-ffi-types"].map( - (path) => `./packages/${path}`, -) - -const VARIANT_PACKAGES = Object.values(variants).map((variant) => variant.dir) - -module.exports = { - extends: "./typedoc.base.js", - name: "quickjs-emscripten", - entryPoints: [...ROOT_PACKAGES, ...VARIANT_PACKAGES], - entryPointStrategy: "packages", - out: "./doc", -} diff --git a/vendor/quickjs/unicode_download.sh b/unicode_download.sh similarity index 100% rename from vendor/quickjs/unicode_download.sh rename to unicode_download.sh diff --git a/vendor/quickjs/unicode_gen.c b/unicode_gen.c similarity index 100% rename from vendor/quickjs/unicode_gen.c rename to unicode_gen.c diff --git a/vendor/quickjs/unicode_gen_def.h b/unicode_gen_def.h similarity index 100% rename from vendor/quickjs/unicode_gen_def.h rename to unicode_gen_def.h diff --git a/variants.json b/variants.json deleted file mode 100644 index 22c1d594c..000000000 --- a/variants.json +++ /dev/null @@ -1,1235 +0,0 @@ -{ - "packages/variant-quickjs-wasmfile-debug-sync": { - "basename": "quickjs-wasmfile-debug-sync", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-wasmfile-debug-sync", - "packageJson": { - "name": "@jitl/quickjs-wasmfile-debug-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-wasmfile-debug-asyncify": { - "basename": "quickjs-wasmfile-debug-asyncify", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-wasmfile-debug-asyncify", - "packageJson": { - "name": "@jitl/quickjs-wasmfile-debug-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-wasmfile-release-sync": { - "basename": "quickjs-wasmfile-release-sync", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-wasmfile-release-sync", - "packageJson": { - "name": "@jitl/quickjs-wasmfile-release-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-wasmfile-release-asyncify": { - "basename": "quickjs-wasmfile-release-asyncify", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-wasmfile-release-asyncify", - "packageJson": { - "name": "@jitl/quickjs-wasmfile-release-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-ng-wasmfile-debug-sync": { - "basename": "quickjs-ng-wasmfile-debug-sync", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-ng-wasmfile-debug-sync", - "packageJson": { - "name": "@jitl/quickjs-ng-wasmfile-debug-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs-ng", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-ng-wasmfile-debug-asyncify": { - "basename": "quickjs-ng-wasmfile-debug-asyncify", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-ng-wasmfile-debug-asyncify", - "packageJson": { - "name": "@jitl/quickjs-ng-wasmfile-debug-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs-ng", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-ng-wasmfile-release-sync": { - "basename": "quickjs-ng-wasmfile-release-sync", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-ng-wasmfile-release-sync", - "packageJson": { - "name": "@jitl/quickjs-ng-wasmfile-release-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs-ng", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-ng-wasmfile-release-asyncify": { - "basename": "quickjs-ng-wasmfile-release-asyncify", - "targetName": "wasmfile", - "dir": "packages/variant-quickjs-ng-wasmfile-release-asyncify", - "packageJson": { - "name": "@jitl/quickjs-ng-wasmfile-release-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.mjs", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./wasm": "./dist/emscripten-module.wasm", - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "iife": "./dist/emscripten-module.cjs", - "workerd": "./dist/emscripten-module.cloudflare.cjs", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.mjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs-ng", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with separate .WASM file. Supports browser ESM, NodeJS ESM, and NodeJS CommonJS.", - "emscriptenInclusion": "wasm", - "exports": { - "require": { "emscriptenEnvironment": ["node"] }, - "import": { "emscriptenEnvironment": ["node"] }, - "browser": { "emscriptenEnvironment": ["web", "worker"] }, - "workerd": { "emscriptenEnvironment": ["web"] } - } - } - }, - "packages/variant-quickjs-singlefile-cjs-debug-sync": { - "basename": "quickjs-singlefile-cjs-debug-sync", - "targetName": "singlefile-cjs", - "dir": "packages/variant-quickjs-singlefile-cjs-debug-sync", - "packageJson": { - "name": "@jitl/quickjs-singlefile-cjs-debug-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { "require": { "emscriptenEnvironment": ["web", "worker", "node"] } } - } - }, - "packages/variant-quickjs-singlefile-cjs-debug-asyncify": { - "basename": "quickjs-singlefile-cjs-debug-asyncify", - "targetName": "singlefile-cjs", - "dir": "packages/variant-quickjs-singlefile-cjs-debug-asyncify", - "packageJson": { - "name": "@jitl/quickjs-singlefile-cjs-debug-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { "require": { "emscriptenEnvironment": ["web", "worker", "node"] } } - } - }, - "packages/variant-quickjs-singlefile-cjs-release-sync": { - "basename": "quickjs-singlefile-cjs-release-sync", - "targetName": "singlefile-cjs", - "dir": "packages/variant-quickjs-singlefile-cjs-release-sync", - "packageJson": { - "name": "@jitl/quickjs-singlefile-cjs-release-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { "require": { "emscriptenEnvironment": ["web", "worker", "node"] } } - } - }, - "packages/variant-quickjs-singlefile-cjs-release-asyncify": { - "basename": "quickjs-singlefile-cjs-release-asyncify", - "targetName": "singlefile-cjs", - "dir": "packages/variant-quickjs-singlefile-cjs-release-asyncify", - "packageJson": { - "name": "@jitl/quickjs-singlefile-cjs-release-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.ts", - "main": "./dist/index.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.ts", - "import": "./dist/ffi.js", - "require": "./dist/ffi.js", - "default": "./dist/ffi.js" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "iife": "./dist/emscripten-module.cjs", - "import": "./dist/emscripten-module.cjs", - "require": "./dist/emscripten-module.cjs", - "default": "./dist/emscripten-module.cjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a universal (Node and Browser compatible) CommonJS module.", - "emscriptenInclusion": "singlefile", - "exports": { "require": { "emscriptenEnvironment": ["web", "worker", "node"] } } - } - }, - "packages/variant-quickjs-singlefile-mjs-debug-sync": { - "basename": "quickjs-singlefile-mjs-debug-sync", - "targetName": "singlefile-mjs", - "dir": "packages/variant-quickjs-singlefile-mjs-debug-sync", - "packageJson": { - "name": "@jitl/quickjs-singlefile-mjs-debug-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "import": { "emscriptenEnvironment": ["node"] } } - } - }, - "packages/variant-quickjs-singlefile-mjs-debug-asyncify": { - "basename": "quickjs-singlefile-mjs-debug-asyncify", - "targetName": "singlefile-mjs", - "dir": "packages/variant-quickjs-singlefile-mjs-debug-asyncify", - "packageJson": { - "name": "@jitl/quickjs-singlefile-mjs-debug-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "import": { "emscriptenEnvironment": ["node"] } } - } - }, - "packages/variant-quickjs-singlefile-mjs-release-sync": { - "basename": "quickjs-singlefile-mjs-release-sync", - "targetName": "singlefile-mjs", - "dir": "packages/variant-quickjs-singlefile-mjs-release-sync", - "packageJson": { - "name": "@jitl/quickjs-singlefile-mjs-release-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "import": { "emscriptenEnvironment": ["node"] } } - } - }, - "packages/variant-quickjs-singlefile-mjs-release-asyncify": { - "basename": "quickjs-singlefile-mjs-release-asyncify", - "targetName": "singlefile-mjs", - "dir": "packages/variant-quickjs-singlefile-mjs-release-asyncify", - "packageJson": { - "name": "@jitl/quickjs-singlefile-mjs-release-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a NodeJS ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a NodeJS ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "import": { "emscriptenEnvironment": ["node"] } } - } - }, - "packages/variant-quickjs-singlefile-browser-debug-sync": { - "basename": "quickjs-singlefile-browser-debug-sync", - "targetName": "singlefile-browser", - "dir": "packages/variant-quickjs-singlefile-browser-debug-sync", - "packageJson": { - "name": "@jitl/quickjs-singlefile-browser-debug-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "browser": { "emscriptenEnvironment": ["web", "worker"] } } - } - }, - "packages/variant-quickjs-singlefile-browser-debug-asyncify": { - "basename": "quickjs-singlefile-browser-debug-asyncify", - "targetName": "singlefile-browser", - "dir": "packages/variant-quickjs-singlefile-browser-debug-asyncify", - "packageJson": { - "name": "@jitl/quickjs-singlefile-browser-debug-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "debug", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "browser": { "emscriptenEnvironment": ["web", "worker"] } } - } - }, - "packages/variant-quickjs-singlefile-browser-release-sync": { - "basename": "quickjs-singlefile-browser-release-sync", - "targetName": "singlefile-browser", - "dir": "packages/variant-quickjs-singlefile-browser-release-sync", - "packageJson": { - "name": "@jitl/quickjs-singlefile-browser-release-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "browser": { "emscriptenEnvironment": ["web", "worker"] } } - } - }, - "packages/variant-quickjs-singlefile-browser-release-asyncify": { - "basename": "quickjs-singlefile-browser-release-asyncify", - "targetName": "singlefile-browser", - "dir": "packages/variant-quickjs-singlefile-browser-release-asyncify", - "packageJson": { - "name": "@jitl/quickjs-singlefile-browser-release-asyncify", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Variant with the WASM data embedded into a browser ESModule.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./ffi": { - "types": "./dist/ffi.d.mts", - "import": "./dist/ffi.mjs", - "default": "./dist/ffi.mjs" - }, - "./emscripten-module": { - "types": "./dist/emscripten-module.browser.d.ts", - "browser": "./dist/emscripten-module.browser.mjs", - "import": "./dist/emscripten-module.browser.mjs", - "default": "./dist/emscripten-module.browser.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "asyncify", - "description": "Variant with the WASM data embedded into a browser ESModule.", - "emscriptenInclusion": "singlefile", - "exports": { "browser": { "emscriptenEnvironment": ["web", "worker"] } } - } - }, - "packages/variant-quickjs-asmjs-mjs-release-sync": { - "basename": "quickjs-asmjs-mjs-release-sync", - "targetName": "asmjs-mjs", - "dir": "packages/variant-quickjs-asmjs-mjs-release-sync", - "packageJson": { - "name": "@jitl/quickjs-asmjs-mjs-release-sync", - "license": "MIT", - "version": "(omitted)", - "description": "Variant of quickjs library: Compiled to pure Javascript, no WebAssembly required.", - "sideEffects": false, - "repository": { "type": "git", "url": "https://github.com/justjake/quickjs-emscripten" }, - "author": { "name": "Jake Teton-Landis", "url": "https://jake.tl" }, - "scripts": { - "build": "yarn build:c && yarn build:ts", - "build:c": "make -j2", - "build:ts": "npx tsup", - "check:types": "npx tsc --project . --noEmit", - "clean": "make clean", - "prepare": "yarn clean && yarn build" - }, - "files": ["LICENSE", "README.md", "dist/**/*", "!dist/*.tsbuildinfo"], - "types": "./dist/index.d.mts", - "main": "./dist/index.mjs", - "module": "./dist/index.mjs", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "default": "./dist/index.mjs" - }, - "./package.json": "./package.json", - "./emscripten-module": { - "types": "./dist/emscripten-module.d.ts", - "import": "./dist/emscripten-module.mjs", - "default": "./dist/emscripten-module.mjs" - } - }, - "dependencies": { "@jitl/quickjs-ffi-types": "workspace:*" } - }, - "variant": { - "library": "quickjs", - "releaseMode": "release", - "syncMode": "sync", - "description": "Compiled to pure Javascript, no WebAssembly required.", - "emscriptenInclusion": "asmjs", - "emscriptenVersion": "3.1.43", - "exports": { "import": { "emscriptenEnvironment": ["web", "worker", "node"] } } - } - } -} diff --git a/vendor/quickjs-ng/.github/workflows/ci.yml b/vendor/quickjs-ng/.github/workflows/ci.yml deleted file mode 100644 index ed8ec56ac..000000000 --- a/vendor/quickjs-ng/.github/workflows/ci.yml +++ /dev/null @@ -1,456 +0,0 @@ -name: ci - -on: - pull_request: - paths: - - '**' - - '!.gitignore' - - '!LICENSE' - - '!TODO' - - '!doc/**' - - '!examples/**' - - '.github/workflows/ci.yml' - push: - branches: - - master - -jobs: - linux: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - buildType: [Debug, Release] - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - name: build - run: | - make BUILD_TYPE=${{matrix.buildType}} - - name: stats - run: | - make stats - - name: test - run: | - make test - - name: test 262 - if: ${{ matrix.buildType == 'Release' }} - run: | - time make test262 - - name: test v8 mjsunit - if: ${{ matrix.buildType == 'Release' }} - run: | - ./v8.sh - linux-32bits: - runs-on: ubuntu-latest - defaults: - run: - shell: alpine.sh {0} - steps: - - uses: actions/checkout@v3 - - uses: jirutka/setup-alpine@v1 - with: - arch: x86 - packages: "build-base make cmake" - - name: build - run: | - make - - name: stats - run: | - make stats - - name: test - run: | - make test - linux-gcc48: - runs-on: ubuntu-latest - container: - image: ubuntu:14.04 - steps: - - name: install dependencies - run: | - apt update && apt -y install make gcc-4.8 wget time software-properties-common - # git in default ppa repository is too old to run submodule checkout - add-apt-repository -y ppa:git-core/ppa - apt update - apt install -y git - wget https://github.com/Kitware/CMake/releases/download/v3.28.0-rc5/cmake-3.28.0-rc5-linux-x86_64.sh - sh cmake-3.28.0-rc5-linux-x86_64.sh --skip-license --prefix=/usr - - name: checkout - uses: actions/checkout@v3 - with: - submodules: true - - name: build - run: | - CC=gcc-4.8 make - - name: stats - run: | - make stats - - name: test - run: | - make test - - name: test 262 - run: | - time make test262 - linux-examples: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: build - run: | - make BUILD_EXAMPLES=ON - - name: test - run: | - ldd build/hello - ldd build/hello_module - ldd build/test_fib - ./build/hello - ./build/hello_module - ./build/test_fib - cp build/fib.so examples/ - cp build/point.so examples/ - cp build/bjson.so tests/ - ./build/qjs examples/test_fib.js - ./build/qjs examples/test_point.js - ./build/qjs tests/test_bjson.js - ./build/function_source - linux-shared: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: build - run: | - make BUILD_SHARED_LIBS=ON - ldd build/qjs - - name: stats - run: | - make stats - linux-asan: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - name: build - run: | - make CONFIG_ASAN=ON - - name: test - env: - ASAN_OPTIONS: halt_on_error=1 - run: | - make test - - name: test 262 - env: - ASAN_OPTIONS: halt_on_error=1 - run: | - time make test262 - linux-msan: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - name: build - env: - CC: clang - run: | - make CONFIG_MSAN=ON - - name: test - env: - MSAN_OPTIONS: halt_on_error=1 - run: | - make test - linux-ubsan: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - name: build - run: | - make CONFIG_UBSAN=ON - - name: test - env: - UBSAN_OPTIONS: halt_on_error=1 - run: | - make test - - name: test 262 - env: - UBSAN_OPTIONS: halt_on_error=1 - run: | - time make test262 - - macos: - runs-on: macos-latest - strategy: - fail-fast: false - matrix: - buildType: [Debug, Release] - steps: - - uses: actions/checkout@v3 - - name: build - run: | - make BUILD_TYPE=${{matrix.buildType}} - - name: stats - run: | - make stats - - name: test - run: | - make test - macos-examples: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - name: build - run: | - make BUILD_EXAMPLES=ON - - name: test - run: | - otool -L build/hello - otool -L build/hello_module - otool -L build/test_fib - ./build/hello - ./build/hello_module - ./build/test_fib - cp build/fib.so examples/ - cp build/point.so examples/ - cp build/bjson.so tests/ - ./build/qjs examples/test_fib.js - ./build/qjs examples/test_point.js - ./build/qjs tests/test_bjson.js - ./build/function_source - macos-shared: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - name: build - run: | - make BUILD_SHARED_LIBS=ON - otool -L build/qjs - - name: stats - run: | - make stats - macos-asan: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - name: build - run: | - make CONFIG_ASAN=ON - - name: test - env: - ASAN_OPTIONS: halt_on_error=1 - run: | - make test - macos-ubsan: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - name: build - run: | - make CONFIG_UBSAN=ON - - name: test - env: - UBSAN_OPTIONS: halt_on_error=1 - run: | - make test - - windows-msvc: - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - buildType: [Debug, Release] - steps: - - uses: actions/checkout@v3 - - name: build - run: | - cmake -B build -DCMAKE_BUILD_TYPE=${{matrix.buildType}} -G "Visual Studio 17 2022" - cmake --build build --target qjs_exe - cmake --build build --target function_source - - name: stats - run: | - build\Debug\qjs.exe -qd - - name: test - run: | - build\Debug\qjs.exe tests\test_bigint.js - build\Debug\qjs.exe tests\test_closure.js - build\Debug\qjs.exe tests\test_language.js - build\Debug\qjs.exe tests\test_builtin.js - build\Debug\qjs.exe tests\test_loop.js - build\Debug\qjs.exe tests\test_std.js - build\Debug\qjs.exe tests\test_worker.js - build\Debug\qjs.exe tests\test_queue_microtask.js - build\Debug\function_source.exe - - windows-clang: - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - buildType: [Debug, Release] - steps: - - uses: actions/checkout@v3 - - name: build - run: | - cmake -B build -DCMAKE_BUILD_TYPE=${{matrix.buildType}} -G "Visual Studio 17 2022" -T ClangCL - cmake --build build --target qjs_exe - cmake --build build --target function_source - - name: stats - run: | - cmd /r build\Debug\qjs.exe -qd - - name: test - run: | - cmd /r build\Debug\qjs.exe tests\test_bigint.js - cmd /r build\Debug\qjs.exe tests\test_closure.js - cmd /r build\Debug\qjs.exe tests\test_language.js - cmd /r build\Debug\qjs.exe tests\test_builtin.js - cmd /r build\Debug\qjs.exe tests\test_loop.js - cmd /r build\Debug\qjs.exe tests\test_std.js - cmd /r build\Debug\qjs.exe tests\test_worker.js - cmd /r build\Debug\qjs.exe tests\test_queue_microtask.js - cmd /r build\Debug\function_source.exe - - windows-mingw: - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - buildType: [Debug, Release] - sys: - - mingw32 - - mingw64 - - clang64 - - ucrt64 - defaults: - run: - shell: msys2 {0} - steps: - - uses: actions/checkout@v3 - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: ${{matrix.sys}} - install: >- - git - make - pacboy: >- - cmake:p - ninja:p - toolchain:p - - name: build - run: | - make BUILD_TYPE=${{matrix.buildType}} - - name: stats - run: | - make stats - ldd build/qjs - - name: test - run: | - make test - windows-mingw-shared: - runs-on: windows-latest - defaults: - run: - shell: msys2 {0} - steps: - - uses: actions/checkout@v3 - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - install: >- - git - make - pacboy: >- - cmake:p - ninja:p - toolchain:p - - name: build - run: | - make BUILD_SHARED_LIBS=ON - ldd build/qjs - - name: stats - run: | - make stats - - emscripten: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: mymindstorm/setup-emsdk@v13 - - name: check emsdk - run: emcc -v - - name: build - run: | - emcmake cmake -B build - emmake make -C build qjs_wasm -j$(getconf _NPROCESSORS_ONLN) - - name: result - run: ls -lh build - - cygwin: - runs-on: windows-latest - defaults: - run: - shell: C:\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}' - env: - CYGWIN_NOWINPATH: 1 - CHERE_INVOKING: 1 - steps: - - name: Set up Cygwin - uses: cygwin/cygwin-install-action@master - with: - packages: make cmake gcc-g++ bash - - - uses: actions/checkout@v3 - - - name: build - run: make - - - name: stats - run: make stats - - - name: test - run: make test - - openbsd: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: build + test - uses: vmactions/openbsd-vm@v1 - with: - usesh: true - prepare: | - pkg_add cmake gmake - run: | - gmake - gmake stats - - freebsd: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: build + test - uses: vmactions/freebsd-vm@v1 - with: - usesh: true - prepare: | - pkg install -y cmake gmake - run: | - gmake - gmake stats - - netbsd: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: build + test - uses: vmactions/netbsd-vm@v1 - with: - usesh: true - prepare: | - /usr/sbin/pkg_add cmake gmake - run: | - gmake - gmake stats - gmake test diff --git a/vendor/quickjs-ng/.github/workflows/release.yml b/vendor/quickjs-ng/.github/workflows/release.yml deleted file mode 100644 index 0fbc0af7a..000000000 --- a/vendor/quickjs-ng/.github/workflows/release.yml +++ /dev/null @@ -1,163 +0,0 @@ -name: release - -on: - push: - tags: - - "v*.*.*" - -jobs: - linux-x86: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: jirutka/setup-alpine@v1 - with: - arch: x86 - packages: "build-base make cmake" - - name: build - shell: alpine.sh {0} - run: | - mkdir build - cd build - cmake -DBUILD_STATIC_QJS_EXE=ON .. - cd .. - cmake --build build --target qjs_exe -j$(getconf _NPROCESSORS_ONLN) - mv build/qjs build/qjs-linux-x86 - mv build/qjsc build/qjsc-linux-x86 - - name: check - shell: alpine.sh {0} - run: | - file build/qjs-linux-x86 build/qjsc-linux-x86 - - name: upload - uses: actions/upload-artifact@v3 - with: - name: qjs - path: build/*-linux-x86 - - linux-x86_64: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: jirutka/setup-alpine@v1 - with: - arch: x86_64 - packages: "build-base make cmake" - - name: build - shell: alpine.sh {0} - run: | - mkdir build - cd build - cmake -DBUILD_STATIC_QJS_EXE=ON .. - cd .. - cmake --build build --target qjs_exe -j$(getconf _NPROCESSORS_ONLN) - mv build/qjs build/qjs-linux-x86_64 - mv build/qjsc build/qjsc-linux-x86_64 - - name: check - shell: alpine.sh {0} - run: | - file build/qjs-linux-x86_64 build/qjsc-linux-x86_64 - - name: upload - uses: actions/upload-artifact@v3 - with: - name: qjs - path: build/*-linux-x86_64 - - macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - name: build - run: | - mkdir build - cd build - cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" .. - make -j$(getconf _NPROCESSORS_ONLN) - mv qjs qjs-darwin - mv qjsc qjsc-darwin - - name: check - run: | - lipo -info build/qjs-darwin build/qjsc-darwin - - name: upload - uses: actions/upload-artifact@v3 - with: - name: qjs - path: build/*-darwin - - windows-x86: - runs-on: windows-latest - defaults: - run: - shell: msys2 {0} - steps: - - uses: actions/checkout@v3 - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: mingw32 - install: >- - git - make - pacboy: >- - cmake:p - ninja:p - toolchain:p - - name: build - run: | - make - mv build/qjs.exe build/qjs-windows-x86.exe - mv build/qjsc.exe build/qjsc-windows-x86.exe - - name: check - run: | - ldd build/qjs-windows-x86.exe build/qjsc-windows-x86.exe - - name: upload - uses: actions/upload-artifact@v3 - with: - name: qjs - path: build/*-windows-x86.exe - - windows-x86_64: - runs-on: windows-latest - defaults: - run: - shell: msys2 {0} - steps: - - uses: actions/checkout@v3 - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: mingw64 - install: >- - git - make - pacboy: >- - cmake:p - ninja:p - toolchain:p - - name: build - run: | - make - mv build/qjs.exe build/qjs-windows-x86_64.exe - mv build/qjsc.exe build/qjsc-windows-x86_64.exe - - name: check - run: | - ldd build/qjs-windows-x86_64.exe build/qjsc-windows-x86_64.exe - - name: upload - uses: actions/upload-artifact@v3 - with: - name: qjs - path: build/*-windows-x86_64.exe - - upload-to-release: - needs: [linux-x86, linux-x86_64, macos, windows-x86, windows-x86_64] - runs-on: ubuntu-latest - steps: - - name: get assets - uses: actions/download-artifact@v3 - with: - path: build - - name: release - uses: softprops/action-gh-release@v1 - with: - files: | - build/qjs/qjs-* - build/qjs/qjsc-* diff --git a/vendor/quickjs-ng/.gitignore b/vendor/quickjs-ng/.gitignore deleted file mode 100644 index fbeb98f3a..000000000 --- a/vendor/quickjs-ng/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*.a -*.orig -*.so -.obj/ -build/ -unicode/ -test262_*.txt -.idea -cmake-* \ No newline at end of file diff --git a/vendor/quickjs-ng/.gitmodules b/vendor/quickjs-ng/.gitmodules deleted file mode 100644 index b10f021f2..000000000 --- a/vendor/quickjs-ng/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "test262"] - path = test262 - url = https://github.com/tc39/test262 - shallow = true diff --git a/vendor/quickjs-ng/CMakeLists.txt b/vendor/quickjs-ng/CMakeLists.txt deleted file mode 100644 index 103e9a341..000000000 --- a/vendor/quickjs-ng/CMakeLists.txt +++ /dev/null @@ -1,365 +0,0 @@ -cmake_minimum_required(VERSION 3.9) - -project(quickjs LANGUAGES C) - -include(CheckCCompilerFlag) -include(GNUInstallDirs) - -# TODO: -# - Support cross-compilation - -set(CMAKE_C_VISIBILITY_PRESET hidden) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_C_EXTENSIONS ON) -set(CMAKE_C_STANDARD 11) - -if(NOT CMAKE_BUILD_TYPE) - message(STATUS "No build type selected, default to Release") - set(CMAKE_BUILD_TYPE "Release") -endif() - -message(STATUS "Building in ${CMAKE_BUILD_TYPE} mode") -message(STATUS "Building with ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION} on ${CMAKE_SYSTEM}") - -macro(xcheck_add_c_compiler_flag FLAG) - string(REPLACE "-" "" FLAG_NO_HYPHEN ${FLAG}) - check_c_compiler_flag(${FLAG} COMPILER_SUPPORTS_${FLAG_NO_HYPHEN}) - if(COMPILER_SUPPORTS_${FLAG_NO_HYPHEN}) - add_compile_options(${FLAG}) - endif() -endmacro() - -xcheck_add_c_compiler_flag(-Wall) -if(NOT MSVC) - xcheck_add_c_compiler_flag(-Werror) - xcheck_add_c_compiler_flag(-Wextra) -endif() -xcheck_add_c_compiler_flag(-Wno-implicit-fallthrough) -xcheck_add_c_compiler_flag(-Wno-sign-compare) -xcheck_add_c_compiler_flag(-Wno-missing-field-initializers) -xcheck_add_c_compiler_flag(-Wno-unused-parameter) -xcheck_add_c_compiler_flag(-Wno-unused-variable) -xcheck_add_c_compiler_flag(-Wno-unused-but-set-variable) -xcheck_add_c_compiler_flag(-Wno-array-bounds) -xcheck_add_c_compiler_flag(-Wno-format-truncation) -xcheck_add_c_compiler_flag(-funsigned-char) - -# ClangCL is command line compatible with MSVC, so 'MSVC' is set. -if(MSVC) - xcheck_add_c_compiler_flag(-Wno-unsafe-buffer-usage) - xcheck_add_c_compiler_flag(-Wno-sign-conversion) - xcheck_add_c_compiler_flag(-Wno-nonportable-system-include-path) - xcheck_add_c_compiler_flag(-Wno-implicit-int-conversion) - xcheck_add_c_compiler_flag(-Wno-shorten-64-to-32) - xcheck_add_c_compiler_flag(-Wno-reserved-macro-identifier) - xcheck_add_c_compiler_flag(-Wno-reserved-identifier) - xcheck_add_c_compiler_flag(-Wdeprecated-declarations) - add_compile_definitions(WIN32_LEAN_AND_MEAN) -endif() - -if(CMAKE_BUILD_TYPE MATCHES "Debug") - add_compile_options(-O0) - xcheck_add_c_compiler_flag(-ggdb) - xcheck_add_c_compiler_flag(-fno-omit-frame-pointer) -endif() - -macro(xoption OPTION_NAME OPTION_TEXT OPTION_DEFAULT) - option(${OPTION_NAME} ${OPTION_TEXT} ${OPTION_DEFAULT}) - if(DEFINED ENV{${OPTION_NAME}}) - # Allow setting the option through an environment variable. - set(${OPTION_NAME} $ENV{${OPTION_NAME}}) - endif() - if(${OPTION_NAME}) - add_definitions(-D${OPTION_NAME}) - endif() - message(STATUS " ${OPTION_NAME}: ${${OPTION_NAME}}") -endmacro() - -xoption(BUILD_SHARED_LIBS "Build a shared library" OFF) -if(BUILD_SHARED_LIBS) - message(STATUS "Building a shared library") -endif() - -xoption(BUILD_EXAMPLES "Build examples" OFF) -xoption(BUILD_STATIC_QJS_EXE "Build a static qjs executable" OFF) -xoption(CONFIG_ASAN "Enable AddressSanitizer (ASan)" OFF) -xoption(CONFIG_MSAN "Enable MemorySanitizer (MSan)" OFF) -xoption(CONFIG_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan)" OFF) - -if(CONFIG_ASAN) -message(STATUS "Building with ASan") -add_compile_definitions( - __ASAN__=1 -) -add_compile_options( - -fsanitize=address - -fno-sanitize-recover=all - -fno-omit-frame-pointer -) -add_link_options( - -fsanitize=address - -fno-sanitize-recover=all - -fno-omit-frame-pointer -) -elseif(CONFIG_MSAN) -message(STATUS "Building with MSan") -add_compile_options( - -fsanitize=memory - -fno-sanitize-recover=all - -fno-omit-frame-pointer -) -add_link_options( - -fsanitize=memory - -fno-sanitize-recover=all - -fno-omit-frame-pointer -) -elseif(CONFIG_UBSAN) -message(STATUS "Building with UBSan") -add_compile_options( - -fsanitize=undefined - -fno-sanitize-recover=all - -fno-omit-frame-pointer -) -add_link_options( - -fsanitize=undefined - -fno-sanitize-recover=all - -fno-omit-frame-pointer -) -endif() - - -# QuickJS library -# - -xoption(BUILD_QJS_LIBC "Build standard library modules as part of the library" OFF) - -set(qjs_sources - cutils.c - libbf.c - libregexp.c - libunicode.c - quickjs.c -) - -if(BUILD_QJS_LIBC) - list(APPEND qjs_sources quickjs-libc.c) -endif() -list(APPEND qjs_defines _GNU_SOURCE) -list(APPEND qjs_libs qjs ${CMAKE_DL_LIBS}) -if(NOT MSVC) - list(APPEND qjs_libs m pthread) -endif() - -add_library(qjs ${qjs_sources}) -target_compile_definitions(qjs PRIVATE ${qjs_defines}) -if (CMAKE_BUILD_TYPE MATCHES Debug OR DUMP_LEAKS) - target_compile_definitions(qjs PRIVATE - DUMP_LEAKS - ) -endif() -target_include_directories(qjs PUBLIC - $ - $ -) - -if(EMSCRIPTEN) - add_executable(qjs_wasm ${qjs_sources}) - target_compile_definitions(qjs_wasm PRIVATE ${qjs_defines}) - target_link_libraries(qjs_wasm m) -endif() - - -# QuickJS bytecode compiler -# - -add_executable(qjsc - qjsc.c - quickjs-libc.c -) -target_compile_definitions(qjsc PRIVATE ${qjs_defines}) -target_link_libraries(qjsc ${qjs_libs}) - - -# QuickJS CLI -# - -add_custom_command( - OUTPUT repl.c - COMMAND qjsc -o ./repl.c -m ${CMAKE_CURRENT_SOURCE_DIR}/repl.js - DEPENDS qjsc - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Compile repl.js to bytecode" - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/repl.js -) - -add_executable(qjs_exe - qjs.c - quickjs-libc.c - ${CMAKE_CURRENT_BINARY_DIR}/repl.c -) -set_target_properties(qjs_exe PROPERTIES - OUTPUT_NAME "qjs" -) -target_compile_definitions(qjs_exe PRIVATE ${qjs_defines}) -target_link_libraries(qjs_exe ${qjs_libs}) -if(BUILD_STATIC_QJS_EXE OR MINGW) - target_link_options(qjs_exe PRIVATE -static) - if(MINGW) - target_link_options(qjs_exe PRIVATE -static-libgcc) - endif() -endif() -if(NOT WIN32) - set_target_properties(qjs_exe PROPERTIES ENABLE_EXPORTS TRUE) -endif() - - -# Test262 runner -# - -# run-test262 uses pthreads. -if(NOT WIN32) - add_executable(run-test262 - quickjs-libc.c - run-test262.c - ) - target_compile_definitions(run-test262 PRIVATE ${qjs_defines}) - target_link_libraries(run-test262 ${qjs_libs}) -endif() - -# Unicode generator -# - -add_executable(unicode_gen EXCLUDE_FROM_ALL - cutils.c - libunicode.c - unicode_gen.c -) -target_compile_definitions(unicode_gen PRIVATE ${qjs_defines}) - -add_custom_command( - OUTPUT function_source.c - COMMAND qjsc -e -o function_source.c ${CMAKE_CURRENT_SOURCE_DIR}/tests/function_source.js - DEPENDS qjsc ${CMAKE_CURRENT_SOURCE_DIR}/tests/function_source.js - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Compile function_source.js to a C file with bytecode embedded" - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/tests/function_source.js -) -add_executable(function_source - ${CMAKE_CURRENT_BINARY_DIR}/function_source.c - quickjs-libc.c -) -target_include_directories(function_source PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) -target_compile_definitions(function_source PRIVATE ${qjs_defines}) -target_link_libraries(function_source ${qjs_libs}) - -# Examples -# - -if(BUILD_EXAMPLES AND NOT WIN32) - add_custom_command( - OUTPUT hello.c - COMMAND qjsc -e -o hello.c ${CMAKE_CURRENT_SOURCE_DIR}/examples/hello.js - DEPENDS qjsc - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Compile hello.js to a C file with bytecode embedded" - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/examples/hello.js - ) - add_executable(hello - ${CMAKE_CURRENT_BINARY_DIR}/hello.c - quickjs-libc.c - ) - target_include_directories(hello PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) - target_compile_definitions(hello PRIVATE ${qjs_defines}) - target_link_libraries(hello ${qjs_libs}) - - add_custom_command( - OUTPUT hello_module.c - COMMAND qjsc -e -o hello_module.c -m ${CMAKE_CURRENT_SOURCE_DIR}/examples/hello_module.js - DEPENDS qjsc - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Compile hello_module.js to a C file with bytecode embedded" - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/examples/hello_module.js - ) - add_executable(hello_module - ${CMAKE_CURRENT_BINARY_DIR}/hello_module.c - quickjs-libc.c - ) - target_include_directories(hello_module PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) - target_compile_definitions(hello_module PRIVATE ${qjs_defines}) - target_link_libraries(hello_module ${qjs_libs}) - - if(NOT WIN32) - add_library(fib MODULE examples/fib.c) - set_target_properties(fib PROPERTIES - PREFIX "" - C_VISIBILITY_PRESET default - ) - target_compile_definitions(fib PRIVATE JS_SHARED_LIBRARY) - if(APPLE) - target_link_options(fib PRIVATE -undefined dynamic_lookup) - endif() - - add_library(point MODULE examples/point.c) - set_target_properties(point PROPERTIES - PREFIX "" - C_VISIBILITY_PRESET default - ) - target_compile_definitions(point PRIVATE JS_SHARED_LIBRARY) - if(APPLE) - target_link_options(point PRIVATE -undefined dynamic_lookup) - endif() - - add_library(bjson MODULE tests/bjson.c) - set_target_properties(bjson PROPERTIES - PREFIX "" - C_VISIBILITY_PRESET default - ) - target_compile_definitions(bjson PRIVATE JS_SHARED_LIBRARY) - if(APPLE) - target_link_options(bjson PRIVATE -undefined dynamic_lookup) - endif() - endif() - - add_custom_command( - OUTPUT test_fib.c - COMMAND qjsc -e -o test_fib.c -M ${CMAKE_CURRENT_SOURCE_DIR}/examples/fib.so,fib -m ${CMAKE_CURRENT_SOURCE_DIR}/examples/test_fib.js - DEPENDS qjsc - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Compile test_fib.js to a C file with bytecode embedded" - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/examples/test_fib.js - ) - add_executable(test_fib - ${CMAKE_CURRENT_BINARY_DIR}/test_fib.c - examples/fib.c - quickjs-libc.c - ) - target_include_directories(test_fib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) - target_compile_definitions(test_fib PRIVATE ${qjs_defines}) - target_link_libraries(test_fib ${qjs_libs}) -endif() - - -# Install target -# - -file(STRINGS quickjs.h quickjs_h REGEX QJS_VERSION) -string(REGEX MATCHALL "([0-9])" QJS_VERSION "${quickjs_h}") -list(GET QJS_VERSION 0 QJS_VERSION_MAJOR) -list(GET QJS_VERSION 1 QJS_VERSION_MINOR) -list(GET QJS_VERSION 2 QJS_VERSION_PATCH) -set_target_properties(qjs PROPERTIES - VERSION ${QJS_VERSION_MAJOR}.${QJS_VERSION_MINOR}.${QJS_VERSION_PATCH} - SOVERSION ${QJS_VERSION_MAJOR} -) -install(FILES quickjs.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -if(BUILD_QJS_LIBC) - install(FILES quickjs-libc.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -endif() -install(TARGETS qjs_exe RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -install(TARGETS qjs EXPORT qjsConfig - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(EXPORT qjsConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/quickjs) -install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) -install(DIRECTORY examples DESTINATION ${CMAKE_INSTALL_DOCDIR}) diff --git a/vendor/quickjs-ng/LICENSE b/vendor/quickjs-ng/LICENSE deleted file mode 100644 index 7d87e3ca5..000000000 --- a/vendor/quickjs-ng/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017-2021 Fabrice Bellard -Copyright (c) 2017-2021 Charlie Gordon -Copyright (c) 2023 Ben Noordhuis -Copyright (c) 2023 Saúl Ibarra Corretgé - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/quickjs-ng/Makefile b/vendor/quickjs-ng/Makefile deleted file mode 100644 index 4d25cdffe..000000000 --- a/vendor/quickjs-ng/Makefile +++ /dev/null @@ -1,95 +0,0 @@ -# -# QuickJS Javascript Engine -# -# Copyright (c) 2017-2021 Fabrice Bellard -# Copyright (c) 2017-2021 Charlie Gordon -# Copyright (c) 2023 Ben Noordhuis -# Copyright (c) 2023 Saúl Ibarra Corretgé -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -BUILD_DIR=build -BUILD_TYPE?=Release - -QJS=$(BUILD_DIR)/qjs -RUN262=$(BUILD_DIR)/run-test262 - -JOBS?=$(shell getconf _NPROCESSORS_ONLN) -ifeq ($(JOBS),) -JOBS := $(shell sysctl -n hw.ncpu) -endif -ifeq ($(JOBS),) -JOBS := $(shell nproc) -endif -ifeq ($(JOBS),) -JOBS := 4 -endif - -all: $(QJS) - -$(BUILD_DIR): - cmake -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) - -$(QJS): $(BUILD_DIR) - cmake --build $(BUILD_DIR) -j $(JOBS) - -install: $(QJS) - cmake --build $(BUILD_DIR) --target install - -clean: - cmake --build $(BUILD_DIR) --target clean - -debug: - BUILD_TYPE=Debug $(MAKE) - -distclean: - @rm -rf $(BUILD_DIR) - -stats: $(QJS) - $(QJS) -qd - -test: $(QJS) - $(QJS) tests/test_bigint.js - $(QJS) tests/test_closure.js - $(QJS) tests/test_language.js - $(QJS) tests/test_builtin.js - $(QJS) tests/test_loop.js - $(QJS) tests/test_std.js - $(QJS) tests/test_worker.js - $(QJS) tests/test_queue_microtask.js - -test262: $(QJS) - $(RUN262) -m -c test262.conf -a - -test262-update: $(QJS) - $(RUN262) -u -c test262.conf -a - -test262-check: $(QJS) - $(RUN262) -m -c test262.conf -E -a - -microbench: $(QJS) - $(QJS) tests/microbench.js - -unicode_gen: $(BUILD_DIR) - cmake --build $(BUILD_DIR) --target unicode_gen - -libunicode-table.h: unicode_gen - $(BUILD_DIR)/unicode_gen unicode $@ - -.PHONY: all debug install clean distclean stats test test262 test262-update test262-check microbench unicode_gen $(QJS) diff --git a/vendor/quickjs-ng/README.md b/vendor/quickjs-ng/README.md deleted file mode 100644 index 535be16fc..000000000 --- a/vendor/quickjs-ng/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# ⚡️ QuickJS - A mighty JavaScript engine - -Friendly [QuickJS](https://bellard.org/quickjs) fork focused on reigniting the project. - -🚧 Work in progress. diff --git a/vendor/quickjs-ng/cutils.c b/vendor/quickjs-ng/cutils.c deleted file mode 100644 index 088e75ecf..000000000 --- a/vendor/quickjs-ng/cutils.c +++ /dev/null @@ -1,677 +0,0 @@ -/* - * C utilities - * - * Copyright (c) 2017 Fabrice Bellard - * Copyright (c) 2018 Charlie Gordon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#if !defined(_MSC_VER) -#include -#endif - -#include "cutils.h" - -#pragma GCC visibility push(default) - -void pstrcpy(char *buf, int buf_size, const char *str) -{ - int c; - char *q = buf; - - if (buf_size <= 0) - return; - - for(;;) { - c = *str++; - if (c == 0 || q >= buf + buf_size - 1) - break; - *q++ = c; - } - *q = '\0'; -} - -/* strcat and truncate. */ -char *pstrcat(char *buf, int buf_size, const char *s) -{ - int len; - len = strlen(buf); - if (len < buf_size) - pstrcpy(buf + len, buf_size - len, s); - return buf; -} - -int strstart(const char *str, const char *val, const char **ptr) -{ - const char *p, *q; - p = str; - q = val; - while (*q != '\0') { - if (*p != *q) - return 0; - p++; - q++; - } - if (ptr) - *ptr = p; - return 1; -} - -int has_suffix(const char *str, const char *suffix) -{ - size_t len = strlen(str); - size_t slen = strlen(suffix); - return (len >= slen && !memcmp(str + len - slen, suffix, slen)); -} - -/* Dynamic buffer package */ - -static void *dbuf_default_realloc(void *opaque, void *ptr, size_t size) -{ - return realloc(ptr, size); -} - -void dbuf_init2(DynBuf *s, void *opaque, DynBufReallocFunc *realloc_func) -{ - memset(s, 0, sizeof(*s)); - if (!realloc_func) - realloc_func = dbuf_default_realloc; - s->opaque = opaque; - s->realloc_func = realloc_func; -} - -void dbuf_init(DynBuf *s) -{ - dbuf_init2(s, NULL, NULL); -} - -/* return < 0 if error */ -int dbuf_realloc(DynBuf *s, size_t new_size) -{ - size_t size; - uint8_t *new_buf; - if (new_size > s->allocated_size) { - if (s->error) - return -1; - size = s->allocated_size * 3 / 2; - if (size > new_size) - new_size = size; - new_buf = s->realloc_func(s->opaque, s->buf, new_size); - if (!new_buf) { - s->error = TRUE; - return -1; - } - s->buf = new_buf; - s->allocated_size = new_size; - } - return 0; -} - -int dbuf_write(DynBuf *s, size_t offset, const void *data, size_t len) -{ - size_t end; - end = offset + len; - if (dbuf_realloc(s, end)) - return -1; - memcpy(s->buf + offset, data, len); - if (end > s->size) - s->size = end; - return 0; -} - -int dbuf_put(DynBuf *s, const void *data, size_t len) -{ - if (unlikely((s->size + len) > s->allocated_size)) { - if (dbuf_realloc(s, s->size + len)) - return -1; - } - if (len > 0) { - memcpy(s->buf + s->size, data, len); - s->size += len; - } - return 0; -} - -int dbuf_put_self(DynBuf *s, size_t offset, size_t len) -{ - if (unlikely((s->size + len) > s->allocated_size)) { - if (dbuf_realloc(s, s->size + len)) - return -1; - } - memcpy(s->buf + s->size, s->buf + offset, len); - s->size += len; - return 0; -} - -int dbuf_putc(DynBuf *s, uint8_t c) -{ - return dbuf_put(s, &c, 1); -} - -int dbuf_putstr(DynBuf *s, const char *str) -{ - return dbuf_put(s, (const uint8_t *)str, strlen(str)); -} - -int __attribute__((format(printf, 2, 3))) dbuf_printf(DynBuf *s, - const char *fmt, ...) -{ - va_list ap; - char buf[128]; - int len; - - va_start(ap, fmt); - len = vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - if (len < sizeof(buf)) { - /* fast case */ - return dbuf_put(s, (uint8_t *)buf, len); - } else { - if (dbuf_realloc(s, s->size + len + 1)) - return -1; - va_start(ap, fmt); - vsnprintf((char *)(s->buf + s->size), s->allocated_size - s->size, - fmt, ap); - va_end(ap); - s->size += len; - } - return 0; -} - -void dbuf_free(DynBuf *s) -{ - /* we test s->buf as a fail safe to avoid crashing if dbuf_free() - is called twice */ - if (s->buf) { - s->realloc_func(s->opaque, s->buf, 0); - } - memset(s, 0, sizeof(*s)); -} - -/* Note: at most 31 bits are encoded. At most UTF8_CHAR_LEN_MAX bytes - are output. */ -int unicode_to_utf8(uint8_t *buf, unsigned int c) -{ - uint8_t *q = buf; - - if (c < 0x80) { - *q++ = c; - } else { - if (c < 0x800) { - *q++ = (c >> 6) | 0xc0; - } else { - if (c < 0x10000) { - *q++ = (c >> 12) | 0xe0; - } else { - if (c < 0x00200000) { - *q++ = (c >> 18) | 0xf0; - } else { - if (c < 0x04000000) { - *q++ = (c >> 24) | 0xf8; - } else if (c < 0x80000000) { - *q++ = (c >> 30) | 0xfc; - *q++ = ((c >> 24) & 0x3f) | 0x80; - } else { - return 0; - } - *q++ = ((c >> 18) & 0x3f) | 0x80; - } - *q++ = ((c >> 12) & 0x3f) | 0x80; - } - *q++ = ((c >> 6) & 0x3f) | 0x80; - } - *q++ = (c & 0x3f) | 0x80; - } - return q - buf; -} - -static const unsigned int utf8_min_code[5] = { - 0x80, 0x800, 0x10000, 0x00200000, 0x04000000, -}; - -static const unsigned char utf8_first_code_mask[5] = { - 0x1f, 0xf, 0x7, 0x3, 0x1, -}; - -/* return -1 if error. *pp is not updated in this case. max_len must - be >= 1. The maximum length for a UTF8 byte sequence is 6 bytes. */ -int unicode_from_utf8(const uint8_t *p, int max_len, const uint8_t **pp) -{ - int l, c, b, i; - - c = *p++; - if (c < 0x80) { - *pp = p; - return c; - } - switch(c) { - case 0xc0: case 0xc1: case 0xc2: case 0xc3: - case 0xc4: case 0xc5: case 0xc6: case 0xc7: - case 0xc8: case 0xc9: case 0xca: case 0xcb: - case 0xcc: case 0xcd: case 0xce: case 0xcf: - case 0xd0: case 0xd1: case 0xd2: case 0xd3: - case 0xd4: case 0xd5: case 0xd6: case 0xd7: - case 0xd8: case 0xd9: case 0xda: case 0xdb: - case 0xdc: case 0xdd: case 0xde: case 0xdf: - l = 1; - break; - case 0xe0: case 0xe1: case 0xe2: case 0xe3: - case 0xe4: case 0xe5: case 0xe6: case 0xe7: - case 0xe8: case 0xe9: case 0xea: case 0xeb: - case 0xec: case 0xed: case 0xee: case 0xef: - l = 2; - break; - case 0xf0: case 0xf1: case 0xf2: case 0xf3: - case 0xf4: case 0xf5: case 0xf6: case 0xf7: - l = 3; - break; - case 0xf8: case 0xf9: case 0xfa: case 0xfb: - l = 4; - break; - case 0xfc: case 0xfd: - l = 5; - break; - default: - return -1; - } - /* check that we have enough characters */ - if (l > (max_len - 1)) - return -1; - c &= utf8_first_code_mask[l - 1]; - for(i = 0; i < l; i++) { - b = *p++; - if (b < 0x80 || b >= 0xc0) - return -1; - c = (c << 6) | (b & 0x3f); - } - if (c < utf8_min_code[l - 1]) - return -1; - *pp = p; - return c; -} - -typedef void (*exchange_f)(void *a, void *b, size_t size); -typedef int (*cmp_f)(const void *, const void *, void *opaque); - -static void exchange_bytes(void *a, void *b, size_t size) { - uint8_t *ap = (uint8_t *)a; - uint8_t *bp = (uint8_t *)b; - - while (size-- != 0) { - uint8_t t = *ap; - *ap++ = *bp; - *bp++ = t; - } -} - -static void exchange_one_byte(void *a, void *b, size_t size) { - uint8_t *ap = (uint8_t *)a; - uint8_t *bp = (uint8_t *)b; - uint8_t t = *ap; - *ap = *bp; - *bp = t; -} - -static void exchange_int16s(void *a, void *b, size_t size) { - uint16_t *ap = (uint16_t *)a; - uint16_t *bp = (uint16_t *)b; - - for (size /= sizeof(uint16_t); size-- != 0;) { - uint16_t t = *ap; - *ap++ = *bp; - *bp++ = t; - } -} - -static void exchange_one_int16(void *a, void *b, size_t size) { - uint16_t *ap = (uint16_t *)a; - uint16_t *bp = (uint16_t *)b; - uint16_t t = *ap; - *ap = *bp; - *bp = t; -} - -static void exchange_int32s(void *a, void *b, size_t size) { - uint32_t *ap = (uint32_t *)a; - uint32_t *bp = (uint32_t *)b; - - for (size /= sizeof(uint32_t); size-- != 0;) { - uint32_t t = *ap; - *ap++ = *bp; - *bp++ = t; - } -} - -static void exchange_one_int32(void *a, void *b, size_t size) { - uint32_t *ap = (uint32_t *)a; - uint32_t *bp = (uint32_t *)b; - uint32_t t = *ap; - *ap = *bp; - *bp = t; -} - -static void exchange_int64s(void *a, void *b, size_t size) { - uint64_t *ap = (uint64_t *)a; - uint64_t *bp = (uint64_t *)b; - - for (size /= sizeof(uint64_t); size-- != 0;) { - uint64_t t = *ap; - *ap++ = *bp; - *bp++ = t; - } -} - -static void exchange_one_int64(void *a, void *b, size_t size) { - uint64_t *ap = (uint64_t *)a; - uint64_t *bp = (uint64_t *)b; - uint64_t t = *ap; - *ap = *bp; - *bp = t; -} - -static void exchange_int128s(void *a, void *b, size_t size) { - uint64_t *ap = (uint64_t *)a; - uint64_t *bp = (uint64_t *)b; - - for (size /= sizeof(uint64_t) * 2; size-- != 0; ap += 2, bp += 2) { - uint64_t t = ap[0]; - uint64_t u = ap[1]; - ap[0] = bp[0]; - ap[1] = bp[1]; - bp[0] = t; - bp[1] = u; - } -} - -static void exchange_one_int128(void *a, void *b, size_t size) { - uint64_t *ap = (uint64_t *)a; - uint64_t *bp = (uint64_t *)b; - uint64_t t = ap[0]; - uint64_t u = ap[1]; - ap[0] = bp[0]; - ap[1] = bp[1]; - bp[0] = t; - bp[1] = u; -} - -static inline exchange_f exchange_func(const void *base, size_t size) { - switch (((uintptr_t)base | (uintptr_t)size) & 15) { - case 0: - if (size == sizeof(uint64_t) * 2) - return exchange_one_int128; - else - return exchange_int128s; - case 8: - if (size == sizeof(uint64_t)) - return exchange_one_int64; - else - return exchange_int64s; - case 4: - case 12: - if (size == sizeof(uint32_t)) - return exchange_one_int32; - else - return exchange_int32s; - case 2: - case 6: - case 10: - case 14: - if (size == sizeof(uint16_t)) - return exchange_one_int16; - else - return exchange_int16s; - default: - if (size == 1) - return exchange_one_byte; - else - return exchange_bytes; - } -} - -static void heapsortx(void *base, size_t nmemb, size_t size, cmp_f cmp, void *opaque) -{ - uint8_t *basep = (uint8_t *)base; - size_t i, n, c, r; - exchange_f swap = exchange_func(base, size); - - if (nmemb > 1) { - i = (nmemb / 2) * size; - n = nmemb * size; - - while (i > 0) { - i -= size; - for (r = i; (c = r * 2 + size) < n; r = c) { - if (c < n - size && cmp(basep + c, basep + c + size, opaque) <= 0) - c += size; - if (cmp(basep + r, basep + c, opaque) > 0) - break; - swap(basep + r, basep + c, size); - } - } - for (i = n - size; i > 0; i -= size) { - swap(basep, basep + i, size); - - for (r = 0; (c = r * 2 + size) < i; r = c) { - if (c < i - size && cmp(basep + c, basep + c + size, opaque) <= 0) - c += size; - if (cmp(basep + r, basep + c, opaque) > 0) - break; - swap(basep + r, basep + c, size); - } - } - } -} - -static inline void *med3(void *a, void *b, void *c, cmp_f cmp, void *opaque) -{ - return cmp(a, b, opaque) < 0 ? - (cmp(b, c, opaque) < 0 ? b : (cmp(a, c, opaque) < 0 ? c : a )) : - (cmp(b, c, opaque) > 0 ? b : (cmp(a, c, opaque) < 0 ? a : c )); -} - -/* pointer based version with local stack and insertion sort threshhold */ -void rqsort(void *base, size_t nmemb, size_t size, cmp_f cmp, void *opaque) -{ - struct { uint8_t *base; size_t count; int depth; } stack[50], *sp = stack; - uint8_t *ptr, *pi, *pj, *plt, *pgt, *top, *m; - size_t m4, i, lt, gt, span, span2; - int c, depth; - exchange_f swap = exchange_func(base, size); - exchange_f swap_block = exchange_func(base, size | 128); - - if (nmemb < 2 || size <= 0) - return; - - sp->base = (uint8_t *)base; - sp->count = nmemb; - sp->depth = 0; - sp++; - - while (sp > stack) { - sp--; - ptr = sp->base; - nmemb = sp->count; - depth = sp->depth; - - while (nmemb > 6) { - if (++depth > 50) { - /* depth check to ensure worst case logarithmic time */ - heapsortx(ptr, nmemb, size, cmp, opaque); - nmemb = 0; - break; - } - /* select median of 3 from 1/4, 1/2, 3/4 positions */ - /* should use median of 5 or 9? */ - m4 = (nmemb >> 2) * size; - m = med3(ptr + m4, ptr + 2 * m4, ptr + 3 * m4, cmp, opaque); - swap(ptr, m, size); /* move the pivot to the start or the array */ - i = lt = 1; - pi = plt = ptr + size; - gt = nmemb; - pj = pgt = top = ptr + nmemb * size; - for (;;) { - while (pi < pj && (c = cmp(ptr, pi, opaque)) >= 0) { - if (c == 0) { - swap(plt, pi, size); - lt++; - plt += size; - } - i++; - pi += size; - } - while (pi < (pj -= size) && (c = cmp(ptr, pj, opaque)) <= 0) { - if (c == 0) { - gt--; - pgt -= size; - swap(pgt, pj, size); - } - } - if (pi >= pj) - break; - swap(pi, pj, size); - i++; - pi += size; - } - /* array has 4 parts: - * from 0 to lt excluded: elements identical to pivot - * from lt to pi excluded: elements smaller than pivot - * from pi to gt excluded: elements greater than pivot - * from gt to n excluded: elements identical to pivot - */ - /* move elements identical to pivot in the middle of the array: */ - /* swap values in ranges [0..lt[ and [i-lt..i[ - swapping the smallest span between lt and i-lt is sufficient - */ - span = plt - ptr; - span2 = pi - plt; - lt = i - lt; - if (span > span2) - span = span2; - swap_block(ptr, pi - span, span); - /* swap values in ranges [gt..top[ and [i..top-(top-gt)[ - swapping the smallest span between top-gt and gt-i is sufficient - */ - span = top - pgt; - span2 = pgt - pi; - pgt = top - span2; - gt = nmemb - (gt - i); - if (span > span2) - span = span2; - swap_block(pi, top - span, span); - - /* now array has 3 parts: - * from 0 to lt excluded: elements smaller than pivot - * from lt to gt excluded: elements identical to pivot - * from gt to n excluded: elements greater than pivot - */ - /* stack the larger segment and keep processing the smaller one - to minimize stack use for pathological distributions */ - if (lt > nmemb - gt) { - sp->base = ptr; - sp->count = lt; - sp->depth = depth; - sp++; - ptr = pgt; - nmemb -= gt; - } else { - sp->base = pgt; - sp->count = nmemb - gt; - sp->depth = depth; - sp++; - nmemb = lt; - } - } - /* Use insertion sort for small fragments */ - for (pi = ptr + size, top = ptr + nmemb * size; pi < top; pi += size) { - for (pj = pi; pj > ptr && cmp(pj - size, pj, opaque) > 0; pj -= size) - swap(pj, pj - size, size); - } - } -} - -#if defined(_MSC_VER) - // From: https://stackoverflow.com/a/26085827 -static int gettimeofday_msvc(struct timeval *tp, struct timezone *tzp) -{ - static const uint64_t EPOCH = ((uint64_t)116444736000000000ULL); - - SYSTEMTIME system_time; - FILETIME file_time; - uint64_t time; - - GetSystemTime(&system_time); - SystemTimeToFileTime(&system_time, &file_time); - time = ((uint64_t)file_time.dwLowDateTime); - time += ((uint64_t)file_time.dwHighDateTime) << 32; - - tp->tv_sec = (long)((time - EPOCH) / 10000000L); - tp->tv_usec = (long)(system_time.wMilliseconds * 1000); - - return 0; -} - -uint64_t js__hrtime_ns(void) { - LARGE_INTEGER counter, frequency; - double scaled_freq; - double result; - - if (!QueryPerformanceFrequency(&frequency)) - abort(); - assert(frequency.QuadPart != 0); - - if (!QueryPerformanceCounter(&counter)) - abort(); - assert(counter.QuadPart != 0); - - /* Because we have no guarantee about the order of magnitude of the - * performance counter interval, integer math could cause this computation - * to overflow. Therefore we resort to floating point math. - */ - scaled_freq = (double) frequency.QuadPart / 1e9; - result = (double) counter.QuadPart / scaled_freq; - return (uint64_t) result; -} -#else -uint64_t js__hrtime_ns(void) { - struct timespec t; - - if (clock_gettime(CLOCK_MONOTONIC, &t)) - abort(); - - return t.tv_sec * (uint64_t) 1e9 + t.tv_nsec; -} -#endif - -int64_t js__gettimeofday_us(void) { - struct timeval tv; -#if defined(_MSC_VER) - gettimeofday_msvc(&tv, NULL); -#else - gettimeofday(&tv, NULL); -#endif - return ((int64_t)tv.tv_sec * 1000000) + tv.tv_usec; -} - -#pragma GCC visibility pop diff --git a/vendor/quickjs-ng/cutils.h b/vendor/quickjs-ng/cutils.h deleted file mode 100644 index ea674a09e..000000000 --- a/vendor/quickjs-ng/cutils.h +++ /dev/null @@ -1,443 +0,0 @@ -/* - * C utilities - * - * Copyright (c) 2017 Fabrice Bellard - * Copyright (c) 2018 Charlie Gordon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef CUTILS_H -#define CUTILS_H - -#include -#include - -/* set if CPU is big endian */ -#undef WORDS_BIGENDIAN - -#if defined(_MSC_VER) -#include -#include -#include -#define alloca _alloca -#define ssize_t ptrdiff_t -#endif -#if defined(__APPLE__) -#include -#elif defined(__ANDROID__) -#include -#elif defined(__linux__) || defined(__CYGWIN__) -#include -#elif defined(__FreeBSD__) -#include -#endif - - -#if defined(_MSC_VER) && !defined(__clang__) -# define likely(x) (x) -# define unlikely(x) (x) -# define force_inline __forceinline -# define no_inline __declspec(noinline) -# define __maybe_unused -# define __attribute__(x) -# define __attribute(x) -# include -static void *__builtin_frame_address(unsigned int level) { - return (void *)((char*)_AddressOfReturnAddress() - sizeof(int *) - level * sizeof(int *)); -} -#else -# define likely(x) __builtin_expect(!!(x), 1) -# define unlikely(x) __builtin_expect(!!(x), 0) -# define force_inline inline __attribute__((always_inline)) -# define no_inline __attribute__((noinline)) -# define __maybe_unused __attribute__((unused)) -#endif - -// https://stackoverflow.com/a/6849629 -#undef FORMAT_STRING -#if _MSC_VER >= 1400 -# include -# if _MSC_VER > 1400 -# define FORMAT_STRING(p) _Printf_format_string_ p -# else -# define FORMAT_STRING(p) __format_string p -# endif /* FORMAT_STRING */ -#else -# define FORMAT_STRING(p) p -#endif /* _MSC_VER */ - -// https://stackoverflow.com/a/3312896 -// https://stackoverflow.com/a/3312896 -#if defined(__GNUC__) || defined(__clang__) // GCC, clang, clang-cl, and so on but not MSVC -# define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__)) -#elif defined(_MSC_VER) && !defined(__clang__) // MSVC -# define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop)) -#endif - -#if defined(_MSC_VER) && !defined(__clang__) -#include -#define INF INFINITY -#define NEG_INF -INFINITY -#else -#define INF (1.0/0.0) -#define NEG_INF (-1.0/0.0) -#endif - -#define xglue(x, y) x ## y -#define glue(x, y) xglue(x, y) -#define stringify(s) tostring(s) -#define tostring(s) #s - -#ifndef offsetof -#define offsetof(type, field) ((size_t) &((type *)0)->field) -#endif -#ifndef countof -#define countof(x) (sizeof(x) / sizeof((x)[0])) -#ifndef endof -#define endof(x) ((x) + countof(x)) -#endif -#endif -#ifndef container_of -/* return the pointer of type 'type *' containing 'ptr' as field 'member' */ -#define container_of(ptr, type, member) ((type *)((uint8_t *)(ptr) - offsetof(type, member))) -#endif - -typedef int BOOL; - -#ifndef FALSE -enum { - FALSE = 0, - TRUE = 1, -}; -#endif - -void pstrcpy(char *buf, int buf_size, const char *str); -char *pstrcat(char *buf, int buf_size, const char *s); -int strstart(const char *str, const char *val, const char **ptr); -int has_suffix(const char *str, const char *suffix); - -static inline int max_int(int a, int b) -{ - if (a > b) - return a; - else - return b; -} - -static inline int min_int(int a, int b) -{ - if (a < b) - return a; - else - return b; -} - -static inline uint32_t max_uint32(uint32_t a, uint32_t b) -{ - if (a > b) - return a; - else - return b; -} - -static inline uint32_t min_uint32(uint32_t a, uint32_t b) -{ - if (a < b) - return a; - else - return b; -} - -static inline int64_t max_int64(int64_t a, int64_t b) -{ - if (a > b) - return a; - else - return b; -} - -static inline int64_t min_int64(int64_t a, int64_t b) -{ - if (a < b) - return a; - else - return b; -} - -/* WARNING: undefined if a = 0 */ -static inline int clz32(unsigned int a) -{ -#if defined(_MSC_VER) && !defined(__clang__) - unsigned long index; - _BitScanReverse(&index, a); - return 31 - index; -#else - return __builtin_clz(a); -#endif -} - -/* WARNING: undefined if a = 0 */ -static inline int clz64(uint64_t a) -{ -#if defined(_MSC_VER) && !defined(__clang__) - unsigned long index; - _BitScanReverse64(&index, a); - return 63 - index; -#else - return __builtin_clzll(a); -#endif -} - -/* WARNING: undefined if a = 0 */ -static inline int ctz32(unsigned int a) -{ -#if defined(_MSC_VER) && !defined(__clang__) - unsigned long index; - _BitScanForward(&index, a); - return index; -#else - return __builtin_ctz(a); -#endif -} - -/* WARNING: undefined if a = 0 */ -static inline int ctz64(uint64_t a) -{ -#if defined(_MSC_VER) && !defined(__clang__) - unsigned long index; - _BitScanForward64(&index, a); - return index; -#else - return __builtin_ctzll(a); -#endif -} - -PACK( - struct packed_u64 { - uint64_t v; - } -); - -PACK( - struct packed_u32 { - uint32_t v; - } -); - -PACK( - struct packed_u16 { - uint16_t v; - } -); - -static inline uint64_t get_u64(const uint8_t *tab) -{ - return ((const struct packed_u64 *)tab)->v; -} - -static inline int64_t get_i64(const uint8_t *tab) -{ - return (int64_t)((const struct packed_u64 *)tab)->v; -} - -static inline void put_u64(uint8_t *tab, uint64_t val) -{ - ((struct packed_u64 *)tab)->v = val; -} - -static inline uint32_t get_u32(const uint8_t *tab) -{ - return ((const struct packed_u32 *)tab)->v; -} - -static inline int32_t get_i32(const uint8_t *tab) -{ - return (int32_t)((const struct packed_u32 *)tab)->v; -} - -static inline void put_u32(uint8_t *tab, uint32_t val) -{ - ((struct packed_u32 *)tab)->v = val; -} - -static inline uint32_t get_u16(const uint8_t *tab) -{ - return ((const struct packed_u16 *)tab)->v; -} - -static inline int32_t get_i16(const uint8_t *tab) -{ - return (int16_t)((const struct packed_u16 *)tab)->v; -} - -static inline void put_u16(uint8_t *tab, uint16_t val) -{ - ((struct packed_u16 *)tab)->v = val; -} - -static inline uint32_t get_u8(const uint8_t *tab) -{ - return *tab; -} - -static inline int32_t get_i8(const uint8_t *tab) -{ - return (int8_t)*tab; -} - -static inline void put_u8(uint8_t *tab, uint8_t val) -{ - *tab = val; -} - -#ifndef bswap16 -static inline uint16_t bswap16(uint16_t x) -{ - return (x >> 8) | (x << 8); -} -#endif - -#ifndef bswap32 -static inline uint32_t bswap32(uint32_t v) -{ - return ((v & 0xff000000) >> 24) | ((v & 0x00ff0000) >> 8) | - ((v & 0x0000ff00) << 8) | ((v & 0x000000ff) << 24); -} -#endif - -#ifndef bswap64 -static inline uint64_t bswap64(uint64_t v) -{ - return ((v & ((uint64_t)0xff << (7 * 8))) >> (7 * 8)) | - ((v & ((uint64_t)0xff << (6 * 8))) >> (5 * 8)) | - ((v & ((uint64_t)0xff << (5 * 8))) >> (3 * 8)) | - ((v & ((uint64_t)0xff << (4 * 8))) >> (1 * 8)) | - ((v & ((uint64_t)0xff << (3 * 8))) << (1 * 8)) | - ((v & ((uint64_t)0xff << (2 * 8))) << (3 * 8)) | - ((v & ((uint64_t)0xff << (1 * 8))) << (5 * 8)) | - ((v & ((uint64_t)0xff << (0 * 8))) << (7 * 8)); -} -#endif - -static inline void inplace_bswap16(uint8_t *tab) { - put_u16(tab, bswap16(get_u16(tab))); -} - -static inline void inplace_bswap32(uint8_t *tab) { - put_u32(tab, bswap32(get_u32(tab))); -} - -/* XXX: should take an extra argument to pass slack information to the caller */ -typedef void *DynBufReallocFunc(void *opaque, void *ptr, size_t size); - -typedef struct DynBuf { - uint8_t *buf; - size_t size; - size_t allocated_size; - BOOL error; /* true if a memory allocation error occurred */ - DynBufReallocFunc *realloc_func; - void *opaque; /* for realloc_func */ -} DynBuf; - -void dbuf_init(DynBuf *s); -void dbuf_init2(DynBuf *s, void *opaque, DynBufReallocFunc *realloc_func); -int dbuf_realloc(DynBuf *s, size_t new_size); -int dbuf_write(DynBuf *s, size_t offset, const void *data, size_t len); -int dbuf_put(DynBuf *s, const void *data, size_t len); -int dbuf_put_self(DynBuf *s, size_t offset, size_t len); -int dbuf_putc(DynBuf *s, uint8_t c); -int dbuf_putstr(DynBuf *s, const char *str); -static inline int dbuf_put_u16(DynBuf *s, uint16_t val) -{ - return dbuf_put(s, (uint8_t *)&val, 2); -} -static inline int dbuf_put_u32(DynBuf *s, uint32_t val) -{ - return dbuf_put(s, (uint8_t *)&val, 4); -} -static inline int dbuf_put_u64(DynBuf *s, uint64_t val) -{ - return dbuf_put(s, (uint8_t *)&val, 8); -} -int __attribute__((format(printf, 2, 3))) dbuf_printf(DynBuf *s, - FORMAT_STRING(const char *fmt), ...); -void dbuf_free(DynBuf *s); -static inline BOOL dbuf_error(DynBuf *s) { - return s->error; -} -static inline void dbuf_set_error(DynBuf *s) -{ - s->error = TRUE; -} - -#define UTF8_CHAR_LEN_MAX 6 - -int unicode_to_utf8(uint8_t *buf, unsigned int c); -int unicode_from_utf8(const uint8_t *p, int max_len, const uint8_t **pp); - -static inline BOOL is_hi_surrogate(uint32_t c) -{ - return 54 == (c >> 10); // 0xD800-0xDBFF -} - -static inline BOOL is_lo_surrogate(uint32_t c) -{ - return 55 == (c >> 10); // 0xDC00-0xDFFF -} - -static inline uint32_t from_surrogate(uint32_t hi, uint32_t lo) -{ - return 65536 + 1024 * (hi & 1023) + (lo & 1023); -} - -static inline int from_hex(int c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - else if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - else if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - else - return -1; -} - -void rqsort(void *base, size_t nmemb, size_t size, - int (*cmp)(const void *, const void *, void *), - void *arg); - -int64_t js__gettimeofday_us(void); -uint64_t js__hrtime_ns(void); - -static inline size_t js__malloc_usable_size(const void *ptr) -{ -#if defined(__APPLE__) - return malloc_size(ptr); -#elif defined(_WIN32) - return _msize((void *)ptr); -#elif defined(__ANDROID__) - return dlmalloc_usable_size((void *)ptr); -#elif defined(__linux__) || defined(__FreeBSD__) - return malloc_usable_size((void *)ptr); -#else - return 0; -#endif -} - -#endif /* CUTILS_H */ diff --git a/vendor/quickjs-ng/dirent_compat.h b/vendor/quickjs-ng/dirent_compat.h deleted file mode 100644 index 077674e45..000000000 --- a/vendor/quickjs-ng/dirent_compat.h +++ /dev/null @@ -1,1166 +0,0 @@ -/* - * Dirent interface for Microsoft Visual Studio - * - * Copyright (C) 1998-2019 Toni Ronkko - * This file is part of dirent. Dirent may be freely distributed - * under the MIT license. For all details and documentation, see - * https://github.com/tronkko/dirent - */ -#ifndef DIRENT_H -#define DIRENT_H - -/* Hide warnings about unreferenced local functions */ -#if defined(__clang__) -# pragma clang diagnostic ignored "-Wunused-function" -#elif defined(_MSC_VER) -# pragma warning(disable:4505) -#elif defined(__GNUC__) -# pragma GCC diagnostic ignored "-Wunused-function" -#endif - -/* - * Include windows.h without Windows Sockets 1.1 to prevent conflicts with - * Windows Sockets 2.0. - */ -#ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -#endif -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Indicates that d_type field is available in dirent structure */ -#define _DIRENT_HAVE_D_TYPE - -/* Indicates that d_namlen field is available in dirent structure */ -#define _DIRENT_HAVE_D_NAMLEN - -/* Entries missing from MSVC 6.0 */ -#if !defined(FILE_ATTRIBUTE_DEVICE) -# define FILE_ATTRIBUTE_DEVICE 0x40 -#endif - -/* File type and permission flags for stat(), general mask */ -#if !defined(S_IFMT) -# define S_IFMT _S_IFMT -#endif - -/* Directory bit */ -#if !defined(S_IFDIR) -# define S_IFDIR _S_IFDIR -#endif - -/* Character device bit */ -#if !defined(S_IFCHR) -# define S_IFCHR _S_IFCHR -#endif - -/* Pipe bit */ -#if !defined(S_IFFIFO) -# define S_IFFIFO _S_IFFIFO -#endif - -/* Regular file bit */ -#if !defined(S_IFREG) -# define S_IFREG _S_IFREG -#endif - -/* Read permission */ -#if !defined(S_IREAD) -# define S_IREAD _S_IREAD -#endif - -/* Write permission */ -#if !defined(S_IWRITE) -# define S_IWRITE _S_IWRITE -#endif - -/* Execute permission */ -#if !defined(S_IEXEC) -# define S_IEXEC _S_IEXEC -#endif - -/* Pipe */ -#if !defined(S_IFIFO) -# define S_IFIFO _S_IFIFO -#endif - -/* Block device */ -#if !defined(S_IFBLK) -# define S_IFBLK 0 -#endif - -/* Link */ -#if !defined(S_IFLNK) -# define S_IFLNK 0 -#endif - -/* Socket */ -#if !defined(S_IFSOCK) -# define S_IFSOCK 0 -#endif - -/* Read user permission */ -#if !defined(S_IRUSR) -# define S_IRUSR S_IREAD -#endif - -/* Write user permission */ -#if !defined(S_IWUSR) -# define S_IWUSR S_IWRITE -#endif - -/* Execute user permission */ -#if !defined(S_IXUSR) -# define S_IXUSR 0 -#endif - -/* Read group permission */ -#if !defined(S_IRGRP) -# define S_IRGRP 0 -#endif - -/* Write group permission */ -#if !defined(S_IWGRP) -# define S_IWGRP 0 -#endif - -/* Execute group permission */ -#if !defined(S_IXGRP) -# define S_IXGRP 0 -#endif - -/* Read others permission */ -#if !defined(S_IROTH) -# define S_IROTH 0 -#endif - -/* Write others permission */ -#if !defined(S_IWOTH) -# define S_IWOTH 0 -#endif - -/* Execute others permission */ -#if !defined(S_IXOTH) -# define S_IXOTH 0 -#endif - -/* Maximum length of file name */ -#if !defined(PATH_MAX) -# define PATH_MAX MAX_PATH -#endif -#if !defined(FILENAME_MAX) -# define FILENAME_MAX MAX_PATH -#endif -#if !defined(NAME_MAX) -# define NAME_MAX FILENAME_MAX -#endif - -/* File type flags for d_type */ -#define DT_UNKNOWN 0 -#define DT_REG S_IFREG -#define DT_DIR S_IFDIR -#define DT_FIFO S_IFIFO -#define DT_SOCK S_IFSOCK -#define DT_CHR S_IFCHR -#define DT_BLK S_IFBLK -#define DT_LNK S_IFLNK - -/* Macros for converting between st_mode and d_type */ -#define IFTODT(mode) ((mode) & S_IFMT) -#define DTTOIF(type) (type) - -/* - * File type macros. Note that block devices, sockets and links cannot be - * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are - * only defined for compatibility. These macros should always return false - * on Windows. - */ -#if !defined(S_ISFIFO) -# define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) -#endif -#if !defined(S_ISDIR) -# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) -#endif -#if !defined(S_ISREG) -# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) -#endif -#if !defined(S_ISLNK) -# define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) -#endif -#if !defined(S_ISSOCK) -# define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) -#endif -#if !defined(S_ISCHR) -# define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) -#endif -#if !defined(S_ISBLK) -# define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) -#endif - -/* Return the exact length of the file name without zero terminator */ -#define _D_EXACT_NAMLEN(p) ((p)->d_namlen) - -/* Return the maximum size of a file name */ -#define _D_ALLOC_NAMLEN(p) ((PATH_MAX)+1) - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Wide-character version */ -struct _wdirent { - /* Always zero */ - long d_ino; - - /* File position within stream */ - long d_off; - - /* Structure size */ - unsigned short d_reclen; - - /* Length of name without \0 */ - size_t d_namlen; - - /* File type */ - int d_type; - - /* File name */ - wchar_t d_name[PATH_MAX+1]; -}; -typedef struct _wdirent _wdirent; - -struct _WDIR { - /* Current directory entry */ - struct _wdirent ent; - - /* Private file data */ - WIN32_FIND_DATAW data; - - /* True if data is valid */ - int cached; - - /* Win32 search handle */ - HANDLE handle; - - /* Initial directory name */ - wchar_t *patt; -}; -typedef struct _WDIR _WDIR; - -/* Multi-byte character version */ -struct dirent { - /* Always zero */ - long d_ino; - - /* File position within stream */ - long d_off; - - /* Structure size */ - unsigned short d_reclen; - - /* Length of name without \0 */ - size_t d_namlen; - - /* File type */ - int d_type; - - /* File name */ - char d_name[PATH_MAX+1]; -}; -typedef struct dirent dirent; - -struct DIR { - struct dirent ent; - struct _WDIR *wdirp; -}; -typedef struct DIR DIR; - - -/* Dirent functions */ -static DIR *opendir (const char *dirname); -static _WDIR *_wopendir (const wchar_t *dirname); - -static struct dirent *readdir (DIR *dirp); -static struct _wdirent *_wreaddir (_WDIR *dirp); - -static int readdir_r( - DIR *dirp, struct dirent *entry, struct dirent **result); -static int _wreaddir_r( - _WDIR *dirp, struct _wdirent *entry, struct _wdirent **result); - -static int closedir (DIR *dirp); -static int _wclosedir (_WDIR *dirp); - -static void rewinddir (DIR* dirp); -static void _wrewinddir (_WDIR* dirp); - -static int scandir (const char *dirname, struct dirent ***namelist, - int (*filter)(const struct dirent*), - int (*compare)(const struct dirent**, const struct dirent**)); - -static int alphasort (const struct dirent **a, const struct dirent **b); - -static int versionsort (const struct dirent **a, const struct dirent **b); - - -/* For compatibility with Symbian */ -#define wdirent _wdirent -#define WDIR _WDIR -#define wopendir _wopendir -#define wreaddir _wreaddir -#define wclosedir _wclosedir -#define wrewinddir _wrewinddir - - -/* Internal utility functions */ -static WIN32_FIND_DATAW *dirent_first (_WDIR *dirp); -static WIN32_FIND_DATAW *dirent_next (_WDIR *dirp); - -static int dirent_mbstowcs_s( - size_t *pReturnValue, - wchar_t *wcstr, - size_t sizeInWords, - const char *mbstr, - size_t count); - -static int dirent_wcstombs_s( - size_t *pReturnValue, - char *mbstr, - size_t sizeInBytes, - const wchar_t *wcstr, - size_t count); - -static void dirent_set_errno (int error); - - -/* - * Open directory stream DIRNAME for read and return a pointer to the - * internal working area that is used to retrieve individual directory - * entries. - */ -static _WDIR* -_wopendir( - const wchar_t *dirname) -{ - _WDIR *dirp; -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - /* Desktop */ - DWORD n; -#else - /* WinRT */ - size_t n; -#endif - wchar_t *p; - - /* Must have directory name */ - if (dirname == NULL || dirname[0] == '\0') { - dirent_set_errno (ENOENT); - return NULL; - } - - /* Allocate new _WDIR structure */ - dirp = (_WDIR*) malloc (sizeof (struct _WDIR)); - if (!dirp) { - return NULL; - } - - /* Reset _WDIR structure */ - dirp->handle = INVALID_HANDLE_VALUE; - dirp->patt = NULL; - dirp->cached = 0; - - /* - * Compute the length of full path plus zero terminator - * - * Note that on WinRT there's no way to convert relative paths - * into absolute paths, so just assume it is an absolute path. - */ -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - /* Desktop */ - n = GetFullPathNameW (dirname, 0, NULL, NULL); -#else - /* WinRT */ - n = wcslen (dirname); -#endif - - /* Allocate room for absolute directory name and search pattern */ - dirp->patt = (wchar_t*) malloc (sizeof (wchar_t) * n + 16); - if (dirp->patt == NULL) { - goto exit_closedir; - } - - /* - * Convert relative directory name to an absolute one. This - * allows rewinddir() to function correctly even when current - * working directory is changed between opendir() and rewinddir(). - * - * Note that on WinRT there's no way to convert relative paths - * into absolute paths, so just assume it is an absolute path. - */ -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - /* Desktop */ - n = GetFullPathNameW (dirname, n, dirp->patt, NULL); - if (n <= 0) { - goto exit_closedir; - } -#else - /* WinRT */ - wcsncpy_s (dirp->patt, n+1, dirname, n); -#endif - - /* Append search pattern \* to the directory name */ - p = dirp->patt + n; - switch (p[-1]) { - case '\\': - case '/': - case ':': - /* Directory ends in path separator, e.g. c:\temp\ */ - /*NOP*/; - break; - - default: - /* Directory name doesn't end in path separator */ - *p++ = '\\'; - } - *p++ = '*'; - *p = '\0'; - - /* Open directory stream and retrieve the first entry */ - if (!dirent_first (dirp)) { - goto exit_closedir; - } - - /* Success */ - return dirp; - - /* Failure */ -exit_closedir: - _wclosedir (dirp); - return NULL; -} - -/* - * Read next directory entry. - * - * Returns pointer to static directory entry which may be overwritten by - * subsequent calls to _wreaddir(). - */ -static struct _wdirent* -_wreaddir( - _WDIR *dirp) -{ - struct _wdirent *entry; - - /* - * Read directory entry to buffer. We can safely ignore the return value - * as entry will be set to NULL in case of error. - */ - (void) _wreaddir_r (dirp, &dirp->ent, &entry); - - /* Return pointer to statically allocated directory entry */ - return entry; -} - -/* - * Read next directory entry. - * - * Returns zero on success. If end of directory stream is reached, then sets - * result to NULL and returns zero. - */ -static int -_wreaddir_r( - _WDIR *dirp, - struct _wdirent *entry, - struct _wdirent **result) -{ - WIN32_FIND_DATAW *datap; - - /* Read next directory entry */ - datap = dirent_next (dirp); - if (datap) { - size_t n; - DWORD attr; - - /* - * Copy file name as wide-character string. If the file name is too - * long to fit in to the destination buffer, then truncate file name - * to PATH_MAX characters and zero-terminate the buffer. - */ - n = 0; - while (n < PATH_MAX && datap->cFileName[n] != 0) { - entry->d_name[n] = datap->cFileName[n]; - n++; - } - entry->d_name[n] = 0; - - /* Length of file name excluding zero terminator */ - entry->d_namlen = n; - - /* File type */ - attr = datap->dwFileAttributes; - if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) { - entry->d_type = DT_CHR; - } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) { - entry->d_type = DT_DIR; - } else { - entry->d_type = DT_REG; - } - - /* Reset dummy fields */ - entry->d_ino = 0; - entry->d_off = 0; - entry->d_reclen = sizeof (struct _wdirent); - - /* Set result address */ - *result = entry; - - } else { - - /* Return NULL to indicate end of directory */ - *result = NULL; - - } - - return /*OK*/0; -} - -/* - * Close directory stream opened by opendir() function. This invalidates the - * DIR structure as well as any directory entry read previously by - * _wreaddir(). - */ -static int -_wclosedir( - _WDIR *dirp) -{ - int ok; - if (dirp) { - - /* Release search handle */ - if (dirp->handle != INVALID_HANDLE_VALUE) { - FindClose (dirp->handle); - } - - /* Release search pattern */ - free (dirp->patt); - - /* Release directory structure */ - free (dirp); - ok = /*success*/0; - - } else { - - /* Invalid directory stream */ - dirent_set_errno (EBADF); - ok = /*failure*/-1; - - } - return ok; -} - -/* - * Rewind directory stream such that _wreaddir() returns the very first - * file name again. - */ -static void -_wrewinddir( - _WDIR* dirp) -{ - if (dirp) { - /* Release existing search handle */ - if (dirp->handle != INVALID_HANDLE_VALUE) { - FindClose (dirp->handle); - } - - /* Open new search handle */ - dirent_first (dirp); - } -} - -/* Get first directory entry (internal) */ -static WIN32_FIND_DATAW* -dirent_first( - _WDIR *dirp) -{ - WIN32_FIND_DATAW *datap; - DWORD error; - - /* Open directory and retrieve the first entry */ - dirp->handle = FindFirstFileExW( - dirp->patt, FindExInfoStandard, &dirp->data, - FindExSearchNameMatch, NULL, 0); - if (dirp->handle != INVALID_HANDLE_VALUE) { - - /* a directory entry is now waiting in memory */ - datap = &dirp->data; - dirp->cached = 1; - - } else { - - /* Failed to open directory: no directory entry in memory */ - dirp->cached = 0; - datap = NULL; - - /* Set error code */ - error = GetLastError (); - switch (error) { - case ERROR_ACCESS_DENIED: - /* No read access to directory */ - dirent_set_errno (EACCES); - break; - - case ERROR_DIRECTORY: - /* Directory name is invalid */ - dirent_set_errno (ENOTDIR); - break; - - case ERROR_PATH_NOT_FOUND: - default: - /* Cannot find the file */ - dirent_set_errno (ENOENT); - } - - } - return datap; -} - -/* - * Get next directory entry (internal). - * - * Returns - */ -static WIN32_FIND_DATAW* -dirent_next( - _WDIR *dirp) -{ - WIN32_FIND_DATAW *p; - - /* Get next directory entry */ - if (dirp->cached != 0) { - - /* A valid directory entry already in memory */ - p = &dirp->data; - dirp->cached = 0; - - } else if (dirp->handle != INVALID_HANDLE_VALUE) { - - /* Get the next directory entry from stream */ - if (FindNextFileW (dirp->handle, &dirp->data) != FALSE) { - /* Got a file */ - p = &dirp->data; - } else { - /* The very last entry has been processed or an error occurred */ - FindClose (dirp->handle); - dirp->handle = INVALID_HANDLE_VALUE; - p = NULL; - } - - } else { - - /* End of directory stream reached */ - p = NULL; - - } - - return p; -} - -/* - * Open directory stream using plain old C-string. - */ -static DIR* -opendir( - const char *dirname) -{ - struct DIR *dirp; - - /* Must have directory name */ - if (dirname == NULL || dirname[0] == '\0') { - dirent_set_errno (ENOENT); - return NULL; - } - - /* Allocate memory for DIR structure */ - dirp = (DIR*) malloc (sizeof (struct DIR)); - if (!dirp) { - return NULL; - } - { - int error; - wchar_t wname[PATH_MAX + 1]; - size_t n; - - /* Convert directory name to wide-character string */ - error = dirent_mbstowcs_s( - &n, wname, PATH_MAX + 1, dirname, PATH_MAX + 1); - if (error) { - /* - * Cannot convert file name to wide-character string. This - * occurs if the string contains invalid multi-byte sequences or - * the output buffer is too small to contain the resulting - * string. - */ - goto exit_free; - } - - - /* Open directory stream using wide-character name */ - dirp->wdirp = _wopendir (wname); - if (!dirp->wdirp) { - goto exit_free; - } - - } - - /* Success */ - return dirp; - - /* Failure */ -exit_free: - free (dirp); - return NULL; -} - -/* - * Read next directory entry. - */ -static struct dirent* -readdir( - DIR *dirp) -{ - struct dirent *entry; - - /* - * Read directory entry to buffer. We can safely ignore the return value - * as entry will be set to NULL in case of error. - */ - (void) readdir_r (dirp, &dirp->ent, &entry); - - /* Return pointer to statically allocated directory entry */ - return entry; -} - -/* - * Read next directory entry into called-allocated buffer. - * - * Returns zero on success. If the end of directory stream is reached, then - * sets result to NULL and returns zero. - */ -static int -readdir_r( - DIR *dirp, - struct dirent *entry, - struct dirent **result) -{ - WIN32_FIND_DATAW *datap; - - /* Read next directory entry */ - datap = dirent_next (dirp->wdirp); - if (datap) { - size_t n; - int error; - - /* Attempt to convert file name to multi-byte string */ - error = dirent_wcstombs_s( - &n, entry->d_name, PATH_MAX + 1, datap->cFileName, PATH_MAX + 1); - - /* - * If the file name cannot be represented by a multi-byte string, - * then attempt to use old 8+3 file name. This allows traditional - * Unix-code to access some file names despite of unicode - * characters, although file names may seem unfamiliar to the user. - * - * Be ware that the code below cannot come up with a short file - * name unless the file system provides one. At least - * VirtualBox shared folders fail to do this. - */ - if (error && datap->cAlternateFileName[0] != '\0') { - error = dirent_wcstombs_s( - &n, entry->d_name, PATH_MAX + 1, - datap->cAlternateFileName, PATH_MAX + 1); - } - - if (!error) { - DWORD attr; - - /* Length of file name excluding zero terminator */ - entry->d_namlen = n - 1; - - /* File attributes */ - attr = datap->dwFileAttributes; - if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) { - entry->d_type = DT_CHR; - } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) { - entry->d_type = DT_DIR; - } else { - entry->d_type = DT_REG; - } - - /* Reset dummy fields */ - entry->d_ino = 0; - entry->d_off = 0; - entry->d_reclen = sizeof (struct dirent); - - } else { - - /* - * Cannot convert file name to multi-byte string so construct - * an erroneous directory entry and return that. Note that - * we cannot return NULL as that would stop the processing - * of directory entries completely. - */ - entry->d_name[0] = '?'; - entry->d_name[1] = '\0'; - entry->d_namlen = 1; - entry->d_type = DT_UNKNOWN; - entry->d_ino = 0; - entry->d_off = -1; - entry->d_reclen = 0; - - } - - /* Return pointer to directory entry */ - *result = entry; - - } else { - - /* No more directory entries */ - *result = NULL; - - } - - return /*OK*/0; -} - -/* - * Close directory stream. - */ -static int -closedir( - DIR *dirp) -{ - int ok; - if (dirp) { - - /* Close wide-character directory stream */ - ok = _wclosedir (dirp->wdirp); - dirp->wdirp = NULL; - - /* Release multi-byte character version */ - free (dirp); - - } else { - - /* Invalid directory stream */ - dirent_set_errno (EBADF); - ok = /*failure*/-1; - - } - return ok; -} - -/* - * Rewind directory stream to beginning. - */ -static void -rewinddir( - DIR* dirp) -{ - /* Rewind wide-character string directory stream */ - _wrewinddir (dirp->wdirp); -} - -/* - * Scan directory for entries. - */ -static int -scandir( - const char *dirname, - struct dirent ***namelist, - int (*filter)(const struct dirent*), - int (*compare)(const struct dirent**, const struct dirent**)) -{ - struct dirent **files = NULL; - size_t size = 0; - size_t allocated = 0; - const size_t init_size = 1; - DIR *dir = NULL; - struct dirent *entry; - struct dirent *tmp = NULL; - size_t i; - int result = 0; - - /* Open directory stream */ - dir = opendir (dirname); - if (dir) { - - /* Read directory entries to memory */ - while (1) { - - /* Enlarge pointer table to make room for another pointer */ - if (size >= allocated) { - void *p; - size_t num_entries; - - /* Compute number of entries in the enlarged pointer table */ - if (size < init_size) { - /* Allocate initial pointer table */ - num_entries = init_size; - } else { - /* Double the size */ - num_entries = size * 2; - } - - /* Allocate first pointer table or enlarge existing table */ - p = realloc (files, sizeof (void*) * num_entries); - if (p != NULL) { - /* Got the memory */ - files = (dirent**) p; - allocated = num_entries; - } else { - /* Out of memory */ - result = -1; - break; - } - - } - - /* Allocate room for temporary directory entry */ - if (tmp == NULL) { - tmp = (struct dirent*) malloc (sizeof (struct dirent)); - if (tmp == NULL) { - /* Cannot allocate temporary directory entry */ - result = -1; - break; - } - } - - /* Read directory entry to temporary area */ - if (readdir_r (dir, tmp, &entry) == /*OK*/0) { - - /* Did we get an entry? */ - if (entry != NULL) { - int pass; - - /* Determine whether to include the entry in result */ - if (filter) { - /* Let the filter function decide */ - pass = filter (tmp); - } else { - /* No filter function, include everything */ - pass = 1; - } - - if (pass) { - /* Store the temporary entry to pointer table */ - files[size++] = tmp; - tmp = NULL; - - /* Keep up with the number of files */ - result++; - } - - } else { - - /* - * End of directory stream reached => sort entries and - * exit. - */ - qsort (files, size, sizeof (void*), - (int (*) (const void*, const void*)) compare); - break; - - } - - } else { - /* Error reading directory entry */ - result = /*Error*/ -1; - break; - } - - } - - } else { - /* Cannot open directory */ - result = /*Error*/ -1; - } - - /* Release temporary directory entry */ - free (tmp); - - /* Release allocated memory on error */ - if (result < 0) { - for (i = 0; i < size; i++) { - free (files[i]); - } - free (files); - files = NULL; - } - - /* Close directory stream */ - if (dir) { - closedir (dir); - } - - /* Pass pointer table to caller */ - if (namelist) { - *namelist = files; - } - return result; -} - -/* Alphabetical sorting */ -static int -alphasort( - const struct dirent **a, const struct dirent **b) -{ - return strcoll ((*a)->d_name, (*b)->d_name); -} - -/* Sort versions */ -static int -versionsort( - const struct dirent **a, const struct dirent **b) -{ - /* FIXME: implement strverscmp and use that */ - return alphasort (a, b); -} - -/* Convert multi-byte string to wide character string */ -static int -dirent_mbstowcs_s( - size_t *pReturnValue, - wchar_t *wcstr, - size_t sizeInWords, - const char *mbstr, - size_t count) -{ - int error; - -#if defined(_MSC_VER) && _MSC_VER >= 1400 - - /* Microsoft Visual Studio 2005 or later */ - error = mbstowcs_s (pReturnValue, wcstr, sizeInWords, mbstr, count); - -#else - - /* Older Visual Studio or non-Microsoft compiler */ - size_t n; - - /* Convert to wide-character string (or count characters) */ - n = mbstowcs (wcstr, mbstr, sizeInWords); - if (!wcstr || n < count) { - - /* Zero-terminate output buffer */ - if (wcstr && sizeInWords) { - if (n >= sizeInWords) { - n = sizeInWords - 1; - } - wcstr[n] = 0; - } - - /* Length of resulting multi-byte string WITH zero terminator */ - if (pReturnValue) { - *pReturnValue = n + 1; - } - - /* Success */ - error = 0; - - } else { - - /* Could not convert string */ - error = 1; - - } - -#endif - return error; -} - -/* Convert wide-character string to multi-byte string */ -static int -dirent_wcstombs_s( - size_t *pReturnValue, - char *mbstr, - size_t sizeInBytes, /* max size of mbstr */ - const wchar_t *wcstr, - size_t count) -{ - int error; - -#if defined(_MSC_VER) && _MSC_VER >= 1400 - - /* Microsoft Visual Studio 2005 or later */ - error = wcstombs_s (pReturnValue, mbstr, sizeInBytes, wcstr, count); - -#else - - /* Older Visual Studio or non-Microsoft compiler */ - size_t n; - - /* Convert to multi-byte string (or count the number of bytes needed) */ - n = wcstombs (mbstr, wcstr, sizeInBytes); - if (!mbstr || n < count) { - - /* Zero-terminate output buffer */ - if (mbstr && sizeInBytes) { - if (n >= sizeInBytes) { - n = sizeInBytes - 1; - } - mbstr[n] = '\0'; - } - - /* Length of resulting multi-bytes string WITH zero-terminator */ - if (pReturnValue) { - *pReturnValue = n + 1; - } - - /* Success */ - error = 0; - - } else { - - /* Cannot convert string */ - error = 1; - - } - -#endif - return error; -} - -/* Set errno variable */ -static void -dirent_set_errno( - int error) -{ -#if defined(_MSC_VER) && _MSC_VER >= 1400 - - /* Microsoft Visual Studio 2005 and later */ - _set_errno (error); - -#else - - /* Non-Microsoft compiler or older Microsoft compiler */ - errno = error; - -#endif -} - - -#ifdef __cplusplus -} -#endif -#endif /*DIRENT_H*/ \ No newline at end of file diff --git a/vendor/quickjs-ng/doc/quickjs.texi b/vendor/quickjs-ng/doc/quickjs.texi deleted file mode 100644 index 8d8fdd7c6..000000000 --- a/vendor/quickjs-ng/doc/quickjs.texi +++ /dev/null @@ -1,1045 +0,0 @@ -\input texinfo - -@iftex -@afourpaper -@headings double -@end iftex - -@titlepage -@afourpaper -@sp 7 -@center @titlefont{QuickJS Javascript Engine} -@sp 3 -@end titlepage - -@setfilename spec.info -@settitle QuickJS Javascript Engine - -@contents - -@chapter Introduction - -QuickJS is a small and embeddable Javascript engine. It supports the -ES2020 specification -@footnote{@url{https://tc39.es/ecma262/}} -including modules, asynchronous generators, proxies and BigInt. - -@section Main Features - -@itemize - -@item Small and easily embeddable: just a few C files, no external dependency, 210 KiB of x86 code for a simple ``hello world'' program. - -@item Fast interpreter with very low startup time: runs the 69000 tests of the ECMAScript Test Suite@footnote{@url{https://github.com/tc39/test262}} in about 95 seconds on a single core of a desktop PC. The complete life cycle of a runtime instance completes in less than 300 microseconds. - -@item Almost complete ES2020 support including modules, asynchronous -generators and full Annex B support (legacy web compatibility). Many -features from the upcoming ES2021 specification -@footnote{@url{https://tc39.github.io/ecma262/}} are also supported. - -@item Passes nearly 100% of the ECMAScript Test Suite tests when selecting the ES2020 features. - -@item Compile Javascript sources to executables with no external dependency. - -@item Garbage collection using reference counting (to reduce memory usage and have deterministic behavior) with cycle removal. - -@item Command line interpreter with contextual colorization and completion implemented in Javascript. - -@item Small built-in standard library with C library wrappers. - -@end itemize - -@chapter Usage - -@section Installation - -A Makefile is provided to compile the engine on Linux or MacOS/X. A -preliminary Windows support is available thru cross compilation on a -Linux host with the MingGW tools. - -Edit the top of the @code{Makefile} if you wish to select specific -options then run @code{make}. - -You can type @code{make install} as root if you wish to install the binaries and support files to -@code{/usr/local} (this is not necessary to use QuickJS). - -@section Quick start - -@code{qjs} is the command line interpreter (Read-Eval-Print Loop). You can pass -Javascript files and/or expressions as arguments to execute them: - -@example -./qjs examples/hello.js -@end example - -@code{qjsc} is the command line compiler: - -@example -./qjsc -o hello examples/hello.js -./hello -@end example - -generates a @code{hello} executable with no external dependency. - -@section Command line options - -@subsection @code{qjs} interpreter - -@verbatim -usage: qjs [options] [file [args]] -@end verbatim - -Options are: -@table @code -@item -h -@item --help -List options. - -@item -e @code{EXPR} -@item --eval @code{EXPR} -Evaluate EXPR. - -@item -i -@item --interactive -Go to interactive mode (it is not the default when files are provided on the command line). - -@item -m -@item --module -Load as ES6 module (default=autodetect). A module is autodetected if -the filename extension is @code{.mjs} or if the first keyword of the -source is @code{import}. - -@item --script -Load as ES6 script (default=autodetect). - -@item -I file -@item --include file -Include an additional file. - -@end table - -Advanced options are: - -@table @code -@item --std -Make the @code{std} and @code{os} modules available to the loaded -script even if it is not a module. - -@item -d -@item --dump -Dump the memory usage stats. - -@item -q -@item --quit -just instantiate the interpreter and quit. - -@end table - -@subsection @code{qjsc} compiler - -@verbatim -usage: qjsc [options] [files] -@end verbatim - -Options are: -@table @code -@item -c -Only output bytecode in a C file. The default is to output an executable file. -@item -e -Output @code{main()} and bytecode in a C file. The default is to output an -executable file. -@item -o output -Set the output filename (default = @file{out.c} or @file{a.out}). - -@item -N cname -Set the C name of the generated data. - -@item -m -Compile as Javascript module (default=autodetect). - -@item -D module_name -Compile a dynamically loaded module and its dependencies. This option -is needed when your code uses the @code{import} keyword or the -@code{os.Worker} constructor because the compiler cannot statically -find the name of the dynamically loaded modules. - -@item -M module_name[,cname] -Add initialization code for an external C module. See the -@code{c_module} example. - -@item -flto -Use link time optimization. The compilation is slower but the -executable is smaller and faster. This option is automatically set -when the @code{-fno-x} options are used. - -@item -fno-[eval|string-normalize|regexp|json|proxy|map|typedarray|promise|bigint] -Disable selected language features to produce a smaller executable file. - -@end table - -@section @code{qjscalc} application - -The @code{qjscalc} application is a superset of the @code{qjs} -command line interpreter implementing a Javascript calculator with -arbitrarily large integer and floating point numbers, fractions, -complex numbers, polynomials and matrices. The source code is in -@file{qjscalc.js}. More documentation and a web version are available at -@url{http://numcalc.com}. - -@section Built-in tests - -Run @code{make test} to run the few built-in tests included in the -QuickJS archive. - -@section Test262 (ECMAScript Test Suite) - -A test262 runner is included in the QuickJS archive. The test262 tests -can be installed in the QuickJS source directory with: - -@example -git clone https://github.com/tc39/test262.git test262 -cd test262 -patch -p1 < ../tests/test262.patch -cd .. -@end example - -The patch adds the implementation specific @code{harness} functions -and optimizes the inefficient RegExp character classes and Unicode -property escapes tests (the tests themselves are not modified, only a -slow string initialization function is optimized). - -The tests can be run with -@example -make test2 -@end example - -The configuration files @code{test262.conf} -(resp. @code{test262o.conf} for the old ES5.1 tests@footnote{The old -ES5.1 tests can be extracted with @code{git clone --single-branch ---branch es5-tests https://github.com/tc39/test262.git test262o}})) -contain the options to run the various tests. Tests can be excluded -based on features or filename. - -The file @code{test262_errors.txt} contains the current list of -errors. The runner displays a message when a new error appears or when -an existing error is corrected or modified. Use the @code{-u} option -to update the current list of errors (or @code{make test2-update}). - -The file @code{test262_report.txt} contains the logs of all the -tests. It is useful to have a clearer analysis of a particular -error. In case of crash, the last line corresponds to the failing -test. - -Use the syntax @code{./run-test262 -c test262.conf -f filename.js} to -run a single test. Use the syntax @code{./run-test262 -c test262.conf -N} to start testing at test number @code{N}. - -For more information, run @code{./run-test262} to see the command line -options of the test262 runner. - -@code{run-test262} accepts the @code{-N} option to be invoked from -@code{test262-harness}@footnote{@url{https://github.com/bterlson/test262-harness}} -thru @code{eshost}. Unless you want to compare QuickJS with other -engines under the same conditions, we do not recommend to run the -tests this way as it is much slower (typically half an hour instead of -about 100 seconds). - -@chapter Specifications - -@section Language support - -@subsection ES2020 support - -The ES2020 specification is almost fully supported including the Annex -B (legacy web compatibility) and the Unicode related features. - -The following features are not supported yet: - -@itemize - -@item Tail calls@footnote{We believe the current specification of tails calls is too complicated and presents limited practical interests.} - -@end itemize - -@subsection ECMA402 - -ECMA402 (Internationalization API) is not supported. - -@subsection Extensions - -@itemize - -@item The first line of a script beginning with @code{#!} is ignored. - -@end itemize - -@section Modules - -ES6 modules are fully supported. The default name resolution is the -following: - -@itemize - -@item Module names with a leading @code{.} or @code{..} are relative -to the current module path. - -@item Module names without a leading @code{.} or @code{..} are system -modules, such as @code{std} or @code{os}. - -@item Module names ending with @code{.so} are native modules using the -QuickJS C API. - -@end itemize - -@section Standard library - -The standard library is included by default in the command line -interpreter. It contains the two modules @code{std} and @code{os} and -a few global objects. - -@subsection Global objects - -@table @code -@item scriptArgs -Provides the command line arguments. The first argument is the script name. -@item print(...args) -Print the arguments separated by spaces and a trailing newline. -@item console.log(...args) -Same as print(). - -@end table - -@subsection @code{std} module - -The @code{std} module provides wrappers to the libc @file{stdlib.h} -and @file{stdio.h} and a few other utilities. - -Available exports: - -@table @code - -@item exit(n) -Exit the process. - -@item evalScript(str, options = undefined) -Evaluate the string @code{str} as a script (global -eval). @code{options} is an optional object containing the following -optional properties: - - @table @code - @item backtrace_barrier - Boolean (default = false). If true, error backtraces do not list the - stack frames below the evalScript. - @end table - -@item loadScript(filename) -Evaluate the file @code{filename} as a script (global eval). - -@item loadFile(filename) -Load the file @code{filename} and return it as a string assuming UTF-8 -encoding. Return @code{null} in case of I/O error. - -@item open(filename, flags, errorObj = undefined) -Open a file (wrapper to the libc @code{fopen()}). Return the FILE -object or @code{null} in case of I/O error. If @code{errorObj} is not -undefined, set its @code{errno} property to the error code or to 0 if -no error occured. - -@item popen(command, flags, errorObj = undefined) -Open a process by creating a pipe (wrapper to the libc -@code{popen()}). Return the FILE -object or @code{null} in case of I/O error. If @code{errorObj} is not -undefined, set its @code{errno} property to the error code or to 0 if -no error occured. - -@item fdopen(fd, flags, errorObj = undefined) -Open a file from a file handle (wrapper to the libc -@code{fdopen()}). Return the FILE -object or @code{null} in case of I/O error. If @code{errorObj} is not -undefined, set its @code{errno} property to the error code or to 0 if -no error occured. - -@item tmpfile(errorObj = undefined) -Open a temporary file. Return the FILE -object or @code{null} in case of I/O error. If @code{errorObj} is not -undefined, set its @code{errno} property to the error code or to 0 if -no error occured. - -@item puts(str) -Equivalent to @code{std.out.puts(str)}. - -@item printf(fmt, ...args) -Equivalent to @code{std.out.printf(fmt, ...args)}. - -@item sprintf(fmt, ...args) -Equivalent to the libc sprintf(). - -@item in -@item out -@item err -Wrappers to the libc file @code{stdin}, @code{stdout}, @code{stderr}. - -@item SEEK_SET -@item SEEK_CUR -@item SEEK_END -Constants for seek(). - -@item Error - -Enumeration object containing the integer value of common errors -(additional error codes may be defined): - - @table @code - @item EINVAL - @item EIO - @item EACCES - @item EEXIST - @item ENOSPC - @item ENOSYS - @item EBUSY - @item ENOENT - @item EPERM - @item EPIPE - @end table - -@item strerror(errno) -Return a string that describes the error @code{errno}. - -@item gc() -Manually invoke the cycle removal algorithm. The cycle removal -algorithm is automatically started when needed, so this function is -useful in case of specific memory constraints or for testing. - -@item getenv(name) -Return the value of the environment variable @code{name} or -@code{undefined} if it is not defined. - -@item setenv(name, value) -Set the value of the environment variable @code{name} to the string -@code{value}. - -@item unsetenv(name) -Delete the environment variable @code{name}. - -@item getenviron() -Return an object containing the environment variables as key-value pairs. - -@item urlGet(url, options = undefined) - -Download @code{url} using the @file{curl} command line -utility. @code{options} is an optional object containing the following -optional properties: - - @table @code - @item binary - Boolean (default = false). If true, the response is an ArrayBuffer - instead of a string. When a string is returned, the data is assumed - to be UTF-8 encoded. - - @item full - - Boolean (default = false). If true, return the an object contains - the properties @code{response} (response content), - @code{responseHeaders} (headers separated by CRLF), @code{status} - (status code). @code{response} is @code{null} is case of protocol or - network error. If @code{full} is false, only the response is - returned if the status is between 200 and 299. Otherwise @code{null} - is returned. - - @end table - -@end table - -FILE prototype: - -@table @code -@item close() -Close the file. Return 0 if OK or @code{-errno} in case of I/O error. -@item puts(str) -Outputs the string with the UTF-8 encoding. -@item printf(fmt, ...args) -Formatted printf. - -The same formats as the standard C library @code{printf} are -supported. Integer format types (e.g. @code{%d}) truncate the Numbers -or BigInts to 32 bits. Use the @code{l} modifier (e.g. @code{%ld}) to -truncate to 64 bits. - -@item flush() -Flush the buffered file. -@item seek(offset, whence) -Seek to a give file position (whence is -@code{std.SEEK_*}). @code{offset} can be a number or a bigint. Return -0 if OK or @code{-errno} in case of I/O error. -@item tell() -Return the current file position. -@item tello() -Return the current file position as a bigint. -@item eof() -Return true if end of file. -@item fileno() -Return the associated OS handle. -@item error() -Return true if there was an error. -@item clearerr() -Clear the error indication. - -@item read(buffer, position, length) -Read @code{length} bytes from the file to the ArrayBuffer @code{buffer} at byte -position @code{position} (wrapper to the libc @code{fread}). - -@item write(buffer, position, length) -Write @code{length} bytes to the file from the ArrayBuffer @code{buffer} at byte -position @code{position} (wrapper to the libc @code{fwrite}). - -@item getline() -Return the next line from the file, assuming UTF-8 encoding, excluding -the trailing line feed. - -@item readAsString(max_size = undefined) -Read @code{max_size} bytes from the file and return them as a string -assuming UTF-8 encoding. If @code{max_size} is not present, the file -is read up its end. - -@item getByte() -Return the next byte from the file. Return -1 if the end of file is reached. - -@item putByte(c) -Write one byte to the file. -@end table - -@subsection @code{os} module - -The @code{os} module provides Operating System specific functions: - -@itemize -@item low level file access -@item signals -@item timers -@item asynchronous I/O -@item workers (threads) -@end itemize - -The OS functions usually return 0 if OK or an OS specific negative -error code. - -Available exports: - -@table @code -@item open(filename, flags, mode = 0o666) -Open a file. Return a handle or < 0 if error. - -@item O_RDONLY -@item O_WRONLY -@item O_RDWR -@item O_APPEND -@item O_CREAT -@item O_EXCL -@item O_TRUNC -POSIX open flags. - -@item O_TEXT -(Windows specific). Open the file in text mode. The default is binary mode. - -@item close(fd) -Close the file handle @code{fd}. - -@item seek(fd, offset, whence) -Seek in the file. Use @code{std.SEEK_*} for -@code{whence}. @code{offset} is either a number or a bigint. If -@code{offset} is a bigint, a bigint is returned too. - -@item read(fd, buffer, offset, length) -Read @code{length} bytes from the file handle @code{fd} to the -ArrayBuffer @code{buffer} at byte position @code{offset}. -Return the number of read bytes or < 0 if error. - -@item write(fd, buffer, offset, length) -Write @code{length} bytes to the file handle @code{fd} from the -ArrayBuffer @code{buffer} at byte position @code{offset}. -Return the number of written bytes or < 0 if error. - -@item isatty(fd) -Return @code{true} is @code{fd} is a TTY (terminal) handle. - -@item ttyGetWinSize(fd) -Return the TTY size as @code{[width, height]} or @code{null} if not available. - -@item ttySetRaw(fd) -Set the TTY in raw mode. - -@item remove(filename) -Remove a file. Return 0 if OK or @code{-errno}. - -@item rename(oldname, newname) -Rename a file. Return 0 if OK or @code{-errno}. - -@item realpath(path) -Return @code{[str, err]} where @code{str} is the canonicalized absolute -pathname of @code{path} and @code{err} the error code. - -@item getcwd() -Return @code{[str, err]} where @code{str} is the current working directory -and @code{err} the error code. - -@item chdir(path) -Change the current directory. Return 0 if OK or @code{-errno}. - -@item mkdir(path, mode = 0o777) -Create a directory at @code{path}. Return 0 if OK or @code{-errno}. - -@item stat(path) -@item lstat(path) - -Return @code{[obj, err]} where @code{obj} is an object containing the -file status of @code{path}. @code{err} is the error code. The -following fields are defined in @code{obj}: dev, ino, mode, nlink, -uid, gid, rdev, size, blocks, atime, mtime, ctime. The times are -specified in milliseconds since 1970. @code{lstat()} is the same as -@code{stat()} excepts that it returns information about the link -itself. - -@item S_IFMT -@item S_IFIFO -@item S_IFCHR -@item S_IFDIR -@item S_IFBLK -@item S_IFREG -@item S_IFSOCK -@item S_IFLNK -@item S_ISGID -@item S_ISUID -Constants to interpret the @code{mode} property returned by -@code{stat()}. They have the same value as in the C system header -@file{sys/stat.h}. - -@item utimes(path, atime, mtime) -Change the access and modification times of the file @code{path}. The -times are specified in milliseconds since 1970. Return 0 if OK or @code{-errno}. - -@item symlink(target, linkpath) -Create a link at @code{linkpath} containing the string @code{target}. Return 0 if OK or @code{-errno}. - -@item readlink(path) -Return @code{[str, err]} where @code{str} is the link target and @code{err} -the error code. - -@item readdir(path) -Return @code{[array, err]} where @code{array} is an array of strings -containing the filenames of the directory @code{path}. @code{err} is -the error code. - -@item setReadHandler(fd, func) -Add a read handler to the file handle @code{fd}. @code{func} is called -each time there is data pending for @code{fd}. A single read handler -per file handle is supported. Use @code{func = null} to remove the -handler. - -@item setWriteHandler(fd, func) -Add a write handler to the file handle @code{fd}. @code{func} is -called each time data can be written to @code{fd}. A single write -handler per file handle is supported. Use @code{func = null} to remove -the handler. - -@item signal(signal, func) -Call the function @code{func} when the signal @code{signal} -happens. Only a single handler per signal number is supported. Use -@code{null} to set the default handler or @code{undefined} to ignore -the signal. Signal handlers can only be defined in the main thread. - -@item SIGINT -@item SIGABRT -@item SIGFPE -@item SIGILL -@item SIGSEGV -@item SIGTERM -POSIX signal numbers. - -@item kill(pid, sig) -Send the signal @code{sig} to the process @code{pid}. - -@item exec(args[, options]) -Execute a process with the arguments @code{args}. @code{options} is an -object containing optional parameters: - - @table @code - @item block - Boolean (default = true). If true, wait until the process is - terminated. In this case, @code{exec} return the exit code if positive - or the negated signal number if the process was interrupted by a - signal. If false, do not block and return the process id of the child. - - @item usePath - Boolean (default = true). If true, the file is searched in the - @code{PATH} environment variable. - - @item file - String (default = @code{args[0]}). Set the file to be executed. - - @item cwd - String. If present, set the working directory of the new process. - - @item stdin - @item stdout - @item stderr - If present, set the handle in the child for stdin, stdout or stderr. - - @item env - Object. If present, set the process environment from the object - key-value pairs. Otherwise use the same environment as the current - process. - - @item uid - Integer. If present, the process uid with @code{setuid}. - - @item gid - Integer. If present, the process gid with @code{setgid}. - - @end table - -@item waitpid(pid, options) -@code{waitpid} Unix system call. Return the array @code{[ret, -status]}. @code{ret} contains @code{-errno} in case of error. - -@item WNOHANG -Constant for the @code{options} argument of @code{waitpid}. - -@item dup(fd) -@code{dup} Unix system call. - -@item dup2(oldfd, newfd) -@code{dup2} Unix system call. - -@item pipe() -@code{pipe} Unix system call. Return two handles as @code{[read_fd, -write_fd]} or null in case of error. - -@item sleep(delay_ms) -Sleep during @code{delay_ms} milliseconds. - -@item setTimeout(func, delay) -Call the function @code{func} after @code{delay} ms. Return a handle -to the timer. - -@item clearTimeout(handle) -Cancel a timer. - -@item platform -Return a string representing the platform: @code{"linux"}, @code{"darwin"}, -@code{"win32"} or @code{"js"}. - -@item Worker(module_filename) -Constructor to create a new thread (worker) with an API close to the -@code{WebWorkers}. @code{module_filename} is a string specifying the -module filename which is executed in the newly created thread. As for -dynamically imported module, it is relative to the current script or -module path. Threads normally don't share any data and communicate -between each other with messages. Nested workers are not supported. An -example is available in @file{tests/test_worker.js}. - -The worker class has the following static properties: - - @table @code - @item parent - In the created worker, @code{Worker.parent} represents the parent - worker and is used to send or receive messages. - @end table - -The worker instances have the following properties: - - @table @code - @item postMessage(msg) - - Send a message to the corresponding worker. @code{msg} is cloned in - the destination worker using an algorithm similar to the @code{HTML} - structured clone algorithm. @code{SharedArrayBuffer} are shared - between workers. - - Current limitations: @code{Map} and @code{Set} are not supported - yet. - - @item onmessage - - Getter and setter. Set a function which is called each time a - message is received. The function is called with a single - argument. It is an object with a @code{data} property containing the - received message. The thread is not terminated if there is at least - one non @code{null} @code{onmessage} handler. - - @end table - -@end table - -@section QuickJS C API - -The C API was designed to be simple and efficient. The C API is -defined in the header @code{quickjs.h}. - -@subsection Runtime and contexts - -@code{JSRuntime} represents a Javascript runtime corresponding to an -object heap. Several runtimes can exist at the same time but they -cannot exchange objects. Inside a given runtime, no multi-threading is -supported. - -@code{JSContext} represents a Javascript context (or Realm). Each -JSContext has its own global objects and system objects. There can be -several JSContexts per JSRuntime and they can share objects, similar -to frames of the same origin sharing Javascript objects in a -web browser. - -@subsection JSValue - -@code{JSValue} represents a Javascript value which can be a primitive -type or an object. Reference counting is used, so it is important to -explicitly duplicate (@code{JS_DupValue()}, increment the reference -count) or free (@code{JS_FreeValue()}, decrement the reference count) -JSValues. - -@subsection C functions - -C functions can be created with -@code{JS_NewCFunction()}. @code{JS_SetPropertyFunctionList()} is a -shortcut to easily add functions, setters and getters properties to a -given object. - -Unlike other embedded Javascript engines, there is no implicit stack, -so C functions get their parameters as normal C parameters. As a -general rule, C functions take constant @code{JSValue}s as parameters -(so they don't need to free them) and return a newly allocated (=live) -@code{JSValue}. - -@subsection Exceptions - -Exceptions: most C functions can return a Javascript exception. It -must be explicitly tested and handled by the C code. The specific -@code{JSValue} @code{JS_EXCEPTION} indicates that an exception -occurred. The actual exception object is stored in the -@code{JSContext} and can be retrieved with @code{JS_GetException()}. - -@subsection Script evaluation - -Use @code{JS_Eval()} to evaluate a script or module source. - -If the script or module was compiled to bytecode with @code{qjsc}, it -can be evaluated by calling @code{js_std_eval_binary()}. The advantage -is that no compilation is needed so it is faster and smaller because -the compiler can be removed from the executable if no @code{eval} is -required. - -Note: the bytecode format is linked to a given QuickJS -version. Moreover, no security check is done before its -execution. Hence the bytecode should not be loaded from untrusted -sources. That's why there is no option to output the bytecode to a -binary file in @code{qjsc}. - -@subsection JS Classes - -C opaque data can be attached to a Javascript object. The type of the -C opaque data is determined with the class ID (@code{JSClassID}) of -the object. Hence the first step is to register a new class ID and JS -class (@code{JS_NewClassID()}, @code{JS_NewClass()}). Then you can -create objects of this class with @code{JS_NewObjectClass()} and get or -set the C opaque point with -@code{JS_GetOpaque()}/@code{JS_SetOpaque()}. - -When defining a new JS class, it is possible to declare a finalizer -which is called when the object is destroyed. The finalizer should be -used to release C resources. It is invalid to execute JS code from -it. A @code{gc_mark} method can be provided so that the cycle removal -algorithm can find the other objects referenced by this object. Other -methods are available to define exotic object behaviors. - -The Class ID are globally allocated (i.e. for all runtimes). The -JSClass are allocated per @code{JSRuntime}. @code{JS_SetClassProto()} -is used to define a prototype for a given class in a given -JSContext. @code{JS_NewObjectClass()} sets this prototype in the -created object. - -Examples are available in @file{quickjs-libc.c}. - -@subsection C Modules - -Native ES6 modules are supported and can be dynamically or statically -linked. Look at the @file{test_bjson} and @file{bjson.so} -examples. The standard library @file{quickjs-libc.c} is also a good example -of a native module. - -@subsection Memory handling - -Use @code{JS_SetMemoryLimit()} to set a global memory allocation limit -to a given JSRuntime. - -Custom memory allocation functions can be provided with -@code{JS_NewRuntime2()}. - -The maximum system stack size can be set with @code{JS_SetMaxStackSize()}. - -@subsection Execution timeout and interrupts - -Use @code{JS_SetInterruptHandler()} to set a callback which is -regularly called by the engine when it is executing code. This -callback can be used to implement an execution timeout. - -It is used by the command line interpreter to implement a -@code{Ctrl-C} handler. - -@chapter Internals - -@section Bytecode - -The compiler generates bytecode directly with no intermediate -representation such as a parse tree, hence it is very fast. Several -optimizations passes are done over the generated bytecode. - -A stack-based bytecode was chosen because it is simple and generates -compact code. - -For each function, the maximum stack size is computed at compile time so that -no runtime stack overflow tests are needed. - -A separate compressed line number table is maintained for the debug -information. - -Access to closure variables is optimized and is almost as fast as local -variables. - -Direct @code{eval} in strict mode is optimized. - -@section Executable generation - -@subsection @code{qjsc} compiler - -The @code{qjsc} compiler generates C sources from Javascript files. By -default the C sources are compiled with the system compiler -(@code{gcc} or @code{clang}). - -The generated C source contains the bytecode of the compiled functions -or modules. If a full complete executable is needed, it also -contains a @code{main()} function with the necessary C code to initialize the -Javascript engine and to load and execute the compiled functions and -modules. - -Javascript code can be mixed with C modules. - -In order to have smaller executables, specific Javascript features can -be disabled, in particular @code{eval} or the regular expressions. The -code removal relies on the Link Time Optimization of the system -compiler. - -@subsection Binary JSON - -@code{qjsc} works by compiling scripts or modules and then serializing -them to a binary format. A subset of this format (without functions or -modules) can be used as binary JSON. The example @file{test_bjson.js} -shows how to use it. - -Warning: the binary JSON format may change without notice, so it -should not be used to store persistent data. The @file{test_bjson.js} -example is only used to test the binary object format functions. - -@section Runtime - -@subsection Strings - -Strings are stored either as an 8 bit or a 16 bit array of -characters. Hence random access to characters is always fast. - -The C API provides functions to convert Javascript Strings to C UTF-8 encoded -strings. The most common case where the Javascript string contains -only ASCII characters involves no copying. - -@subsection Objects - -The object shapes (object prototype, property names and flags) are shared -between objects to save memory. - -Arrays with no holes (except at the end of the array) are optimized. - -TypedArray accesses are optimized. - -@subsection Atoms - -Object property names and some strings are stored as Atoms (unique -strings) to save memory and allow fast comparison. Atoms are -represented as a 32 bit integer. Half of the atom range is reserved for -immediate integer literals from @math{0} to @math{2^{31}-1}. - -@subsection Numbers - -Numbers are represented either as 32-bit signed integers or 64-bit IEEE-754 -floating point values. Most operations have fast paths for the 32-bit -integer case. - -@subsection Garbage collection - -Reference counting is used to free objects automatically and -deterministically. A separate cycle removal pass is done when the allocated -memory becomes too large. The cycle removal algorithm only uses the -reference counts and the object content, so no explicit garbage -collection roots need to be manipulated in the C code. - -@subsection JSValue - -It is a Javascript value which can be a primitive type (such as -Number, String, ...) or an Object. NaN boxing is used in the 32-bit version -to store 64-bit floating point numbers. The representation is -optimized so that 32-bit integers and reference counted values can be -efficiently tested. - -In 64-bit code, JSValue are 128-bit large and no NaN boxing is used. The -rationale is that in 64-bit code memory usage is less critical. - -In both cases (32 or 64 bits), JSValue exactly fits two CPU registers, -so it can be efficiently returned by C functions. - -@subsection Function call - -The engine is optimized so that function calls are fast. The system -stack holds the Javascript parameters and local variables. - -@section RegExp - -A specific regular expression engine was developed. It is both small -and efficient and supports all the ES2020 features including the -Unicode properties. As the Javascript compiler, it directly generates -bytecode without a parse tree. - -Backtracking with an explicit stack is used so that there is no -recursion on the system stack. Simple quantifiers are specifically -optimized to avoid recursions. - -Infinite recursions coming from quantifiers with empty terms are -avoided. - -The full regexp library weights about 15 KiB (x86 code), excluding the -Unicode library. - -@section Unicode - -A specific Unicode library was developed so that there is no -dependency on an external large Unicode library such as ICU. All the -Unicode tables are compressed while keeping a reasonable access -speed. - -The library supports case conversion, Unicode normalization, Unicode -script queries, Unicode general category queries and all Unicode -binary properties. - -The full Unicode library weights about 45 KiB (x86 code). - -@section BigInt - -BigInt is implemented with the @code{libbf} -library@footnote{@url{https://bellard.org/libbf}}. It weights about 90 -KiB (x86 code) and provides arbitrary precision IEEE 754 floating -point operations and transcendental functions with exact rounding. - -@chapter License - -QuickJS is released under the MIT license. - -Unless otherwise specified, the QuickJS sources are copyright Fabrice -Bellard and Charlie Gordon. - -@bye diff --git a/vendor/quickjs-ng/examples/fib.c b/vendor/quickjs-ng/examples/fib.c deleted file mode 100644 index 0786378fa..000000000 --- a/vendor/quickjs-ng/examples/fib.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * QuickJS: Example of C module - * - * Copyright (c) 2017-2018 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include "../quickjs.h" - -#define countof(x) (sizeof(x) / sizeof((x)[0])) - -static int fib(int n) -{ - if (n <= 0) - return 0; - else if (n == 1) - return 1; - else - return fib(n - 1) + fib(n - 2); -} - -static JSValue js_fib(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int n, res; - if (JS_ToInt32(ctx, &n, argv[0])) - return JS_EXCEPTION; - res = fib(n); - return JS_NewInt32(ctx, res); -} - -static const JSCFunctionListEntry js_fib_funcs[] = { - JS_CFUNC_DEF("fib", 1, js_fib ), -}; - -static int js_fib_init(JSContext *ctx, JSModuleDef *m) -{ - return JS_SetModuleExportList(ctx, m, js_fib_funcs, - countof(js_fib_funcs)); -} - -#ifdef JS_SHARED_LIBRARY -#define JS_INIT_MODULE js_init_module -#else -#define JS_INIT_MODULE js_init_module_fib -#endif - -JSModuleDef *JS_INIT_MODULE(JSContext *ctx, const char *module_name) -{ - JSModuleDef *m; - m = JS_NewCModule(ctx, module_name, js_fib_init); - if (!m) - return NULL; - JS_AddModuleExportList(ctx, m, js_fib_funcs, countof(js_fib_funcs)); - return m; -} diff --git a/vendor/quickjs-ng/examples/hello_module.js b/vendor/quickjs-ng/examples/hello_module.js deleted file mode 100644 index 463660f6a..000000000 --- a/vendor/quickjs-ng/examples/hello_module.js +++ /dev/null @@ -1,6 +0,0 @@ -/* example of JS module */ - -import { fib } from "./fib_module.js"; - -console.log("Hello World"); -console.log("fib(10)=", fib(10)); diff --git a/vendor/quickjs-ng/examples/point.c b/vendor/quickjs-ng/examples/point.c deleted file mode 100644 index da22d6f5c..000000000 --- a/vendor/quickjs-ng/examples/point.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * QuickJS: Example of C module with a class - * - * Copyright (c) 2019 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include "../quickjs.h" -#include - -#define countof(x) (sizeof(x) / sizeof((x)[0])) - -/* Point Class */ - -typedef struct { - int x; - int y; -} JSPointData; - -static JSClassID js_point_class_id; - -static void js_point_finalizer(JSRuntime *rt, JSValue val) -{ - JSPointData *s = JS_GetOpaque(val, js_point_class_id); - /* Note: 's' can be NULL in case JS_SetOpaque() was not called */ - js_free_rt(rt, s); -} - -static JSValue js_point_ctor(JSContext *ctx, - JSValue new_target, - int argc, JSValue *argv) -{ - JSPointData *s; - JSValue obj = JS_UNDEFINED; - JSValue proto; - - s = js_mallocz(ctx, sizeof(*s)); - if (!s) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &s->x, argv[0])) - goto fail; - if (JS_ToInt32(ctx, &s->y, argv[1])) - goto fail; - /* using new_target to get the prototype is necessary when the - class is extended. */ - proto = JS_GetPropertyStr(ctx, new_target, "prototype"); - if (JS_IsException(proto)) - goto fail; - obj = JS_NewObjectProtoClass(ctx, proto, js_point_class_id); - JS_FreeValue(ctx, proto); - if (JS_IsException(obj)) - goto fail; - JS_SetOpaque(obj, s); - return obj; - fail: - js_free(ctx, s); - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; -} - -static JSValue js_point_get_xy(JSContext *ctx, JSValue this_val, int magic) -{ - JSPointData *s = JS_GetOpaque2(ctx, this_val, js_point_class_id); - if (!s) - return JS_EXCEPTION; - if (magic == 0) - return JS_NewInt32(ctx, s->x); - else - return JS_NewInt32(ctx, s->y); -} - -static JSValue js_point_set_xy(JSContext *ctx, JSValue this_val, JSValue val, int magic) -{ - JSPointData *s = JS_GetOpaque2(ctx, this_val, js_point_class_id); - int v; - if (!s) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &v, val)) - return JS_EXCEPTION; - if (magic == 0) - s->x = v; - else - s->y = v; - return JS_UNDEFINED; -} - -static JSValue js_point_norm(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSPointData *s = JS_GetOpaque2(ctx, this_val, js_point_class_id); - if (!s) - return JS_EXCEPTION; - return JS_NewFloat64(ctx, sqrt((double)s->x * s->x + (double)s->y * s->y)); -} - -static JSClassDef js_point_class = { - "Point", - .finalizer = js_point_finalizer, -}; - -static const JSCFunctionListEntry js_point_proto_funcs[] = { - JS_CGETSET_MAGIC_DEF("x", js_point_get_xy, js_point_set_xy, 0), - JS_CGETSET_MAGIC_DEF("y", js_point_get_xy, js_point_set_xy, 1), - JS_CFUNC_DEF("norm", 0, js_point_norm), -}; - -static int js_point_init(JSContext *ctx, JSModuleDef *m) -{ - JSValue point_proto, point_class; - JSRuntime *rt = JS_GetRuntime(ctx); - - /* create the Point class */ - JS_NewClassID(rt, &js_point_class_id); - JS_NewClass(rt, js_point_class_id, &js_point_class); - - point_proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, point_proto, js_point_proto_funcs, countof(js_point_proto_funcs)); - - point_class = JS_NewCFunction2(ctx, js_point_ctor, "Point", 2, JS_CFUNC_constructor, 0); - /* set proto.constructor and ctor.prototype */ - JS_SetConstructor(ctx, point_class, point_proto); - JS_SetClassProto(ctx, js_point_class_id, point_proto); - - JS_SetModuleExport(ctx, m, "Point", point_class); - return 0; -} - -JSModuleDef *js_init_module(JSContext *ctx, const char *module_name) -{ - JSModuleDef *m; - m = JS_NewCModule(ctx, module_name, js_point_init); - if (!m) - return NULL; - JS_AddModuleExport(ctx, m, "Point"); - return m; -} diff --git a/vendor/quickjs-ng/getopt_compat.h b/vendor/quickjs-ng/getopt_compat.h deleted file mode 100644 index f98ba2739..000000000 --- a/vendor/quickjs-ng/getopt_compat.h +++ /dev/null @@ -1,653 +0,0 @@ -#ifndef __GETOPT_H__ -/** - * DISCLAIMER - * This file is part of the mingw-w64 runtime package. - * - * The mingw-w64 runtime package and its code is distributed in the hope that it - * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR - * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to - * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ - /* - * Copyright (c) 2002 Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Sponsored in part by the Defense Advanced Research Projects - * Agency (DARPA) and Air Force Research Laboratory, Air Force - * Materiel Command, USAF, under agreement number F39502-99-1-0512. - */ -/*- - * Copyright (c) 2000 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Dieter Baron and Thomas Klausner. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma warning(disable:4996) - -#define __GETOPT_H__ - -/* All the headers include this file. */ -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define REPLACE_GETOPT /* use this getopt as the system getopt(3) */ - -#ifdef REPLACE_GETOPT -int opterr = 1; /* if error message should be printed */ -int optind = 1; /* index into parent argv vector */ -int optopt = '?'; /* character checked for validity */ -#undef optreset /* see getopt.h */ -#define optreset __mingw_optreset -int optreset; /* reset getopt */ -char *optarg; /* argument associated with option */ -#endif - -//extern int optind; /* index of first non-option in argv */ -//extern int optopt; /* single option character, as parsed */ -//extern int opterr; /* flag to enable built-in diagnostics... */ -// /* (user may set to zero, to suppress) */ -// -//extern char *optarg; /* pointer to argument of current option */ - -#define PRINT_ERROR ((opterr) && (*options != ':')) - -#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ -#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ -#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ - -/* return values */ -#define BADCH (int)'?' -#define BADARG ((*options == ':') ? (int)':' : (int)'?') -#define INORDER (int)1 - -#ifndef __CYGWIN__ -#define __progname __argv[0] -#else -extern char __declspec(dllimport) *__progname; -#endif - -#ifdef __CYGWIN__ -static char EMSG[] = ""; -#else -#define EMSG "" -#endif - -struct option /* specification for a long form option... */ -{ - const char *name; /* option name, without leading hyphens */ - int has_arg; /* does it take an argument? */ - int *flag; /* where to save its status, or NULL */ - int val; /* its associated status value */ -}; - -static int getopt_internal(int, char * const *, const char *, - const struct option *, int *, int); -static int parse_long_options(char * const *, const char *, - const struct option *, int *, int); -static int gcd(int, int); -static void permute_args(int, int, int, char * const *); - -static char *place = EMSG; /* option letter processing */ - -/* XXX: set optreset to 1 rather than these two */ -static int nonopt_start = -1; /* first non option argument (for permute) */ -static int nonopt_end = -1; /* first option after non options (for permute) */ - -/* Error messages */ -static const char recargchar[] = "option requires an argument -- %c"; -static const char recargstring[] = "option requires an argument -- %s"; -static const char ambig[] = "ambiguous option -- %.*s"; -static const char noarg[] = "option doesn't take an argument -- %.*s"; -static const char illoptchar[] = "unknown option -- %c"; -static const char illoptstring[] = "unknown option -- %s"; - -static void -_vwarnx(const char *fmt,va_list ap) -{ - (void)fprintf(stderr,"%s: ",__progname); - if (fmt != NULL) - (void)vfprintf(stderr,fmt,ap); - (void)fprintf(stderr,"\n"); -} - -static void -warnx(const char *fmt,...) -{ - va_list ap; - va_start(ap,fmt); - _vwarnx(fmt,ap); - va_end(ap); -} - -/* - * Compute the greatest common divisor of a and b. - */ -static int -gcd(int a, int b) -{ - int c; - - c = a % b; - while (c != 0) { - a = b; - b = c; - c = a % b; - } - - return (b); -} - -/* - * Exchange the block from nonopt_start to nonopt_end with the block - * from nonopt_end to opt_end (keeping the same order of arguments - * in each block). - */ -static void -permute_args(int panonopt_start, int panonopt_end, int opt_end, - char * const *nargv) -{ - int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; - char *swap; - - /* - * compute lengths of blocks and number and size of cycles - */ - nnonopts = panonopt_end - panonopt_start; - nopts = opt_end - panonopt_end; - ncycle = gcd(nnonopts, nopts); - cyclelen = (opt_end - panonopt_start) / ncycle; - - for (i = 0; i < ncycle; i++) { - cstart = panonopt_end+i; - pos = cstart; - for (j = 0; j < cyclelen; j++) { - if (pos >= panonopt_end) - pos -= nnonopts; - else - pos += nopts; - swap = nargv[pos]; - /* LINTED const cast */ - ((char **) nargv)[pos] = nargv[cstart]; - /* LINTED const cast */ - ((char **)nargv)[cstart] = swap; - } - } -} - -#ifdef REPLACE_GETOPT -/* - * getopt -- - * Parse argc/argv argument vector. - * - * [eventually this will replace the BSD getopt] - */ -int -getopt(int nargc, char * const *nargv, const char *options) -{ - - /* - * We don't pass FLAG_PERMUTE to getopt_internal() since - * the BSD getopt(3) (unlike GNU) has never done this. - * - * Furthermore, since many privileged programs call getopt() - * before dropping privileges it makes sense to keep things - * as simple (and bug-free) as possible. - */ - return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); -} -#endif /* REPLACE_GETOPT */ - -//extern int getopt(int nargc, char * const *nargv, const char *options); - -#ifdef _BSD_SOURCE -/* - * BSD adds the non-standard `optreset' feature, for reinitialisation - * of `getopt' parsing. We support this feature, for applications which - * proclaim their BSD heritage, before including this header; however, - * to maintain portability, developers are advised to avoid it. - */ -# define optreset __mingw_optreset -extern int optreset; -#endif -#ifdef __cplusplus -} -#endif -/* - * POSIX requires the `getopt' API to be specified in `unistd.h'; - * thus, `unistd.h' includes this header. However, we do not want - * to expose the `getopt_long' or `getopt_long_only' APIs, when - * included in this manner. Thus, close the standard __GETOPT_H__ - * declarations block, and open an additional __GETOPT_LONG_H__ - * specific block, only when *not* __UNISTD_H_SOURCED__, in which - * to declare the extended API. - */ -#endif /* !defined(__GETOPT_H__) */ - -#if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) -#define __GETOPT_LONG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -enum /* permitted values for its `has_arg' field... */ -{ - no_argument = 0, /* option never takes an argument */ - required_argument, /* option always requires an argument */ - optional_argument /* option may take an argument */ -}; - -/* - * parse_long_options -- - * Parse long options in argc/argv argument vector. - * Returns -1 if short_too is set and the option does not match long_options. - */ -static int -parse_long_options(char * const *nargv, const char *options, - const struct option *long_options, int *idx, int short_too) -{ - char *current_argv, *has_equal; - size_t current_argv_len; - int i, ambiguous, match; - -#define IDENTICAL_INTERPRETATION(_x, _y) \ - (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \ - long_options[(_x)].flag == long_options[(_y)].flag && \ - long_options[(_x)].val == long_options[(_y)].val) - - current_argv = place; - match = -1; - ambiguous = 0; - - optind++; - - if ((has_equal = strchr(current_argv, '=')) != NULL) { - /* argument found (--option=arg) */ - current_argv_len = has_equal - current_argv; - has_equal++; - } else - current_argv_len = strlen(current_argv); - - for (i = 0; long_options[i].name; i++) { - /* find matching long option */ - if (strncmp(current_argv, long_options[i].name, - current_argv_len)) - continue; - - if (strlen(long_options[i].name) == current_argv_len) { - /* exact match */ - match = i; - ambiguous = 0; - break; - } - /* - * If this is a known short option, don't allow - * a partial match of a single character. - */ - if (short_too && current_argv_len == 1) - continue; - - if (match == -1) /* partial match */ - match = i; - else if (!IDENTICAL_INTERPRETATION(i, match)) - ambiguous = 1; - } - if (ambiguous) { - /* ambiguous abbreviation */ - if (PRINT_ERROR) - warnx(ambig, (int)current_argv_len, - current_argv); - optopt = 0; - return (BADCH); - } - if (match != -1) { /* option found */ - if (long_options[match].has_arg == no_argument - && has_equal) { - if (PRINT_ERROR) - warnx(noarg, (int)current_argv_len, - current_argv); - /* - * XXX: GNU sets optopt to val regardless of flag - */ - if (long_options[match].flag == NULL) - optopt = long_options[match].val; - else - optopt = 0; - return (BADARG); - } - if (long_options[match].has_arg == required_argument || - long_options[match].has_arg == optional_argument) { - if (has_equal) - optarg = has_equal; - else if (long_options[match].has_arg == - required_argument) { - /* - * optional argument doesn't use next nargv - */ - optarg = nargv[optind++]; - } - } - if ((long_options[match].has_arg == required_argument) - && (optarg == NULL)) { - /* - * Missing argument; leading ':' indicates no error - * should be generated. - */ - if (PRINT_ERROR) - warnx(recargstring, - current_argv); - /* - * XXX: GNU sets optopt to val regardless of flag - */ - if (long_options[match].flag == NULL) - optopt = long_options[match].val; - else - optopt = 0; - --optind; - return (BADARG); - } - } else { /* unknown option */ - if (short_too) { - --optind; - return (-1); - } - if (PRINT_ERROR) - warnx(illoptstring, current_argv); - optopt = 0; - return (BADCH); - } - if (idx) - *idx = match; - if (long_options[match].flag) { - *long_options[match].flag = long_options[match].val; - return (0); - } else - return (long_options[match].val); -#undef IDENTICAL_INTERPRETATION -} - -/* - * getopt_internal -- - * Parse argc/argv argument vector. Called by user level routines. - */ -static int -getopt_internal(int nargc, char * const *nargv, const char *options, - const struct option *long_options, int *idx, int flags) -{ - char *oli; /* option letter list index */ - int optchar, short_too; - static int posixly_correct = -1; - - if (options == NULL) - return (-1); - - /* - * XXX Some GNU programs (like cvs) set optind to 0 instead of - * XXX using optreset. Work around this braindamage. - */ - if (optind == 0) - optind = optreset = 1; - - /* - * Disable GNU extensions if POSIXLY_CORRECT is set or options - * string begins with a '+'. - * - * CV, 2009-12-14: Check POSIXLY_CORRECT anew if optind == 0 or - * optreset != 0 for GNU compatibility. - */ - if (posixly_correct == -1 || optreset != 0) - posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); - if (*options == '-') - flags |= FLAG_ALLARGS; - else if (posixly_correct || *options == '+') - flags &= ~FLAG_PERMUTE; - if (*options == '+' || *options == '-') - options++; - - optarg = NULL; - if (optreset) - nonopt_start = nonopt_end = -1; -start: - if (optreset || !*place) { /* update scanning pointer */ - optreset = 0; - if (optind >= nargc) { /* end of argument vector */ - place = EMSG; - if (nonopt_end != -1) { - /* do permutation, if we have to */ - permute_args(nonopt_start, nonopt_end, - optind, nargv); - optind -= nonopt_end - nonopt_start; - } - else if (nonopt_start != -1) { - /* - * If we skipped non-options, set optind - * to the first of them. - */ - optind = nonopt_start; - } - nonopt_start = nonopt_end = -1; - return (-1); - } - if (*(place = nargv[optind]) != '-' || - (place[1] == '\0' && strchr(options, '-') == NULL)) { - place = EMSG; /* found non-option */ - if (flags & FLAG_ALLARGS) { - /* - * GNU extension: - * return non-option as argument to option 1 - */ - optarg = nargv[optind++]; - return (INORDER); - } - if (!(flags & FLAG_PERMUTE)) { - /* - * If no permutation wanted, stop parsing - * at first non-option. - */ - return (-1); - } - /* do permutation */ - if (nonopt_start == -1) - nonopt_start = optind; - else if (nonopt_end != -1) { - permute_args(nonopt_start, nonopt_end, - optind, nargv); - nonopt_start = optind - - (nonopt_end - nonopt_start); - nonopt_end = -1; - } - optind++; - /* process next argument */ - goto start; - } - if (nonopt_start != -1 && nonopt_end == -1) - nonopt_end = optind; - - /* - * If we have "-" do nothing, if "--" we are done. - */ - if (place[1] != '\0' && *++place == '-' && place[1] == '\0') { - optind++; - place = EMSG; - /* - * We found an option (--), so if we skipped - * non-options, we have to permute. - */ - if (nonopt_end != -1) { - permute_args(nonopt_start, nonopt_end, - optind, nargv); - optind -= nonopt_end - nonopt_start; - } - nonopt_start = nonopt_end = -1; - return (-1); - } - } - - /* - * Check long options if: - * 1) we were passed some - * 2) the arg is not just "-" - * 3) either the arg starts with -- we are getopt_long_only() - */ - if (long_options != NULL && place != nargv[optind] && - (*place == '-' || (flags & FLAG_LONGONLY))) { - short_too = 0; - if (*place == '-') - place++; /* --foo long option */ - else if (*place != ':' && strchr(options, *place) != NULL) - short_too = 1; /* could be short option too */ - - optchar = parse_long_options(nargv, options, long_options, - idx, short_too); - if (optchar != -1) { - place = EMSG; - return (optchar); - } - } - - if ((optchar = (int)*place++) == (int)':' || - (optchar == (int)'-' && *place != '\0') || - (oli = (char*)strchr(options, optchar)) == NULL) { - /* - * If the user specified "-" and '-' isn't listed in - * options, return -1 (non-option) as per POSIX. - * Otherwise, it is an unknown option character (or ':'). - */ - if (optchar == (int)'-' && *place == '\0') - return (-1); - if (!*place) - ++optind; - if (PRINT_ERROR) - warnx(illoptchar, optchar); - optopt = optchar; - return (BADCH); - } - if (long_options != NULL && optchar == 'W' && oli[1] == ';') { - /* -W long-option */ - if (*place) /* no space */ - /* NOTHING */; - else if (++optind >= nargc) { /* no arg */ - place = EMSG; - if (PRINT_ERROR) - warnx(recargchar, optchar); - optopt = optchar; - return (BADARG); - } else /* white space */ - place = nargv[optind]; - optchar = parse_long_options(nargv, options, long_options, - idx, 0); - place = EMSG; - return (optchar); - } - if (*++oli != ':') { /* doesn't take argument */ - if (!*place) - ++optind; - } else { /* takes (optional) argument */ - optarg = NULL; - if (*place) /* no white space */ - optarg = place; - else if (oli[1] != ':') { /* arg not optional */ - if (++optind >= nargc) { /* no arg */ - place = EMSG; - if (PRINT_ERROR) - warnx(recargchar, optchar); - optopt = optchar; - return (BADARG); - } else - optarg = nargv[optind]; - } - place = EMSG; - ++optind; - } - /* dump back option letter */ - return (optchar); -} - -/* - * getopt_long -- - * Parse argc/argv argument vector. - */ -int -getopt_long(int nargc, char * const *nargv, const char *options, - const struct option *long_options, int *idx) -{ - - return (getopt_internal(nargc, nargv, options, long_options, idx, - FLAG_PERMUTE)); -} - -/* - * getopt_long_only -- - * Parse argc/argv argument vector. - */ -int -getopt_long_only(int nargc, char * const *nargv, const char *options, - const struct option *long_options, int *idx) -{ - - return (getopt_internal(nargc, nargv, options, long_options, idx, - FLAG_PERMUTE|FLAG_LONGONLY)); -} - -//extern int getopt_long(int nargc, char * const *nargv, const char *options, -// const struct option *long_options, int *idx); -//extern int getopt_long_only(int nargc, char * const *nargv, const char *options, -// const struct option *long_options, int *idx); -/* - * Previous MinGW implementation had... - */ -#ifndef HAVE_DECL_GETOPT -/* - * ...for the long form API only; keep this for compatibility. - */ -# define HAVE_DECL_GETOPT 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */ \ No newline at end of file diff --git a/vendor/quickjs-ng/libbf.c b/vendor/quickjs-ng/libbf.c deleted file mode 100644 index abdbecea7..000000000 --- a/vendor/quickjs-ng/libbf.c +++ /dev/null @@ -1,8412 +0,0 @@ -/* - * Tiny arbitrary precision floating point library - * - * Copyright (c) 2017-2021 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -#ifdef __AVX2__ -#include -#endif - -#include "cutils.h" -#include "libbf.h" - -/* enable it to check the multiplication result */ -//#define USE_MUL_CHECK -/* enable it to use FFT/NTT multiplication */ -#define USE_FFT_MUL -/* enable decimal floating point support */ -#define USE_BF_DEC - -//#define inline __attribute__((always_inline)) - -#ifdef __AVX2__ -#define FFT_MUL_THRESHOLD 100 /* in limbs of the smallest factor */ -#else -#define FFT_MUL_THRESHOLD 100 /* in limbs of the smallest factor */ -#endif - -/* XXX: adjust */ -#define DIVNORM_LARGE_THRESHOLD 50 -#define UDIV1NORM_THRESHOLD 3 - -#if LIMB_BITS == 64 -#define FMT_LIMB1 "%" PRIx64 -#define FMT_LIMB "%016" PRIx64 -#define PRId_LIMB PRId64 -#define PRIu_LIMB PRIu64 - -#else - -#define FMT_LIMB1 "%x" -#define FMT_LIMB "%08x" -#define PRId_LIMB "d" -#define PRIu_LIMB "u" - -#endif - -typedef intptr_t mp_size_t; - -typedef int bf_op2_func_t(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags); - -#ifdef USE_FFT_MUL - -#define FFT_MUL_R_OVERLAP_A (1 << 0) -#define FFT_MUL_R_OVERLAP_B (1 << 1) -#define FFT_MUL_R_NORESIZE (1 << 2) - -static no_inline int fft_mul(bf_context_t *s, - bf_t *res, limb_t *a_tab, limb_t a_len, - limb_t *b_tab, limb_t b_len, int mul_flags); -static void fft_clear_cache(bf_context_t *s); -#endif -#ifdef USE_BF_DEC -static limb_t get_digit(const limb_t *tab, limb_t len, slimb_t pos); -#endif - - -/* could leading zeros */ -static inline int clz(limb_t a) -{ - if (a == 0) { - return LIMB_BITS; - } else { -#if LIMB_BITS == 64 - return clz64(a); -#else - return clz32(a); -#endif - } -} - -static inline int ctz(limb_t a) -{ - if (a == 0) { - return LIMB_BITS; - } else { -#if LIMB_BITS == 64 - return ctz64(a); -#else - return ctz32(a); -#endif - } -} - -static inline int ceil_log2(limb_t a) -{ - if (a <= 1) - return 0; - else - return LIMB_BITS - clz(a - 1); -} - -/* b must be >= 1 */ -static inline slimb_t ceil_div(slimb_t a, slimb_t b) -{ - if (a >= 0) - return (a + b - 1) / b; - else - return a / b; -} - -/* b must be >= 1 */ -static inline slimb_t floor_div(slimb_t a, slimb_t b) -{ - if (a >= 0) { - return a / b; - } else { - return (a - b + 1) / b; - } -} - -/* return r = a modulo b (0 <= r <= b - 1. b must be >= 1 */ -static inline limb_t smod(slimb_t a, slimb_t b) -{ - a = a % (slimb_t)b; - if (a < 0) - a += b; - return a; -} - -/* signed addition with saturation */ -static inline slimb_t sat_add(slimb_t a, slimb_t b) -{ - slimb_t r; - r = a + b; - /* overflow ? */ - if (((a ^ r) & (b ^ r)) < 0) - r = (a >> (LIMB_BITS - 1)) ^ (((limb_t)1 << (LIMB_BITS - 1)) - 1); - return r; -} - -static inline __maybe_unused limb_t shrd(limb_t low, limb_t high, long shift) -{ - if (shift != 0) - low = (low >> shift) | (high << (LIMB_BITS - shift)); - return low; -} - -static inline __maybe_unused limb_t shld(limb_t a1, limb_t a0, long shift) -{ - if (shift != 0) - return (a1 << shift) | (a0 >> (LIMB_BITS - shift)); - else - return a1; -} - -#define malloc(s) malloc_is_forbidden(s) -#define free(p) free_is_forbidden(p) -#define realloc(p, s) realloc_is_forbidden(p, s) - -void bf_context_init(bf_context_t *s, bf_realloc_func_t *realloc_func, - void *realloc_opaque) -{ - memset(s, 0, sizeof(*s)); - s->realloc_func = realloc_func; - s->realloc_opaque = realloc_opaque; -} - -void bf_context_end(bf_context_t *s) -{ - bf_clear_cache(s); -} - -void bf_init(bf_context_t *s, bf_t *r) -{ - r->ctx = s; - r->sign = 0; - r->expn = BF_EXP_ZERO; - r->len = 0; - r->tab = NULL; -} - -/* return 0 if OK, -1 if alloc error */ -int bf_resize(bf_t *r, limb_t len) -{ - limb_t *tab; - - if (len != r->len) { - tab = bf_realloc(r->ctx, r->tab, len * sizeof(limb_t)); - if (!tab && len != 0) - return -1; - r->tab = tab; - r->len = len; - } - return 0; -} - -/* return 0 or BF_ST_MEM_ERROR */ -int bf_set_ui(bf_t *r, uint64_t a) -{ - r->sign = 0; - if (a == 0) { - r->expn = BF_EXP_ZERO; - bf_resize(r, 0); /* cannot fail */ - } -#if LIMB_BITS == 32 - else if (a <= 0xffffffff) -#else - else -#endif - { - int shift; - if (bf_resize(r, 1)) - goto fail; - shift = clz(a); - r->tab[0] = a << shift; - r->expn = LIMB_BITS - shift; - } -#if LIMB_BITS == 32 - else { - uint32_t a1, a0; - int shift; - if (bf_resize(r, 2)) - goto fail; - a0 = a; - a1 = a >> 32; - shift = clz(a1); - r->tab[0] = a0 << shift; - r->tab[1] = shld(a1, a0, shift); - r->expn = 2 * LIMB_BITS - shift; - } -#endif - return 0; - fail: - bf_set_nan(r); - return BF_ST_MEM_ERROR; -} - -/* return 0 or BF_ST_MEM_ERROR */ -int bf_set_si(bf_t *r, int64_t a) -{ - int ret; - - if (a < 0) { - ret = bf_set_ui(r, -a); - r->sign = 1; - } else { - ret = bf_set_ui(r, a); - } - return ret; -} - -void bf_set_nan(bf_t *r) -{ - bf_resize(r, 0); /* cannot fail */ - r->expn = BF_EXP_NAN; - r->sign = 0; -} - -void bf_set_zero(bf_t *r, int is_neg) -{ - bf_resize(r, 0); /* cannot fail */ - r->expn = BF_EXP_ZERO; - r->sign = is_neg; -} - -void bf_set_inf(bf_t *r, int is_neg) -{ - bf_resize(r, 0); /* cannot fail */ - r->expn = BF_EXP_INF; - r->sign = is_neg; -} - -/* return 0 or BF_ST_MEM_ERROR */ -int bf_set(bf_t *r, const bf_t *a) -{ - if (r == a) - return 0; - if (bf_resize(r, a->len)) { - bf_set_nan(r); - return BF_ST_MEM_ERROR; - } - r->sign = a->sign; - r->expn = a->expn; - if (a->len > 0) - memcpy(r->tab, a->tab, a->len * sizeof(limb_t)); - return 0; -} - -/* equivalent to bf_set(r, a); bf_delete(a) */ -void bf_move(bf_t *r, bf_t *a) -{ - bf_context_t *s = r->ctx; - if (r == a) - return; - bf_free(s, r->tab); - *r = *a; -} - -static limb_t get_limbz(const bf_t *a, limb_t idx) -{ - if (idx >= a->len) - return 0; - else - return a->tab[idx]; -} - -/* get LIMB_BITS at bit position 'pos' in tab */ -static inline limb_t get_bits(const limb_t *tab, limb_t len, slimb_t pos) -{ - limb_t i, a0, a1; - int p; - - i = pos >> LIMB_LOG2_BITS; - p = pos & (LIMB_BITS - 1); - if (i < len) - a0 = tab[i]; - else - a0 = 0; - if (p == 0) { - return a0; - } else { - i++; - if (i < len) - a1 = tab[i]; - else - a1 = 0; - return (a0 >> p) | (a1 << (LIMB_BITS - p)); - } -} - -static inline limb_t get_bit(const limb_t *tab, limb_t len, slimb_t pos) -{ - slimb_t i; - i = pos >> LIMB_LOG2_BITS; - if (i < 0 || i >= len) - return 0; - return (tab[i] >> (pos & (LIMB_BITS - 1))) & 1; -} - -static inline limb_t limb_mask(int start, int last) -{ - limb_t v; - int n; - n = last - start + 1; - if (n == LIMB_BITS) - v = -1; - else - v = (((limb_t)1 << n) - 1) << start; - return v; -} - -static limb_t mp_scan_nz(const limb_t *tab, mp_size_t n) -{ - mp_size_t i; - for(i = 0; i < n; i++) { - if (tab[i] != 0) - return 1; - } - return 0; -} - -/* return != 0 if one bit between 0 and bit_pos inclusive is not zero. */ -static inline limb_t scan_bit_nz(const bf_t *r, slimb_t bit_pos) -{ - slimb_t pos; - limb_t v; - - pos = bit_pos >> LIMB_LOG2_BITS; - if (pos < 0) - return 0; - v = r->tab[pos] & limb_mask(0, bit_pos & (LIMB_BITS - 1)); - if (v != 0) - return 1; - pos--; - while (pos >= 0) { - if (r->tab[pos] != 0) - return 1; - pos--; - } - return 0; -} - -/* return the addend for rounding. Note that prec can be <= 0 (for - BF_FLAG_RADPNT_PREC) */ -static int bf_get_rnd_add(int *pret, const bf_t *r, limb_t l, - slimb_t prec, int rnd_mode) -{ - int add_one, inexact; - limb_t bit1, bit0; - - if (rnd_mode == BF_RNDF) { - bit0 = 1; /* faithful rounding does not honor the INEXACT flag */ - } else { - /* starting limb for bit 'prec + 1' */ - bit0 = scan_bit_nz(r, l * LIMB_BITS - 1 - bf_max(0, prec + 1)); - } - - /* get the bit at 'prec' */ - bit1 = get_bit(r->tab, l, l * LIMB_BITS - 1 - prec); - inexact = (bit1 | bit0) != 0; - - add_one = 0; - switch(rnd_mode) { - case BF_RNDZ: - break; - case BF_RNDN: - if (bit1) { - if (bit0) { - add_one = 1; - } else { - /* round to even */ - add_one = - get_bit(r->tab, l, l * LIMB_BITS - 1 - (prec - 1)); - } - } - break; - case BF_RNDD: - case BF_RNDU: - if (r->sign == (rnd_mode == BF_RNDD)) - add_one = inexact; - break; - case BF_RNDA: - add_one = inexact; - break; - case BF_RNDNA: - case BF_RNDF: - add_one = bit1; - break; - default: - abort(); - } - - if (inexact) - *pret |= BF_ST_INEXACT; - return add_one; -} - -static int bf_set_overflow(bf_t *r, int sign, limb_t prec, bf_flags_t flags) -{ - slimb_t i, l, e_max; - int rnd_mode; - - rnd_mode = flags & BF_RND_MASK; - if (prec == BF_PREC_INF || - rnd_mode == BF_RNDN || - rnd_mode == BF_RNDNA || - rnd_mode == BF_RNDA || - (rnd_mode == BF_RNDD && sign == 1) || - (rnd_mode == BF_RNDU && sign == 0)) { - bf_set_inf(r, sign); - } else { - /* set to maximum finite number */ - l = (prec + LIMB_BITS - 1) / LIMB_BITS; - if (bf_resize(r, l)) { - bf_set_nan(r); - return BF_ST_MEM_ERROR; - } - r->tab[0] = limb_mask((-prec) & (LIMB_BITS - 1), - LIMB_BITS - 1); - for(i = 1; i < l; i++) - r->tab[i] = (limb_t)-1; - e_max = (limb_t)1 << (bf_get_exp_bits(flags) - 1); - r->expn = e_max; - r->sign = sign; - } - return BF_ST_OVERFLOW | BF_ST_INEXACT; -} - -/* round to prec1 bits assuming 'r' is non zero and finite. 'r' is - assumed to have length 'l' (1 <= l <= r->len). Note: 'prec1' can be - infinite (BF_PREC_INF). 'ret' is 0 or BF_ST_INEXACT if the result - is known to be inexact. Can fail with BF_ST_MEM_ERROR in case of - overflow not returning infinity. */ -static int __bf_round(bf_t *r, limb_t prec1, bf_flags_t flags, limb_t l, - int ret) -{ - limb_t v, a; - int shift, add_one, rnd_mode; - slimb_t i, bit_pos, pos, e_min, e_max, e_range, prec; - - /* e_min and e_max are computed to match the IEEE 754 conventions */ - e_range = (limb_t)1 << (bf_get_exp_bits(flags) - 1); - e_min = -e_range + 3; - e_max = e_range; - - if (flags & BF_FLAG_RADPNT_PREC) { - /* 'prec' is the precision after the radix point */ - if (prec1 != BF_PREC_INF) - prec = r->expn + prec1; - else - prec = prec1; - } else if (unlikely(r->expn < e_min) && (flags & BF_FLAG_SUBNORMAL)) { - /* restrict the precision in case of potentially subnormal - result */ - assert(prec1 != BF_PREC_INF); - prec = prec1 - (e_min - r->expn); - } else { - prec = prec1; - } - - /* round to prec bits */ - rnd_mode = flags & BF_RND_MASK; - add_one = bf_get_rnd_add(&ret, r, l, prec, rnd_mode); - - if (prec <= 0) { - if (add_one) { - bf_resize(r, 1); /* cannot fail */ - r->tab[0] = (limb_t)1 << (LIMB_BITS - 1); - r->expn += 1 - prec; - ret |= BF_ST_UNDERFLOW | BF_ST_INEXACT; - return ret; - } else { - goto underflow; - } - } else if (add_one) { - limb_t carry; - - /* add one starting at digit 'prec - 1' */ - bit_pos = l * LIMB_BITS - 1 - (prec - 1); - pos = bit_pos >> LIMB_LOG2_BITS; - carry = (limb_t)1 << (bit_pos & (LIMB_BITS - 1)); - - for(i = pos; i < l; i++) { - v = r->tab[i] + carry; - carry = (v < carry); - r->tab[i] = v; - if (carry == 0) - break; - } - if (carry) { - /* shift right by one digit */ - v = 1; - for(i = l - 1; i >= pos; i--) { - a = r->tab[i]; - r->tab[i] = (a >> 1) | (v << (LIMB_BITS - 1)); - v = a; - } - r->expn++; - } - } - - /* check underflow */ - if (unlikely(r->expn < e_min)) { - if (flags & BF_FLAG_SUBNORMAL) { - /* if inexact, also set the underflow flag */ - if (ret & BF_ST_INEXACT) - ret |= BF_ST_UNDERFLOW; - } else { - underflow: - ret |= BF_ST_UNDERFLOW | BF_ST_INEXACT; - bf_set_zero(r, r->sign); - return ret; - } - } - - /* check overflow */ - if (unlikely(r->expn > e_max)) - return bf_set_overflow(r, r->sign, prec1, flags); - - /* keep the bits starting at 'prec - 1' */ - bit_pos = l * LIMB_BITS - 1 - (prec - 1); - i = bit_pos >> LIMB_LOG2_BITS; - if (i >= 0) { - shift = bit_pos & (LIMB_BITS - 1); - if (shift != 0) - r->tab[i] &= limb_mask(shift, LIMB_BITS - 1); - } else { - i = 0; - } - /* remove trailing zeros */ - while (r->tab[i] == 0) - i++; - if (i > 0) { - l -= i; - memmove(r->tab, r->tab + i, l * sizeof(limb_t)); - } - bf_resize(r, l); /* cannot fail */ - return ret; -} - -/* 'r' must be a finite number. */ -int bf_normalize_and_round(bf_t *r, limb_t prec1, bf_flags_t flags) -{ - limb_t l, v, a; - int shift, ret; - slimb_t i; - - // bf_print_str("bf_renorm", r); - l = r->len; - while (l > 0 && r->tab[l - 1] == 0) - l--; - if (l == 0) { - /* zero */ - r->expn = BF_EXP_ZERO; - bf_resize(r, 0); /* cannot fail */ - ret = 0; - } else { - r->expn -= (r->len - l) * LIMB_BITS; - /* shift to have the MSB set to '1' */ - v = r->tab[l - 1]; - shift = clz(v); - if (shift != 0) { - v = 0; - for(i = 0; i < l; i++) { - a = r->tab[i]; - r->tab[i] = (a << shift) | (v >> (LIMB_BITS - shift)); - v = a; - } - r->expn -= shift; - } - ret = __bf_round(r, prec1, flags, l, 0); - } - // bf_print_str("r_final", r); - return ret; -} - -/* return true if rounding can be done at precision 'prec' assuming - the exact result r is such that |r-a| <= 2^(EXP(a)-k). */ -/* XXX: check the case where the exponent would be incremented by the - rounding */ -int bf_can_round(const bf_t *a, slimb_t prec, bf_rnd_t rnd_mode, slimb_t k) -{ - BOOL is_rndn; - slimb_t bit_pos, n; - limb_t bit; - - if (a->expn == BF_EXP_INF || a->expn == BF_EXP_NAN) - return FALSE; - if (rnd_mode == BF_RNDF) { - return (k >= (prec + 1)); - } - if (a->expn == BF_EXP_ZERO) - return FALSE; - is_rndn = (rnd_mode == BF_RNDN || rnd_mode == BF_RNDNA); - if (k < (prec + 2)) - return FALSE; - bit_pos = a->len * LIMB_BITS - 1 - prec; - n = k - prec; - /* bit pattern for RNDN or RNDNA: 0111.. or 1000... - for other rounding modes: 000... or 111... - */ - bit = get_bit(a->tab, a->len, bit_pos); - bit_pos--; - n--; - bit ^= is_rndn; - /* XXX: slow, but a few iterations on average */ - while (n != 0) { - if (get_bit(a->tab, a->len, bit_pos) != bit) - return TRUE; - bit_pos--; - n--; - } - return FALSE; -} - -/* Cannot fail with BF_ST_MEM_ERROR. */ -int bf_round(bf_t *r, limb_t prec, bf_flags_t flags) -{ - if (r->len == 0) - return 0; - return __bf_round(r, prec, flags, r->len, 0); -} - -/* for debugging */ -static __maybe_unused void dump_limbs(const char *str, const limb_t *tab, limb_t n) -{ - limb_t i; - printf("%s: len=%" PRId_LIMB "\n", str, n); - for(i = 0; i < n; i++) { - printf("%" PRId_LIMB ": " FMT_LIMB "\n", - i, tab[i]); - } -} - -void mp_print_str(const char *str, const limb_t *tab, limb_t n) -{ - slimb_t i; - printf("%s= 0x", str); - for(i = n - 1; i >= 0; i--) { - if (i != (n - 1)) - printf("_"); - printf(FMT_LIMB, tab[i]); - } - printf("\n"); -} - -static __maybe_unused void mp_print_str_h(const char *str, - const limb_t *tab, limb_t n, - limb_t high) -{ - slimb_t i; - printf("%s= 0x", str); - printf(FMT_LIMB, high); - for(i = n - 1; i >= 0; i--) { - printf("_"); - printf(FMT_LIMB, tab[i]); - } - printf("\n"); -} - -/* for debugging */ -void bf_print_str(const char *str, const bf_t *a) -{ - slimb_t i; - printf("%s=", str); - - if (a->expn == BF_EXP_NAN) { - printf("NaN"); - } else { - if (a->sign) - putchar('-'); - if (a->expn == BF_EXP_ZERO) { - putchar('0'); - } else if (a->expn == BF_EXP_INF) { - printf("Inf"); - } else { - printf("0x0."); - for(i = a->len - 1; i >= 0; i--) - printf(FMT_LIMB, a->tab[i]); - printf("p%" PRId_LIMB, a->expn); - } - } - printf("\n"); -} - -/* compare the absolute value of 'a' and 'b'. Return < 0 if a < b, 0 - if a = b and > 0 otherwise. */ -int bf_cmpu(const bf_t *a, const bf_t *b) -{ - slimb_t i; - limb_t len, v1, v2; - - if (a->expn != b->expn) { - if (a->expn < b->expn) - return -1; - else - return 1; - } - len = bf_max(a->len, b->len); - for(i = len - 1; i >= 0; i--) { - v1 = get_limbz(a, a->len - len + i); - v2 = get_limbz(b, b->len - len + i); - if (v1 != v2) { - if (v1 < v2) - return -1; - else - return 1; - } - } - return 0; -} - -/* Full order: -0 < 0, NaN == NaN and NaN is larger than all other numbers */ -int bf_cmp_full(const bf_t *a, const bf_t *b) -{ - int res; - - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - if (a->expn == b->expn) - res = 0; - else if (a->expn == BF_EXP_NAN) - res = 1; - else - res = -1; - } else if (a->sign != b->sign) { - res = 1 - 2 * a->sign; - } else { - res = bf_cmpu(a, b); - if (a->sign) - res = -res; - } - return res; -} - -/* Standard floating point comparison: return 2 if one of the operands - is NaN (unordered) or -1, 0, 1 depending on the ordering assuming - -0 == +0 */ -int bf_cmp(const bf_t *a, const bf_t *b) -{ - int res; - - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - res = 2; - } else if (a->sign != b->sign) { - if (a->expn == BF_EXP_ZERO && b->expn == BF_EXP_ZERO) - res = 0; - else - res = 1 - 2 * a->sign; - } else { - res = bf_cmpu(a, b); - if (a->sign) - res = -res; - } - return res; -} - -/* Compute the number of bits 'n' matching the pattern: - a= X1000..0 - b= X0111..1 - - When computing a-b, the result will have at least n leading zero - bits. - - Precondition: a > b and a.expn - b.expn = 0 or 1 -*/ -static limb_t count_cancelled_bits(const bf_t *a, const bf_t *b) -{ - slimb_t bit_offset, b_offset, n; - int p, p1; - limb_t v1, v2, mask; - - bit_offset = a->len * LIMB_BITS - 1; - b_offset = (b->len - a->len) * LIMB_BITS - (LIMB_BITS - 1) + - a->expn - b->expn; - n = 0; - - /* first search the equals bits */ - for(;;) { - v1 = get_limbz(a, bit_offset >> LIMB_LOG2_BITS); - v2 = get_bits(b->tab, b->len, bit_offset + b_offset); - // printf("v1=" FMT_LIMB " v2=" FMT_LIMB "\n", v1, v2); - if (v1 != v2) - break; - n += LIMB_BITS; - bit_offset -= LIMB_BITS; - } - /* find the position of the first different bit */ - p = clz(v1 ^ v2) + 1; - n += p; - /* then search for '0' in a and '1' in b */ - p = LIMB_BITS - p; - if (p > 0) { - /* search in the trailing p bits of v1 and v2 */ - mask = limb_mask(0, p - 1); - p1 = bf_min(clz(v1 & mask), clz((~v2) & mask)) - (LIMB_BITS - p); - n += p1; - if (p1 != p) - goto done; - } - bit_offset -= LIMB_BITS; - for(;;) { - v1 = get_limbz(a, bit_offset >> LIMB_LOG2_BITS); - v2 = get_bits(b->tab, b->len, bit_offset + b_offset); - // printf("v1=" FMT_LIMB " v2=" FMT_LIMB "\n", v1, v2); - if (v1 != 0 || v2 != -1) { - /* different: count the matching bits */ - p1 = bf_min(clz(v1), clz(~v2)); - n += p1; - break; - } - n += LIMB_BITS; - bit_offset -= LIMB_BITS; - } - done: - return n; -} - -static int bf_add_internal(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags, int b_neg) -{ - const bf_t *tmp; - int is_sub, ret, cmp_res, a_sign, b_sign; - - a_sign = a->sign; - b_sign = b->sign ^ b_neg; - is_sub = a_sign ^ b_sign; - cmp_res = bf_cmpu(a, b); - if (cmp_res < 0) { - tmp = a; - a = b; - b = tmp; - a_sign = b_sign; /* b_sign is never used later */ - } - /* abs(a) >= abs(b) */ - if (cmp_res == 0 && is_sub && a->expn < BF_EXP_INF) { - /* zero result */ - bf_set_zero(r, (flags & BF_RND_MASK) == BF_RNDD); - ret = 0; - } else if (a->len == 0 || b->len == 0) { - ret = 0; - if (a->expn >= BF_EXP_INF) { - if (a->expn == BF_EXP_NAN) { - /* at least one operand is NaN */ - bf_set_nan(r); - } else if (b->expn == BF_EXP_INF && is_sub) { - /* infinities with different signs */ - bf_set_nan(r); - ret = BF_ST_INVALID_OP; - } else { - bf_set_inf(r, a_sign); - } - } else { - /* at least one zero and not subtract */ - bf_set(r, a); - r->sign = a_sign; - goto renorm; - } - } else { - slimb_t d, a_offset, b_bit_offset, i, cancelled_bits; - limb_t carry, v1, v2, u, r_len, carry1, precl, tot_len, z, sub_mask; - - r->sign = a_sign; - r->expn = a->expn; - d = a->expn - b->expn; - /* must add more precision for the leading cancelled bits in - subtraction */ - if (is_sub) { - if (d <= 1) - cancelled_bits = count_cancelled_bits(a, b); - else - cancelled_bits = 1; - } else { - cancelled_bits = 0; - } - - /* add two extra bits for rounding */ - precl = (cancelled_bits + prec + 2 + LIMB_BITS - 1) / LIMB_BITS; - tot_len = bf_max(a->len, b->len + (d + LIMB_BITS - 1) / LIMB_BITS); - r_len = bf_min(precl, tot_len); - if (bf_resize(r, r_len)) - goto fail; - a_offset = a->len - r_len; - b_bit_offset = (b->len - r_len) * LIMB_BITS + d; - - /* compute the bits before for the rounding */ - carry = is_sub; - z = 0; - sub_mask = -is_sub; - i = r_len - tot_len; - while (i < 0) { - slimb_t ap, bp; - BOOL inflag; - - ap = a_offset + i; - bp = b_bit_offset + i * LIMB_BITS; - inflag = FALSE; - if (ap >= 0 && ap < a->len) { - v1 = a->tab[ap]; - inflag = TRUE; - } else { - v1 = 0; - } - if (bp + LIMB_BITS > 0 && bp < (slimb_t)(b->len * LIMB_BITS)) { - v2 = get_bits(b->tab, b->len, bp); - inflag = TRUE; - } else { - v2 = 0; - } - if (!inflag) { - /* outside 'a' and 'b': go directly to the next value - inside a or b so that the running time does not - depend on the exponent difference */ - i = 0; - if (ap < 0) - i = bf_min(i, -a_offset); - /* b_bit_offset + i * LIMB_BITS + LIMB_BITS >= 1 - equivalent to - i >= ceil(-b_bit_offset + 1 - LIMB_BITS) / LIMB_BITS) - */ - if (bp + LIMB_BITS <= 0) - i = bf_min(i, (-b_bit_offset) >> LIMB_LOG2_BITS); - } else { - i++; - } - v2 ^= sub_mask; - u = v1 + v2; - carry1 = u < v1; - u += carry; - carry = (u < carry) | carry1; - z |= u; - } - /* and the result */ - for(i = 0; i < r_len; i++) { - v1 = get_limbz(a, a_offset + i); - v2 = get_bits(b->tab, b->len, b_bit_offset + i * LIMB_BITS); - v2 ^= sub_mask; - u = v1 + v2; - carry1 = u < v1; - u += carry; - carry = (u < carry) | carry1; - r->tab[i] = u; - } - /* set the extra bits for the rounding */ - r->tab[0] |= (z != 0); - - /* carry is only possible in add case */ - if (!is_sub && carry) { - if (bf_resize(r, r_len + 1)) - goto fail; - r->tab[r_len] = 1; - r->expn += LIMB_BITS; - } - renorm: - ret = bf_normalize_and_round(r, prec, flags); - } - return ret; - fail: - bf_set_nan(r); - return BF_ST_MEM_ERROR; -} - -static int __bf_add(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_add_internal(r, a, b, prec, flags, 0); -} - -static int __bf_sub(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_add_internal(r, a, b, prec, flags, 1); -} - -limb_t mp_add(limb_t *res, const limb_t *op1, const limb_t *op2, - limb_t n, limb_t carry) -{ - slimb_t i; - limb_t k, a, v, k1; - - k = carry; - for(i=0;i v; - v = a - k; - k = (v > a) | k1; - res[i] = v; - } - return k; -} - -/* compute 0 - op2 */ -static limb_t mp_neg(limb_t *res, const limb_t *op2, mp_size_t n, limb_t carry) -{ - int i; - limb_t k, a, v, k1; - - k = carry; - for(i=0;i v; - v = a - k; - k = (v > a) | k1; - res[i] = v; - } - return k; -} - -limb_t mp_sub_ui(limb_t *tab, limb_t b, mp_size_t n) -{ - mp_size_t i; - limb_t k, a, v; - - k=b; - for(i=0;i v; - tab[i] = a; - if (k == 0) - break; - } - return k; -} - -/* r = (a + high*B^n) >> shift. Return the remainder r (0 <= r < 2^shift). - 1 <= shift <= LIMB_BITS - 1 */ -static limb_t mp_shr(limb_t *tab_r, const limb_t *tab, mp_size_t n, - int shift, limb_t high) -{ - mp_size_t i; - limb_t l, a; - - assert(shift >= 1 && shift < LIMB_BITS); - l = high; - for(i = n - 1; i >= 0; i--) { - a = tab[i]; - tab_r[i] = (a >> shift) | (l << (LIMB_BITS - shift)); - l = a; - } - return l & (((limb_t)1 << shift) - 1); -} - -/* tabr[] = taba[] * b + l. Return the high carry */ -static limb_t mp_mul1(limb_t *tabr, const limb_t *taba, limb_t n, - limb_t b, limb_t l) -{ - limb_t i; - dlimb_t t; - - for(i = 0; i < n; i++) { - t = (dlimb_t)taba[i] * (dlimb_t)b + l; - tabr[i] = t; - l = t >> LIMB_BITS; - } - return l; -} - -/* tabr[] += taba[] * b, return the high word. */ -static limb_t mp_add_mul1(limb_t *tabr, const limb_t *taba, limb_t n, - limb_t b) -{ - limb_t i, l; - dlimb_t t; - - l = 0; - for(i = 0; i < n; i++) { - t = (dlimb_t)taba[i] * (dlimb_t)b + l + tabr[i]; - tabr[i] = t; - l = t >> LIMB_BITS; - } - return l; -} - -/* size of the result : op1_size + op2_size. */ -static void mp_mul_basecase(limb_t *result, - const limb_t *op1, limb_t op1_size, - const limb_t *op2, limb_t op2_size) -{ - limb_t i, r; - - result[op1_size] = mp_mul1(result, op1, op1_size, op2[0], 0); - for(i=1;i= FFT_MUL_THRESHOLD)) { - bf_t r_s, *r = &r_s; - r->tab = result; - /* XXX: optimize memory usage in API */ - if (fft_mul(s, r, (limb_t *)op1, op1_size, - (limb_t *)op2, op2_size, FFT_MUL_R_NORESIZE)) - return -1; - } else -#endif - { - mp_mul_basecase(result, op1, op1_size, op2, op2_size); - } - return 0; -} - -/* tabr[] -= taba[] * b. Return the value to substract to the high - word. */ -static limb_t mp_sub_mul1(limb_t *tabr, const limb_t *taba, limb_t n, - limb_t b) -{ - limb_t i, l; - dlimb_t t; - - l = 0; - for(i = 0; i < n; i++) { - t = tabr[i] - (dlimb_t)taba[i] * (dlimb_t)b - l; - tabr[i] = t; - l = -(t >> LIMB_BITS); - } - return l; -} - -/* WARNING: d must be >= 2^(LIMB_BITS-1) */ -static inline limb_t udiv1norm_init(limb_t d) -{ - limb_t a0, a1; - a1 = -d - 1; - a0 = -1; - return (((dlimb_t)a1 << LIMB_BITS) | a0) / d; -} - -/* return the quotient and the remainder in '*pr'of 'a1*2^LIMB_BITS+a0 - / d' with 0 <= a1 < d. */ -static inline limb_t udiv1norm(limb_t *pr, limb_t a1, limb_t a0, - limb_t d, limb_t d_inv) -{ - limb_t n1m, n_adj, q, r, ah; - dlimb_t a; - n1m = ((slimb_t)a0 >> (LIMB_BITS - 1)); - n_adj = a0 + (n1m & d); - a = (dlimb_t)d_inv * (a1 - n1m) + n_adj; - q = (a >> LIMB_BITS) + a1; - /* compute a - q * r and update q so that the remainder is\ - between 0 and d - 1 */ - a = ((dlimb_t)a1 << LIMB_BITS) | a0; - a = a - (dlimb_t)q * d - d; - ah = a >> LIMB_BITS; - q += 1 + ah; - r = (limb_t)a + (ah & d); - *pr = r; - return q; -} - -/* b must be >= 1 << (LIMB_BITS - 1) */ -static limb_t mp_div1norm(limb_t *tabr, const limb_t *taba, limb_t n, - limb_t b, limb_t r) -{ - slimb_t i; - - if (n >= UDIV1NORM_THRESHOLD) { - limb_t b_inv; - b_inv = udiv1norm_init(b); - for(i = n - 1; i >= 0; i--) { - tabr[i] = udiv1norm(&r, r, taba[i], b, b_inv); - } - } else { - dlimb_t a1; - for(i = n - 1; i >= 0; i--) { - a1 = ((dlimb_t)r << LIMB_BITS) | taba[i]; - tabr[i] = a1 / b; - r = a1 % b; - } - } - return r; -} - -static int mp_divnorm_large(bf_context_t *s, - limb_t *tabq, limb_t *taba, limb_t na, - const limb_t *tabb, limb_t nb); - -/* base case division: divides taba[0..na-1] by tabb[0..nb-1]. tabb[nb - - 1] must be >= 1 << (LIMB_BITS - 1). na - nb must be >= 0. 'taba' - is modified and contains the remainder (nb limbs). tabq[0..na-nb] - contains the quotient with tabq[na - nb] <= 1. */ -static int mp_divnorm(bf_context_t *s, limb_t *tabq, limb_t *taba, limb_t na, - const limb_t *tabb, limb_t nb) -{ - limb_t r, a, c, q, v, b1, b1_inv, n, dummy_r; - slimb_t i, j; - - b1 = tabb[nb - 1]; - if (nb == 1) { - taba[0] = mp_div1norm(tabq, taba, na, b1, 0); - return 0; - } - n = na - nb; - if (bf_min(n, nb) >= DIVNORM_LARGE_THRESHOLD) { - return mp_divnorm_large(s, tabq, taba, na, tabb, nb); - } - - if (n >= UDIV1NORM_THRESHOLD) - b1_inv = udiv1norm_init(b1); - else - b1_inv = 0; - - /* first iteration: the quotient is only 0 or 1 */ - q = 1; - for(j = nb - 1; j >= 0; j--) { - if (taba[n + j] != tabb[j]) { - if (taba[n + j] < tabb[j]) - q = 0; - break; - } - } - tabq[n] = q; - if (q) { - mp_sub(taba + n, taba + n, tabb, nb, 0); - } - - for(i = n - 1; i >= 0; i--) { - if (unlikely(taba[i + nb] >= b1)) { - q = -1; - } else if (b1_inv) { - q = udiv1norm(&dummy_r, taba[i + nb], taba[i + nb - 1], b1, b1_inv); - } else { - dlimb_t al; - al = ((dlimb_t)taba[i + nb] << LIMB_BITS) | taba[i + nb - 1]; - q = al / b1; - r = al % b1; - } - r = mp_sub_mul1(taba + i, tabb, nb, q); - - v = taba[i + nb]; - a = v - r; - c = (a > v); - taba[i + nb] = a; - - if (c != 0) { - /* negative result */ - for(;;) { - q--; - c = mp_add(taba + i, taba + i, tabb, nb, 0); - /* propagate carry and test if positive result */ - if (c != 0) { - if (++taba[i + nb] == 0) { - break; - } - } - } - } - tabq[i] = q; - } - return 0; -} - -/* compute r=B^(2*n)/a such as a*r < B^(2*n) < a*r + 2 with n >= 1. 'a' - has n limbs with a[n-1] >= B/2 and 'r' has n+1 limbs with r[n] = 1. - - See Modern Computer Arithmetic by Richard P. Brent and Paul - Zimmermann, algorithm 3.5 */ -int mp_recip(bf_context_t *s, limb_t *tabr, const limb_t *taba, limb_t n) -{ - mp_size_t l, h, k, i; - limb_t *tabxh, *tabt, c, *tabu; - - if (n <= 2) { - /* return ceil(B^(2*n)/a) - 1 */ - /* XXX: could avoid allocation */ - tabu = bf_malloc(s, sizeof(limb_t) * (2 * n + 1)); - tabt = bf_malloc(s, sizeof(limb_t) * (n + 2)); - if (!tabt || !tabu) - goto fail; - for(i = 0; i < 2 * n; i++) - tabu[i] = 0; - tabu[2 * n] = 1; - if (mp_divnorm(s, tabt, tabu, 2 * n + 1, taba, n)) - goto fail; - for(i = 0; i < n + 1; i++) - tabr[i] = tabt[i]; - if (mp_scan_nz(tabu, n) == 0) { - /* only happens for a=B^n/2 */ - mp_sub_ui(tabr, 1, n + 1); - } - } else { - l = (n - 1) / 2; - h = n - l; - /* n=2p -> l=p-1, h = p + 1, k = p + 3 - n=2p+1-> l=p, h = p + 1; k = p + 2 - */ - tabt = bf_malloc(s, sizeof(limb_t) * (n + h + 1)); - tabu = bf_malloc(s, sizeof(limb_t) * (n + 2 * h - l + 2)); - if (!tabt || !tabu) - goto fail; - tabxh = tabr + l; - if (mp_recip(s, tabxh, taba + l, h)) - goto fail; - if (mp_mul(s, tabt, taba, n, tabxh, h + 1)) /* n + h + 1 limbs */ - goto fail; - while (tabt[n + h] != 0) { - mp_sub_ui(tabxh, 1, h + 1); - c = mp_sub(tabt, tabt, taba, n, 0); - mp_sub_ui(tabt + n, c, h + 1); - } - /* T = B^(n+h) - T */ - mp_neg(tabt, tabt, n + h + 1, 0); - tabt[n + h]++; - if (mp_mul(s, tabu, tabt + l, n + h + 1 - l, tabxh, h + 1)) - goto fail; - /* n + 2*h - l + 2 limbs */ - k = 2 * h - l; - for(i = 0; i < l; i++) - tabr[i] = tabu[i + k]; - mp_add(tabr + l, tabr + l, tabu + 2 * h, h, 0); - } - bf_free(s, tabt); - bf_free(s, tabu); - return 0; - fail: - bf_free(s, tabt); - bf_free(s, tabu); - return -1; -} - -/* return -1, 0 or 1 */ -static int mp_cmp(const limb_t *taba, const limb_t *tabb, mp_size_t n) -{ - mp_size_t i; - for(i = n - 1; i >= 0; i--) { - if (taba[i] != tabb[i]) { - if (taba[i] < tabb[i]) - return -1; - else - return 1; - } - } - return 0; -} - -//#define DEBUG_DIVNORM_LARGE -//#define DEBUG_DIVNORM_LARGE2 - -/* subquadratic divnorm */ -static int mp_divnorm_large(bf_context_t *s, - limb_t *tabq, limb_t *taba, limb_t na, - const limb_t *tabb, limb_t nb) -{ - limb_t *tabb_inv, nq, *tabt, i, n; - nq = na - nb; -#ifdef DEBUG_DIVNORM_LARGE - printf("na=%d nb=%d nq=%d\n", (int)na, (int)nb, (int)nq); - mp_print_str("a", taba, na); - mp_print_str("b", tabb, nb); -#endif - assert(nq >= 1); - n = nq; - if (nq < nb) - n++; - tabb_inv = bf_malloc(s, sizeof(limb_t) * (n + 1)); - tabt = bf_malloc(s, sizeof(limb_t) * 2 * (n + 1)); - if (!tabb_inv || !tabt) - goto fail; - - if (n >= nb) { - for(i = 0; i < n - nb; i++) - tabt[i] = 0; - for(i = 0; i < nb; i++) - tabt[i + n - nb] = tabb[i]; - } else { - /* truncate B: need to increment it so that the approximate - inverse is smaller that the exact inverse */ - for(i = 0; i < n; i++) - tabt[i] = tabb[i + nb - n]; - if (mp_add_ui(tabt, 1, n)) { - /* tabt = B^n : tabb_inv = B^n */ - memset(tabb_inv, 0, n * sizeof(limb_t)); - tabb_inv[n] = 1; - goto recip_done; - } - } - if (mp_recip(s, tabb_inv, tabt, n)) - goto fail; - recip_done: - /* Q=A*B^-1 */ - if (mp_mul(s, tabt, tabb_inv, n + 1, taba + na - (n + 1), n + 1)) - goto fail; - - for(i = 0; i < nq + 1; i++) - tabq[i] = tabt[i + 2 * (n + 1) - (nq + 1)]; -#ifdef DEBUG_DIVNORM_LARGE - mp_print_str("q", tabq, nq + 1); -#endif - - bf_free(s, tabt); - bf_free(s, tabb_inv); - tabb_inv = NULL; - - /* R=A-B*Q */ - tabt = bf_malloc(s, sizeof(limb_t) * (na + 1)); - if (!tabt) - goto fail; - if (mp_mul(s, tabt, tabq, nq + 1, tabb, nb)) - goto fail; - /* we add one more limb for the result */ - mp_sub(taba, taba, tabt, nb + 1, 0); - bf_free(s, tabt); - /* the approximated quotient is smaller than than the exact one, - hence we may have to increment it */ -#ifdef DEBUG_DIVNORM_LARGE2 - int cnt = 0; - static int cnt_max; -#endif - for(;;) { - if (taba[nb] == 0 && mp_cmp(taba, tabb, nb) < 0) - break; - taba[nb] -= mp_sub(taba, taba, tabb, nb, 0); - mp_add_ui(tabq, 1, nq + 1); -#ifdef DEBUG_DIVNORM_LARGE2 - cnt++; -#endif - } -#ifdef DEBUG_DIVNORM_LARGE2 - if (cnt > cnt_max) { - cnt_max = cnt; - printf("\ncnt=%d nq=%d nb=%d\n", cnt_max, (int)nq, (int)nb); - } -#endif - return 0; - fail: - bf_free(s, tabb_inv); - bf_free(s, tabt); - return -1; -} - -int bf_mul(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags) -{ - int ret, r_sign; - - if (a->len < b->len) { - const bf_t *tmp = a; - a = b; - b = tmp; - } - r_sign = a->sign ^ b->sign; - /* here b->len <= a->len */ - if (b->len == 0) { - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - bf_set_nan(r); - ret = 0; - } else if (a->expn == BF_EXP_INF || b->expn == BF_EXP_INF) { - if ((a->expn == BF_EXP_INF && b->expn == BF_EXP_ZERO) || - (a->expn == BF_EXP_ZERO && b->expn == BF_EXP_INF)) { - bf_set_nan(r); - ret = BF_ST_INVALID_OP; - } else { - bf_set_inf(r, r_sign); - ret = 0; - } - } else { - bf_set_zero(r, r_sign); - ret = 0; - } - } else { - bf_t tmp, *r1 = NULL; - limb_t a_len, b_len, precl; - limb_t *a_tab, *b_tab; - - a_len = a->len; - b_len = b->len; - - if ((flags & BF_RND_MASK) == BF_RNDF) { - /* faithful rounding does not require using the full inputs */ - precl = (prec + 2 + LIMB_BITS - 1) / LIMB_BITS; - a_len = bf_min(a_len, precl); - b_len = bf_min(b_len, precl); - } - a_tab = a->tab + a->len - a_len; - b_tab = b->tab + b->len - b_len; - -#ifdef USE_FFT_MUL - if (b_len >= FFT_MUL_THRESHOLD) { - int mul_flags = 0; - if (r == a) - mul_flags |= FFT_MUL_R_OVERLAP_A; - if (r == b) - mul_flags |= FFT_MUL_R_OVERLAP_B; - if (fft_mul(r->ctx, r, a_tab, a_len, b_tab, b_len, mul_flags)) - goto fail; - } else -#endif - { - if (r == a || r == b) { - bf_init(r->ctx, &tmp); - r1 = r; - r = &tmp; - } - if (bf_resize(r, a_len + b_len)) { - fail: - bf_set_nan(r); - ret = BF_ST_MEM_ERROR; - goto done; - } - mp_mul_basecase(r->tab, a_tab, a_len, b_tab, b_len); - } - r->sign = r_sign; - r->expn = a->expn + b->expn; - ret = bf_normalize_and_round(r, prec, flags); - done: - if (r == &tmp) - bf_move(r1, &tmp); - } - return ret; -} - -/* multiply 'r' by 2^e */ -int bf_mul_2exp(bf_t *r, slimb_t e, limb_t prec, bf_flags_t flags) -{ - slimb_t e_max; - if (r->len == 0) - return 0; - e_max = ((limb_t)1 << BF_EXT_EXP_BITS_MAX) - 1; - e = bf_max(e, -e_max); - e = bf_min(e, e_max); - r->expn += e; - return __bf_round(r, prec, flags, r->len, 0); -} - -/* Return e such as a=m*2^e with m odd integer. return 0 if a is zero, - Infinite or Nan. */ -slimb_t bf_get_exp_min(const bf_t *a) -{ - slimb_t i; - limb_t v; - int k; - - for(i = 0; i < a->len; i++) { - v = a->tab[i]; - if (v != 0) { - k = ctz(v); - return a->expn - (a->len - i) * LIMB_BITS + k; - } - } - return 0; -} - -/* a and b must be finite numbers with a >= 0 and b > 0. 'q' is the - integer defined as floor(a/b) and r = a - q * b. */ -static void bf_tdivremu(bf_t *q, bf_t *r, - const bf_t *a, const bf_t *b) -{ - if (bf_cmpu(a, b) < 0) { - bf_set_ui(q, 0); - bf_set(r, a); - } else { - bf_div(q, a, b, bf_max(a->expn - b->expn + 1, 2), BF_RNDZ); - bf_rint(q, BF_RNDZ); - bf_mul(r, q, b, BF_PREC_INF, BF_RNDZ); - bf_sub(r, a, r, BF_PREC_INF, BF_RNDZ); - } -} - -static int __bf_div(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags) -{ - bf_context_t *s = r->ctx; - int ret, r_sign; - limb_t n, nb, precl; - - r_sign = a->sign ^ b->sign; - if (a->expn >= BF_EXP_INF || b->expn >= BF_EXP_INF) { - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF && b->expn == BF_EXP_INF) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else if (a->expn == BF_EXP_INF) { - bf_set_inf(r, r_sign); - return 0; - } else { - bf_set_zero(r, r_sign); - return 0; - } - } else if (a->expn == BF_EXP_ZERO) { - if (b->expn == BF_EXP_ZERO) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_set_zero(r, r_sign); - return 0; - } - } else if (b->expn == BF_EXP_ZERO) { - bf_set_inf(r, r_sign); - return BF_ST_DIVIDE_ZERO; - } - - /* number of limbs of the quotient (2 extra bits for rounding) */ - precl = (prec + 2 + LIMB_BITS - 1) / LIMB_BITS; - nb = b->len; - n = bf_max(a->len, precl); - - { - limb_t *taba, na; - slimb_t d; - - na = n + nb; - taba = bf_malloc(s, (na + 1) * sizeof(limb_t)); - if (!taba) - goto fail; - d = na - a->len; - memset(taba, 0, d * sizeof(limb_t)); - memcpy(taba + d, a->tab, a->len * sizeof(limb_t)); - if (bf_resize(r, n + 1)) - goto fail1; - if (mp_divnorm(s, r->tab, taba, na, b->tab, nb)) { - fail1: - bf_free(s, taba); - goto fail; - } - /* see if non zero remainder */ - if (mp_scan_nz(taba, nb)) - r->tab[0] |= 1; - bf_free(r->ctx, taba); - r->expn = a->expn - b->expn + LIMB_BITS; - r->sign = r_sign; - ret = bf_normalize_and_round(r, prec, flags); - } - return ret; - fail: - bf_set_nan(r); - return BF_ST_MEM_ERROR; -} - -/* division and remainder. - - rnd_mode is the rounding mode for the quotient. The additional - rounding mode BF_RND_EUCLIDIAN is supported. - - 'q' is an integer. 'r' is rounded with prec and flags (prec can be - BF_PREC_INF). -*/ -int bf_divrem(bf_t *q, bf_t *r, const bf_t *a, const bf_t *b, - limb_t prec, bf_flags_t flags, int rnd_mode) -{ - bf_t a1_s, *a1 = &a1_s; - bf_t b1_s, *b1 = &b1_s; - int q_sign, ret; - BOOL is_ceil, is_rndn; - - assert(q != a && q != b); - assert(r != a && r != b); - assert(q != r); - - if (a->len == 0 || b->len == 0) { - bf_set_zero(q, 0); - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF || b->expn == BF_EXP_ZERO) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_set(r, a); - return bf_round(r, prec, flags); - } - } - - q_sign = a->sign ^ b->sign; - is_rndn = (rnd_mode == BF_RNDN || rnd_mode == BF_RNDNA); - switch(rnd_mode) { - default: - case BF_RNDZ: - case BF_RNDN: - case BF_RNDNA: - is_ceil = FALSE; - break; - case BF_RNDD: - is_ceil = q_sign; - break; - case BF_RNDU: - is_ceil = q_sign ^ 1; - break; - case BF_RNDA: - is_ceil = TRUE; - break; - case BF_DIVREM_EUCLIDIAN: - is_ceil = a->sign; - break; - } - - a1->expn = a->expn; - a1->tab = a->tab; - a1->len = a->len; - a1->sign = 0; - - b1->expn = b->expn; - b1->tab = b->tab; - b1->len = b->len; - b1->sign = 0; - - /* XXX: could improve to avoid having a large 'q' */ - bf_tdivremu(q, r, a1, b1); - if (bf_is_nan(q) || bf_is_nan(r)) - goto fail; - - if (r->len != 0) { - if (is_rndn) { - int res; - b1->expn--; - res = bf_cmpu(r, b1); - b1->expn++; - if (res > 0 || - (res == 0 && - (rnd_mode == BF_RNDNA || - get_bit(q->tab, q->len, q->len * LIMB_BITS - q->expn)))) { - goto do_sub_r; - } - } else if (is_ceil) { - do_sub_r: - ret = bf_add_si(q, q, 1, BF_PREC_INF, BF_RNDZ); - ret |= bf_sub(r, r, b1, BF_PREC_INF, BF_RNDZ); - if (ret & BF_ST_MEM_ERROR) - goto fail; - } - } - - r->sign ^= a->sign; - q->sign = q_sign; - return bf_round(r, prec, flags); - fail: - bf_set_nan(q); - bf_set_nan(r); - return BF_ST_MEM_ERROR; -} - -int bf_rem(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags, int rnd_mode) -{ - bf_t q_s, *q = &q_s; - int ret; - - bf_init(r->ctx, q); - ret = bf_divrem(q, r, a, b, prec, flags, rnd_mode); - bf_delete(q); - return ret; -} - -static inline int bf_get_limb(slimb_t *pres, const bf_t *a, int flags) -{ -#if LIMB_BITS == 32 - return bf_get_int32(pres, a, flags); -#else - return bf_get_int64(pres, a, flags); -#endif -} - -int bf_remquo(slimb_t *pq, bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags, int rnd_mode) -{ - bf_t q_s, *q = &q_s; - int ret; - - bf_init(r->ctx, q); - ret = bf_divrem(q, r, a, b, prec, flags, rnd_mode); - bf_get_limb(pq, q, BF_GET_INT_MOD); - bf_delete(q); - return ret; -} - -static __maybe_unused inline limb_t mul_mod(limb_t a, limb_t b, limb_t m) -{ - dlimb_t t; - t = (dlimb_t)a * (dlimb_t)b; - return t % m; -} - -#if defined(USE_MUL_CHECK) -static limb_t mp_mod1(const limb_t *tab, limb_t n, limb_t m, limb_t r) -{ - slimb_t i; - dlimb_t t; - - for(i = n - 1; i >= 0; i--) { - t = ((dlimb_t)r << LIMB_BITS) | tab[i]; - r = t % m; - } - return r; -} -#endif - -static const uint16_t sqrt_table[192] = { -128,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,144,145,146,147,148,149,150,150,151,152,153,154,155,155,156,157,158,159,160,160,161,162,163,163,164,165,166,167,167,168,169,170,170,171,172,173,173,174,175,176,176,177,178,178,179,180,181,181,182,183,183,184,185,185,186,187,187,188,189,189,190,191,192,192,193,193,194,195,195,196,197,197,198,199,199,200,201,201,202,203,203,204,204,205,206,206,207,208,208,209,209,210,211,211,212,212,213,214,214,215,215,216,217,217,218,218,219,219,220,221,221,222,222,223,224,224,225,225,226,226,227,227,228,229,229,230,230,231,231,232,232,233,234,234,235,235,236,236,237,237,238,238,239,240,240,241,241,242,242,243,243,244,244,245,245,246,246,247,247,248,248,249,249,250,250,251,251,252,252,253,253,254,254,255, -}; - -/* a >= 2^(LIMB_BITS - 2). Return (s, r) with s=floor(sqrt(a)) and - r=a-s^2. 0 <= r <= 2 * s */ -static limb_t mp_sqrtrem1(limb_t *pr, limb_t a) -{ - limb_t s1, r1, s, r, q, u, num; - - /* use a table for the 16 -> 8 bit sqrt */ - s1 = sqrt_table[(a >> (LIMB_BITS - 8)) - 64]; - r1 = (a >> (LIMB_BITS - 16)) - s1 * s1; - if (r1 > 2 * s1) { - r1 -= 2 * s1 + 1; - s1++; - } - - /* one iteration to get a 32 -> 16 bit sqrt */ - num = (r1 << 8) | ((a >> (LIMB_BITS - 32 + 8)) & 0xff); - q = num / (2 * s1); /* q <= 2^8 */ - u = num % (2 * s1); - s = (s1 << 8) + q; - r = (u << 8) | ((a >> (LIMB_BITS - 32)) & 0xff); - r -= q * q; - if ((slimb_t)r < 0) { - s--; - r += 2 * s + 1; - } - -#if LIMB_BITS == 64 - s1 = s; - r1 = r; - /* one more iteration for 64 -> 32 bit sqrt */ - num = (r1 << 16) | ((a >> (LIMB_BITS - 64 + 16)) & 0xffff); - q = num / (2 * s1); /* q <= 2^16 */ - u = num % (2 * s1); - s = (s1 << 16) + q; - r = (u << 16) | ((a >> (LIMB_BITS - 64)) & 0xffff); - r -= q * q; - if ((slimb_t)r < 0) { - s--; - r += 2 * s + 1; - } -#endif - *pr = r; - return s; -} - -/* return floor(sqrt(a)) */ -limb_t bf_isqrt(limb_t a) -{ - limb_t s, r; - int k; - - if (a == 0) - return 0; - k = clz(a) & ~1; - s = mp_sqrtrem1(&r, a << k); - s >>= (k >> 1); - return s; -} - -static limb_t mp_sqrtrem2(limb_t *tabs, limb_t *taba) -{ - limb_t s1, r1, s, q, u, a0, a1; - dlimb_t r, num; - int l; - - a0 = taba[0]; - a1 = taba[1]; - s1 = mp_sqrtrem1(&r1, a1); - l = LIMB_BITS / 2; - num = ((dlimb_t)r1 << l) | (a0 >> l); - q = num / (2 * s1); - u = num % (2 * s1); - s = (s1 << l) + q; - r = ((dlimb_t)u << l) | (a0 & (((limb_t)1 << l) - 1)); - if (unlikely((q >> l) != 0)) - r -= (dlimb_t)1 << LIMB_BITS; /* special case when q=2^l */ - else - r -= q * q; - if ((slimb_t)(r >> LIMB_BITS) < 0) { - s--; - r += 2 * (dlimb_t)s + 1; - } - tabs[0] = s; - taba[0] = r; - return r >> LIMB_BITS; -} - -//#define DEBUG_SQRTREM - -/* tmp_buf must contain (n / 2 + 1 limbs). *prh contains the highest - limb of the remainder. */ -static int mp_sqrtrem_rec(bf_context_t *s, limb_t *tabs, limb_t *taba, limb_t n, - limb_t *tmp_buf, limb_t *prh) -{ - limb_t l, h, rh, ql, qh, c, i; - - if (n == 1) { - *prh = mp_sqrtrem2(tabs, taba); - return 0; - } -#ifdef DEBUG_SQRTREM - mp_print_str("a", taba, 2 * n); -#endif - l = n / 2; - h = n - l; - if (mp_sqrtrem_rec(s, tabs + l, taba + 2 * l, h, tmp_buf, &qh)) - return -1; -#ifdef DEBUG_SQRTREM - mp_print_str("s1", tabs + l, h); - mp_print_str_h("r1", taba + 2 * l, h, qh); - mp_print_str_h("r2", taba + l, n, qh); -#endif - - /* the remainder is in taba + 2 * l. Its high bit is in qh */ - if (qh) { - mp_sub(taba + 2 * l, taba + 2 * l, tabs + l, h, 0); - } - /* instead of dividing by 2*s, divide by s (which is normalized) - and update q and r */ - if (mp_divnorm(s, tmp_buf, taba + l, n, tabs + l, h)) - return -1; - qh += tmp_buf[l]; - for(i = 0; i < l; i++) - tabs[i] = tmp_buf[i]; - ql = mp_shr(tabs, tabs, l, 1, qh & 1); - qh = qh >> 1; /* 0 or 1 */ - if (ql) - rh = mp_add(taba + l, taba + l, tabs + l, h, 0); - else - rh = 0; -#ifdef DEBUG_SQRTREM - mp_print_str_h("q", tabs, l, qh); - mp_print_str_h("u", taba + l, h, rh); -#endif - - mp_add_ui(tabs + l, qh, h); -#ifdef DEBUG_SQRTREM - mp_print_str_h("s2", tabs, n, sh); -#endif - - /* q = qh, tabs[l - 1 ... 0], r = taba[n - 1 ... l] */ - /* subtract q^2. if qh = 1 then q = B^l, so we can take shortcuts */ - if (qh) { - c = qh; - } else { - if (mp_mul(s, taba + n, tabs, l, tabs, l)) - return -1; - c = mp_sub(taba, taba, taba + n, 2 * l, 0); - } - rh -= mp_sub_ui(taba + 2 * l, c, n - 2 * l); - if ((slimb_t)rh < 0) { - mp_sub_ui(tabs, 1, n); - rh += mp_add_mul1(taba, tabs, n, 2); - rh += mp_add_ui(taba, 1, n); - } - *prh = rh; - return 0; -} - -/* 'taba' has 2*n limbs with n >= 1 and taba[2*n-1] >= 2 ^ (LIMB_BITS - - 2). Return (s, r) with s=floor(sqrt(a)) and r=a-s^2. 0 <= r <= 2 - * s. tabs has n limbs. r is returned in the lower n limbs of - taba. Its r[n] is the returned value of the function. */ -/* Algorithm from the article "Karatsuba Square Root" by Paul Zimmermann and - inspirated from its GMP implementation */ -int mp_sqrtrem(bf_context_t *s, limb_t *tabs, limb_t *taba, limb_t n) -{ - limb_t tmp_buf1[8]; - limb_t *tmp_buf; - mp_size_t n2; - int ret; - n2 = n / 2 + 1; - if (n2 <= countof(tmp_buf1)) { - tmp_buf = tmp_buf1; - } else { - tmp_buf = bf_malloc(s, sizeof(limb_t) * n2); - if (!tmp_buf) - return -1; - } - ret = mp_sqrtrem_rec(s, tabs, taba, n, tmp_buf, taba + n); - if (tmp_buf != tmp_buf1) - bf_free(s, tmp_buf); - return ret; -} - -/* Integer square root with remainder. 'a' must be an integer. r = - floor(sqrt(a)) and rem = a - r^2. BF_ST_INEXACT is set if the result - is inexact. 'rem' can be NULL if the remainder is not needed. */ -int bf_sqrtrem(bf_t *r, bf_t *rem1, const bf_t *a) -{ - int ret; - - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - } else if (a->expn == BF_EXP_INF && a->sign) { - goto invalid_op; - } else { - bf_set(r, a); - } - if (rem1) - bf_set_ui(rem1, 0); - ret = 0; - } else if (a->sign) { - invalid_op: - bf_set_nan(r); - if (rem1) - bf_set_ui(rem1, 0); - ret = BF_ST_INVALID_OP; - } else { - bf_t rem_s, *rem; - - bf_sqrt(r, a, (a->expn + 1) / 2, BF_RNDZ); - bf_rint(r, BF_RNDZ); - /* see if the result is exact by computing the remainder */ - if (rem1) { - rem = rem1; - } else { - rem = &rem_s; - bf_init(r->ctx, rem); - } - /* XXX: could avoid recomputing the remainder */ - bf_mul(rem, r, r, BF_PREC_INF, BF_RNDZ); - bf_neg(rem); - bf_add(rem, rem, a, BF_PREC_INF, BF_RNDZ); - if (bf_is_nan(rem)) { - ret = BF_ST_MEM_ERROR; - goto done; - } - if (rem->len != 0) { - ret = BF_ST_INEXACT; - } else { - ret = 0; - } - done: - if (!rem1) - bf_delete(rem); - } - return ret; -} - -int bf_sqrt(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = a->ctx; - int ret; - - assert(r != a); - - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - } else if (a->expn == BF_EXP_INF && a->sign) { - goto invalid_op; - } else { - bf_set(r, a); - } - ret = 0; - } else if (a->sign) { - invalid_op: - bf_set_nan(r); - ret = BF_ST_INVALID_OP; - } else { - limb_t *a1; - slimb_t n, n1; - limb_t res; - - /* convert the mantissa to an integer with at least 2 * - prec + 4 bits */ - n = (2 * (prec + 2) + 2 * LIMB_BITS - 1) / (2 * LIMB_BITS); - if (bf_resize(r, n)) - goto fail; - a1 = bf_malloc(s, sizeof(limb_t) * 2 * n); - if (!a1) - goto fail; - n1 = bf_min(2 * n, a->len); - memset(a1, 0, (2 * n - n1) * sizeof(limb_t)); - memcpy(a1 + 2 * n - n1, a->tab + a->len - n1, n1 * sizeof(limb_t)); - if (a->expn & 1) { - res = mp_shr(a1, a1, 2 * n, 1, 0); - } else { - res = 0; - } - if (mp_sqrtrem(s, r->tab, a1, n)) { - bf_free(s, a1); - goto fail; - } - if (!res) { - res = mp_scan_nz(a1, n + 1); - } - bf_free(s, a1); - if (!res) { - res = mp_scan_nz(a->tab, a->len - n1); - } - if (res != 0) - r->tab[0] |= 1; - r->sign = 0; - r->expn = (a->expn + 1) >> 1; - ret = bf_round(r, prec, flags); - } - return ret; - fail: - bf_set_nan(r); - return BF_ST_MEM_ERROR; -} - -static no_inline int bf_op2(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags, bf_op2_func_t *func) -{ - bf_t tmp; - int ret; - - if (r == a || r == b) { - bf_init(r->ctx, &tmp); - ret = func(&tmp, a, b, prec, flags); - bf_move(r, &tmp); - } else { - ret = func(r, a, b, prec, flags); - } - return ret; -} - -int bf_add(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_op2(r, a, b, prec, flags, __bf_add); -} - -int bf_sub(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_op2(r, a, b, prec, flags, __bf_sub); -} - -int bf_div(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_op2(r, a, b, prec, flags, __bf_div); -} - -int bf_mul_ui(bf_t *r, const bf_t *a, uint64_t b1, limb_t prec, - bf_flags_t flags) -{ - bf_t b; - int ret; - bf_init(r->ctx, &b); - ret = bf_set_ui(&b, b1); - ret |= bf_mul(r, a, &b, prec, flags); - bf_delete(&b); - return ret; -} - -int bf_mul_si(bf_t *r, const bf_t *a, int64_t b1, limb_t prec, - bf_flags_t flags) -{ - bf_t b; - int ret; - bf_init(r->ctx, &b); - ret = bf_set_si(&b, b1); - ret |= bf_mul(r, a, &b, prec, flags); - bf_delete(&b); - return ret; -} - -int bf_add_si(bf_t *r, const bf_t *a, int64_t b1, limb_t prec, - bf_flags_t flags) -{ - bf_t b; - int ret; - - bf_init(r->ctx, &b); - ret = bf_set_si(&b, b1); - ret |= bf_add(r, a, &b, prec, flags); - bf_delete(&b); - return ret; -} - -static int bf_pow_ui(bf_t *r, const bf_t *a, limb_t b, limb_t prec, - bf_flags_t flags) -{ - int ret, n_bits, i; - - assert(r != a); - if (b == 0) - return bf_set_ui(r, 1); - ret = bf_set(r, a); - n_bits = LIMB_BITS - clz(b); - for(i = n_bits - 2; i >= 0; i--) { - ret |= bf_mul(r, r, r, prec, flags); - if ((b >> i) & 1) - ret |= bf_mul(r, r, a, prec, flags); - } - return ret; -} - -static int bf_pow_ui_ui(bf_t *r, limb_t a1, limb_t b, - limb_t prec, bf_flags_t flags) -{ - bf_t a; - int ret; - - if (a1 == 10 && b <= LIMB_DIGITS) { - /* use precomputed powers. We do not round at this point - because we expect the caller to do it */ - ret = bf_set_ui(r, mp_pow_dec[b]); - } else { - bf_init(r->ctx, &a); - ret = bf_set_ui(&a, a1); - ret |= bf_pow_ui(r, &a, b, prec, flags); - bf_delete(&a); - } - return ret; -} - -/* convert to integer (infinite precision) */ -int bf_rint(bf_t *r, int rnd_mode) -{ - return bf_round(r, 0, rnd_mode | BF_FLAG_RADPNT_PREC); -} - -/* logical operations */ -#define BF_LOGIC_OR 0 -#define BF_LOGIC_XOR 1 -#define BF_LOGIC_AND 2 - -static inline limb_t bf_logic_op1(limb_t a, limb_t b, int op) -{ - switch(op) { - case BF_LOGIC_OR: - return a | b; - case BF_LOGIC_XOR: - return a ^ b; - default: - case BF_LOGIC_AND: - return a & b; - } -} - -static int bf_logic_op(bf_t *r, const bf_t *a1, const bf_t *b1, int op) -{ - bf_t b1_s, a1_s, *a, *b; - limb_t a_sign, b_sign, r_sign; - slimb_t l, i, a_bit_offset, b_bit_offset; - limb_t v1, v2, v1_mask, v2_mask, r_mask; - int ret; - - assert(r != a1 && r != b1); - - if (a1->expn <= 0) - a_sign = 0; /* minus zero is considered as positive */ - else - a_sign = a1->sign; - - if (b1->expn <= 0) - b_sign = 0; /* minus zero is considered as positive */ - else - b_sign = b1->sign; - - if (a_sign) { - a = &a1_s; - bf_init(r->ctx, a); - if (bf_add_si(a, a1, 1, BF_PREC_INF, BF_RNDZ)) { - b = NULL; - goto fail; - } - } else { - a = (bf_t *)a1; - } - - if (b_sign) { - b = &b1_s; - bf_init(r->ctx, b); - if (bf_add_si(b, b1, 1, BF_PREC_INF, BF_RNDZ)) - goto fail; - } else { - b = (bf_t *)b1; - } - - r_sign = bf_logic_op1(a_sign, b_sign, op); - if (op == BF_LOGIC_AND && r_sign == 0) { - /* no need to compute extra zeros for and */ - if (a_sign == 0 && b_sign == 0) - l = bf_min(a->expn, b->expn); - else if (a_sign == 0) - l = a->expn; - else - l = b->expn; - } else { - l = bf_max(a->expn, b->expn); - } - /* Note: a or b can be zero */ - l = (bf_max(l, 1) + LIMB_BITS - 1) / LIMB_BITS; - if (bf_resize(r, l)) - goto fail; - a_bit_offset = a->len * LIMB_BITS - a->expn; - b_bit_offset = b->len * LIMB_BITS - b->expn; - v1_mask = -a_sign; - v2_mask = -b_sign; - r_mask = -r_sign; - for(i = 0; i < l; i++) { - v1 = get_bits(a->tab, a->len, a_bit_offset + i * LIMB_BITS) ^ v1_mask; - v2 = get_bits(b->tab, b->len, b_bit_offset + i * LIMB_BITS) ^ v2_mask; - r->tab[i] = bf_logic_op1(v1, v2, op) ^ r_mask; - } - r->expn = l * LIMB_BITS; - r->sign = r_sign; - bf_normalize_and_round(r, BF_PREC_INF, BF_RNDZ); /* cannot fail */ - if (r_sign) { - if (bf_add_si(r, r, -1, BF_PREC_INF, BF_RNDZ)) - goto fail; - } - ret = 0; - done: - if (a == &a1_s) - bf_delete(a); - if (b == &b1_s) - bf_delete(b); - return ret; - fail: - bf_set_nan(r); - ret = BF_ST_MEM_ERROR; - goto done; -} - -/* 'a' and 'b' must be integers. Return 0 or BF_ST_MEM_ERROR. */ -int bf_logic_or(bf_t *r, const bf_t *a, const bf_t *b) -{ - return bf_logic_op(r, a, b, BF_LOGIC_OR); -} - -/* 'a' and 'b' must be integers. Return 0 or BF_ST_MEM_ERROR. */ -int bf_logic_xor(bf_t *r, const bf_t *a, const bf_t *b) -{ - return bf_logic_op(r, a, b, BF_LOGIC_XOR); -} - -/* 'a' and 'b' must be integers. Return 0 or BF_ST_MEM_ERROR. */ -int bf_logic_and(bf_t *r, const bf_t *a, const bf_t *b) -{ - return bf_logic_op(r, a, b, BF_LOGIC_AND); -} - -/* conversion between fixed size types */ - -typedef union { - double d; - uint64_t u; -} Float64Union; - -int bf_get_float64(const bf_t *a, double *pres, bf_rnd_t rnd_mode) -{ - Float64Union u; - int e, ret; - uint64_t m; - - ret = 0; - if (a->expn == BF_EXP_NAN) { - u.u = 0x7ff8000000000000; /* quiet nan */ - } else { - bf_t b_s, *b = &b_s; - - bf_init(a->ctx, b); - bf_set(b, a); - if (bf_is_finite(b)) { - ret = bf_round(b, 53, rnd_mode | BF_FLAG_SUBNORMAL | bf_set_exp_bits(11)); - } - if (b->expn == BF_EXP_INF) { - e = (1 << 11) - 1; - m = 0; - } else if (b->expn == BF_EXP_ZERO) { - e = 0; - m = 0; - } else { - e = b->expn + 1023 - 1; -#if LIMB_BITS == 32 - if (b->len == 2) { - m = ((uint64_t)b->tab[1] << 32) | b->tab[0]; - } else { - m = ((uint64_t)b->tab[0] << 32); - } -#else - m = b->tab[0]; -#endif - if (e <= 0) { - /* subnormal */ - m = m >> (12 - e); - e = 0; - } else { - m = (m << 1) >> 12; - } - } - u.u = m | ((uint64_t)e << 52) | ((uint64_t)b->sign << 63); - bf_delete(b); - } - *pres = u.d; - return ret; -} - -int bf_set_float64(bf_t *a, double d) -{ - Float64Union u; - uint64_t m; - int shift, e, sgn; - - u.d = d; - sgn = u.u >> 63; - e = (u.u >> 52) & ((1 << 11) - 1); - m = u.u & (((uint64_t)1 << 52) - 1); - if (e == ((1 << 11) - 1)) { - if (m != 0) { - bf_set_nan(a); - } else { - bf_set_inf(a, sgn); - } - } else if (e == 0) { - if (m == 0) { - bf_set_zero(a, sgn); - } else { - /* subnormal number */ - m <<= 12; - shift = clz64(m); - m <<= shift; - e = -shift; - goto norm; - } - } else { - m = (m << 11) | ((uint64_t)1 << 63); - norm: - a->expn = e - 1023 + 1; -#if LIMB_BITS == 32 - if (bf_resize(a, 2)) - goto fail; - a->tab[0] = m; - a->tab[1] = m >> 32; -#else - if (bf_resize(a, 1)) - goto fail; - a->tab[0] = m; -#endif - a->sign = sgn; - } - return 0; -fail: - bf_set_nan(a); - return BF_ST_MEM_ERROR; -} - -/* The rounding mode is always BF_RNDZ. Return BF_ST_INVALID_OP if there - is an overflow and 0 otherwise. */ -int bf_get_int32(int *pres, const bf_t *a, int flags) -{ - uint32_t v; - int ret; - if (a->expn >= BF_EXP_INF) { - ret = BF_ST_INVALID_OP; - if (flags & BF_GET_INT_MOD) { - v = 0; - } else if (a->expn == BF_EXP_INF) { - v = (uint32_t)INT32_MAX + a->sign; - } else { - v = INT32_MAX; - } - } else if (a->expn <= 0) { - v = 0; - ret = 0; - } else if (a->expn <= 31) { - v = a->tab[a->len - 1] >> (LIMB_BITS - a->expn); - if (a->sign) - v = -v; - ret = 0; - } else if (!(flags & BF_GET_INT_MOD)) { - ret = BF_ST_INVALID_OP; - if (a->sign) { - v = (uint32_t)INT32_MAX + 1; - if (a->expn == 32 && - (a->tab[a->len - 1] >> (LIMB_BITS - 32)) == v) { - ret = 0; - } - } else { - v = INT32_MAX; - } - } else { - v = get_bits(a->tab, a->len, a->len * LIMB_BITS - a->expn); - if (a->sign) - v = -v; - ret = 0; - } - *pres = v; - return ret; -} - -/* The rounding mode is always BF_RNDZ. Return BF_ST_INVALID_OP if there - is an overflow and 0 otherwise. */ -int bf_get_int64(int64_t *pres, const bf_t *a, int flags) -{ - uint64_t v; - int ret; - if (a->expn >= BF_EXP_INF) { - ret = BF_ST_INVALID_OP; - if (flags & BF_GET_INT_MOD) { - v = 0; - } else if (a->expn == BF_EXP_INF) { - v = (uint64_t)INT64_MAX + a->sign; - } else { - v = INT64_MAX; - } - } else if (a->expn <= 0) { - v = 0; - ret = 0; - } else if (a->expn <= 63) { -#if LIMB_BITS == 32 - if (a->expn <= 32) - v = a->tab[a->len - 1] >> (LIMB_BITS - a->expn); - else - v = (((uint64_t)a->tab[a->len - 1] << 32) | - get_limbz(a, a->len - 2)) >> (64 - a->expn); -#else - v = a->tab[a->len - 1] >> (LIMB_BITS - a->expn); -#endif - if (a->sign) - v = -v; - ret = 0; - } else if (!(flags & BF_GET_INT_MOD)) { - ret = BF_ST_INVALID_OP; - if (a->sign) { - uint64_t v1; - v = (uint64_t)INT64_MAX + 1; - if (a->expn == 64) { - v1 = a->tab[a->len - 1]; -#if LIMB_BITS == 32 - v1 = (v1 << 32) | get_limbz(a, a->len - 2); -#endif - if (v1 == v) - ret = 0; - } - } else { - v = INT64_MAX; - } - } else { - slimb_t bit_pos = a->len * LIMB_BITS - a->expn; - v = get_bits(a->tab, a->len, bit_pos); -#if LIMB_BITS == 32 - v |= (uint64_t)get_bits(a->tab, a->len, bit_pos + 32) << 32; -#endif - if (a->sign) - v = -v; - ret = 0; - } - *pres = v; - return ret; -} - -/* The rounding mode is always BF_RNDZ. Return BF_ST_INVALID_OP if there - is an overflow and 0 otherwise. */ -int bf_get_uint64(uint64_t *pres, const bf_t *a) -{ - uint64_t v; - int ret; - if (a->expn == BF_EXP_NAN) { - goto overflow; - } else if (a->expn <= 0) { - v = 0; - ret = 0; - } else if (a->sign) { - v = 0; - ret = BF_ST_INVALID_OP; - } else if (a->expn <= 64) { -#if LIMB_BITS == 32 - if (a->expn <= 32) - v = a->tab[a->len - 1] >> (LIMB_BITS - a->expn); - else - v = (((uint64_t)a->tab[a->len - 1] << 32) | - get_limbz(a, a->len - 2)) >> (64 - a->expn); -#else - v = a->tab[a->len - 1] >> (LIMB_BITS - a->expn); -#endif - ret = 0; - } else { - overflow: - v = UINT64_MAX; - ret = BF_ST_INVALID_OP; - } - *pres = v; - return ret; -} - -/* base conversion from radix */ - -static const uint8_t digits_per_limb_table[BF_RADIX_MAX - 1] = { -#if LIMB_BITS == 32 -32,20,16,13,12,11,10,10, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -#else -64,40,32,27,24,22,21,20,19,18,17,17,16,16,16,15,15,15,14,14,14,14,13,13,13,13,13,13,13,12,12,12,12,12,12, -#endif -}; - -static limb_t get_limb_radix(int radix) -{ - int i, k; - limb_t radixl; - - k = digits_per_limb_table[radix - 2]; - radixl = radix; - for(i = 1; i < k; i++) - radixl *= radix; - return radixl; -} - -/* return != 0 if error */ -static int bf_integer_from_radix_rec(bf_t *r, const limb_t *tab, - limb_t n, int level, limb_t n0, - limb_t radix, bf_t *pow_tab) -{ - int ret; - if (n == 1) { - ret = bf_set_ui(r, tab[0]); - } else { - bf_t T_s, *T = &T_s, *B; - limb_t n1, n2; - - n2 = (((n0 * 2) >> (level + 1)) + 1) / 2; - n1 = n - n2; - // printf("level=%d n0=%ld n1=%ld n2=%ld\n", level, n0, n1, n2); - B = &pow_tab[level]; - if (B->len == 0) { - ret = bf_pow_ui_ui(B, radix, n2, BF_PREC_INF, BF_RNDZ); - if (ret) - return ret; - } - ret = bf_integer_from_radix_rec(r, tab + n2, n1, level + 1, n0, - radix, pow_tab); - if (ret) - return ret; - ret = bf_mul(r, r, B, BF_PREC_INF, BF_RNDZ); - if (ret) - return ret; - bf_init(r->ctx, T); - ret = bf_integer_from_radix_rec(T, tab, n2, level + 1, n0, - radix, pow_tab); - if (!ret) - ret = bf_add(r, r, T, BF_PREC_INF, BF_RNDZ); - bf_delete(T); - } - return ret; - // bf_print_str(" r=", r); -} - -/* return 0 if OK != 0 if memory error */ -static int bf_integer_from_radix(bf_t *r, const limb_t *tab, - limb_t n, limb_t radix) -{ - bf_context_t *s = r->ctx; - int pow_tab_len, i, ret; - limb_t radixl; - bf_t *pow_tab; - - radixl = get_limb_radix(radix); - pow_tab_len = ceil_log2(n) + 2; /* XXX: check */ - pow_tab = bf_malloc(s, sizeof(pow_tab[0]) * pow_tab_len); - if (!pow_tab) - return -1; - for(i = 0; i < pow_tab_len; i++) - bf_init(r->ctx, &pow_tab[i]); - ret = bf_integer_from_radix_rec(r, tab, n, 0, n, radixl, pow_tab); - for(i = 0; i < pow_tab_len; i++) { - bf_delete(&pow_tab[i]); - } - bf_free(s, pow_tab); - return ret; -} - -/* compute and round T * radix^expn. */ -int bf_mul_pow_radix(bf_t *r, const bf_t *T, limb_t radix, - slimb_t expn, limb_t prec, bf_flags_t flags) -{ - int ret, expn_sign, overflow; - slimb_t e, extra_bits, prec1, ziv_extra_bits; - bf_t B_s, *B = &B_s; - - if (T->len == 0) { - return bf_set(r, T); - } else if (expn == 0) { - ret = bf_set(r, T); - ret |= bf_round(r, prec, flags); - return ret; - } - - e = expn; - expn_sign = 0; - if (e < 0) { - e = -e; - expn_sign = 1; - } - bf_init(r->ctx, B); - if (prec == BF_PREC_INF) { - /* infinite precision: only used if the result is known to be exact */ - ret = bf_pow_ui_ui(B, radix, e, BF_PREC_INF, BF_RNDN); - if (expn_sign) { - ret |= bf_div(r, T, B, T->len * LIMB_BITS, BF_RNDN); - } else { - ret |= bf_mul(r, T, B, BF_PREC_INF, BF_RNDN); - } - } else { - ziv_extra_bits = 16; - for(;;) { - prec1 = prec + ziv_extra_bits; - /* XXX: correct overflow/underflow handling */ - /* XXX: rigorous error analysis needed */ - extra_bits = ceil_log2(e) * 2 + 1; - ret = bf_pow_ui_ui(B, radix, e, prec1 + extra_bits, BF_RNDN | BF_FLAG_EXT_EXP); - overflow = !bf_is_finite(B); - /* XXX: if bf_pow_ui_ui returns an exact result, can stop - after the next operation */ - if (expn_sign) - ret |= bf_div(r, T, B, prec1 + extra_bits, BF_RNDN | BF_FLAG_EXT_EXP); - else - ret |= bf_mul(r, T, B, prec1 + extra_bits, BF_RNDN | BF_FLAG_EXT_EXP); - if (ret & BF_ST_MEM_ERROR) - break; - if ((ret & BF_ST_INEXACT) && - !bf_can_round(r, prec, flags & BF_RND_MASK, prec1) && - !overflow) { - /* and more precision and retry */ - ziv_extra_bits = ziv_extra_bits + (ziv_extra_bits / 2); - } else { - /* XXX: need to use __bf_round() to pass the inexact - flag for the subnormal case */ - ret = bf_round(r, prec, flags) | (ret & BF_ST_INEXACT); - break; - } - } - } - bf_delete(B); - return ret; -} - -static inline int to_digit(int c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - else if (c >= 'A' && c <= 'Z') - return c - 'A' + 10; - else if (c >= 'a' && c <= 'z') - return c - 'a' + 10; - else - return 36; -} - -/* add a limb at 'pos' and decrement pos. new space is created if - needed. Return 0 if OK, -1 if memory error */ -static int bf_add_limb(bf_t *a, slimb_t *ppos, limb_t v) -{ - slimb_t pos; - pos = *ppos; - if (unlikely(pos < 0)) { - limb_t new_size, d, *new_tab; - new_size = bf_max(a->len + 1, a->len * 3 / 2); - new_tab = bf_realloc(a->ctx, a->tab, sizeof(limb_t) * new_size); - if (!new_tab) - return -1; - a->tab = new_tab; - d = new_size - a->len; - memmove(a->tab + d, a->tab, a->len * sizeof(limb_t)); - a->len = new_size; - pos += d; - } - a->tab[pos--] = v; - *ppos = pos; - return 0; -} - -static int bf_tolower(int c) -{ - if (c >= 'A' && c <= 'Z') - c = c - 'A' + 'a'; - return c; -} - -static int strcasestart(const char *str, const char *val, const char **ptr) -{ - const char *p, *q; - p = str; - q = val; - while (*q != '\0') { - if (bf_tolower(*p) != *q) - return 0; - p++; - q++; - } - if (ptr) - *ptr = p; - return 1; -} - -static int bf_atof_internal(bf_t *r, slimb_t *pexponent, - const char *str, const char **pnext, int radix, - limb_t prec, bf_flags_t flags, BOOL is_dec) -{ - const char *p, *p_start; - int is_neg, radix_bits, exp_is_neg, ret, digits_per_limb, shift; - limb_t cur_limb; - slimb_t pos, expn, int_len, digit_count; - BOOL has_decpt, is_bin_exp; - bf_t a_s, *a; - - *pexponent = 0; - p = str; - if (!(flags & BF_ATOF_NO_NAN_INF) && radix <= 16 && - strcasestart(p, "nan", &p)) { - bf_set_nan(r); - ret = 0; - goto done; - } - is_neg = 0; - - if (p[0] == '+') { - p++; - p_start = p; - } else if (p[0] == '-') { - is_neg = 1; - p++; - p_start = p; - } else { - p_start = p; - } - if (p[0] == '0') { - if ((p[1] == 'x' || p[1] == 'X') && - (radix == 0 || radix == 16) && - !(flags & BF_ATOF_NO_HEX)) { - radix = 16; - p += 2; - } else if ((p[1] == 'o' || p[1] == 'O') && - radix == 0 && (flags & BF_ATOF_BIN_OCT)) { - p += 2; - radix = 8; - } else if ((p[1] == 'b' || p[1] == 'B') && - radix == 0 && (flags & BF_ATOF_BIN_OCT)) { - p += 2; - radix = 2; - } else { - goto no_prefix; - } - /* there must be a digit after the prefix */ - if (to_digit((uint8_t)*p) >= radix) { - bf_set_nan(r); - ret = 0; - goto done; - } - no_prefix: ; - } else { - if (!(flags & BF_ATOF_NO_NAN_INF) && radix <= 16 && - strcasestart(p, "inf", &p)) { - bf_set_inf(r, is_neg); - ret = 0; - goto done; - } - } - - if (radix == 0) - radix = 10; - if (is_dec) { - assert(radix == 10); - radix_bits = 0; - a = r; - } else if ((radix & (radix - 1)) != 0) { - radix_bits = 0; /* base is not a power of two */ - a = &a_s; - bf_init(r->ctx, a); - } else { - radix_bits = ceil_log2(radix); - a = r; - } - - /* skip leading zeros */ - /* XXX: could also skip zeros after the decimal point */ - while (*p == '0') - p++; - - if (radix_bits) { - shift = digits_per_limb = LIMB_BITS; - } else { - radix_bits = 0; - shift = digits_per_limb = digits_per_limb_table[radix - 2]; - } - cur_limb = 0; - bf_resize(a, 1); - pos = 0; - has_decpt = FALSE; - int_len = digit_count = 0; - for(;;) { - limb_t c; - if (*p == '.' && (p > p_start || to_digit(p[1]) < radix)) { - if (has_decpt) - break; - has_decpt = TRUE; - int_len = digit_count; - p++; - } - c = to_digit(*p); - if (c >= radix) - break; - digit_count++; - p++; - if (radix_bits) { - shift -= radix_bits; - if (shift <= 0) { - cur_limb |= c >> (-shift); - if (bf_add_limb(a, &pos, cur_limb)) - goto mem_error; - if (shift < 0) - cur_limb = c << (LIMB_BITS + shift); - else - cur_limb = 0; - shift += LIMB_BITS; - } else { - cur_limb |= c << shift; - } - } else { - cur_limb = cur_limb * radix + c; - shift--; - if (shift == 0) { - if (bf_add_limb(a, &pos, cur_limb)) - goto mem_error; - shift = digits_per_limb; - cur_limb = 0; - } - } - } - if (!has_decpt) - int_len = digit_count; - - /* add the last limb and pad with zeros */ - if (shift != digits_per_limb) { - if (radix_bits == 0) { - while (shift != 0) { - cur_limb *= radix; - shift--; - } - } - if (bf_add_limb(a, &pos, cur_limb)) { - mem_error: - ret = BF_ST_MEM_ERROR; - if (!radix_bits) - bf_delete(a); - bf_set_nan(r); - goto done; - } - } - - /* reset the next limbs to zero (we prefer to reallocate in the - renormalization) */ - memset(a->tab, 0, (pos + 1) * sizeof(limb_t)); - - if (p == p_start) { - ret = 0; - if (!radix_bits) - bf_delete(a); - bf_set_nan(r); - goto done; - } - - /* parse the exponent, if any */ - expn = 0; - is_bin_exp = FALSE; - if (((radix == 10 && (*p == 'e' || *p == 'E')) || - (radix != 10 && (*p == '@' || - (radix_bits && (*p == 'p' || *p == 'P'))))) && - p > p_start) { - is_bin_exp = (*p == 'p' || *p == 'P'); - p++; - exp_is_neg = 0; - if (*p == '+') { - p++; - } else if (*p == '-') { - exp_is_neg = 1; - p++; - } - for(;;) { - int c; - c = to_digit(*p); - if (c >= 10) - break; - if (unlikely(expn > ((BF_RAW_EXP_MAX - 2 - 9) / 10))) { - /* exponent overflow */ - if (exp_is_neg) { - bf_set_zero(r, is_neg); - ret = BF_ST_UNDERFLOW | BF_ST_INEXACT; - } else { - bf_set_inf(r, is_neg); - ret = BF_ST_OVERFLOW | BF_ST_INEXACT; - } - goto done; - } - p++; - expn = expn * 10 + c; - } - if (exp_is_neg) - expn = -expn; - } - if (is_dec) { - a->expn = expn + int_len; - a->sign = is_neg; - ret = bfdec_normalize_and_round((bfdec_t *)a, prec, flags); - } else if (radix_bits) { - /* XXX: may overflow */ - if (!is_bin_exp) - expn *= radix_bits; - a->expn = expn + (int_len * radix_bits); - a->sign = is_neg; - ret = bf_normalize_and_round(a, prec, flags); - } else { - limb_t l; - pos++; - l = a->len - pos; /* number of limbs */ - if (l == 0) { - bf_set_zero(r, is_neg); - ret = 0; - } else { - bf_t T_s, *T = &T_s; - - expn -= l * digits_per_limb - int_len; - bf_init(r->ctx, T); - if (bf_integer_from_radix(T, a->tab + pos, l, radix)) { - bf_set_nan(r); - ret = BF_ST_MEM_ERROR; - } else { - T->sign = is_neg; - if (flags & BF_ATOF_EXPONENT) { - /* return the exponent */ - *pexponent = expn; - ret = bf_set(r, T); - } else { - ret = bf_mul_pow_radix(r, T, radix, expn, prec, flags); - } - } - bf_delete(T); - } - bf_delete(a); - } - done: - if (pnext) - *pnext = p; - return ret; -} - -/* - Return (status, n, exp). 'status' is the floating point status. 'n' - is the parsed number. - - If (flags & BF_ATOF_EXPONENT) and if the radix is not a power of - two, the parsed number is equal to r * - (*pexponent)^radix. Otherwise *pexponent = 0. -*/ -int bf_atof2(bf_t *r, slimb_t *pexponent, - const char *str, const char **pnext, int radix, - limb_t prec, bf_flags_t flags) -{ - return bf_atof_internal(r, pexponent, str, pnext, radix, prec, flags, - FALSE); -} - -int bf_atof(bf_t *r, const char *str, const char **pnext, int radix, - limb_t prec, bf_flags_t flags) -{ - slimb_t dummy_exp; - return bf_atof_internal(r, &dummy_exp, str, pnext, radix, prec, flags, FALSE); -} - -/* base conversion to radix */ - -#if LIMB_BITS == 64 -#define RADIXL_10 UINT64_C(10000000000000000000) -#else -#define RADIXL_10 UINT64_C(1000000000) -#endif - -static const uint32_t inv_log2_radix[BF_RADIX_MAX - 1][LIMB_BITS / 32 + 1] = { -#if LIMB_BITS == 32 -{ 0x80000000, 0x00000000,}, -{ 0x50c24e60, 0xd4d4f4a7,}, -{ 0x40000000, 0x00000000,}, -{ 0x372068d2, 0x0a1ee5ca,}, -{ 0x3184648d, 0xb8153e7a,}, -{ 0x2d983275, 0x9d5369c4,}, -{ 0x2aaaaaaa, 0xaaaaaaab,}, -{ 0x28612730, 0x6a6a7a54,}, -{ 0x268826a1, 0x3ef3fde6,}, -{ 0x25001383, 0xbac8a744,}, -{ 0x23b46706, 0x82c0c709,}, -{ 0x229729f1, 0xb2c83ded,}, -{ 0x219e7ffd, 0xa5ad572b,}, -{ 0x20c33b88, 0xda7c29ab,}, -{ 0x20000000, 0x00000000,}, -{ 0x1f50b57e, 0xac5884b3,}, -{ 0x1eb22cc6, 0x8aa6e26f,}, -{ 0x1e21e118, 0x0c5daab2,}, -{ 0x1d9dcd21, 0x439834e4,}, -{ 0x1d244c78, 0x367a0d65,}, -{ 0x1cb40589, 0xac173e0c,}, -{ 0x1c4bd95b, 0xa8d72b0d,}, -{ 0x1bead768, 0x98f8ce4c,}, -{ 0x1b903469, 0x050f72e5,}, -{ 0x1b3b433f, 0x2eb06f15,}, -{ 0x1aeb6f75, 0x9c46fc38,}, -{ 0x1aa038eb, 0x0e3bfd17,}, -{ 0x1a593062, 0xb38d8c56,}, -{ 0x1a15f4c3, 0x2b95a2e6,}, -{ 0x19d630dc, 0xcc7ddef9,}, -{ 0x19999999, 0x9999999a,}, -{ 0x195fec80, 0x8a609431,}, -{ 0x1928ee7b, 0x0b4f22f9,}, -{ 0x18f46acf, 0x8c06e318,}, -{ 0x18c23246, 0xdc0a9f3d,}, -#else -{ 0x80000000, 0x00000000, 0x00000000,}, -{ 0x50c24e60, 0xd4d4f4a7, 0x021f57bc,}, -{ 0x40000000, 0x00000000, 0x00000000,}, -{ 0x372068d2, 0x0a1ee5ca, 0x19ea911b,}, -{ 0x3184648d, 0xb8153e7a, 0x7fc2d2e1,}, -{ 0x2d983275, 0x9d5369c4, 0x4dec1661,}, -{ 0x2aaaaaaa, 0xaaaaaaaa, 0xaaaaaaab,}, -{ 0x28612730, 0x6a6a7a53, 0x810fabde,}, -{ 0x268826a1, 0x3ef3fde6, 0x23e2566b,}, -{ 0x25001383, 0xbac8a744, 0x385a3349,}, -{ 0x23b46706, 0x82c0c709, 0x3f891718,}, -{ 0x229729f1, 0xb2c83ded, 0x15fba800,}, -{ 0x219e7ffd, 0xa5ad572a, 0xe169744b,}, -{ 0x20c33b88, 0xda7c29aa, 0x9bddee52,}, -{ 0x20000000, 0x00000000, 0x00000000,}, -{ 0x1f50b57e, 0xac5884b3, 0x70e28eee,}, -{ 0x1eb22cc6, 0x8aa6e26f, 0x06d1a2a2,}, -{ 0x1e21e118, 0x0c5daab1, 0x81b4f4bf,}, -{ 0x1d9dcd21, 0x439834e3, 0x81667575,}, -{ 0x1d244c78, 0x367a0d64, 0xc8204d6d,}, -{ 0x1cb40589, 0xac173e0c, 0x3b7b16ba,}, -{ 0x1c4bd95b, 0xa8d72b0d, 0x5879f25a,}, -{ 0x1bead768, 0x98f8ce4c, 0x66cc2858,}, -{ 0x1b903469, 0x050f72e5, 0x0cf5488e,}, -{ 0x1b3b433f, 0x2eb06f14, 0x8c89719c,}, -{ 0x1aeb6f75, 0x9c46fc37, 0xab5fc7e9,}, -{ 0x1aa038eb, 0x0e3bfd17, 0x1bd62080,}, -{ 0x1a593062, 0xb38d8c56, 0x7998ab45,}, -{ 0x1a15f4c3, 0x2b95a2e6, 0x46aed6a0,}, -{ 0x19d630dc, 0xcc7ddef9, 0x5aadd61b,}, -{ 0x19999999, 0x99999999, 0x9999999a,}, -{ 0x195fec80, 0x8a609430, 0xe1106014,}, -{ 0x1928ee7b, 0x0b4f22f9, 0x5f69791d,}, -{ 0x18f46acf, 0x8c06e318, 0x4d2aeb2c,}, -{ 0x18c23246, 0xdc0a9f3d, 0x3fe16970,}, -#endif -}; - -static const limb_t log2_radix[BF_RADIX_MAX - 1] = { -#if LIMB_BITS == 32 -0x20000000, -0x32b80347, -0x40000000, -0x4a4d3c26, -0x52b80347, -0x59d5d9fd, -0x60000000, -0x6570068e, -0x6a4d3c26, -0x6eb3a9f0, -0x72b80347, -0x766a008e, -0x79d5d9fd, -0x7d053f6d, -0x80000000, -0x82cc7edf, -0x8570068e, -0x87ef05ae, -0x8a4d3c26, -0x8c8ddd45, -0x8eb3a9f0, -0x90c10501, -0x92b80347, -0x949a784c, -0x966a008e, -0x982809d6, -0x99d5d9fd, -0x9b74948f, -0x9d053f6d, -0x9e88c6b3, -0xa0000000, -0xa16bad37, -0xa2cc7edf, -0xa4231623, -0xa570068e, -#else -0x2000000000000000, -0x32b803473f7ad0f4, -0x4000000000000000, -0x4a4d3c25e68dc57f, -0x52b803473f7ad0f4, -0x59d5d9fd5010b366, -0x6000000000000000, -0x6570068e7ef5a1e8, -0x6a4d3c25e68dc57f, -0x6eb3a9f01975077f, -0x72b803473f7ad0f4, -0x766a008e4788cbcd, -0x79d5d9fd5010b366, -0x7d053f6d26089673, -0x8000000000000000, -0x82cc7edf592262d0, -0x8570068e7ef5a1e8, -0x87ef05ae409a0289, -0x8a4d3c25e68dc57f, -0x8c8ddd448f8b845a, -0x8eb3a9f01975077f, -0x90c10500d63aa659, -0x92b803473f7ad0f4, -0x949a784bcd1b8afe, -0x966a008e4788cbcd, -0x982809d5be7072dc, -0x99d5d9fd5010b366, -0x9b74948f5532da4b, -0x9d053f6d26089673, -0x9e88c6b3626a72aa, -0xa000000000000000, -0xa16bad3758efd873, -0xa2cc7edf592262d0, -0xa4231623369e78e6, -0xa570068e7ef5a1e8, -#endif -}; - -/* compute floor(a*b) or ceil(a*b) with b = log2(radix) or - b=1/log2(radix). For is_inv = 0, strict accuracy is not guaranteed - when radix is not a power of two. */ -slimb_t bf_mul_log2_radix(slimb_t a1, unsigned int radix, int is_inv, - int is_ceil1) -{ - int is_neg; - limb_t a; - BOOL is_ceil; - - is_ceil = is_ceil1; - a = a1; - if (a1 < 0) { - a = -a; - is_neg = 1; - } else { - is_neg = 0; - } - is_ceil ^= is_neg; - if ((radix & (radix - 1)) == 0) { - int radix_bits; - /* radix is a power of two */ - radix_bits = ceil_log2(radix); - if (is_inv) { - if (is_ceil) - a += radix_bits - 1; - a = a / radix_bits; - } else { - a = a * radix_bits; - } - } else { - const uint32_t *tab; - limb_t b0, b1; - dlimb_t t; - - if (is_inv) { - tab = inv_log2_radix[radix - 2]; -#if LIMB_BITS == 32 - b1 = tab[0]; - b0 = tab[1]; -#else - b1 = ((limb_t)tab[0] << 32) | tab[1]; - b0 = (limb_t)tab[2] << 32; -#endif - t = (dlimb_t)b0 * (dlimb_t)a; - t = (dlimb_t)b1 * (dlimb_t)a + (t >> LIMB_BITS); - a = t >> (LIMB_BITS - 1); - } else { - b0 = log2_radix[radix - 2]; - t = (dlimb_t)b0 * (dlimb_t)a; - a = t >> (LIMB_BITS - 3); - } - /* a = floor(result) and 'result' cannot be an integer */ - a += is_ceil; - } - if (is_neg) - a = -a; - return a; -} - -/* 'n' is the number of output limbs */ -static int bf_integer_to_radix_rec(bf_t *pow_tab, - limb_t *out, const bf_t *a, limb_t n, - int level, limb_t n0, limb_t radixl, - unsigned int radixl_bits) -{ - limb_t n1, n2, q_prec; - int ret; - - assert(n >= 1); - if (n == 1) { - out[0] = get_bits(a->tab, a->len, a->len * LIMB_BITS - a->expn); - } else if (n == 2) { - dlimb_t t; - slimb_t pos; - pos = a->len * LIMB_BITS - a->expn; - t = ((dlimb_t)get_bits(a->tab, a->len, pos + LIMB_BITS) << LIMB_BITS) | - get_bits(a->tab, a->len, pos); - if (likely(radixl == RADIXL_10)) { - /* use division by a constant when possible */ - out[0] = t % RADIXL_10; - out[1] = t / RADIXL_10; - } else { - out[0] = t % radixl; - out[1] = t / radixl; - } - } else { - bf_t Q, R, *B, *B_inv; - int q_add; - bf_init(a->ctx, &Q); - bf_init(a->ctx, &R); - n2 = (((n0 * 2) >> (level + 1)) + 1) / 2; - n1 = n - n2; - B = &pow_tab[2 * level]; - B_inv = &pow_tab[2 * level + 1]; - ret = 0; - if (B->len == 0) { - /* compute BASE^n2 */ - ret |= bf_pow_ui_ui(B, radixl, n2, BF_PREC_INF, BF_RNDZ); - /* we use enough bits for the maximum possible 'n1' value, - i.e. n2 + 1 */ - ret |= bf_set_ui(&R, 1); - ret |= bf_div(B_inv, &R, B, (n2 + 1) * radixl_bits + 2, BF_RNDN); - } - // printf("%d: n1=% " PRId64 " n2=%" PRId64 "\n", level, n1, n2); - q_prec = n1 * radixl_bits; - ret |= bf_mul(&Q, a, B_inv, q_prec, BF_RNDN); - ret |= bf_rint(&Q, BF_RNDZ); - - ret |= bf_mul(&R, &Q, B, BF_PREC_INF, BF_RNDZ); - ret |= bf_sub(&R, a, &R, BF_PREC_INF, BF_RNDZ); - - if (ret & BF_ST_MEM_ERROR) - goto fail; - /* adjust if necessary */ - q_add = 0; - while (R.sign && R.len != 0) { - if (bf_add(&R, &R, B, BF_PREC_INF, BF_RNDZ)) - goto fail; - q_add--; - } - while (bf_cmpu(&R, B) >= 0) { - if (bf_sub(&R, &R, B, BF_PREC_INF, BF_RNDZ)) - goto fail; - q_add++; - } - if (q_add != 0) { - if (bf_add_si(&Q, &Q, q_add, BF_PREC_INF, BF_RNDZ)) - goto fail; - } - if (bf_integer_to_radix_rec(pow_tab, out + n2, &Q, n1, level + 1, n0, - radixl, radixl_bits)) - goto fail; - if (bf_integer_to_radix_rec(pow_tab, out, &R, n2, level + 1, n0, - radixl, radixl_bits)) { - fail: - bf_delete(&Q); - bf_delete(&R); - return -1; - } - bf_delete(&Q); - bf_delete(&R); - } - return 0; -} - -/* return 0 if OK != 0 if memory error */ -static int bf_integer_to_radix(bf_t *r, const bf_t *a, limb_t radixl) -{ - bf_context_t *s = r->ctx; - limb_t r_len; - bf_t *pow_tab; - int i, pow_tab_len, ret; - - r_len = r->len; - pow_tab_len = (ceil_log2(r_len) + 2) * 2; /* XXX: check */ - pow_tab = bf_malloc(s, sizeof(pow_tab[0]) * pow_tab_len); - if (!pow_tab) - return -1; - for(i = 0; i < pow_tab_len; i++) - bf_init(r->ctx, &pow_tab[i]); - - ret = bf_integer_to_radix_rec(pow_tab, r->tab, a, r_len, 0, r_len, radixl, - ceil_log2(radixl)); - - for(i = 0; i < pow_tab_len; i++) { - bf_delete(&pow_tab[i]); - } - bf_free(s, pow_tab); - return ret; -} - -/* a must be >= 0. 'P' is the wanted number of digits in radix - 'radix'. 'r' is the mantissa represented as an integer. *pE - contains the exponent. Return != 0 if memory error. */ -static int bf_convert_to_radix(bf_t *r, slimb_t *pE, - const bf_t *a, int radix, - limb_t P, bf_rnd_t rnd_mode, - BOOL is_fixed_exponent) -{ - slimb_t E, e, prec, extra_bits, ziv_extra_bits, prec0; - bf_t B_s, *B = &B_s; - int e_sign, ret, res; - - if (a->len == 0) { - /* zero case */ - *pE = 0; - return bf_set(r, a); - } - - if (is_fixed_exponent) { - E = *pE; - } else { - /* compute the new exponent */ - E = 1 + bf_mul_log2_radix(a->expn - 1, radix, TRUE, FALSE); - } - // bf_print_str("a", a); - // printf("E=%ld P=%ld radix=%d\n", E, P, radix); - - for(;;) { - e = P - E; - e_sign = 0; - if (e < 0) { - e = -e; - e_sign = 1; - } - /* Note: precision for log2(radix) is not critical here */ - prec0 = bf_mul_log2_radix(P, radix, FALSE, TRUE); - ziv_extra_bits = 16; - for(;;) { - prec = prec0 + ziv_extra_bits; - /* XXX: rigorous error analysis needed */ - extra_bits = ceil_log2(e) * 2 + 1; - ret = bf_pow_ui_ui(r, radix, e, prec + extra_bits, - BF_RNDN | BF_FLAG_EXT_EXP); - if (!e_sign) - ret |= bf_mul(r, r, a, prec + extra_bits, - BF_RNDN | BF_FLAG_EXT_EXP); - else - ret |= bf_div(r, a, r, prec + extra_bits, - BF_RNDN | BF_FLAG_EXT_EXP); - if (ret & BF_ST_MEM_ERROR) - return BF_ST_MEM_ERROR; - /* if the result is not exact, check that it can be safely - rounded to an integer */ - if ((ret & BF_ST_INEXACT) && - !bf_can_round(r, r->expn, rnd_mode, prec)) { - /* and more precision and retry */ - ziv_extra_bits = ziv_extra_bits + (ziv_extra_bits / 2); - continue; - } else { - ret = bf_rint(r, rnd_mode); - if (ret & BF_ST_MEM_ERROR) - return BF_ST_MEM_ERROR; - break; - } - } - if (is_fixed_exponent) - break; - /* check that the result is < B^P */ - /* XXX: do a fast approximate test first ? */ - bf_init(r->ctx, B); - ret = bf_pow_ui_ui(B, radix, P, BF_PREC_INF, BF_RNDZ); - if (ret) { - bf_delete(B); - return ret; - } - res = bf_cmpu(r, B); - bf_delete(B); - if (res < 0) - break; - /* try a larger exponent */ - E++; - } - *pE = E; - return 0; -} - -static void limb_to_a(char *buf, limb_t n, unsigned int radix, int len) -{ - int digit, i; - - if (radix == 10) { - /* specific case with constant divisor */ - for(i = len - 1; i >= 0; i--) { - digit = (limb_t)n % 10; - n = (limb_t)n / 10; - buf[i] = digit + '0'; - } - } else { - for(i = len - 1; i >= 0; i--) { - digit = (limb_t)n % radix; - n = (limb_t)n / radix; - if (digit < 10) - digit += '0'; - else - digit += 'a' - 10; - buf[i] = digit; - } - } -} - -/* for power of 2 radixes */ -static void limb_to_a2(char *buf, limb_t n, unsigned int radix_bits, int len) -{ - int digit, i; - unsigned int mask; - - mask = (1 << radix_bits) - 1; - for(i = len - 1; i >= 0; i--) { - digit = n & mask; - n >>= radix_bits; - if (digit < 10) - digit += '0'; - else - digit += 'a' - 10; - buf[i] = digit; - } -} - -/* 'a' must be an integer if the is_dec = FALSE or if the radix is not - a power of two. A dot is added before the 'dot_pos' digit. dot_pos - = n_digits does not display the dot. 0 <= dot_pos <= - n_digits. n_digits >= 1. */ -static void output_digits(DynBuf *s, const bf_t *a1, int radix, limb_t n_digits, - limb_t dot_pos, BOOL is_dec) -{ - limb_t i, v, l; - slimb_t pos, pos_incr; - int digits_per_limb, buf_pos, radix_bits, first_buf_pos; - char buf[65]; - bf_t a_s, *a; - - if (is_dec) { - digits_per_limb = LIMB_DIGITS; - a = (bf_t *)a1; - radix_bits = 0; - pos = a->len; - pos_incr = 1; - first_buf_pos = 0; - } else if ((radix & (radix - 1)) == 0) { - a = (bf_t *)a1; - radix_bits = ceil_log2(radix); - digits_per_limb = LIMB_BITS / radix_bits; - pos_incr = digits_per_limb * radix_bits; - /* digits are aligned relative to the radix point */ - pos = a->len * LIMB_BITS + smod(-a->expn, radix_bits); - first_buf_pos = 0; - } else { - limb_t n, radixl; - - digits_per_limb = digits_per_limb_table[radix - 2]; - radixl = get_limb_radix(radix); - a = &a_s; - bf_init(a1->ctx, a); - n = (n_digits + digits_per_limb - 1) / digits_per_limb; - if (bf_resize(a, n)) { - dbuf_set_error(s); - goto done; - } - if (bf_integer_to_radix(a, a1, radixl)) { - dbuf_set_error(s); - goto done; - } - radix_bits = 0; - pos = n; - pos_incr = 1; - first_buf_pos = pos * digits_per_limb - n_digits; - } - buf_pos = digits_per_limb; - i = 0; - while (i < n_digits) { - if (buf_pos == digits_per_limb) { - pos -= pos_incr; - if (radix_bits == 0) { - v = get_limbz(a, pos); - limb_to_a(buf, v, radix, digits_per_limb); - } else { - v = get_bits(a->tab, a->len, pos); - limb_to_a2(buf, v, radix_bits, digits_per_limb); - } - buf_pos = first_buf_pos; - first_buf_pos = 0; - } - if (i < dot_pos) { - l = dot_pos; - } else { - if (i == dot_pos) - dbuf_putc(s, '.'); - l = n_digits; - } - l = bf_min(digits_per_limb - buf_pos, l - i); - dbuf_put(s, (uint8_t *)(buf + buf_pos), l); - buf_pos += l; - i += l; - } - done: - if (a != a1) - bf_delete(a); -} - -static void *bf_dbuf_realloc(void *opaque, void *ptr, size_t size) -{ - bf_context_t *s = opaque; - return bf_realloc(s, ptr, size); -} - -/* return the length in bytes. A trailing '\0' is added */ -static char *bf_ftoa_internal(size_t *plen, const bf_t *a2, int radix, - limb_t prec, bf_flags_t flags, BOOL is_dec) -{ - bf_context_t *ctx = a2->ctx; - DynBuf s_s, *s = &s_s; - int radix_bits; - - // bf_print_str("ftoa", a2); - // printf("radix=%d\n", radix); - dbuf_init2(s, ctx, bf_dbuf_realloc); - if (a2->expn == BF_EXP_NAN) { - dbuf_putstr(s, "NaN"); - } else { - if (a2->sign) - dbuf_putc(s, '-'); - if (a2->expn == BF_EXP_INF) { - if (flags & BF_FTOA_JS_QUIRKS) - dbuf_putstr(s, "Infinity"); - else - dbuf_putstr(s, "Inf"); - } else { - int fmt, ret; - slimb_t n_digits, n, i, n_max, n1; - bf_t a1_s, *a1 = &a1_s; - - if ((radix & (radix - 1)) != 0) - radix_bits = 0; - else - radix_bits = ceil_log2(radix); - - fmt = flags & BF_FTOA_FORMAT_MASK; - bf_init(ctx, a1); - if (fmt == BF_FTOA_FORMAT_FRAC) { - if (is_dec || radix_bits != 0) { - if (bf_set(a1, a2)) - goto fail1; -#ifdef USE_BF_DEC - if (is_dec) { - if (bfdec_round((bfdec_t *)a1, prec, (flags & BF_RND_MASK) | BF_FLAG_RADPNT_PREC) & BF_ST_MEM_ERROR) - goto fail1; - n = a1->expn; - } else -#endif - { - if (bf_round(a1, prec * radix_bits, (flags & BF_RND_MASK) | BF_FLAG_RADPNT_PREC) & BF_ST_MEM_ERROR) - goto fail1; - n = ceil_div(a1->expn, radix_bits); - } - if (flags & BF_FTOA_ADD_PREFIX) { - if (radix == 16) - dbuf_putstr(s, "0x"); - else if (radix == 8) - dbuf_putstr(s, "0o"); - else if (radix == 2) - dbuf_putstr(s, "0b"); - } - if (a1->expn == BF_EXP_ZERO) { - dbuf_putstr(s, "0"); - if (prec > 0) { - dbuf_putstr(s, "."); - for(i = 0; i < prec; i++) { - dbuf_putc(s, '0'); - } - } - } else { - n_digits = prec + n; - if (n <= 0) { - /* 0.x */ - dbuf_putstr(s, "0."); - for(i = 0; i < -n; i++) { - dbuf_putc(s, '0'); - } - if (n_digits > 0) { - output_digits(s, a1, radix, n_digits, n_digits, is_dec); - } - } else { - output_digits(s, a1, radix, n_digits, n, is_dec); - } - } - } else { - size_t pos, start; - bf_t a_s, *a = &a_s; - - /* make a positive number */ - a->tab = a2->tab; - a->len = a2->len; - a->expn = a2->expn; - a->sign = 0; - - /* one more digit for the rounding */ - n = 1 + bf_mul_log2_radix(bf_max(a->expn, 0), radix, TRUE, TRUE); - n_digits = n + prec; - n1 = n; - if (bf_convert_to_radix(a1, &n1, a, radix, n_digits, - flags & BF_RND_MASK, TRUE)) - goto fail1; - start = s->size; - output_digits(s, a1, radix, n_digits, n, is_dec); - /* remove leading zeros because we allocated one more digit */ - pos = start; - while ((pos + 1) < s->size && s->buf[pos] == '0' && - s->buf[pos + 1] != '.') - pos++; - if (pos > start) { - memmove(s->buf + start, s->buf + pos, s->size - pos); - s->size -= (pos - start); - } - } - } else { -#ifdef USE_BF_DEC - if (is_dec) { - if (bf_set(a1, a2)) - goto fail1; - if (fmt == BF_FTOA_FORMAT_FIXED) { - n_digits = prec; - n_max = n_digits; - if (bfdec_round((bfdec_t *)a1, prec, (flags & BF_RND_MASK)) & BF_ST_MEM_ERROR) - goto fail1; - } else { - /* prec is ignored */ - prec = n_digits = a1->len * LIMB_DIGITS; - /* remove the trailing zero digits */ - while (n_digits > 1 && - get_digit(a1->tab, a1->len, prec - n_digits) == 0) { - n_digits--; - } - n_max = n_digits + 4; - } - n = a1->expn; - } else -#endif - if (radix_bits != 0) { - if (bf_set(a1, a2)) - goto fail1; - if (fmt == BF_FTOA_FORMAT_FIXED) { - slimb_t prec_bits; - n_digits = prec; - n_max = n_digits; - /* align to the radix point */ - prec_bits = prec * radix_bits - - smod(-a1->expn, radix_bits); - if (bf_round(a1, prec_bits, - (flags & BF_RND_MASK)) & BF_ST_MEM_ERROR) - goto fail1; - } else { - limb_t digit_mask; - slimb_t pos; - /* position of the digit before the most - significant digit in bits */ - pos = a1->len * LIMB_BITS + - smod(-a1->expn, radix_bits); - n_digits = ceil_div(pos, radix_bits); - /* remove the trailing zero digits */ - digit_mask = ((limb_t)1 << radix_bits) - 1; - while (n_digits > 1 && - (get_bits(a1->tab, a1->len, pos - n_digits * radix_bits) & digit_mask) == 0) { - n_digits--; - } - n_max = n_digits + 4; - } - n = ceil_div(a1->expn, radix_bits); - } else { - bf_t a_s, *a = &a_s; - - /* make a positive number */ - a->tab = a2->tab; - a->len = a2->len; - a->expn = a2->expn; - a->sign = 0; - - if (fmt == BF_FTOA_FORMAT_FIXED) { - n_digits = prec; - n_max = n_digits; - } else { - slimb_t n_digits_max, n_digits_min; - - assert(prec != BF_PREC_INF); - n_digits = 1 + bf_mul_log2_radix(prec, radix, TRUE, TRUE); - /* max number of digits for non exponential - notation. The rational is to have the same rule - as JS i.e. n_max = 21 for 64 bit float in base 10. */ - n_max = n_digits + 4; - if (fmt == BF_FTOA_FORMAT_FREE_MIN) { - bf_t b_s, *b = &b_s; - - /* find the minimum number of digits by - dichotomy. */ - /* XXX: inefficient */ - n_digits_max = n_digits; - n_digits_min = 1; - bf_init(ctx, b); - while (n_digits_min < n_digits_max) { - n_digits = (n_digits_min + n_digits_max) / 2; - if (bf_convert_to_radix(a1, &n, a, radix, n_digits, - flags & BF_RND_MASK, FALSE)) { - bf_delete(b); - goto fail1; - } - /* convert back to a number and compare */ - ret = bf_mul_pow_radix(b, a1, radix, n - n_digits, - prec, - (flags & ~BF_RND_MASK) | - BF_RNDN); - if (ret & BF_ST_MEM_ERROR) { - bf_delete(b); - goto fail1; - } - if (bf_cmpu(b, a) == 0) { - n_digits_max = n_digits; - } else { - n_digits_min = n_digits + 1; - } - } - bf_delete(b); - n_digits = n_digits_max; - } - } - if (bf_convert_to_radix(a1, &n, a, radix, n_digits, - flags & BF_RND_MASK, FALSE)) { - fail1: - bf_delete(a1); - goto fail; - } - } - if (a1->expn == BF_EXP_ZERO && - fmt != BF_FTOA_FORMAT_FIXED && - !(flags & BF_FTOA_FORCE_EXP)) { - /* just output zero */ - dbuf_putstr(s, "0"); - } else { - if (flags & BF_FTOA_ADD_PREFIX) { - if (radix == 16) - dbuf_putstr(s, "0x"); - else if (radix == 8) - dbuf_putstr(s, "0o"); - else if (radix == 2) - dbuf_putstr(s, "0b"); - } - if (a1->expn == BF_EXP_ZERO) - n = 1; - if ((flags & BF_FTOA_FORCE_EXP) || - n <= -6 || n > n_max) { - const char *fmt; - /* exponential notation */ - output_digits(s, a1, radix, n_digits, 1, is_dec); - if (radix_bits != 0 && radix <= 16) { - if (flags & BF_FTOA_JS_QUIRKS) - fmt = "p%+" PRId_LIMB; - else - fmt = "p%" PRId_LIMB; - dbuf_printf(s, fmt, (n - 1) * radix_bits); - } else { - if (flags & BF_FTOA_JS_QUIRKS) - fmt = "%c%+" PRId_LIMB; - else - fmt = "%c%" PRId_LIMB; - dbuf_printf(s, fmt, - radix <= 10 ? 'e' : '@', n - 1); - } - } else if (n <= 0) { - /* 0.x */ - dbuf_putstr(s, "0."); - for(i = 0; i < -n; i++) { - dbuf_putc(s, '0'); - } - output_digits(s, a1, radix, n_digits, n_digits, is_dec); - } else { - if (n_digits <= n) { - /* no dot */ - output_digits(s, a1, radix, n_digits, n_digits, is_dec); - for(i = 0; i < (n - n_digits); i++) - dbuf_putc(s, '0'); - } else { - output_digits(s, a1, radix, n_digits, n, is_dec); - } - } - } - } - bf_delete(a1); - } - } - dbuf_putc(s, '\0'); - if (dbuf_error(s)) - goto fail; - if (plen) - *plen = s->size - 1; - return (char *)s->buf; - fail: - bf_free(ctx, s->buf); - if (plen) - *plen = 0; - return NULL; -} - -char *bf_ftoa(size_t *plen, const bf_t *a, int radix, limb_t prec, - bf_flags_t flags) -{ - return bf_ftoa_internal(plen, a, radix, prec, flags, FALSE); -} - -/***************************************************************/ -/* transcendental functions */ - -/* Note: the algorithm is from MPFR */ -static void bf_const_log2_rec(bf_t *T, bf_t *P, bf_t *Q, limb_t n1, - limb_t n2, BOOL need_P) -{ - bf_context_t *s = T->ctx; - if ((n2 - n1) == 1) { - if (n1 == 0) { - bf_set_ui(P, 3); - } else { - bf_set_ui(P, n1); - P->sign = 1; - } - bf_set_ui(Q, 2 * n1 + 1); - Q->expn += 2; - bf_set(T, P); - } else { - limb_t m; - bf_t T1_s, *T1 = &T1_s; - bf_t P1_s, *P1 = &P1_s; - bf_t Q1_s, *Q1 = &Q1_s; - - m = n1 + ((n2 - n1) >> 1); - bf_const_log2_rec(T, P, Q, n1, m, TRUE); - bf_init(s, T1); - bf_init(s, P1); - bf_init(s, Q1); - bf_const_log2_rec(T1, P1, Q1, m, n2, need_P); - bf_mul(T, T, Q1, BF_PREC_INF, BF_RNDZ); - bf_mul(T1, T1, P, BF_PREC_INF, BF_RNDZ); - bf_add(T, T, T1, BF_PREC_INF, BF_RNDZ); - if (need_P) - bf_mul(P, P, P1, BF_PREC_INF, BF_RNDZ); - bf_mul(Q, Q, Q1, BF_PREC_INF, BF_RNDZ); - bf_delete(T1); - bf_delete(P1); - bf_delete(Q1); - } -} - -/* compute log(2) with faithful rounding at precision 'prec' */ -static void bf_const_log2_internal(bf_t *T, limb_t prec) -{ - limb_t w, N; - bf_t P_s, *P = &P_s; - bf_t Q_s, *Q = &Q_s; - - w = prec + 15; - N = w / 3 + 1; - bf_init(T->ctx, P); - bf_init(T->ctx, Q); - bf_const_log2_rec(T, P, Q, 0, N, FALSE); - bf_div(T, T, Q, prec, BF_RNDN); - bf_delete(P); - bf_delete(Q); -} - -/* PI constant */ - -#define CHUD_A 13591409 -#define CHUD_B 545140134 -#define CHUD_C 640320 -#define CHUD_BITS_PER_TERM 47 - -static void chud_bs(bf_t *P, bf_t *Q, bf_t *G, int64_t a, int64_t b, int need_g, - limb_t prec) -{ - bf_context_t *s = P->ctx; - int64_t c; - - if (a == (b - 1)) { - bf_t T0, T1; - - bf_init(s, &T0); - bf_init(s, &T1); - bf_set_ui(G, 2 * b - 1); - bf_mul_ui(G, G, 6 * b - 1, prec, BF_RNDN); - bf_mul_ui(G, G, 6 * b - 5, prec, BF_RNDN); - bf_set_ui(&T0, CHUD_B); - bf_mul_ui(&T0, &T0, b, prec, BF_RNDN); - bf_set_ui(&T1, CHUD_A); - bf_add(&T0, &T0, &T1, prec, BF_RNDN); - bf_mul(P, G, &T0, prec, BF_RNDN); - P->sign = b & 1; - - bf_set_ui(Q, b); - bf_mul_ui(Q, Q, b, prec, BF_RNDN); - bf_mul_ui(Q, Q, b, prec, BF_RNDN); - bf_mul_ui(Q, Q, (uint64_t)CHUD_C * CHUD_C * CHUD_C / 24, prec, BF_RNDN); - bf_delete(&T0); - bf_delete(&T1); - } else { - bf_t P2, Q2, G2; - - bf_init(s, &P2); - bf_init(s, &Q2); - bf_init(s, &G2); - - c = (a + b) / 2; - chud_bs(P, Q, G, a, c, 1, prec); - chud_bs(&P2, &Q2, &G2, c, b, need_g, prec); - - /* Q = Q1 * Q2 */ - /* G = G1 * G2 */ - /* P = P1 * Q2 + P2 * G1 */ - bf_mul(&P2, &P2, G, prec, BF_RNDN); - if (!need_g) - bf_set_ui(G, 0); - bf_mul(P, P, &Q2, prec, BF_RNDN); - bf_add(P, P, &P2, prec, BF_RNDN); - bf_delete(&P2); - - bf_mul(Q, Q, &Q2, prec, BF_RNDN); - bf_delete(&Q2); - if (need_g) - bf_mul(G, G, &G2, prec, BF_RNDN); - bf_delete(&G2); - } -} - -/* compute Pi with faithful rounding at precision 'prec' using the - Chudnovsky formula */ -static void bf_const_pi_internal(bf_t *Q, limb_t prec) -{ - bf_context_t *s = Q->ctx; - int64_t n, prec1; - bf_t P, G; - - /* number of serie terms */ - n = prec / CHUD_BITS_PER_TERM + 1; - /* XXX: precision analysis */ - prec1 = prec + 32; - - bf_init(s, &P); - bf_init(s, &G); - - chud_bs(&P, Q, &G, 0, n, 0, BF_PREC_INF); - - bf_mul_ui(&G, Q, CHUD_A, prec1, BF_RNDN); - bf_add(&P, &G, &P, prec1, BF_RNDN); - bf_div(Q, Q, &P, prec1, BF_RNDF); - - bf_set_ui(&P, CHUD_C); - bf_sqrt(&G, &P, prec1, BF_RNDF); - bf_mul_ui(&G, &G, (uint64_t)CHUD_C / 12, prec1, BF_RNDF); - bf_mul(Q, Q, &G, prec, BF_RNDN); - bf_delete(&P); - bf_delete(&G); -} - -static int bf_const_get(bf_t *T, limb_t prec, bf_flags_t flags, - BFConstCache *c, - void (*func)(bf_t *res, limb_t prec), int sign) -{ - limb_t ziv_extra_bits, prec1; - - ziv_extra_bits = 32; - for(;;) { - prec1 = prec + ziv_extra_bits; - if (c->prec < prec1) { - if (c->val.len == 0) - bf_init(T->ctx, &c->val); - func(&c->val, prec1); - c->prec = prec1; - } else { - prec1 = c->prec; - } - bf_set(T, &c->val); - T->sign = sign; - if (!bf_can_round(T, prec, flags & BF_RND_MASK, prec1)) { - /* and more precision and retry */ - ziv_extra_bits = ziv_extra_bits + (ziv_extra_bits / 2); - } else { - break; - } - } - return bf_round(T, prec, flags); -} - -static void bf_const_free(BFConstCache *c) -{ - bf_delete(&c->val); - memset(c, 0, sizeof(*c)); -} - -int bf_const_log2(bf_t *T, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = T->ctx; - return bf_const_get(T, prec, flags, &s->log2_cache, bf_const_log2_internal, 0); -} - -/* return rounded pi * (1 - 2 * sign) */ -static int bf_const_pi_signed(bf_t *T, int sign, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = T->ctx; - return bf_const_get(T, prec, flags, &s->pi_cache, bf_const_pi_internal, - sign); -} - -int bf_const_pi(bf_t *T, limb_t prec, bf_flags_t flags) -{ - return bf_const_pi_signed(T, 0, prec, flags); -} - -void bf_clear_cache(bf_context_t *s) -{ -#ifdef USE_FFT_MUL - fft_clear_cache(s); -#endif - bf_const_free(&s->log2_cache); - bf_const_free(&s->pi_cache); -} - -/* ZivFunc should compute the result 'r' with faithful rounding at - precision 'prec'. For efficiency purposes, the final bf_round() - does not need to be done in the function. */ -typedef int ZivFunc(bf_t *r, const bf_t *a, limb_t prec, void *opaque); - -static int bf_ziv_rounding(bf_t *r, const bf_t *a, - limb_t prec, bf_flags_t flags, - ZivFunc *f, void *opaque) -{ - int rnd_mode, ret; - slimb_t prec1, ziv_extra_bits; - - rnd_mode = flags & BF_RND_MASK; - if (rnd_mode == BF_RNDF) { - /* no need to iterate */ - f(r, a, prec, opaque); - ret = 0; - } else { - ziv_extra_bits = 32; - for(;;) { - prec1 = prec + ziv_extra_bits; - ret = f(r, a, prec1, opaque); - if (ret & (BF_ST_OVERFLOW | BF_ST_UNDERFLOW | BF_ST_MEM_ERROR)) { - /* overflow or underflow should never happen because - it indicates the rounding cannot be done correctly, - but we do not catch all the cases */ - return ret; - } - /* if the result is exact, we can stop */ - if (!(ret & BF_ST_INEXACT)) { - ret = 0; - break; - } - if (bf_can_round(r, prec, rnd_mode, prec1)) { - ret = BF_ST_INEXACT; - break; - } - ziv_extra_bits = ziv_extra_bits * 2; - // printf("ziv_extra_bits=%" PRId64 "\n", (int64_t)ziv_extra_bits); - } - } - if (r->len == 0) - return ret; - else - return __bf_round(r, prec, flags, r->len, ret); -} - -/* add (1 - 2*e_sign) * 2^e */ -static int bf_add_epsilon(bf_t *r, const bf_t *a, slimb_t e, int e_sign, - limb_t prec, int flags) -{ - bf_t T_s, *T = &T_s; - int ret; - /* small argument case: result = 1 + epsilon * sign(x) */ - bf_init(a->ctx, T); - bf_set_ui(T, 1); - T->sign = e_sign; - T->expn += e; - ret = bf_add(r, r, T, prec, flags); - bf_delete(T); - return ret; -} - -/* Compute the exponential using faithful rounding at precision 'prec'. - Note: the algorithm is from MPFR */ -static int bf_exp_internal(bf_t *r, const bf_t *a, limb_t prec, void *opaque) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - slimb_t n, K, l, i, prec1; - - assert(r != a); - - /* argument reduction: - T = a - n*log(2) with 0 <= T < log(2) and n integer. - */ - bf_init(s, T); - if (a->expn <= -1) { - /* 0 <= abs(a) <= 0.5 */ - if (a->sign) - n = -1; - else - n = 0; - } else { - bf_const_log2(T, LIMB_BITS, BF_RNDZ); - bf_div(T, a, T, LIMB_BITS, BF_RNDD); - bf_get_limb(&n, T, 0); - } - - K = bf_isqrt((prec + 1) / 2); - l = (prec - 1) / K + 1; - /* XXX: precision analysis ? */ - prec1 = prec + (K + 2 * l + 18) + K + 8; - if (a->expn > 0) - prec1 += a->expn; - // printf("n=%ld K=%ld prec1=%ld\n", n, K, prec1); - - bf_const_log2(T, prec1, BF_RNDF); - bf_mul_si(T, T, n, prec1, BF_RNDN); - bf_sub(T, a, T, prec1, BF_RNDN); - - /* reduce the range of T */ - bf_mul_2exp(T, -K, BF_PREC_INF, BF_RNDZ); - - /* Taylor expansion around zero : - 1 + x + x^2/2 + ... + x^n/n! - = (1 + x * (1 + x/2 * (1 + ... (x/n)))) - */ - { - bf_t U_s, *U = &U_s; - - bf_init(s, U); - bf_set_ui(r, 1); - for(i = l ; i >= 1; i--) { - bf_set_ui(U, i); - bf_div(U, T, U, prec1, BF_RNDN); - bf_mul(r, r, U, prec1, BF_RNDN); - bf_add_si(r, r, 1, prec1, BF_RNDN); - } - bf_delete(U); - } - bf_delete(T); - - /* undo the range reduction */ - for(i = 0; i < K; i++) { - bf_mul(r, r, r, prec1, BF_RNDN | BF_FLAG_EXT_EXP); - } - - /* undo the argument reduction */ - bf_mul_2exp(r, n, BF_PREC_INF, BF_RNDZ | BF_FLAG_EXT_EXP); - - return BF_ST_INEXACT; -} - -/* crude overflow and underflow tests for exp(a). a_low <= a <= a_high */ -static int check_exp_underflow_overflow(bf_context_t *s, bf_t *r, - const bf_t *a_low, const bf_t *a_high, - limb_t prec, bf_flags_t flags) -{ - bf_t T_s, *T = &T_s; - bf_t log2_s, *log2 = &log2_s; - slimb_t e_min, e_max; - - if (a_high->expn <= 0) - return 0; - - e_max = (limb_t)1 << (bf_get_exp_bits(flags) - 1); - e_min = -e_max + 3; - if (flags & BF_FLAG_SUBNORMAL) - e_min -= (prec - 1); - - bf_init(s, T); - bf_init(s, log2); - bf_const_log2(log2, LIMB_BITS, BF_RNDU); - bf_mul_ui(T, log2, e_max, LIMB_BITS, BF_RNDU); - /* a_low > e_max * log(2) implies exp(a) > e_max */ - if (bf_cmp_lt(T, a_low) > 0) { - /* overflow */ - bf_delete(T); - bf_delete(log2); - return bf_set_overflow(r, 0, prec, flags); - } - /* a_high < (e_min - 2) * log(2) implies exp(a) < (e_min - 2) */ - bf_const_log2(log2, LIMB_BITS, BF_RNDD); - bf_mul_si(T, log2, e_min - 2, LIMB_BITS, BF_RNDD); - if (bf_cmp_lt(a_high, T)) { - int rnd_mode = flags & BF_RND_MASK; - - /* underflow */ - bf_delete(T); - bf_delete(log2); - if (rnd_mode == BF_RNDU) { - /* set the smallest value */ - bf_set_ui(r, 1); - r->expn = e_min; - } else { - bf_set_zero(r, 0); - } - return BF_ST_UNDERFLOW | BF_ST_INEXACT; - } - bf_delete(log2); - bf_delete(T); - return 0; -} - -int bf_exp(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = r->ctx; - int ret; - assert(r != a); - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - } else if (a->expn == BF_EXP_INF) { - if (a->sign) - bf_set_zero(r, 0); - else - bf_set_inf(r, 0); - } else { - bf_set_ui(r, 1); - } - return 0; - } - - ret = check_exp_underflow_overflow(s, r, a, a, prec, flags); - if (ret) - return ret; - if (a->expn < 0 && (-a->expn) >= (prec + 2)) { - /* small argument case: result = 1 + epsilon * sign(x) */ - bf_set_ui(r, 1); - return bf_add_epsilon(r, r, -(prec + 2), a->sign, prec, flags); - } - - return bf_ziv_rounding(r, a, prec, flags, bf_exp_internal, NULL); -} - -static int bf_log_internal(bf_t *r, const bf_t *a, limb_t prec, void *opaque) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - bf_t U_s, *U = &U_s; - bf_t V_s, *V = &V_s; - slimb_t n, prec1, l, i, K; - - assert(r != a); - - bf_init(s, T); - /* argument reduction 1 */ - /* T=a*2^n with 2/3 <= T <= 4/3 */ - { - bf_t U_s, *U = &U_s; - bf_set(T, a); - n = T->expn; - T->expn = 0; - /* U= ~ 2/3 */ - bf_init(s, U); - bf_set_ui(U, 0xaaaaaaaa); - U->expn = 0; - if (bf_cmp_lt(T, U)) { - T->expn++; - n--; - } - bf_delete(U); - } - // printf("n=%ld\n", n); - // bf_print_str("T", T); - - /* XXX: precision analysis */ - /* number of iterations for argument reduction 2 */ - K = bf_isqrt((prec + 1) / 2); - /* order of Taylor expansion */ - l = prec / (2 * K) + 1; - /* precision of the intermediate computations */ - prec1 = prec + K + 2 * l + 32; - - bf_init(s, U); - bf_init(s, V); - - /* Note: cancellation occurs here, so we use more precision (XXX: - reduce the precision by computing the exact cancellation) */ - bf_add_si(T, T, -1, BF_PREC_INF, BF_RNDN); - - /* argument reduction 2 */ - for(i = 0; i < K; i++) { - /* T = T / (1 + sqrt(1 + T)) */ - bf_add_si(U, T, 1, prec1, BF_RNDN); - bf_sqrt(V, U, prec1, BF_RNDF); - bf_add_si(U, V, 1, prec1, BF_RNDN); - bf_div(T, T, U, prec1, BF_RNDN); - } - - { - bf_t Y_s, *Y = &Y_s; - bf_t Y2_s, *Y2 = &Y2_s; - bf_init(s, Y); - bf_init(s, Y2); - - /* compute ln(1+x) = ln((1+y)/(1-y)) with y=x/(2+x) - = y + y^3/3 + ... + y^(2*l + 1) / (2*l+1) - with Y=Y^2 - = y*(1+Y/3+Y^2/5+...) = y*(1+Y*(1/3+Y*(1/5 + ...))) - */ - bf_add_si(Y, T, 2, prec1, BF_RNDN); - bf_div(Y, T, Y, prec1, BF_RNDN); - - bf_mul(Y2, Y, Y, prec1, BF_RNDN); - bf_set_ui(r, 0); - for(i = l; i >= 1; i--) { - bf_set_ui(U, 1); - bf_set_ui(V, 2 * i + 1); - bf_div(U, U, V, prec1, BF_RNDN); - bf_add(r, r, U, prec1, BF_RNDN); - bf_mul(r, r, Y2, prec1, BF_RNDN); - } - bf_add_si(r, r, 1, prec1, BF_RNDN); - bf_mul(r, r, Y, prec1, BF_RNDN); - bf_delete(Y); - bf_delete(Y2); - } - bf_delete(V); - bf_delete(U); - - /* multiplication by 2 for the Taylor expansion and undo the - argument reduction 2*/ - bf_mul_2exp(r, K + 1, BF_PREC_INF, BF_RNDZ); - - /* undo the argument reduction 1 */ - bf_const_log2(T, prec1, BF_RNDF); - bf_mul_si(T, T, n, prec1, BF_RNDN); - bf_add(r, r, T, prec1, BF_RNDN); - - bf_delete(T); - return BF_ST_INEXACT; -} - -int bf_log(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - - assert(r != a); - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF) { - if (a->sign) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_set_inf(r, 0); - return 0; - } - } else { - bf_set_inf(r, 1); - return 0; - } - } - if (a->sign) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } - bf_init(s, T); - bf_set_ui(T, 1); - if (bf_cmp_eq(a, T)) { - bf_set_zero(r, 0); - bf_delete(T); - return 0; - } - bf_delete(T); - - return bf_ziv_rounding(r, a, prec, flags, bf_log_internal, NULL); -} - -/* x and y finite and x > 0 */ -static int bf_pow_generic(bf_t *r, const bf_t *x, limb_t prec, void *opaque) -{ - bf_context_t *s = r->ctx; - const bf_t *y = opaque; - bf_t T_s, *T = &T_s; - limb_t prec1; - - bf_init(s, T); - /* XXX: proof for the added precision */ - prec1 = prec + 32; - bf_log(T, x, prec1, BF_RNDF | BF_FLAG_EXT_EXP); - bf_mul(T, T, y, prec1, BF_RNDF | BF_FLAG_EXT_EXP); - if (bf_is_nan(T)) - bf_set_nan(r); - else - bf_exp_internal(r, T, prec1, NULL); /* no overflow/underlow test needed */ - bf_delete(T); - return BF_ST_INEXACT; -} - -/* x and y finite, x > 0, y integer and y fits on one limb */ -static int bf_pow_int(bf_t *r, const bf_t *x, limb_t prec, void *opaque) -{ - bf_context_t *s = r->ctx; - const bf_t *y = opaque; - bf_t T_s, *T = &T_s; - limb_t prec1; - int ret; - slimb_t y1; - - bf_get_limb(&y1, y, 0); - if (y1 < 0) - y1 = -y1; - /* XXX: proof for the added precision */ - prec1 = prec + ceil_log2(y1) * 2 + 8; - ret = bf_pow_ui(r, x, y1 < 0 ? -y1 : y1, prec1, BF_RNDN | BF_FLAG_EXT_EXP); - if (y->sign) { - bf_init(s, T); - bf_set_ui(T, 1); - ret |= bf_div(r, T, r, prec1, BF_RNDN | BF_FLAG_EXT_EXP); - bf_delete(T); - } - return ret; -} - -/* x must be a finite non zero float. Return TRUE if there is a - floating point number r such as x=r^(2^n) and return this floating - point number 'r'. Otherwise return FALSE and r is undefined. */ -static BOOL check_exact_power2n(bf_t *r, const bf_t *x, slimb_t n) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - slimb_t e, i, er; - limb_t v; - - /* x = m*2^e with m odd integer */ - e = bf_get_exp_min(x); - /* fast check on the exponent */ - if (n > (LIMB_BITS - 1)) { - if (e != 0) - return FALSE; - er = 0; - } else { - if ((e & (((limb_t)1 << n) - 1)) != 0) - return FALSE; - er = e >> n; - } - /* every perfect odd square = 1 modulo 8 */ - v = get_bits(x->tab, x->len, x->len * LIMB_BITS - x->expn + e); - if ((v & 7) != 1) - return FALSE; - - bf_init(s, T); - bf_set(T, x); - T->expn -= e; - for(i = 0; i < n; i++) { - if (i != 0) - bf_set(T, r); - if (bf_sqrtrem(r, NULL, T) != 0) - return FALSE; - } - r->expn += er; - return TRUE; -} - -/* prec = BF_PREC_INF is accepted for x and y integers and y >= 0 */ -int bf_pow(bf_t *r, const bf_t *x, const bf_t *y, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - bf_t ytmp_s; - BOOL y_is_int, y_is_odd; - int r_sign, ret, rnd_mode; - slimb_t y_emin; - - if (x->len == 0 || y->len == 0) { - if (y->expn == BF_EXP_ZERO) { - /* pow(x, 0) = 1 */ - bf_set_ui(r, 1); - } else if (x->expn == BF_EXP_NAN) { - bf_set_nan(r); - } else { - int cmp_x_abs_1; - bf_set_ui(r, 1); - cmp_x_abs_1 = bf_cmpu(x, r); - if (cmp_x_abs_1 == 0 && (flags & BF_POW_JS_QUIRKS) && - (y->expn >= BF_EXP_INF)) { - bf_set_nan(r); - } else if (cmp_x_abs_1 == 0 && - (!x->sign || y->expn != BF_EXP_NAN)) { - /* pow(1, y) = 1 even if y = NaN */ - /* pow(-1, +/-inf) = 1 */ - } else if (y->expn == BF_EXP_NAN) { - bf_set_nan(r); - } else if (y->expn == BF_EXP_INF) { - if (y->sign == (cmp_x_abs_1 > 0)) { - bf_set_zero(r, 0); - } else { - bf_set_inf(r, 0); - } - } else { - y_emin = bf_get_exp_min(y); - y_is_odd = (y_emin == 0); - if (y->sign == (x->expn == BF_EXP_ZERO)) { - bf_set_inf(r, y_is_odd & x->sign); - if (y->sign) { - /* pow(0, y) with y < 0 */ - return BF_ST_DIVIDE_ZERO; - } - } else { - bf_set_zero(r, y_is_odd & x->sign); - } - } - } - return 0; - } - bf_init(s, T); - bf_set(T, x); - y_emin = bf_get_exp_min(y); - y_is_int = (y_emin >= 0); - rnd_mode = flags & BF_RND_MASK; - if (x->sign) { - if (!y_is_int) { - bf_set_nan(r); - bf_delete(T); - return BF_ST_INVALID_OP; - } - y_is_odd = (y_emin == 0); - r_sign = y_is_odd; - /* change the directed rounding mode if the sign of the result - is changed */ - if (r_sign && (rnd_mode == BF_RNDD || rnd_mode == BF_RNDU)) - flags ^= 1; - bf_neg(T); - } else { - r_sign = 0; - } - - bf_set_ui(r, 1); - if (bf_cmp_eq(T, r)) { - /* abs(x) = 1: nothing more to do */ - ret = 0; - } else { - /* check the overflow/underflow cases */ - { - bf_t al_s, *al = &al_s; - bf_t ah_s, *ah = &ah_s; - limb_t precl = LIMB_BITS; - - bf_init(s, al); - bf_init(s, ah); - /* compute bounds of log(abs(x)) * y with a low precision */ - /* XXX: compute bf_log() once */ - /* XXX: add a fast test before this slow test */ - bf_log(al, T, precl, BF_RNDD); - bf_log(ah, T, precl, BF_RNDU); - bf_mul(al, al, y, precl, BF_RNDD ^ y->sign); - bf_mul(ah, ah, y, precl, BF_RNDU ^ y->sign); - ret = check_exp_underflow_overflow(s, r, al, ah, prec, flags); - bf_delete(al); - bf_delete(ah); - if (ret) - goto done; - } - - if (y_is_int) { - slimb_t T_bits, e; - int_pow: - T_bits = T->expn - bf_get_exp_min(T); - if (T_bits == 1) { - /* pow(2^b, y) = 2^(b*y) */ - bf_mul_si(T, y, T->expn - 1, LIMB_BITS, BF_RNDZ); - bf_get_limb(&e, T, 0); - bf_set_ui(r, 1); - ret = bf_mul_2exp(r, e, prec, flags); - } else if (prec == BF_PREC_INF) { - slimb_t y1; - /* specific case for infinite precision (integer case) */ - bf_get_limb(&y1, y, 0); - assert(!y->sign); - /* x must be an integer, so abs(x) >= 2 */ - if (y1 >= ((slimb_t)1 << BF_EXP_BITS_MAX)) { - bf_delete(T); - return bf_set_overflow(r, 0, BF_PREC_INF, flags); - } - ret = bf_pow_ui(r, T, y1, BF_PREC_INF, BF_RNDZ); - } else { - if (y->expn <= 31) { - /* small enough power: use exponentiation in all cases */ - } else if (y->sign) { - /* cannot be exact */ - goto general_case; - } else { - if (rnd_mode == BF_RNDF) - goto general_case; /* no need to track exact results */ - /* see if the result has a chance to be exact: - if x=a*2^b (a odd), x^y=a^y*2^(b*y) - x^y needs a precision of at least floor_log2(a)*y bits - */ - bf_mul_si(r, y, T_bits - 1, LIMB_BITS, BF_RNDZ); - bf_get_limb(&e, r, 0); - if (prec < e) - goto general_case; - } - ret = bf_ziv_rounding(r, T, prec, flags, bf_pow_int, (void *)y); - } - } else { - if (rnd_mode != BF_RNDF) { - bf_t *y1; - if (y_emin < 0 && check_exact_power2n(r, T, -y_emin)) { - /* the problem is reduced to a power to an integer */ - bf_set(T, r); - y1 = &ytmp_s; - y1->tab = y->tab; - y1->len = y->len; - y1->sign = y->sign; - y1->expn = y->expn - y_emin; - y = y1; - goto int_pow; - } - } - general_case: - ret = bf_ziv_rounding(r, T, prec, flags, bf_pow_generic, (void *)y); - } - } - done: - bf_delete(T); - r->sign = r_sign; - return ret; -} - -/* compute sqrt(-2*x-x^2) to get |sin(x)| from cos(x) - 1. */ -static void bf_sqrt_sin(bf_t *r, const bf_t *x, limb_t prec1) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - bf_init(s, T); - bf_set(T, x); - bf_mul(r, T, T, prec1, BF_RNDN); - bf_mul_2exp(T, 1, BF_PREC_INF, BF_RNDZ); - bf_add(T, T, r, prec1, BF_RNDN); - bf_neg(T); - bf_sqrt(r, T, prec1, BF_RNDF); - bf_delete(T); -} - -static int bf_sincos(bf_t *s, bf_t *c, const bf_t *a, limb_t prec) -{ - bf_context_t *s1 = a->ctx; - bf_t T_s, *T = &T_s; - bf_t U_s, *U = &U_s; - bf_t r_s, *r = &r_s; - slimb_t K, prec1, i, l, mod, prec2; - int is_neg; - - assert(c != a && s != a); - - bf_init(s1, T); - bf_init(s1, U); - bf_init(s1, r); - - /* XXX: precision analysis */ - K = bf_isqrt(prec / 2); - l = prec / (2 * K) + 1; - prec1 = prec + 2 * K + l + 8; - - /* after the modulo reduction, -pi/4 <= T <= pi/4 */ - if (a->expn <= -1) { - /* abs(a) <= 0.25: no modulo reduction needed */ - bf_set(T, a); - mod = 0; - } else { - slimb_t cancel; - cancel = 0; - for(;;) { - prec2 = prec1 + a->expn + cancel; - bf_const_pi(U, prec2, BF_RNDF); - bf_mul_2exp(U, -1, BF_PREC_INF, BF_RNDZ); - bf_remquo(&mod, T, a, U, prec2, BF_RNDN, BF_RNDN); - // printf("T.expn=%ld prec2=%ld\n", T->expn, prec2); - if (mod == 0 || (T->expn != BF_EXP_ZERO && - (T->expn + prec2) >= (prec1 - 1))) - break; - /* increase the number of bits until the precision is good enough */ - cancel = bf_max(-T->expn, (cancel + 1) * 3 / 2); - } - mod &= 3; - } - - is_neg = T->sign; - - /* compute cosm1(x) = cos(x) - 1 */ - bf_mul(T, T, T, prec1, BF_RNDN); - bf_mul_2exp(T, -2 * K, BF_PREC_INF, BF_RNDZ); - - /* Taylor expansion: - -x^2/2 + x^4/4! - x^6/6! + ... - */ - bf_set_ui(r, 1); - for(i = l ; i >= 1; i--) { - bf_set_ui(U, 2 * i - 1); - bf_mul_ui(U, U, 2 * i, BF_PREC_INF, BF_RNDZ); - bf_div(U, T, U, prec1, BF_RNDN); - bf_mul(r, r, U, prec1, BF_RNDN); - bf_neg(r); - if (i != 1) - bf_add_si(r, r, 1, prec1, BF_RNDN); - } - bf_delete(U); - - /* undo argument reduction: - cosm1(2*x)= 2*(2*cosm1(x)+cosm1(x)^2) - */ - for(i = 0; i < K; i++) { - bf_mul(T, r, r, prec1, BF_RNDN); - bf_mul_2exp(r, 1, BF_PREC_INF, BF_RNDZ); - bf_add(r, r, T, prec1, BF_RNDN); - bf_mul_2exp(r, 1, BF_PREC_INF, BF_RNDZ); - } - bf_delete(T); - - if (c) { - if ((mod & 1) == 0) { - bf_add_si(c, r, 1, prec1, BF_RNDN); - } else { - bf_sqrt_sin(c, r, prec1); - c->sign = is_neg ^ 1; - } - c->sign ^= mod >> 1; - } - if (s) { - if ((mod & 1) == 0) { - bf_sqrt_sin(s, r, prec1); - s->sign = is_neg; - } else { - bf_add_si(s, r, 1, prec1, BF_RNDN); - } - s->sign ^= mod >> 1; - } - bf_delete(r); - return BF_ST_INEXACT; -} - -static int bf_cos_internal(bf_t *r, const bf_t *a, limb_t prec, void *opaque) -{ - return bf_sincos(NULL, r, a, prec); -} - -int bf_cos(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_set_ui(r, 1); - return 0; - } - } - - /* small argument case: result = 1+r(x) with r(x) = -x^2/2 + - O(X^4). We assume r(x) < 2^(2*EXP(x) - 1). */ - if (a->expn < 0) { - slimb_t e; - e = 2 * a->expn - 1; - if (e < -(prec + 2)) { - bf_set_ui(r, 1); - return bf_add_epsilon(r, r, e, 1, prec, flags); - } - } - - return bf_ziv_rounding(r, a, prec, flags, bf_cos_internal, NULL); -} - -static int bf_sin_internal(bf_t *r, const bf_t *a, limb_t prec, void *opaque) -{ - return bf_sincos(r, NULL, a, prec); -} - -int bf_sin(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_set_zero(r, a->sign); - return 0; - } - } - - /* small argument case: result = x+r(x) with r(x) = -x^3/6 + - O(X^5). We assume r(x) < 2^(3*EXP(x) - 2). */ - if (a->expn < 0) { - slimb_t e; - e = sat_add(2 * a->expn, a->expn - 2); - if (e < a->expn - bf_max(prec + 2, a->len * LIMB_BITS + 2)) { - bf_set(r, a); - return bf_add_epsilon(r, r, e, 1 - a->sign, prec, flags); - } - } - - return bf_ziv_rounding(r, a, prec, flags, bf_sin_internal, NULL); -} - -static int bf_tan_internal(bf_t *r, const bf_t *a, limb_t prec, void *opaque) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - limb_t prec1; - - /* XXX: precision analysis */ - prec1 = prec + 8; - bf_init(s, T); - bf_sincos(r, T, a, prec1); - bf_div(r, r, T, prec1, BF_RNDF); - bf_delete(T); - return BF_ST_INEXACT; -} - -int bf_tan(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - assert(r != a); - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_set_zero(r, a->sign); - return 0; - } - } - - /* small argument case: result = x+r(x) with r(x) = x^3/3 + - O(X^5). We assume r(x) < 2^(3*EXP(x) - 1). */ - if (a->expn < 0) { - slimb_t e; - e = sat_add(2 * a->expn, a->expn - 1); - if (e < a->expn - bf_max(prec + 2, a->len * LIMB_BITS + 2)) { - bf_set(r, a); - return bf_add_epsilon(r, r, e, a->sign, prec, flags); - } - } - - return bf_ziv_rounding(r, a, prec, flags, bf_tan_internal, NULL); -} - -/* if add_pi2 is true, add pi/2 to the result (used for acos(x) to - avoid cancellation) */ -static int bf_atan_internal(bf_t *r, const bf_t *a, limb_t prec, - void *opaque) -{ - bf_context_t *s = r->ctx; - BOOL add_pi2 = (BOOL)(intptr_t)opaque; - bf_t T_s, *T = &T_s; - bf_t U_s, *U = &U_s; - bf_t V_s, *V = &V_s; - bf_t X2_s, *X2 = &X2_s; - int cmp_1; - slimb_t prec1, i, K, l; - - /* XXX: precision analysis */ - K = bf_isqrt((prec + 1) / 2); - l = prec / (2 * K) + 1; - prec1 = prec + K + 2 * l + 32; - // printf("prec=%d K=%d l=%d prec1=%d\n", (int)prec, (int)K, (int)l, (int)prec1); - - bf_init(s, T); - cmp_1 = (a->expn >= 1); /* a >= 1 */ - if (cmp_1) { - bf_set_ui(T, 1); - bf_div(T, T, a, prec1, BF_RNDN); - } else { - bf_set(T, a); - } - - /* abs(T) <= 1 */ - - /* argument reduction */ - - bf_init(s, U); - bf_init(s, V); - bf_init(s, X2); - for(i = 0; i < K; i++) { - /* T = T / (1 + sqrt(1 + T^2)) */ - bf_mul(U, T, T, prec1, BF_RNDN); - bf_add_si(U, U, 1, prec1, BF_RNDN); - bf_sqrt(V, U, prec1, BF_RNDN); - bf_add_si(V, V, 1, prec1, BF_RNDN); - bf_div(T, T, V, prec1, BF_RNDN); - } - - /* Taylor series: - x - x^3/3 + ... + (-1)^ l * y^(2*l + 1) / (2*l+1) - */ - bf_mul(X2, T, T, prec1, BF_RNDN); - bf_set_ui(r, 0); - for(i = l; i >= 1; i--) { - bf_set_si(U, 1); - bf_set_ui(V, 2 * i + 1); - bf_div(U, U, V, prec1, BF_RNDN); - bf_neg(r); - bf_add(r, r, U, prec1, BF_RNDN); - bf_mul(r, r, X2, prec1, BF_RNDN); - } - bf_neg(r); - bf_add_si(r, r, 1, prec1, BF_RNDN); - bf_mul(r, r, T, prec1, BF_RNDN); - - /* undo the argument reduction */ - bf_mul_2exp(r, K, BF_PREC_INF, BF_RNDZ); - - bf_delete(U); - bf_delete(V); - bf_delete(X2); - - i = add_pi2; - if (cmp_1 > 0) { - /* undo the inversion : r = sign(a)*PI/2 - r */ - bf_neg(r); - i += 1 - 2 * a->sign; - } - /* add i*(pi/2) with -1 <= i <= 2 */ - if (i != 0) { - bf_const_pi(T, prec1, BF_RNDF); - if (i != 2) - bf_mul_2exp(T, -1, BF_PREC_INF, BF_RNDZ); - T->sign = (i < 0); - bf_add(r, T, r, prec1, BF_RNDN); - } - - bf_delete(T); - return BF_ST_INEXACT; -} - -int bf_atan(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - int res; - - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF) { - /* -PI/2 or PI/2 */ - bf_const_pi_signed(r, a->sign, prec, flags); - bf_mul_2exp(r, -1, BF_PREC_INF, BF_RNDZ); - return BF_ST_INEXACT; - } else { - bf_set_zero(r, a->sign); - return 0; - } - } - - bf_init(s, T); - bf_set_ui(T, 1); - res = bf_cmpu(a, T); - bf_delete(T); - if (res == 0) { - /* short cut: abs(a) == 1 -> +/-pi/4 */ - bf_const_pi_signed(r, a->sign, prec, flags); - bf_mul_2exp(r, -2, BF_PREC_INF, BF_RNDZ); - return BF_ST_INEXACT; - } - - /* small argument case: result = x+r(x) with r(x) = -x^3/3 + - O(X^5). We assume r(x) < 2^(3*EXP(x) - 1). */ - if (a->expn < 0) { - slimb_t e; - e = sat_add(2 * a->expn, a->expn - 1); - if (e < a->expn - bf_max(prec + 2, a->len * LIMB_BITS + 2)) { - bf_set(r, a); - return bf_add_epsilon(r, r, e, 1 - a->sign, prec, flags); - } - } - - return bf_ziv_rounding(r, a, prec, flags, bf_atan_internal, (void *)FALSE); -} - -static int bf_atan2_internal(bf_t *r, const bf_t *y, limb_t prec, void *opaque) -{ - bf_context_t *s = r->ctx; - const bf_t *x = opaque; - bf_t T_s, *T = &T_s; - limb_t prec1; - int ret; - - if (y->expn == BF_EXP_NAN || x->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } - - /* compute atan(y/x) assumming inf/inf = 1 and 0/0 = 0 */ - bf_init(s, T); - prec1 = prec + 32; - if (y->expn == BF_EXP_INF && x->expn == BF_EXP_INF) { - bf_set_ui(T, 1); - T->sign = y->sign ^ x->sign; - } else if (y->expn == BF_EXP_ZERO && x->expn == BF_EXP_ZERO) { - bf_set_zero(T, y->sign ^ x->sign); - } else { - bf_div(T, y, x, prec1, BF_RNDF); - } - ret = bf_atan(r, T, prec1, BF_RNDF); - - if (x->sign) { - /* if x < 0 (it includes -0), return sign(y)*pi + atan(y/x) */ - bf_const_pi(T, prec1, BF_RNDF); - T->sign = y->sign; - bf_add(r, r, T, prec1, BF_RNDN); - ret |= BF_ST_INEXACT; - } - - bf_delete(T); - return ret; -} - -int bf_atan2(bf_t *r, const bf_t *y, const bf_t *x, - limb_t prec, bf_flags_t flags) -{ - return bf_ziv_rounding(r, y, prec, flags, bf_atan2_internal, (void *)x); -} - -static int bf_asin_internal(bf_t *r, const bf_t *a, limb_t prec, void *opaque) -{ - bf_context_t *s = r->ctx; - BOOL is_acos = (BOOL)(intptr_t)opaque; - bf_t T_s, *T = &T_s; - limb_t prec1, prec2; - - /* asin(x) = atan(x/sqrt(1-x^2)) - acos(x) = pi/2 - asin(x) */ - prec1 = prec + 8; - /* increase the precision in x^2 to compensate the cancellation in - (1-x^2) if x is close to 1 */ - /* XXX: use less precision when possible */ - if (a->expn >= 0) - prec2 = BF_PREC_INF; - else - prec2 = prec1; - bf_init(s, T); - bf_mul(T, a, a, prec2, BF_RNDN); - bf_neg(T); - bf_add_si(T, T, 1, prec2, BF_RNDN); - - bf_sqrt(r, T, prec1, BF_RNDN); - bf_div(T, a, r, prec1, BF_RNDN); - if (is_acos) - bf_neg(T); - bf_atan_internal(r, T, prec1, (void *)(intptr_t)is_acos); - bf_delete(T); - return BF_ST_INEXACT; -} - -int bf_asin(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - int res; - - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_set_zero(r, a->sign); - return 0; - } - } - bf_init(s, T); - bf_set_ui(T, 1); - res = bf_cmpu(a, T); - bf_delete(T); - if (res > 0) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } - - /* small argument case: result = x+r(x) with r(x) = x^3/6 + - O(X^5). We assume r(x) < 2^(3*EXP(x) - 2). */ - if (a->expn < 0) { - slimb_t e; - e = sat_add(2 * a->expn, a->expn - 2); - if (e < a->expn - bf_max(prec + 2, a->len * LIMB_BITS + 2)) { - bf_set(r, a); - return bf_add_epsilon(r, r, e, a->sign, prec, flags); - } - } - - return bf_ziv_rounding(r, a, prec, flags, bf_asin_internal, (void *)FALSE); -} - -int bf_acos(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = r->ctx; - bf_t T_s, *T = &T_s; - int res; - - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bf_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bf_const_pi(r, prec, flags); - bf_mul_2exp(r, -1, BF_PREC_INF, BF_RNDZ); - return BF_ST_INEXACT; - } - } - bf_init(s, T); - bf_set_ui(T, 1); - res = bf_cmpu(a, T); - bf_delete(T); - if (res > 0) { - bf_set_nan(r); - return BF_ST_INVALID_OP; - } else if (res == 0 && a->sign == 0) { - bf_set_zero(r, 0); - return 0; - } - - return bf_ziv_rounding(r, a, prec, flags, bf_asin_internal, (void *)TRUE); -} - -/***************************************************************/ -/* decimal floating point numbers */ - -#ifdef USE_BF_DEC - -#define adddq(r1, r0, a1, a0) \ - do { \ - limb_t __t = r0; \ - r0 += (a0); \ - r1 += (a1) + (r0 < __t); \ - } while (0) - -#define subdq(r1, r0, a1, a0) \ - do { \ - limb_t __t = r0; \ - r0 -= (a0); \ - r1 -= (a1) + (r0 > __t); \ - } while (0) - -#if LIMB_BITS == 64 - -/* Note: we assume __int128 is available */ -#define muldq(r1, r0, a, b) \ - do { \ - unsigned __int128 __t; \ - __t = (unsigned __int128)(a) * (unsigned __int128)(b); \ - r0 = __t; \ - r1 = __t >> 64; \ - } while (0) - -#define divdq(q, r, a1, a0, b) \ - do { \ - unsigned __int128 __t; \ - limb_t __b = (b); \ - __t = ((unsigned __int128)(a1) << 64) | (a0); \ - q = __t / __b; \ - r = __t % __b; \ - } while (0) - -#else - -#define muldq(r1, r0, a, b) \ - do { \ - uint64_t __t; \ - __t = (uint64_t)(a) * (uint64_t)(b); \ - r0 = __t; \ - r1 = __t >> 32; \ - } while (0) - -#define divdq(q, r, a1, a0, b) \ - do { \ - uint64_t __t; \ - limb_t __b = (b); \ - __t = ((uint64_t)(a1) << 32) | (a0); \ - q = __t / __b; \ - r = __t % __b; \ - } while (0) - -#endif /* LIMB_BITS != 64 */ - -#if LIMB_DIGITS == 19 - -/* WARNING: hardcoded for b = 1e19. It is assumed that: - 0 <= a1 < 2^63 */ -#define divdq_base(q, r, a1, a0)\ -do {\ - uint64_t __a0, __a1, __t0, __t1, __b = BF_DEC_BASE; \ - __a0 = a0;\ - __a1 = a1;\ - __t0 = __a1;\ - __t0 = shld(__t0, __a0, 1);\ - muldq(q, __t1, __t0, UINT64_C(17014118346046923173)); \ - muldq(__t1, __t0, q, __b);\ - subdq(__a1, __a0, __t1, __t0);\ - subdq(__a1, __a0, 1, __b * 2); \ - __t0 = (slimb_t)__a1 >> 1; \ - q += 2 + __t0;\ - adddq(__a1, __a0, 0, __b & __t0);\ - q += __a1; \ - __a0 += __b & __a1; \ - r = __a0;\ -} while(0) - -#elif LIMB_DIGITS == 9 - -/* WARNING: hardcoded for b = 1e9. It is assumed that: - 0 <= a1 < 2^29 */ -#define divdq_base(q, r, a1, a0)\ -do {\ - uint32_t __t0, __t1, __b = BF_DEC_BASE; \ - __t0 = a1;\ - __t1 = a0;\ - __t0 = (__t0 << 3) | (__t1 >> (32 - 3)); \ - muldq(q, __t1, __t0, 2305843009U);\ - r = a0 - q * __b;\ - __t1 = (r >= __b);\ - q += __t1;\ - if (__t1)\ - r -= __b;\ -} while(0) - -#endif - -/* fast integer division by a fixed constant */ - -typedef struct FastDivData { - limb_t m1; /* multiplier */ - int8_t shift1; - int8_t shift2; -} FastDivData; - -/* From "Division by Invariant Integers using Multiplication" by - Torborn Granlund and Peter L. Montgomery */ -/* d must be != 0 */ -static inline __maybe_unused void fast_udiv_init(FastDivData *s, limb_t d) -{ - int l; - limb_t q, r, m1; - if (d == 1) - l = 0; - else - l = 64 - clz64(d - 1); - divdq(q, r, ((limb_t)1 << l) - d, 0, d); - (void)r; - m1 = q + 1; - // printf("d=%lu l=%d m1=0x%016lx\n", d, l, m1); - s->m1 = m1; - s->shift1 = l; - if (s->shift1 > 1) - s->shift1 = 1; - s->shift2 = l - 1; - if (s->shift2 < 0) - s->shift2 = 0; -} - -static inline limb_t fast_udiv(limb_t a, const FastDivData *s) -{ - limb_t t0, t1; - muldq(t1, t0, s->m1, a); - t0 = (a - t1) >> s->shift1; - return (t1 + t0) >> s->shift2; -} - -/* contains 10^i */ -const limb_t mp_pow_dec[LIMB_DIGITS + 1] = { - 1U, - 10U, - 100U, - 1000U, - 10000U, - 100000U, - 1000000U, - 10000000U, - 100000000U, - 1000000000U, -#if LIMB_BITS == 64 - 10000000000U, - 100000000000U, - 1000000000000U, - 10000000000000U, - 100000000000000U, - 1000000000000000U, - 10000000000000000U, - 100000000000000000U, - 1000000000000000000U, - 10000000000000000000U, -#endif -}; - -/* precomputed from fast_udiv_init(10^i) */ -static const FastDivData mp_pow_div[LIMB_DIGITS + 1] = { -#if LIMB_BITS == 32 - { 0x00000001, 0, 0 }, - { 0x9999999a, 1, 3 }, - { 0x47ae147b, 1, 6 }, - { 0x0624dd30, 1, 9 }, - { 0xa36e2eb2, 1, 13 }, - { 0x4f8b588f, 1, 16 }, - { 0x0c6f7a0c, 1, 19 }, - { 0xad7f29ac, 1, 23 }, - { 0x5798ee24, 1, 26 }, - { 0x12e0be83, 1, 29 }, -#else - { 0x0000000000000001, 0, 0 }, - { 0x999999999999999a, 1, 3 }, - { 0x47ae147ae147ae15, 1, 6 }, - { 0x0624dd2f1a9fbe77, 1, 9 }, - { 0xa36e2eb1c432ca58, 1, 13 }, - { 0x4f8b588e368f0847, 1, 16 }, - { 0x0c6f7a0b5ed8d36c, 1, 19 }, - { 0xad7f29abcaf48579, 1, 23 }, - { 0x5798ee2308c39dfa, 1, 26 }, - { 0x12e0be826d694b2f, 1, 29 }, - { 0xb7cdfd9d7bdbab7e, 1, 33 }, - { 0x5fd7fe17964955fe, 1, 36 }, - { 0x19799812dea11198, 1, 39 }, - { 0xc25c268497681c27, 1, 43 }, - { 0x6849b86a12b9b01f, 1, 46 }, - { 0x203af9ee756159b3, 1, 49 }, - { 0xcd2b297d889bc2b7, 1, 53 }, - { 0x70ef54646d496893, 1, 56 }, - { 0x2725dd1d243aba0f, 1, 59 }, - { 0xd83c94fb6d2ac34d, 1, 63 }, -#endif -}; - -/* divide by 10^shift with 0 <= shift <= LIMB_DIGITS */ -static inline limb_t fast_shr_dec(limb_t a, int shift) -{ - return fast_udiv(a, &mp_pow_div[shift]); -} - -/* division and remainder by 10^shift */ -#define fast_shr_rem_dec(q, r, a, shift) q = fast_shr_dec(a, shift), r = a - q * mp_pow_dec[shift] - -limb_t mp_add_dec(limb_t *res, const limb_t *op1, const limb_t *op2, - mp_size_t n, limb_t carry) -{ - limb_t base = BF_DEC_BASE; - mp_size_t i; - limb_t k, a, v; - - k=carry; - for(i=0;i v; - if (k) - a += base; - res[i] = a; - } - return k; -} - -limb_t mp_sub_ui_dec(limb_t *tab, limb_t b, mp_size_t n) -{ - limb_t base = BF_DEC_BASE; - mp_size_t i; - limb_t k, v, a; - - k=b; - for(i=0;i v; - if (k) - a += base; - tab[i]=a; - if (k == 0) - break; - } - return k; -} - -/* taba[] = taba[] * b + l. 0 <= b, l <= base - 1. Return the high carry */ -limb_t mp_mul1_dec(limb_t *tabr, const limb_t *taba, mp_size_t n, - limb_t b, limb_t l) -{ - mp_size_t i; - limb_t t0, t1, r; - - for(i = 0; i < n; i++) { - muldq(t1, t0, taba[i], b); - adddq(t1, t0, 0, l); - divdq_base(l, r, t1, t0); - tabr[i] = r; - } - return l; -} - -/* tabr[] += taba[] * b. 0 <= b <= base - 1. Return the value to add - to the high word */ -limb_t mp_add_mul1_dec(limb_t *tabr, const limb_t *taba, mp_size_t n, - limb_t b) -{ - mp_size_t i; - limb_t l, t0, t1, r; - - l = 0; - for(i = 0; i < n; i++) { - muldq(t1, t0, taba[i], b); - adddq(t1, t0, 0, l); - adddq(t1, t0, 0, tabr[i]); - divdq_base(l, r, t1, t0); - tabr[i] = r; - } - return l; -} - -/* tabr[] -= taba[] * b. 0 <= b <= base - 1. Return the value to - substract to the high word. */ -limb_t mp_sub_mul1_dec(limb_t *tabr, const limb_t *taba, mp_size_t n, - limb_t b) -{ - limb_t base = BF_DEC_BASE; - mp_size_t i; - limb_t l, t0, t1, r, a, v, c; - - /* XXX: optimize */ - l = 0; - for(i = 0; i < n; i++) { - muldq(t1, t0, taba[i], b); - adddq(t1, t0, 0, l); - divdq_base(l, r, t1, t0); - v = tabr[i]; - a = v - r; - c = a > v; - if (c) - a += base; - /* never bigger than base because r = 0 when l = base - 1 */ - l += c; - tabr[i] = a; - } - return l; -} - -/* size of the result : op1_size + op2_size. */ -void mp_mul_basecase_dec(limb_t *result, - const limb_t *op1, mp_size_t op1_size, - const limb_t *op2, mp_size_t op2_size) -{ - mp_size_t i; - limb_t r; - - result[op1_size] = mp_mul1_dec(result, op1, op1_size, op2[0], 0); - - for(i=1;i> 1; - if (r) - r = base_div2; - for(i = na - 1; i >= 0; i--) { - t0 = taba[i]; - tabr[i] = (t0 >> 1) + r; - r = 0; - if (t0 & 1) - r = base_div2; - } - if (r) - r = 1; - } else -#endif - if (na >= UDIV1NORM_THRESHOLD) { - shift = clz(b); - if (shift == 0) { - /* normalized case: b >= 2^(LIMB_BITS-1) */ - limb_t b_inv; - b_inv = udiv1norm_init(b); - for(i = na - 1; i >= 0; i--) { - muldq(t1, t0, r, base); - adddq(t1, t0, 0, taba[i]); - q = udiv1norm(&r, t1, t0, b, b_inv); - tabr[i] = q; - } - } else { - limb_t b_inv; - b <<= shift; - b_inv = udiv1norm_init(b); - for(i = na - 1; i >= 0; i--) { - muldq(t1, t0, r, base); - adddq(t1, t0, 0, taba[i]); - t1 = (t1 << shift) | (t0 >> (LIMB_BITS - shift)); - t0 <<= shift; - q = udiv1norm(&r, t1, t0, b, b_inv); - r >>= shift; - tabr[i] = q; - } - } - } else { - for(i = na - 1; i >= 0; i--) { - muldq(t1, t0, r, base); - adddq(t1, t0, 0, taba[i]); - divdq(q, r, t1, t0, b); - tabr[i] = q; - } - } - return r; -} - -static __maybe_unused void mp_print_str_dec(const char *str, - const limb_t *tab, slimb_t n) -{ - slimb_t i; - printf("%s=", str); - for(i = n - 1; i >= 0; i--) { - if (i != n - 1) - printf("_"); - printf("%0*" PRIu_LIMB, LIMB_DIGITS, tab[i]); - } - printf("\n"); -} - -static __maybe_unused void mp_print_str_h_dec(const char *str, - const limb_t *tab, slimb_t n, - limb_t high) -{ - slimb_t i; - printf("%s=", str); - printf("%0*" PRIu_LIMB, LIMB_DIGITS, high); - for(i = n - 1; i >= 0; i--) { - printf("_"); - printf("%0*" PRIu_LIMB, LIMB_DIGITS, tab[i]); - } - printf("\n"); -} - -//#define DEBUG_DIV_SLOW - -#define DIV_STATIC_ALLOC_LEN 16 - -/* return q = a / b and r = a % b. - - taba[na] must be allocated if tabb1[nb - 1] < B / 2. tabb1[nb - 1] - must be != zero. na must be >= nb. 's' can be NULL if tabb1[nb - 1] - >= B / 2. - - The remainder is is returned in taba and contains nb libms. tabq - contains na - nb + 1 limbs. No overlap is permitted. - - Running time of the standard method: (na - nb + 1) * nb - Return 0 if OK, -1 if memory alloc error -*/ -/* XXX: optimize */ -static int mp_div_dec(bf_context_t *s, limb_t *tabq, - limb_t *taba, mp_size_t na, - const limb_t *tabb1, mp_size_t nb) -{ - limb_t base = BF_DEC_BASE; - limb_t r, mult, t0, t1, a, c, q, v, *tabb; - mp_size_t i, j; - limb_t static_tabb[DIV_STATIC_ALLOC_LEN]; - -#ifdef DEBUG_DIV_SLOW - mp_print_str_dec("a", taba, na); - mp_print_str_dec("b", tabb1, nb); -#endif - - /* normalize tabb */ - r = tabb1[nb - 1]; - assert(r != 0); - i = na - nb; - if (r >= BF_DEC_BASE / 2) { - mult = 1; - tabb = (limb_t *)tabb1; - q = 1; - for(j = nb - 1; j >= 0; j--) { - if (taba[i + j] != tabb[j]) { - if (taba[i + j] < tabb[j]) - q = 0; - break; - } - } - tabq[i] = q; - if (q) { - mp_sub_dec(taba + i, taba + i, tabb, nb, 0); - } - i--; - } else { - mult = base / (r + 1); - if (likely(nb <= DIV_STATIC_ALLOC_LEN)) { - tabb = static_tabb; - } else { - tabb = bf_malloc(s, sizeof(limb_t) * nb); - if (!tabb) - return -1; - } - mp_mul1_dec(tabb, tabb1, nb, mult, 0); - taba[na] = mp_mul1_dec(taba, taba, na, mult, 0); - } - -#ifdef DEBUG_DIV_SLOW - printf("mult=" FMT_LIMB "\n", mult); - mp_print_str_dec("a_norm", taba, na + 1); - mp_print_str_dec("b_norm", tabb, nb); -#endif - - for(; i >= 0; i--) { - if (unlikely(taba[i + nb] >= tabb[nb - 1])) { - /* XXX: check if it is really possible */ - q = base - 1; - } else { - muldq(t1, t0, taba[i + nb], base); - adddq(t1, t0, 0, taba[i + nb - 1]); - divdq(q, r, t1, t0, tabb[nb - 1]); - } - // printf("i=%d q1=%ld\n", i, q); - - r = mp_sub_mul1_dec(taba + i, tabb, nb, q); - // mp_dump("r1", taba + i, nb, bd); - // printf("r2=%ld\n", r); - - v = taba[i + nb]; - a = v - r; - c = a > v; - if (c) - a += base; - taba[i + nb] = a; - - if (c != 0) { - /* negative result */ - for(;;) { - q--; - c = mp_add_dec(taba + i, taba + i, tabb, nb, 0); - /* propagate carry and test if positive result */ - if (c != 0) { - if (++taba[i + nb] == base) { - break; - } - } - } - } - tabq[i] = q; - } - -#ifdef DEBUG_DIV_SLOW - mp_print_str_dec("q", tabq, na - nb + 1); - mp_print_str_dec("r", taba, nb); -#endif - - /* remove the normalization */ - if (mult != 1) { - mp_div1_dec(taba, taba, nb, mult, 0); - if (unlikely(tabb != static_tabb)) - bf_free(s, tabb); - } - return 0; -} - -/* divide by 10^shift */ -static limb_t mp_shr_dec(limb_t *tab_r, const limb_t *tab, mp_size_t n, - limb_t shift, limb_t high) -{ - mp_size_t i; - limb_t l, a, q, r; - - assert(shift >= 1 && shift < LIMB_DIGITS); - l = high; - for(i = n - 1; i >= 0; i--) { - a = tab[i]; - fast_shr_rem_dec(q, r, a, shift); - tab_r[i] = q + l * mp_pow_dec[LIMB_DIGITS - shift]; - l = r; - } - return l; -} - -/* multiply by 10^shift */ -static limb_t mp_shl_dec(limb_t *tab_r, const limb_t *tab, mp_size_t n, - limb_t shift, limb_t low) -{ - mp_size_t i; - limb_t l, a, q, r; - - assert(shift >= 1 && shift < LIMB_DIGITS); - l = low; - for(i = 0; i < n; i++) { - a = tab[i]; - fast_shr_rem_dec(q, r, a, LIMB_DIGITS - shift); - tab_r[i] = r * mp_pow_dec[shift] + l; - l = q; - } - return l; -} - -static limb_t mp_sqrtrem2_dec(limb_t *tabs, limb_t *taba) -{ - int k; - dlimb_t a, b, r; - limb_t taba1[2], s, r0, r1; - - /* convert to binary and normalize */ - a = (dlimb_t)taba[1] * BF_DEC_BASE + taba[0]; - k = clz(a >> LIMB_BITS) & ~1; - b = a << k; - taba1[0] = b; - taba1[1] = b >> LIMB_BITS; - mp_sqrtrem2(&s, taba1); - s >>= (k >> 1); - /* convert the remainder back to decimal */ - r = a - (dlimb_t)s * (dlimb_t)s; - divdq_base(r1, r0, r >> LIMB_BITS, r); - taba[0] = r0; - tabs[0] = s; - return r1; -} - -//#define DEBUG_SQRTREM_DEC - -/* tmp_buf must contain (n / 2 + 1 limbs) */ -static limb_t mp_sqrtrem_rec_dec(limb_t *tabs, limb_t *taba, limb_t n, - limb_t *tmp_buf) -{ - limb_t l, h, rh, ql, qh, c, i; - - if (n == 1) - return mp_sqrtrem2_dec(tabs, taba); -#ifdef DEBUG_SQRTREM_DEC - mp_print_str_dec("a", taba, 2 * n); -#endif - l = n / 2; - h = n - l; - qh = mp_sqrtrem_rec_dec(tabs + l, taba + 2 * l, h, tmp_buf); -#ifdef DEBUG_SQRTREM_DEC - mp_print_str_dec("s1", tabs + l, h); - mp_print_str_h_dec("r1", taba + 2 * l, h, qh); - mp_print_str_h_dec("r2", taba + l, n, qh); -#endif - - /* the remainder is in taba + 2 * l. Its high bit is in qh */ - if (qh) { - mp_sub_dec(taba + 2 * l, taba + 2 * l, tabs + l, h, 0); - } - /* instead of dividing by 2*s, divide by s (which is normalized) - and update q and r */ - mp_div_dec(NULL, tmp_buf, taba + l, n, tabs + l, h); - qh += tmp_buf[l]; - for(i = 0; i < l; i++) - tabs[i] = tmp_buf[i]; - ql = mp_div1_dec(tabs, tabs, l, 2, qh & 1); - qh = qh >> 1; /* 0 or 1 */ - if (ql) - rh = mp_add_dec(taba + l, taba + l, tabs + l, h, 0); - else - rh = 0; -#ifdef DEBUG_SQRTREM_DEC - mp_print_str_h_dec("q", tabs, l, qh); - mp_print_str_h_dec("u", taba + l, h, rh); -#endif - - mp_add_ui_dec(tabs + l, qh, h); -#ifdef DEBUG_SQRTREM_DEC - mp_print_str_dec("s2", tabs, n); -#endif - - /* q = qh, tabs[l - 1 ... 0], r = taba[n - 1 ... l] */ - /* subtract q^2. if qh = 1 then q = B^l, so we can take shortcuts */ - if (qh) { - c = qh; - } else { - mp_mul_basecase_dec(taba + n, tabs, l, tabs, l); - c = mp_sub_dec(taba, taba, taba + n, 2 * l, 0); - } - rh -= mp_sub_ui_dec(taba + 2 * l, c, n - 2 * l); - if ((slimb_t)rh < 0) { - mp_sub_ui_dec(tabs, 1, n); - rh += mp_add_mul1_dec(taba, tabs, n, 2); - rh += mp_add_ui_dec(taba, 1, n); - } - return rh; -} - -/* 'taba' has 2*n limbs with n >= 1 and taba[2*n-1] >= B/4. Return (s, - r) with s=floor(sqrt(a)) and r=a-s^2. 0 <= r <= 2 * s. tabs has n - limbs. r is returned in the lower n limbs of taba. Its r[n] is the - returned value of the function. */ -int mp_sqrtrem_dec(bf_context_t *s, limb_t *tabs, limb_t *taba, limb_t n) -{ - limb_t tmp_buf1[8]; - limb_t *tmp_buf; - mp_size_t n2; - n2 = n / 2 + 1; - if (n2 <= countof(tmp_buf1)) { - tmp_buf = tmp_buf1; - } else { - tmp_buf = bf_malloc(s, sizeof(limb_t) * n2); - if (!tmp_buf) - return -1; - } - taba[n] = mp_sqrtrem_rec_dec(tabs, taba, n, tmp_buf); - if (tmp_buf != tmp_buf1) - bf_free(s, tmp_buf); - return 0; -} - -/* return the number of leading zero digits, from 0 to LIMB_DIGITS */ -static int clz_dec(limb_t a) -{ - if (a == 0) - return LIMB_DIGITS; - switch(LIMB_BITS - 1 - clz(a)) { - case 0: /* 1-1 */ - return LIMB_DIGITS - 1; - case 1: /* 2-3 */ - return LIMB_DIGITS - 1; - case 2: /* 4-7 */ - return LIMB_DIGITS - 1; - case 3: /* 8-15 */ - if (a < 10) - return LIMB_DIGITS - 1; - else - return LIMB_DIGITS - 2; - case 4: /* 16-31 */ - return LIMB_DIGITS - 2; - case 5: /* 32-63 */ - return LIMB_DIGITS - 2; - case 6: /* 64-127 */ - if (a < 100) - return LIMB_DIGITS - 2; - else - return LIMB_DIGITS - 3; - case 7: /* 128-255 */ - return LIMB_DIGITS - 3; - case 8: /* 256-511 */ - return LIMB_DIGITS - 3; - case 9: /* 512-1023 */ - if (a < 1000) - return LIMB_DIGITS - 3; - else - return LIMB_DIGITS - 4; - case 10: /* 1024-2047 */ - return LIMB_DIGITS - 4; - case 11: /* 2048-4095 */ - return LIMB_DIGITS - 4; - case 12: /* 4096-8191 */ - return LIMB_DIGITS - 4; - case 13: /* 8192-16383 */ - if (a < 10000) - return LIMB_DIGITS - 4; - else - return LIMB_DIGITS - 5; - case 14: /* 16384-32767 */ - return LIMB_DIGITS - 5; - case 15: /* 32768-65535 */ - return LIMB_DIGITS - 5; - case 16: /* 65536-131071 */ - if (a < 100000) - return LIMB_DIGITS - 5; - else - return LIMB_DIGITS - 6; - case 17: /* 131072-262143 */ - return LIMB_DIGITS - 6; - case 18: /* 262144-524287 */ - return LIMB_DIGITS - 6; - case 19: /* 524288-1048575 */ - if (a < 1000000) - return LIMB_DIGITS - 6; - else - return LIMB_DIGITS - 7; - case 20: /* 1048576-2097151 */ - return LIMB_DIGITS - 7; - case 21: /* 2097152-4194303 */ - return LIMB_DIGITS - 7; - case 22: /* 4194304-8388607 */ - return LIMB_DIGITS - 7; - case 23: /* 8388608-16777215 */ - if (a < 10000000) - return LIMB_DIGITS - 7; - else - return LIMB_DIGITS - 8; - case 24: /* 16777216-33554431 */ - return LIMB_DIGITS - 8; - case 25: /* 33554432-67108863 */ - return LIMB_DIGITS - 8; - case 26: /* 67108864-134217727 */ - if (a < 100000000) - return LIMB_DIGITS - 8; - else - return LIMB_DIGITS - 9; -#if LIMB_BITS == 64 - case 27: /* 134217728-268435455 */ - return LIMB_DIGITS - 9; - case 28: /* 268435456-536870911 */ - return LIMB_DIGITS - 9; - case 29: /* 536870912-1073741823 */ - if (a < 1000000000) - return LIMB_DIGITS - 9; - else - return LIMB_DIGITS - 10; - case 30: /* 1073741824-2147483647 */ - return LIMB_DIGITS - 10; - case 31: /* 2147483648-4294967295 */ - return LIMB_DIGITS - 10; - case 32: /* 4294967296-8589934591 */ - return LIMB_DIGITS - 10; - case 33: /* 8589934592-17179869183 */ - if (a < 10000000000) - return LIMB_DIGITS - 10; - else - return LIMB_DIGITS - 11; - case 34: /* 17179869184-34359738367 */ - return LIMB_DIGITS - 11; - case 35: /* 34359738368-68719476735 */ - return LIMB_DIGITS - 11; - case 36: /* 68719476736-137438953471 */ - if (a < 100000000000) - return LIMB_DIGITS - 11; - else - return LIMB_DIGITS - 12; - case 37: /* 137438953472-274877906943 */ - return LIMB_DIGITS - 12; - case 38: /* 274877906944-549755813887 */ - return LIMB_DIGITS - 12; - case 39: /* 549755813888-1099511627775 */ - if (a < 1000000000000) - return LIMB_DIGITS - 12; - else - return LIMB_DIGITS - 13; - case 40: /* 1099511627776-2199023255551 */ - return LIMB_DIGITS - 13; - case 41: /* 2199023255552-4398046511103 */ - return LIMB_DIGITS - 13; - case 42: /* 4398046511104-8796093022207 */ - return LIMB_DIGITS - 13; - case 43: /* 8796093022208-17592186044415 */ - if (a < 10000000000000) - return LIMB_DIGITS - 13; - else - return LIMB_DIGITS - 14; - case 44: /* 17592186044416-35184372088831 */ - return LIMB_DIGITS - 14; - case 45: /* 35184372088832-70368744177663 */ - return LIMB_DIGITS - 14; - case 46: /* 70368744177664-140737488355327 */ - if (a < 100000000000000) - return LIMB_DIGITS - 14; - else - return LIMB_DIGITS - 15; - case 47: /* 140737488355328-281474976710655 */ - return LIMB_DIGITS - 15; - case 48: /* 281474976710656-562949953421311 */ - return LIMB_DIGITS - 15; - case 49: /* 562949953421312-1125899906842623 */ - if (a < 1000000000000000) - return LIMB_DIGITS - 15; - else - return LIMB_DIGITS - 16; - case 50: /* 1125899906842624-2251799813685247 */ - return LIMB_DIGITS - 16; - case 51: /* 2251799813685248-4503599627370495 */ - return LIMB_DIGITS - 16; - case 52: /* 4503599627370496-9007199254740991 */ - return LIMB_DIGITS - 16; - case 53: /* 9007199254740992-18014398509481983 */ - if (a < 10000000000000000) - return LIMB_DIGITS - 16; - else - return LIMB_DIGITS - 17; - case 54: /* 18014398509481984-36028797018963967 */ - return LIMB_DIGITS - 17; - case 55: /* 36028797018963968-72057594037927935 */ - return LIMB_DIGITS - 17; - case 56: /* 72057594037927936-144115188075855871 */ - if (a < 100000000000000000) - return LIMB_DIGITS - 17; - else - return LIMB_DIGITS - 18; - case 57: /* 144115188075855872-288230376151711743 */ - return LIMB_DIGITS - 18; - case 58: /* 288230376151711744-576460752303423487 */ - return LIMB_DIGITS - 18; - case 59: /* 576460752303423488-1152921504606846975 */ - if (a < 1000000000000000000) - return LIMB_DIGITS - 18; - else - return LIMB_DIGITS - 19; -#endif - default: - return 0; - } -} - -/* for debugging */ -void bfdec_print_str(const char *str, const bfdec_t *a) -{ - slimb_t i; - printf("%s=", str); - - if (a->expn == BF_EXP_NAN) { - printf("NaN"); - } else { - if (a->sign) - putchar('-'); - if (a->expn == BF_EXP_ZERO) { - putchar('0'); - } else if (a->expn == BF_EXP_INF) { - printf("Inf"); - } else { - printf("0."); - for(i = a->len - 1; i >= 0; i--) - printf("%0*" PRIu_LIMB, LIMB_DIGITS, a->tab[i]); - printf("e%" PRId_LIMB, a->expn); - } - } - printf("\n"); -} - -/* return != 0 if one digit between 0 and bit_pos inclusive is not zero. */ -static inline limb_t scan_digit_nz(const bfdec_t *r, slimb_t bit_pos) -{ - slimb_t pos; - limb_t v, q; - int shift; - - if (bit_pos < 0) - return 0; - pos = (limb_t)bit_pos / LIMB_DIGITS; - shift = (limb_t)bit_pos % LIMB_DIGITS; - fast_shr_rem_dec(q, v, r->tab[pos], shift + 1); - (void)q; - if (v != 0) - return 1; - pos--; - while (pos >= 0) { - if (r->tab[pos] != 0) - return 1; - pos--; - } - return 0; -} - -static limb_t get_digit(const limb_t *tab, limb_t len, slimb_t pos) -{ - slimb_t i; - int shift; - i = floor_div(pos, LIMB_DIGITS); - if (i < 0 || i >= len) - return 0; - shift = pos - i * LIMB_DIGITS; - return fast_shr_dec(tab[i], shift) % 10; -} - -/* return the addend for rounding. Note that prec can be <= 0 for bf_rint() */ -static int bfdec_get_rnd_add(int *pret, const bfdec_t *r, limb_t l, - slimb_t prec, int rnd_mode) -{ - int add_one, inexact; - limb_t digit1, digit0; - - // bfdec_print_str("get_rnd_add", r); - if (rnd_mode == BF_RNDF) { - digit0 = 1; /* faithful rounding does not honor the INEXACT flag */ - } else { - /* starting limb for bit 'prec + 1' */ - digit0 = scan_digit_nz(r, l * LIMB_DIGITS - 1 - bf_max(0, prec + 1)); - } - - /* get the digit at 'prec' */ - digit1 = get_digit(r->tab, l, l * LIMB_DIGITS - 1 - prec); - inexact = (digit1 | digit0) != 0; - - add_one = 0; - switch(rnd_mode) { - case BF_RNDZ: - break; - case BF_RNDN: - if (digit1 == 5) { - if (digit0) { - add_one = 1; - } else { - /* round to even */ - add_one = - get_digit(r->tab, l, l * LIMB_DIGITS - 1 - (prec - 1)) & 1; - } - } else if (digit1 > 5) { - add_one = 1; - } - break; - case BF_RNDD: - case BF_RNDU: - if (r->sign == (rnd_mode == BF_RNDD)) - add_one = inexact; - break; - case BF_RNDNA: - case BF_RNDF: - add_one = (digit1 >= 5); - break; - case BF_RNDA: - add_one = inexact; - break; - default: - abort(); - } - - if (inexact) - *pret |= BF_ST_INEXACT; - return add_one; -} - -/* round to prec1 bits assuming 'r' is non zero and finite. 'r' is - assumed to have length 'l' (1 <= l <= r->len). prec1 can be - BF_PREC_INF. BF_FLAG_SUBNORMAL is not supported. Cannot fail with - BF_ST_MEM_ERROR. - */ -static int __bfdec_round(bfdec_t *r, limb_t prec1, bf_flags_t flags, limb_t l) -{ - int shift, add_one, rnd_mode, ret; - slimb_t i, bit_pos, pos, e_min, e_max, e_range, prec; - - /* XXX: align to IEEE 754 2008 for decimal numbers ? */ - e_range = (limb_t)1 << (bf_get_exp_bits(flags) - 1); - e_min = -e_range + 3; - e_max = e_range; - - if (flags & BF_FLAG_RADPNT_PREC) { - /* 'prec' is the precision after the decimal point */ - if (prec1 != BF_PREC_INF) - prec = r->expn + prec1; - else - prec = prec1; - } else if (unlikely(r->expn < e_min) && (flags & BF_FLAG_SUBNORMAL)) { - /* restrict the precision in case of potentially subnormal - result */ - assert(prec1 != BF_PREC_INF); - prec = prec1 - (e_min - r->expn); - } else { - prec = prec1; - } - - /* round to prec bits */ - rnd_mode = flags & BF_RND_MASK; - ret = 0; - add_one = bfdec_get_rnd_add(&ret, r, l, prec, rnd_mode); - - if (prec <= 0) { - if (add_one) { - bfdec_resize(r, 1); /* cannot fail because r is non zero */ - r->tab[0] = BF_DEC_BASE / 10; - r->expn += 1 - prec; - ret |= BF_ST_UNDERFLOW | BF_ST_INEXACT; - return ret; - } else { - goto underflow; - } - } else if (add_one) { - limb_t carry; - - /* add one starting at digit 'prec - 1' */ - bit_pos = l * LIMB_DIGITS - 1 - (prec - 1); - pos = bit_pos / LIMB_DIGITS; - carry = mp_pow_dec[bit_pos % LIMB_DIGITS]; - carry = mp_add_ui_dec(r->tab + pos, carry, l - pos); - if (carry) { - /* shift right by one digit */ - mp_shr_dec(r->tab + pos, r->tab + pos, l - pos, 1, 1); - r->expn++; - } - } - - /* check underflow */ - if (unlikely(r->expn < e_min)) { - if (flags & BF_FLAG_SUBNORMAL) { - /* if inexact, also set the underflow flag */ - if (ret & BF_ST_INEXACT) - ret |= BF_ST_UNDERFLOW; - } else { - underflow: - bfdec_set_zero(r, r->sign); - ret |= BF_ST_UNDERFLOW | BF_ST_INEXACT; - return ret; - } - } - - /* check overflow */ - if (unlikely(r->expn > e_max)) { - bfdec_set_inf(r, r->sign); - ret |= BF_ST_OVERFLOW | BF_ST_INEXACT; - return ret; - } - - /* keep the bits starting at 'prec - 1' */ - bit_pos = l * LIMB_DIGITS - 1 - (prec - 1); - i = floor_div(bit_pos, LIMB_DIGITS); - if (i >= 0) { - shift = smod(bit_pos, LIMB_DIGITS); - if (shift != 0) { - r->tab[i] = fast_shr_dec(r->tab[i], shift) * - mp_pow_dec[shift]; - } - } else { - i = 0; - } - /* remove trailing zeros */ - while (r->tab[i] == 0) - i++; - if (i > 0) { - l -= i; - memmove(r->tab, r->tab + i, l * sizeof(limb_t)); - } - bfdec_resize(r, l); /* cannot fail */ - return ret; -} - -/* Cannot fail with BF_ST_MEM_ERROR. */ -int bfdec_round(bfdec_t *r, limb_t prec, bf_flags_t flags) -{ - if (r->len == 0) - return 0; - return __bfdec_round(r, prec, flags, r->len); -} - -/* 'r' must be a finite number. Cannot fail with BF_ST_MEM_ERROR. */ -int bfdec_normalize_and_round(bfdec_t *r, limb_t prec1, bf_flags_t flags) -{ - limb_t l, v; - int shift, ret; - - // bfdec_print_str("bf_renorm", r); - l = r->len; - while (l > 0 && r->tab[l - 1] == 0) - l--; - if (l == 0) { - /* zero */ - r->expn = BF_EXP_ZERO; - bfdec_resize(r, 0); /* cannot fail */ - ret = 0; - } else { - r->expn -= (r->len - l) * LIMB_DIGITS; - /* shift to have the MSB set to '1' */ - v = r->tab[l - 1]; - shift = clz_dec(v); - if (shift != 0) { - mp_shl_dec(r->tab, r->tab, l, shift, 0); - r->expn -= shift; - } - ret = __bfdec_round(r, prec1, flags, l); - } - // bf_print_str("r_final", r); - return ret; -} - -int bfdec_set_ui(bfdec_t *r, uint64_t v) -{ -#if LIMB_BITS == 32 - if (v >= BF_DEC_BASE * BF_DEC_BASE) { - if (bfdec_resize(r, 3)) - goto fail; - r->tab[0] = v % BF_DEC_BASE; - v /= BF_DEC_BASE; - r->tab[1] = v % BF_DEC_BASE; - r->tab[2] = v / BF_DEC_BASE; - r->expn = 3 * LIMB_DIGITS; - } else -#endif - if (v >= BF_DEC_BASE) { - if (bfdec_resize(r, 2)) - goto fail; - r->tab[0] = v % BF_DEC_BASE; - r->tab[1] = v / BF_DEC_BASE; - r->expn = 2 * LIMB_DIGITS; - } else { - if (bfdec_resize(r, 1)) - goto fail; - r->tab[0] = v; - r->expn = LIMB_DIGITS; - } - r->sign = 0; - return bfdec_normalize_and_round(r, BF_PREC_INF, 0); - fail: - bfdec_set_nan(r); - return BF_ST_MEM_ERROR; -} - -int bfdec_set_si(bfdec_t *r, int64_t v) -{ - int ret; - if (v < 0) { - ret = bfdec_set_ui(r, -v); - r->sign = 1; - } else { - ret = bfdec_set_ui(r, v); - } - return ret; -} - -static int bfdec_add_internal(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, bf_flags_t flags, int b_neg) -{ - bf_context_t *s = r->ctx; - int is_sub, cmp_res, a_sign, b_sign, ret; - - a_sign = a->sign; - b_sign = b->sign ^ b_neg; - is_sub = a_sign ^ b_sign; - cmp_res = bfdec_cmpu(a, b); - if (cmp_res < 0) { - const bfdec_t *tmp; - tmp = a; - a = b; - b = tmp; - a_sign = b_sign; /* b_sign is never used later */ - } - /* abs(a) >= abs(b) */ - if (cmp_res == 0 && is_sub && a->expn < BF_EXP_INF) { - /* zero result */ - bfdec_set_zero(r, (flags & BF_RND_MASK) == BF_RNDD); - ret = 0; - } else if (a->len == 0 || b->len == 0) { - ret = 0; - if (a->expn >= BF_EXP_INF) { - if (a->expn == BF_EXP_NAN) { - /* at least one operand is NaN */ - bfdec_set_nan(r); - ret = 0; - } else if (b->expn == BF_EXP_INF && is_sub) { - /* infinities with different signs */ - bfdec_set_nan(r); - ret = BF_ST_INVALID_OP; - } else { - bfdec_set_inf(r, a_sign); - } - } else { - /* at least one zero and not subtract */ - if (bfdec_set(r, a)) - return BF_ST_MEM_ERROR; - r->sign = a_sign; - goto renorm; - } - } else { - slimb_t d, a_offset, b_offset, i, r_len; - limb_t carry; - limb_t *b1_tab; - int b_shift; - mp_size_t b1_len; - - d = a->expn - b->expn; - - /* XXX: not efficient in time and memory if the precision is - not infinite */ - r_len = bf_max(a->len, b->len + (d + LIMB_DIGITS - 1) / LIMB_DIGITS); - if (bfdec_resize(r, r_len)) - goto fail; - r->sign = a_sign; - r->expn = a->expn; - - a_offset = r_len - a->len; - for(i = 0; i < a_offset; i++) - r->tab[i] = 0; - for(i = 0; i < a->len; i++) - r->tab[a_offset + i] = a->tab[i]; - - b_shift = d % LIMB_DIGITS; - if (b_shift == 0) { - b1_len = b->len; - b1_tab = (limb_t *)b->tab; - } else { - b1_len = b->len + 1; - b1_tab = bf_malloc(s, sizeof(limb_t) * b1_len); - if (!b1_tab) - goto fail; - b1_tab[0] = mp_shr_dec(b1_tab + 1, b->tab, b->len, b_shift, 0) * - mp_pow_dec[LIMB_DIGITS - b_shift]; - } - b_offset = r_len - (b->len + (d + LIMB_DIGITS - 1) / LIMB_DIGITS); - - if (is_sub) { - carry = mp_sub_dec(r->tab + b_offset, r->tab + b_offset, - b1_tab, b1_len, 0); - if (carry != 0) { - carry = mp_sub_ui_dec(r->tab + b_offset + b1_len, carry, - r_len - (b_offset + b1_len)); - assert(carry == 0); - } - } else { - carry = mp_add_dec(r->tab + b_offset, r->tab + b_offset, - b1_tab, b1_len, 0); - if (carry != 0) { - carry = mp_add_ui_dec(r->tab + b_offset + b1_len, carry, - r_len - (b_offset + b1_len)); - } - if (carry != 0) { - if (bfdec_resize(r, r_len + 1)) { - if (b_shift != 0) - bf_free(s, b1_tab); - goto fail; - } - r->tab[r_len] = 1; - r->expn += LIMB_DIGITS; - } - } - if (b_shift != 0) - bf_free(s, b1_tab); - renorm: - ret = bfdec_normalize_and_round(r, prec, flags); - } - return ret; - fail: - bfdec_set_nan(r); - return BF_ST_MEM_ERROR; -} - -static int __bfdec_add(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags) -{ - return bfdec_add_internal(r, a, b, prec, flags, 0); -} - -static int __bfdec_sub(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags) -{ - return bfdec_add_internal(r, a, b, prec, flags, 1); -} - -int bfdec_add(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_op2((bf_t *)r, (bf_t *)a, (bf_t *)b, prec, flags, - (bf_op2_func_t *)__bfdec_add); -} - -int bfdec_sub(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_op2((bf_t *)r, (bf_t *)a, (bf_t *)b, prec, flags, - (bf_op2_func_t *)__bfdec_sub); -} - -int bfdec_mul(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags) -{ - int ret, r_sign; - - if (a->len < b->len) { - const bfdec_t *tmp = a; - a = b; - b = tmp; - } - r_sign = a->sign ^ b->sign; - /* here b->len <= a->len */ - if (b->len == 0) { - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - bfdec_set_nan(r); - ret = 0; - } else if (a->expn == BF_EXP_INF || b->expn == BF_EXP_INF) { - if ((a->expn == BF_EXP_INF && b->expn == BF_EXP_ZERO) || - (a->expn == BF_EXP_ZERO && b->expn == BF_EXP_INF)) { - bfdec_set_nan(r); - ret = BF_ST_INVALID_OP; - } else { - bfdec_set_inf(r, r_sign); - ret = 0; - } - } else { - bfdec_set_zero(r, r_sign); - ret = 0; - } - } else { - bfdec_t tmp, *r1 = NULL; - limb_t a_len, b_len; - limb_t *a_tab, *b_tab; - - a_len = a->len; - b_len = b->len; - a_tab = a->tab; - b_tab = b->tab; - - if (r == a || r == b) { - bfdec_init(r->ctx, &tmp); - r1 = r; - r = &tmp; - } - if (bfdec_resize(r, a_len + b_len)) { - bfdec_set_nan(r); - ret = BF_ST_MEM_ERROR; - goto done; - } - mp_mul_basecase_dec(r->tab, a_tab, a_len, b_tab, b_len); - r->sign = r_sign; - r->expn = a->expn + b->expn; - ret = bfdec_normalize_and_round(r, prec, flags); - done: - if (r == &tmp) - bfdec_move(r1, &tmp); - } - return ret; -} - -int bfdec_mul_si(bfdec_t *r, const bfdec_t *a, int64_t b1, limb_t prec, - bf_flags_t flags) -{ - bfdec_t b; - int ret; - bfdec_init(r->ctx, &b); - ret = bfdec_set_si(&b, b1); - ret |= bfdec_mul(r, a, &b, prec, flags); - bfdec_delete(&b); - return ret; -} - -int bfdec_add_si(bfdec_t *r, const bfdec_t *a, int64_t b1, limb_t prec, - bf_flags_t flags) -{ - bfdec_t b; - int ret; - - bfdec_init(r->ctx, &b); - ret = bfdec_set_si(&b, b1); - ret |= bfdec_add(r, a, &b, prec, flags); - bfdec_delete(&b); - return ret; -} - -static int __bfdec_div(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, - limb_t prec, bf_flags_t flags) -{ - int ret, r_sign; - limb_t n, nb, precl; - - r_sign = a->sign ^ b->sign; - if (a->expn >= BF_EXP_INF || b->expn >= BF_EXP_INF) { - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - bfdec_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF && b->expn == BF_EXP_INF) { - bfdec_set_nan(r); - return BF_ST_INVALID_OP; - } else if (a->expn == BF_EXP_INF) { - bfdec_set_inf(r, r_sign); - return 0; - } else { - bfdec_set_zero(r, r_sign); - return 0; - } - } else if (a->expn == BF_EXP_ZERO) { - if (b->expn == BF_EXP_ZERO) { - bfdec_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bfdec_set_zero(r, r_sign); - return 0; - } - } else if (b->expn == BF_EXP_ZERO) { - bfdec_set_inf(r, r_sign); - return BF_ST_DIVIDE_ZERO; - } - - nb = b->len; - if (prec == BF_PREC_INF) { - /* infinite precision: return BF_ST_INVALID_OP if not an exact - result */ - /* XXX: check */ - precl = nb + 1; - } else if (flags & BF_FLAG_RADPNT_PREC) { - /* number of digits after the decimal point */ - /* XXX: check (2 extra digits for rounding + 2 digits) */ - precl = (bf_max(a->expn - b->expn, 0) + 2 + - prec + 2 + LIMB_DIGITS - 1) / LIMB_DIGITS; - } else { - /* number of limbs of the quotient (2 extra digits for rounding) */ - precl = (prec + 2 + LIMB_DIGITS - 1) / LIMB_DIGITS; - } - n = bf_max(a->len, precl); - - { - limb_t *taba, na, i; - slimb_t d; - - na = n + nb; - taba = bf_malloc(r->ctx, (na + 1) * sizeof(limb_t)); - if (!taba) - goto fail; - d = na - a->len; - memset(taba, 0, d * sizeof(limb_t)); - memcpy(taba + d, a->tab, a->len * sizeof(limb_t)); - if (bfdec_resize(r, n + 1)) - goto fail1; - if (mp_div_dec(r->ctx, r->tab, taba, na, b->tab, nb)) { - fail1: - bf_free(r->ctx, taba); - goto fail; - } - /* see if non zero remainder */ - for(i = 0; i < nb; i++) { - if (taba[i] != 0) - break; - } - bf_free(r->ctx, taba); - if (i != nb) { - if (prec == BF_PREC_INF) { - bfdec_set_nan(r); - return BF_ST_INVALID_OP; - } else { - r->tab[0] |= 1; - } - } - r->expn = a->expn - b->expn + LIMB_DIGITS; - r->sign = r_sign; - ret = bfdec_normalize_and_round(r, prec, flags); - } - return ret; - fail: - bfdec_set_nan(r); - return BF_ST_MEM_ERROR; -} - -int bfdec_div(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags) -{ - return bf_op2((bf_t *)r, (bf_t *)a, (bf_t *)b, prec, flags, - (bf_op2_func_t *)__bfdec_div); -} - -/* a and b must be finite numbers with a >= 0 and b > 0. 'q' is the - integer defined as floor(a/b) and r = a - q * b. */ -static void bfdec_tdivremu(bf_context_t *s, bfdec_t *q, bfdec_t *r, - const bfdec_t *a, const bfdec_t *b) -{ - if (bfdec_cmpu(a, b) < 0) { - bfdec_set_ui(q, 0); - bfdec_set(r, a); - } else { - bfdec_div(q, a, b, 0, BF_RNDZ | BF_FLAG_RADPNT_PREC); - bfdec_mul(r, q, b, BF_PREC_INF, BF_RNDZ); - bfdec_sub(r, a, r, BF_PREC_INF, BF_RNDZ); - } -} - -/* division and remainder. - - rnd_mode is the rounding mode for the quotient. The additional - rounding mode BF_RND_EUCLIDIAN is supported. - - 'q' is an integer. 'r' is rounded with prec and flags (prec can be - BF_PREC_INF). -*/ -int bfdec_divrem(bfdec_t *q, bfdec_t *r, const bfdec_t *a, const bfdec_t *b, - limb_t prec, bf_flags_t flags, int rnd_mode) -{ - bf_context_t *s = q->ctx; - bfdec_t a1_s, *a1 = &a1_s; - bfdec_t b1_s, *b1 = &b1_s; - bfdec_t r1_s, *r1 = &r1_s; - int q_sign, res; - BOOL is_ceil, is_rndn; - - assert(q != a && q != b); - assert(r != a && r != b); - assert(q != r); - - if (a->len == 0 || b->len == 0) { - bfdec_set_zero(q, 0); - if (a->expn == BF_EXP_NAN || b->expn == BF_EXP_NAN) { - bfdec_set_nan(r); - return 0; - } else if (a->expn == BF_EXP_INF || b->expn == BF_EXP_ZERO) { - bfdec_set_nan(r); - return BF_ST_INVALID_OP; - } else { - bfdec_set(r, a); - return bfdec_round(r, prec, flags); - } - } - - q_sign = a->sign ^ b->sign; - is_rndn = (rnd_mode == BF_RNDN || rnd_mode == BF_RNDNA); - switch(rnd_mode) { - default: - case BF_RNDZ: - case BF_RNDN: - case BF_RNDNA: - is_ceil = FALSE; - break; - case BF_RNDD: - is_ceil = q_sign; - break; - case BF_RNDU: - is_ceil = q_sign ^ 1; - break; - case BF_RNDA: - is_ceil = TRUE; - break; - case BF_DIVREM_EUCLIDIAN: - is_ceil = a->sign; - break; - } - - a1->expn = a->expn; - a1->tab = a->tab; - a1->len = a->len; - a1->sign = 0; - - b1->expn = b->expn; - b1->tab = b->tab; - b1->len = b->len; - b1->sign = 0; - - // bfdec_print_str("a1", a1); - // bfdec_print_str("b1", b1); - /* XXX: could improve to avoid having a large 'q' */ - bfdec_tdivremu(s, q, r, a1, b1); - if (bfdec_is_nan(q) || bfdec_is_nan(r)) - goto fail; - // bfdec_print_str("q", q); - // bfdec_print_str("r", r); - - if (r->len != 0) { - if (is_rndn) { - bfdec_init(s, r1); - if (bfdec_set(r1, r)) - goto fail; - if (bfdec_mul_si(r1, r1, 2, BF_PREC_INF, BF_RNDZ)) { - bfdec_delete(r1); - goto fail; - } - res = bfdec_cmpu(r1, b); - bfdec_delete(r1); - if (res > 0 || - (res == 0 && - (rnd_mode == BF_RNDNA || - (get_digit(q->tab, q->len, q->len * LIMB_DIGITS - q->expn) & 1) != 0))) { - goto do_sub_r; - } - } else if (is_ceil) { - do_sub_r: - res = bfdec_add_si(q, q, 1, BF_PREC_INF, BF_RNDZ); - res |= bfdec_sub(r, r, b1, BF_PREC_INF, BF_RNDZ); - if (res & BF_ST_MEM_ERROR) - goto fail; - } - } - - r->sign ^= a->sign; - q->sign = q_sign; - return bfdec_round(r, prec, flags); - fail: - bfdec_set_nan(q); - bfdec_set_nan(r); - return BF_ST_MEM_ERROR; -} - -int bfdec_rem(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags, int rnd_mode) -{ - bfdec_t q_s, *q = &q_s; - int ret; - - bfdec_init(r->ctx, q); - ret = bfdec_divrem(q, r, a, b, prec, flags, rnd_mode); - bfdec_delete(q); - return ret; -} - -/* convert to integer (infinite precision) */ -int bfdec_rint(bfdec_t *r, int rnd_mode) -{ - return bfdec_round(r, 0, rnd_mode | BF_FLAG_RADPNT_PREC); -} - -int bfdec_sqrt(bfdec_t *r, const bfdec_t *a, limb_t prec, bf_flags_t flags) -{ - bf_context_t *s = a->ctx; - int ret, k; - limb_t *a1, v; - slimb_t n, n1, prec1; - limb_t res; - - assert(r != a); - - if (a->len == 0) { - if (a->expn == BF_EXP_NAN) { - bfdec_set_nan(r); - } else if (a->expn == BF_EXP_INF && a->sign) { - goto invalid_op; - } else { - bfdec_set(r, a); - } - ret = 0; - } else if (a->sign || prec == BF_PREC_INF) { - invalid_op: - bfdec_set_nan(r); - ret = BF_ST_INVALID_OP; - } else { - if (flags & BF_FLAG_RADPNT_PREC) { - prec1 = bf_max(floor_div(a->expn + 1, 2) + prec, 1); - } else { - prec1 = prec; - } - /* convert the mantissa to an integer with at least 2 * - prec + 4 digits */ - n = (2 * (prec1 + 2) + 2 * LIMB_DIGITS - 1) / (2 * LIMB_DIGITS); - if (bfdec_resize(r, n)) - goto fail; - a1 = bf_malloc(s, sizeof(limb_t) * 2 * n); - if (!a1) - goto fail; - n1 = bf_min(2 * n, a->len); - memset(a1, 0, (2 * n - n1) * sizeof(limb_t)); - memcpy(a1 + 2 * n - n1, a->tab + a->len - n1, n1 * sizeof(limb_t)); - if (a->expn & 1) { - res = mp_shr_dec(a1, a1, 2 * n, 1, 0); - } else { - res = 0; - } - /* normalize so that a1 >= B^(2*n)/4. Not need for n = 1 - because mp_sqrtrem2_dec already does it */ - k = 0; - if (n > 1) { - v = a1[2 * n - 1]; - while (v < BF_DEC_BASE / 4) { - k++; - v *= 4; - } - if (k != 0) - mp_mul1_dec(a1, a1, 2 * n, 1 << (2 * k), 0); - } - if (mp_sqrtrem_dec(s, r->tab, a1, n)) { - bf_free(s, a1); - goto fail; - } - if (k != 0) - mp_div1_dec(r->tab, r->tab, n, 1 << k, 0); - if (!res) { - res = mp_scan_nz(a1, n + 1); - } - bf_free(s, a1); - if (!res) { - res = mp_scan_nz(a->tab, a->len - n1); - } - if (res != 0) - r->tab[0] |= 1; - r->sign = 0; - r->expn = (a->expn + 1) >> 1; - ret = bfdec_round(r, prec, flags); - } - return ret; - fail: - bfdec_set_nan(r); - return BF_ST_MEM_ERROR; -} - -/* The rounding mode is always BF_RNDZ. Return BF_ST_OVERFLOW if there - is an overflow and 0 otherwise. No memory error is possible. */ -int bfdec_get_int32(int *pres, const bfdec_t *a) -{ - uint32_t v; - int ret; - if (a->expn >= BF_EXP_INF) { - ret = 0; - if (a->expn == BF_EXP_INF) { - v = (uint32_t)INT32_MAX + a->sign; - /* XXX: return overflow ? */ - } else { - v = INT32_MAX; - } - } else if (a->expn <= 0) { - v = 0; - ret = 0; - } else if (a->expn <= 9) { - v = fast_shr_dec(a->tab[a->len - 1], LIMB_DIGITS - a->expn); - if (a->sign) - v = -v; - ret = 0; - } else if (a->expn == 10) { - uint64_t v1; - uint32_t v_max; -#if LIMB_BITS == 64 - v1 = fast_shr_dec(a->tab[a->len - 1], LIMB_DIGITS - a->expn); -#else - v1 = (uint64_t)a->tab[a->len - 1] * 10 + - get_digit(a->tab, a->len, (a->len - 1) * LIMB_DIGITS - 1); -#endif - v_max = (uint32_t)INT32_MAX + a->sign; - if (v1 > v_max) { - v = v_max; - ret = BF_ST_OVERFLOW; - } else { - v = v1; - if (a->sign) - v = -v; - ret = 0; - } - } else { - v = (uint32_t)INT32_MAX + a->sign; - ret = BF_ST_OVERFLOW; - } - *pres = v; - return ret; -} - -/* power to an integer with infinite precision */ -int bfdec_pow_ui(bfdec_t *r, const bfdec_t *a, limb_t b) -{ - int ret, n_bits, i; - - assert(r != a); - if (b == 0) - return bfdec_set_ui(r, 1); - ret = bfdec_set(r, a); - n_bits = LIMB_BITS - clz(b); - for(i = n_bits - 2; i >= 0; i--) { - ret |= bfdec_mul(r, r, r, BF_PREC_INF, BF_RNDZ); - if ((b >> i) & 1) - ret |= bfdec_mul(r, r, a, BF_PREC_INF, BF_RNDZ); - } - return ret; -} - -char *bfdec_ftoa(size_t *plen, const bfdec_t *a, limb_t prec, bf_flags_t flags) -{ - return bf_ftoa_internal(plen, (const bf_t *)a, 10, prec, flags, TRUE); -} - -int bfdec_atof(bfdec_t *r, const char *str, const char **pnext, - limb_t prec, bf_flags_t flags) -{ - slimb_t dummy_exp; - return bf_atof_internal((bf_t *)r, &dummy_exp, str, pnext, 10, prec, - flags, TRUE); -} - -#endif /* USE_BF_DEC */ - -#ifdef USE_FFT_MUL -/***************************************************************/ -/* Integer multiplication with FFT */ - -/* or LIMB_BITS at bit position 'pos' in tab */ -static inline void put_bits(limb_t *tab, limb_t len, slimb_t pos, limb_t val) -{ - limb_t i; - int p; - - i = pos >> LIMB_LOG2_BITS; - p = pos & (LIMB_BITS - 1); - if (i < len) - tab[i] |= val << p; - if (p != 0) { - i++; - if (i < len) { - tab[i] |= val >> (LIMB_BITS - p); - } - } -} - -#if defined(__AVX2__) - -typedef double NTTLimb; - -/* we must have: modulo >= 1 << NTT_MOD_LOG2_MIN */ -#define NTT_MOD_LOG2_MIN 50 -#define NTT_MOD_LOG2_MAX 51 -#define NB_MODS 5 -#define NTT_PROOT_2EXP 39 -static const int ntt_int_bits[NB_MODS] = { 254, 203, 152, 101, 50, }; - -static const limb_t ntt_mods[NB_MODS] = { 0x00073a8000000001, 0x0007858000000001, 0x0007a38000000001, 0x0007a68000000001, 0x0007fd8000000001, -}; - -static const limb_t ntt_proot[2][NB_MODS] = { - { 0x00056198d44332c8, 0x0002eb5d640aad39, 0x00047e31eaa35fd0, 0x0005271ac118a150, 0x00075e0ce8442bd5, }, - { 0x000461169761bcc5, 0x0002dac3cb2da688, 0x0004abc97751e3bf, 0x000656778fc8c485, 0x0000dc6469c269fa, }, -}; - -static const limb_t ntt_mods_cr[NB_MODS * (NB_MODS - 1) / 2] = { - 0x00020e4da740da8e, 0x0004c3dc09c09c1d, 0x000063bd097b4271, 0x000799d8f18f18fd, - 0x0005384222222264, 0x000572b07c1f07fe, 0x00035cd08888889a, - 0x00066015555557e3, 0x000725960b60b623, - 0x0002fc1fa1d6ce12, -}; - -#else - -typedef limb_t NTTLimb; - -#if LIMB_BITS == 64 - -#define NTT_MOD_LOG2_MIN 61 -#define NTT_MOD_LOG2_MAX 62 -#define NB_MODS 5 -#define NTT_PROOT_2EXP 51 -static const int ntt_int_bits[NB_MODS] = { 307, 246, 185, 123, 61, }; - -static const limb_t ntt_mods[NB_MODS] = { 0x28d8000000000001, 0x2a88000000000001, 0x2ed8000000000001, 0x3508000000000001, 0x3aa8000000000001, -}; - -static const limb_t ntt_proot[2][NB_MODS] = { - { 0x1b8ea61034a2bea7, 0x21a9762de58206fb, 0x02ca782f0756a8ea, 0x278384537a3e50a1, 0x106e13fee74ce0ab, }, - { 0x233513af133e13b8, 0x1d13140d1c6f75f1, 0x12cde57f97e3eeda, 0x0d6149e23cbe654f, 0x36cd204f522a1379, }, -}; - -static const limb_t ntt_mods_cr[NB_MODS * (NB_MODS - 1) / 2] = { - 0x08a9ed097b425eea, 0x18a44aaaaaaaaab3, 0x2493f57f57f57f5d, 0x126b8d0649a7f8d4, - 0x09d80ed7303b5ccc, 0x25b8bcf3cf3cf3d5, 0x2ce6ce63398ce638, - 0x0e31fad40a57eb59, 0x02a3529fd4a7f52f, - 0x3a5493e93e93e94a, -}; - -#elif LIMB_BITS == 32 - -/* we must have: modulo >= 1 << NTT_MOD_LOG2_MIN */ -#define NTT_MOD_LOG2_MIN 29 -#define NTT_MOD_LOG2_MAX 30 -#define NB_MODS 5 -#define NTT_PROOT_2EXP 20 -static const int ntt_int_bits[NB_MODS] = { 148, 119, 89, 59, 29, }; - -static const limb_t ntt_mods[NB_MODS] = { 0x0000000032b00001, 0x0000000033700001, 0x0000000036d00001, 0x0000000037300001, 0x000000003e500001, -}; - -static const limb_t ntt_proot[2][NB_MODS] = { - { 0x0000000032525f31, 0x0000000005eb3b37, 0x00000000246eda9f, 0x0000000035f25901, 0x00000000022f5768, }, - { 0x00000000051eba1a, 0x00000000107be10e, 0x000000001cd574e0, 0x00000000053806e6, 0x000000002cd6bf98, }, -}; - -static const limb_t ntt_mods_cr[NB_MODS * (NB_MODS - 1) / 2] = { - 0x000000000449559a, 0x000000001eba6ca9, 0x000000002ec18e46, 0x000000000860160b, - 0x000000000d321307, 0x000000000bf51120, 0x000000000f662938, - 0x000000000932ab3e, 0x000000002f40eef8, - 0x000000002e760905, -}; - -#endif /* LIMB_BITS */ - -#endif /* !AVX2 */ - -#if defined(__AVX2__) -#define NTT_TRIG_K_MAX 18 -#else -#define NTT_TRIG_K_MAX 19 -#endif - -typedef struct BFNTTState { - bf_context_t *ctx; - - /* used for mul_mod_fast() */ - limb_t ntt_mods_div[NB_MODS]; - - limb_t ntt_proot_pow[NB_MODS][2][NTT_PROOT_2EXP + 1]; - limb_t ntt_proot_pow_inv[NB_MODS][2][NTT_PROOT_2EXP + 1]; - NTTLimb *ntt_trig[NB_MODS][2][NTT_TRIG_K_MAX + 1]; - /* 1/2^n mod m */ - limb_t ntt_len_inv[NB_MODS][NTT_PROOT_2EXP + 1][2]; -#if defined(__AVX2__) - __m256d ntt_mods_cr_vec[NB_MODS * (NB_MODS - 1) / 2]; - __m256d ntt_mods_vec[NB_MODS]; - __m256d ntt_mods_inv_vec[NB_MODS]; -#else - limb_t ntt_mods_cr_inv[NB_MODS * (NB_MODS - 1) / 2]; -#endif -} BFNTTState; - -static NTTLimb *get_trig(BFNTTState *s, int k, int inverse, int m_idx); - -/* add modulo with up to (LIMB_BITS-1) bit modulo */ -static inline limb_t add_mod(limb_t a, limb_t b, limb_t m) -{ - limb_t r; - r = a + b; - if (r >= m) - r -= m; - return r; -} - -/* sub modulo with up to LIMB_BITS bit modulo */ -static inline limb_t sub_mod(limb_t a, limb_t b, limb_t m) -{ - limb_t r; - r = a - b; - if (r > a) - r += m; - return r; -} - -/* return (r0+r1*B) mod m - precondition: 0 <= r0+r1*B < 2^(64+NTT_MOD_LOG2_MIN) -*/ -static inline limb_t mod_fast(dlimb_t r, - limb_t m, limb_t m_inv) -{ - limb_t a1, q, t0, r1, r0; - - a1 = r >> NTT_MOD_LOG2_MIN; - - q = ((dlimb_t)a1 * m_inv) >> LIMB_BITS; - r = r - (dlimb_t)q * m - m * 2; - r1 = r >> LIMB_BITS; - t0 = (slimb_t)r1 >> 1; - r += m & t0; - r0 = r; - r1 = r >> LIMB_BITS; - r0 += m & r1; - return r0; -} - -/* faster version using precomputed modulo inverse. - precondition: 0 <= a * b < 2^(64+NTT_MOD_LOG2_MIN) */ -static inline limb_t mul_mod_fast(limb_t a, limb_t b, - limb_t m, limb_t m_inv) -{ - dlimb_t r; - r = (dlimb_t)a * (dlimb_t)b; - return mod_fast(r, m, m_inv); -} - -static inline limb_t init_mul_mod_fast(limb_t m) -{ - dlimb_t t; - assert(m < (limb_t)1 << NTT_MOD_LOG2_MAX); - assert(m >= (limb_t)1 << NTT_MOD_LOG2_MIN); - t = (dlimb_t)1 << (LIMB_BITS + NTT_MOD_LOG2_MIN); - return t / m; -} - -/* Faster version used when the multiplier is constant. 0 <= a < 2^64, - 0 <= b < m. */ -static inline limb_t mul_mod_fast2(limb_t a, limb_t b, - limb_t m, limb_t b_inv) -{ - limb_t r, q; - - q = ((dlimb_t)a * (dlimb_t)b_inv) >> LIMB_BITS; - r = a * b - q * m; - if (r >= m) - r -= m; - return r; -} - -/* Faster version used when the multiplier is constant. 0 <= a < 2^64, - 0 <= b < m. Let r = a * b mod m. The return value is 'r' or 'r + - m'. */ -static inline limb_t mul_mod_fast3(limb_t a, limb_t b, - limb_t m, limb_t b_inv) -{ - limb_t r, q; - - q = ((dlimb_t)a * (dlimb_t)b_inv) >> LIMB_BITS; - r = a * b - q * m; - return r; -} - -static inline limb_t init_mul_mod_fast2(limb_t b, limb_t m) -{ - return ((dlimb_t)b << LIMB_BITS) / m; -} - -#ifdef __AVX2__ - -static inline limb_t ntt_limb_to_int(NTTLimb a, limb_t m) -{ - slimb_t v; - v = a; - if (v < 0) - v += m; - if (v >= m) - v -= m; - return v; -} - -static inline NTTLimb int_to_ntt_limb(limb_t a, limb_t m) -{ - return (slimb_t)a; -} - -static inline NTTLimb int_to_ntt_limb2(limb_t a, limb_t m) -{ - if (a >= (m / 2)) - a -= m; - return (slimb_t)a; -} - -/* return r + m if r < 0 otherwise r. */ -static inline __m256d ntt_mod1(__m256d r, __m256d m) -{ - return _mm256_blendv_pd(r, r + m, r); -} - -/* input: abs(r) < 2 * m. Output: abs(r) < m */ -static inline __m256d ntt_mod(__m256d r, __m256d mf, __m256d m2f) -{ - return _mm256_blendv_pd(r, r + m2f, r) - mf; -} - -/* input: abs(a*b) < 2 * m^2, output: abs(r) < m */ -static inline __m256d ntt_mul_mod(__m256d a, __m256d b, __m256d mf, - __m256d m_inv) -{ - __m256d r, q, ab1, ab0, qm0, qm1; - ab1 = a * b; - q = _mm256_round_pd(ab1 * m_inv, 0); /* round to nearest */ - qm1 = q * mf; - qm0 = _mm256_fmsub_pd(q, mf, qm1); /* low part */ - ab0 = _mm256_fmsub_pd(a, b, ab1); /* low part */ - r = (ab1 - qm1) + (ab0 - qm0); - return r; -} - -static void *bf_aligned_malloc(bf_context_t *s, size_t size, size_t align) -{ - void *ptr; - void **ptr1; - ptr = bf_malloc(s, size + sizeof(void *) + align - 1); - if (!ptr) - return NULL; - ptr1 = (void **)(((uintptr_t)ptr + sizeof(void *) + align - 1) & - ~(align - 1)); - ptr1[-1] = ptr; - return ptr1; -} - -static void bf_aligned_free(bf_context_t *s, void *ptr) -{ - if (!ptr) - return; - bf_free(s, ((void **)ptr)[-1]); -} - -static void *ntt_malloc(BFNTTState *s, size_t size) -{ - return bf_aligned_malloc(s->ctx, size, 64); -} - -static void ntt_free(BFNTTState *s, void *ptr) -{ - bf_aligned_free(s->ctx, ptr); -} - -static no_inline int ntt_fft(BFNTTState *s, - NTTLimb *out_buf, NTTLimb *in_buf, - NTTLimb *tmp_buf, int fft_len_log2, - int inverse, int m_idx) -{ - limb_t nb_blocks, fft_per_block, p, k, n, stride_in, i, j; - NTTLimb *tab_in, *tab_out, *tmp, *trig; - __m256d m_inv, mf, m2f, c, a0, a1, b0, b1; - limb_t m; - int l; - - m = ntt_mods[m_idx]; - - m_inv = _mm256_set1_pd(1.0 / (double)m); - mf = _mm256_set1_pd(m); - m2f = _mm256_set1_pd(m * 2); - - n = (limb_t)1 << fft_len_log2; - assert(n >= 8); - stride_in = n / 2; - - tab_in = in_buf; - tab_out = tmp_buf; - trig = get_trig(s, fft_len_log2, inverse, m_idx); - if (!trig) - return -1; - p = 0; - for(k = 0; k < stride_in; k += 4) { - a0 = _mm256_load_pd(&tab_in[k]); - a1 = _mm256_load_pd(&tab_in[k + stride_in]); - c = _mm256_load_pd(trig); - trig += 4; - b0 = ntt_mod(a0 + a1, mf, m2f); - b1 = ntt_mul_mod(a0 - a1, c, mf, m_inv); - a0 = _mm256_permute2f128_pd(b0, b1, 0x20); - a1 = _mm256_permute2f128_pd(b0, b1, 0x31); - a0 = _mm256_permute4x64_pd(a0, 0xd8); - a1 = _mm256_permute4x64_pd(a1, 0xd8); - _mm256_store_pd(&tab_out[p], a0); - _mm256_store_pd(&tab_out[p + 4], a1); - p += 2 * 4; - } - tmp = tab_in; - tab_in = tab_out; - tab_out = tmp; - - trig = get_trig(s, fft_len_log2 - 1, inverse, m_idx); - if (!trig) - return -1; - p = 0; - for(k = 0; k < stride_in; k += 4) { - a0 = _mm256_load_pd(&tab_in[k]); - a1 = _mm256_load_pd(&tab_in[k + stride_in]); - c = _mm256_setr_pd(trig[0], trig[0], trig[1], trig[1]); - trig += 2; - b0 = ntt_mod(a0 + a1, mf, m2f); - b1 = ntt_mul_mod(a0 - a1, c, mf, m_inv); - a0 = _mm256_permute2f128_pd(b0, b1, 0x20); - a1 = _mm256_permute2f128_pd(b0, b1, 0x31); - _mm256_store_pd(&tab_out[p], a0); - _mm256_store_pd(&tab_out[p + 4], a1); - p += 2 * 4; - } - tmp = tab_in; - tab_in = tab_out; - tab_out = tmp; - - nb_blocks = n / 4; - fft_per_block = 4; - - l = fft_len_log2 - 2; - while (nb_blocks != 2) { - nb_blocks >>= 1; - p = 0; - k = 0; - trig = get_trig(s, l, inverse, m_idx); - if (!trig) - return -1; - for(i = 0; i < nb_blocks; i++) { - c = _mm256_set1_pd(trig[0]); - trig++; - for(j = 0; j < fft_per_block; j += 4) { - a0 = _mm256_load_pd(&tab_in[k + j]); - a1 = _mm256_load_pd(&tab_in[k + j + stride_in]); - b0 = ntt_mod(a0 + a1, mf, m2f); - b1 = ntt_mul_mod(a0 - a1, c, mf, m_inv); - _mm256_store_pd(&tab_out[p + j], b0); - _mm256_store_pd(&tab_out[p + j + fft_per_block], b1); - } - k += fft_per_block; - p += 2 * fft_per_block; - } - fft_per_block <<= 1; - l--; - tmp = tab_in; - tab_in = tab_out; - tab_out = tmp; - } - - tab_out = out_buf; - for(k = 0; k < stride_in; k += 4) { - a0 = _mm256_load_pd(&tab_in[k]); - a1 = _mm256_load_pd(&tab_in[k + stride_in]); - b0 = ntt_mod(a0 + a1, mf, m2f); - b1 = ntt_mod(a0 - a1, mf, m2f); - _mm256_store_pd(&tab_out[k], b0); - _mm256_store_pd(&tab_out[k + stride_in], b1); - } - return 0; -} - -static void ntt_vec_mul(BFNTTState *s, - NTTLimb *tab1, NTTLimb *tab2, limb_t fft_len_log2, - int k_tot, int m_idx) -{ - limb_t i, c_inv, n, m; - __m256d m_inv, mf, a, b, c; - - m = ntt_mods[m_idx]; - c_inv = s->ntt_len_inv[m_idx][k_tot][0]; - m_inv = _mm256_set1_pd(1.0 / (double)m); - mf = _mm256_set1_pd(m); - c = _mm256_set1_pd(int_to_ntt_limb(c_inv, m)); - n = (limb_t)1 << fft_len_log2; - for(i = 0; i < n; i += 4) { - a = _mm256_load_pd(&tab1[i]); - b = _mm256_load_pd(&tab2[i]); - a = ntt_mul_mod(a, b, mf, m_inv); - a = ntt_mul_mod(a, c, mf, m_inv); - _mm256_store_pd(&tab1[i], a); - } -} - -static no_inline void mul_trig(NTTLimb *buf, - limb_t n, limb_t c1, limb_t m, limb_t m_inv1) -{ - limb_t i, c2, c3, c4; - __m256d c, c_mul, a0, mf, m_inv; - assert(n >= 2); - - mf = _mm256_set1_pd(m); - m_inv = _mm256_set1_pd(1.0 / (double)m); - - c2 = mul_mod_fast(c1, c1, m, m_inv1); - c3 = mul_mod_fast(c2, c1, m, m_inv1); - c4 = mul_mod_fast(c2, c2, m, m_inv1); - c = _mm256_setr_pd(1, int_to_ntt_limb(c1, m), - int_to_ntt_limb(c2, m), int_to_ntt_limb(c3, m)); - c_mul = _mm256_set1_pd(int_to_ntt_limb(c4, m)); - for(i = 0; i < n; i += 4) { - a0 = _mm256_load_pd(&buf[i]); - a0 = ntt_mul_mod(a0, c, mf, m_inv); - _mm256_store_pd(&buf[i], a0); - c = ntt_mul_mod(c, c_mul, mf, m_inv); - } -} - -#else - -static void *ntt_malloc(BFNTTState *s, size_t size) -{ - return bf_malloc(s->ctx, size); -} - -static void ntt_free(BFNTTState *s, void *ptr) -{ - bf_free(s->ctx, ptr); -} - -static inline limb_t ntt_limb_to_int(NTTLimb a, limb_t m) -{ - if (a >= m) - a -= m; - return a; -} - -static inline NTTLimb int_to_ntt_limb(slimb_t a, limb_t m) -{ - return a; -} - -static no_inline int ntt_fft(BFNTTState *s, NTTLimb *out_buf, NTTLimb *in_buf, - NTTLimb *tmp_buf, int fft_len_log2, - int inverse, int m_idx) -{ - limb_t nb_blocks, fft_per_block, p, k, n, stride_in, i, j, m, m2; - NTTLimb *tab_in, *tab_out, *tmp, a0, a1, b0, b1, c, *trig, c_inv; - int l; - - m = ntt_mods[m_idx]; - m2 = 2 * m; - n = (limb_t)1 << fft_len_log2; - nb_blocks = n; - fft_per_block = 1; - stride_in = n / 2; - tab_in = in_buf; - tab_out = tmp_buf; - l = fft_len_log2; - while (nb_blocks != 2) { - nb_blocks >>= 1; - p = 0; - k = 0; - trig = get_trig(s, l, inverse, m_idx); - if (!trig) - return -1; - for(i = 0; i < nb_blocks; i++) { - c = trig[0]; - c_inv = trig[1]; - trig += 2; - for(j = 0; j < fft_per_block; j++) { - a0 = tab_in[k + j]; - a1 = tab_in[k + j + stride_in]; - b0 = add_mod(a0, a1, m2); - b1 = a0 - a1 + m2; - b1 = mul_mod_fast3(b1, c, m, c_inv); - tab_out[p + j] = b0; - tab_out[p + j + fft_per_block] = b1; - } - k += fft_per_block; - p += 2 * fft_per_block; - } - fft_per_block <<= 1; - l--; - tmp = tab_in; - tab_in = tab_out; - tab_out = tmp; - } - /* no twiddle in last step */ - tab_out = out_buf; - for(k = 0; k < stride_in; k++) { - a0 = tab_in[k]; - a1 = tab_in[k + stride_in]; - b0 = add_mod(a0, a1, m2); - b1 = sub_mod(a0, a1, m2); - tab_out[k] = b0; - tab_out[k + stride_in] = b1; - } - return 0; -} - -static void ntt_vec_mul(BFNTTState *s, - NTTLimb *tab1, NTTLimb *tab2, int fft_len_log2, - int k_tot, int m_idx) -{ - limb_t i, norm, norm_inv, a, n, m, m_inv; - - m = ntt_mods[m_idx]; - m_inv = s->ntt_mods_div[m_idx]; - norm = s->ntt_len_inv[m_idx][k_tot][0]; - norm_inv = s->ntt_len_inv[m_idx][k_tot][1]; - n = (limb_t)1 << fft_len_log2; - for(i = 0; i < n; i++) { - a = tab1[i]; - /* need to reduce the range so that the product is < - 2^(LIMB_BITS+NTT_MOD_LOG2_MIN) */ - if (a >= m) - a -= m; - a = mul_mod_fast(a, tab2[i], m, m_inv); - a = mul_mod_fast3(a, norm, m, norm_inv); - tab1[i] = a; - } -} - -static no_inline void mul_trig(NTTLimb *buf, - limb_t n, limb_t c_mul, limb_t m, limb_t m_inv) -{ - limb_t i, c0, c_mul_inv; - - c0 = 1; - c_mul_inv = init_mul_mod_fast2(c_mul, m); - for(i = 0; i < n; i++) { - buf[i] = mul_mod_fast(buf[i], c0, m, m_inv); - c0 = mul_mod_fast2(c0, c_mul, m, c_mul_inv); - } -} - -#endif /* !AVX2 */ - -static no_inline NTTLimb *get_trig(BFNTTState *s, - int k, int inverse, int m_idx) -{ - NTTLimb *tab; - limb_t i, n2, c, c_mul, m, c_mul_inv; - - if (k > NTT_TRIG_K_MAX) - return NULL; - - tab = s->ntt_trig[m_idx][inverse][k]; - if (tab) - return tab; - n2 = (limb_t)1 << (k - 1); - m = ntt_mods[m_idx]; -#ifdef __AVX2__ - tab = ntt_malloc(s, sizeof(NTTLimb) * n2); -#else - tab = ntt_malloc(s, sizeof(NTTLimb) * n2 * 2); -#endif - if (!tab) - return NULL; - c = 1; - c_mul = s->ntt_proot_pow[m_idx][inverse][k]; - c_mul_inv = s->ntt_proot_pow_inv[m_idx][inverse][k]; - for(i = 0; i < n2; i++) { -#ifdef __AVX2__ - tab[i] = int_to_ntt_limb2(c, m); -#else - tab[2 * i] = int_to_ntt_limb(c, m); - tab[2 * i + 1] = init_mul_mod_fast2(c, m); -#endif - c = mul_mod_fast2(c, c_mul, m, c_mul_inv); - } - s->ntt_trig[m_idx][inverse][k] = tab; - return tab; -} - -void fft_clear_cache(bf_context_t *s1) -{ - int m_idx, inverse, k; - BFNTTState *s = s1->ntt_state; - if (s) { - for(m_idx = 0; m_idx < NB_MODS; m_idx++) { - for(inverse = 0; inverse < 2; inverse++) { - for(k = 0; k < NTT_TRIG_K_MAX + 1; k++) { - if (s->ntt_trig[m_idx][inverse][k]) { - ntt_free(s, s->ntt_trig[m_idx][inverse][k]); - s->ntt_trig[m_idx][inverse][k] = NULL; - } - } - } - } -#if defined(__AVX2__) - bf_aligned_free(s1, s); -#else - bf_free(s1, s); -#endif - s1->ntt_state = NULL; - } -} - -#define STRIP_LEN 16 - -/* dst = buf1, src = buf2 */ -static int ntt_fft_partial(BFNTTState *s, NTTLimb *buf1, - int k1, int k2, limb_t n1, limb_t n2, int inverse, - limb_t m_idx) -{ - limb_t i, j, c_mul, c0, m, m_inv, strip_len, l; - NTTLimb *buf2, *buf3; - - buf2 = NULL; - buf3 = ntt_malloc(s, sizeof(NTTLimb) * n1); - if (!buf3) - goto fail; - if (k2 == 0) { - if (ntt_fft(s, buf1, buf1, buf3, k1, inverse, m_idx)) - goto fail; - } else { - strip_len = STRIP_LEN; - buf2 = ntt_malloc(s, sizeof(NTTLimb) * n1 * strip_len); - if (!buf2) - goto fail; - m = ntt_mods[m_idx]; - m_inv = s->ntt_mods_div[m_idx]; - c0 = s->ntt_proot_pow[m_idx][inverse][k1 + k2]; - c_mul = 1; - assert((n2 % strip_len) == 0); - for(j = 0; j < n2; j += strip_len) { - for(i = 0; i < n1; i++) { - for(l = 0; l < strip_len; l++) { - buf2[i + l * n1] = buf1[i * n2 + (j + l)]; - } - } - for(l = 0; l < strip_len; l++) { - if (inverse) - mul_trig(buf2 + l * n1, n1, c_mul, m, m_inv); - if (ntt_fft(s, buf2 + l * n1, buf2 + l * n1, buf3, k1, inverse, m_idx)) - goto fail; - if (!inverse) - mul_trig(buf2 + l * n1, n1, c_mul, m, m_inv); - c_mul = mul_mod_fast(c_mul, c0, m, m_inv); - } - - for(i = 0; i < n1; i++) { - for(l = 0; l < strip_len; l++) { - buf1[i * n2 + (j + l)] = buf2[i + l *n1]; - } - } - } - ntt_free(s, buf2); - } - ntt_free(s, buf3); - return 0; - fail: - ntt_free(s, buf2); - ntt_free(s, buf3); - return -1; -} - - -/* dst = buf1, src = buf2, tmp = buf3 */ -static int ntt_conv(BFNTTState *s, NTTLimb *buf1, NTTLimb *buf2, - int k, int k_tot, limb_t m_idx) -{ - limb_t n1, n2, i; - int k1, k2; - - if (k <= NTT_TRIG_K_MAX) { - k1 = k; - } else { - /* recursive split of the FFT */ - k1 = bf_min(k / 2, NTT_TRIG_K_MAX); - } - k2 = k - k1; - n1 = (limb_t)1 << k1; - n2 = (limb_t)1 << k2; - - if (ntt_fft_partial(s, buf1, k1, k2, n1, n2, 0, m_idx)) - return -1; - if (ntt_fft_partial(s, buf2, k1, k2, n1, n2, 0, m_idx)) - return -1; - if (k2 == 0) { - ntt_vec_mul(s, buf1, buf2, k, k_tot, m_idx); - } else { - for(i = 0; i < n1; i++) { - ntt_conv(s, buf1 + i * n2, buf2 + i * n2, k2, k_tot, m_idx); - } - } - if (ntt_fft_partial(s, buf1, k1, k2, n1, n2, 1, m_idx)) - return -1; - return 0; -} - - -static no_inline void limb_to_ntt(BFNTTState *s, - NTTLimb *tabr, limb_t fft_len, - const limb_t *taba, limb_t a_len, int dpl, - int first_m_idx, int nb_mods) -{ - slimb_t i, n; - dlimb_t a, b; - int j, shift; - limb_t base_mask1, a0, a1, a2, r, m, m_inv; - - memset(tabr, 0, sizeof(NTTLimb) * fft_len * nb_mods); - shift = dpl & (LIMB_BITS - 1); - if (shift == 0) - base_mask1 = -1; - else - base_mask1 = ((limb_t)1 << shift) - 1; - n = bf_min(fft_len, (a_len * LIMB_BITS + dpl - 1) / dpl); - for(i = 0; i < n; i++) { - a0 = get_bits(taba, a_len, i * dpl); - if (dpl <= LIMB_BITS) { - a0 &= base_mask1; - a = a0; - } else { - a1 = get_bits(taba, a_len, i * dpl + LIMB_BITS); - if (dpl <= (LIMB_BITS + NTT_MOD_LOG2_MIN)) { - a = a0 | ((dlimb_t)(a1 & base_mask1) << LIMB_BITS); - } else { - if (dpl > 2 * LIMB_BITS) { - a2 = get_bits(taba, a_len, i * dpl + LIMB_BITS * 2) & - base_mask1; - } else { - a1 &= base_mask1; - a2 = 0; - } - // printf("a=0x%016lx%016lx%016lx\n", a2, a1, a0); - a = (a0 >> (LIMB_BITS - NTT_MOD_LOG2_MAX + NTT_MOD_LOG2_MIN)) | - ((dlimb_t)a1 << (NTT_MOD_LOG2_MAX - NTT_MOD_LOG2_MIN)) | - ((dlimb_t)a2 << (LIMB_BITS + NTT_MOD_LOG2_MAX - NTT_MOD_LOG2_MIN)); - a0 &= ((limb_t)1 << (LIMB_BITS - NTT_MOD_LOG2_MAX + NTT_MOD_LOG2_MIN)) - 1; - } - } - for(j = 0; j < nb_mods; j++) { - m = ntt_mods[first_m_idx + j]; - m_inv = s->ntt_mods_div[first_m_idx + j]; - r = mod_fast(a, m, m_inv); - if (dpl > (LIMB_BITS + NTT_MOD_LOG2_MIN)) { - b = ((dlimb_t)r << (LIMB_BITS - NTT_MOD_LOG2_MAX + NTT_MOD_LOG2_MIN)) | a0; - r = mod_fast(b, m, m_inv); - } - tabr[i + j * fft_len] = int_to_ntt_limb(r, m); - } - } -} - -#if defined(__AVX2__) - -#define VEC_LEN 4 - -typedef union { - __m256d v; - double d[4]; -} VecUnion; - -static no_inline void ntt_to_limb(BFNTTState *s, limb_t *tabr, limb_t r_len, - const NTTLimb *buf, int fft_len_log2, int dpl, - int nb_mods) -{ - const limb_t *mods = ntt_mods + NB_MODS - nb_mods; - const __m256d *mods_cr_vec, *mf, *m_inv; - VecUnion y[NB_MODS]; - limb_t u[NB_MODS], carry[NB_MODS], fft_len, base_mask1, r; - slimb_t i, len, pos; - int j, k, l, shift, n_limb1, p; - dlimb_t t; - - j = NB_MODS * (NB_MODS - 1) / 2 - nb_mods * (nb_mods - 1) / 2; - mods_cr_vec = s->ntt_mods_cr_vec + j; - mf = s->ntt_mods_vec + NB_MODS - nb_mods; - m_inv = s->ntt_mods_inv_vec + NB_MODS - nb_mods; - - shift = dpl & (LIMB_BITS - 1); - if (shift == 0) - base_mask1 = -1; - else - base_mask1 = ((limb_t)1 << shift) - 1; - n_limb1 = ((unsigned)dpl - 1) / LIMB_BITS; - for(j = 0; j < NB_MODS; j++) - carry[j] = 0; - for(j = 0; j < NB_MODS; j++) - u[j] = 0; /* avoid warnings */ - memset(tabr, 0, sizeof(limb_t) * r_len); - fft_len = (limb_t)1 << fft_len_log2; - len = bf_min(fft_len, (r_len * LIMB_BITS + dpl - 1) / dpl); - len = (len + VEC_LEN - 1) & ~(VEC_LEN - 1); - i = 0; - while (i < len) { - for(j = 0; j < nb_mods; j++) - y[j].v = *(__m256d *)&buf[i + fft_len * j]; - - /* Chinese remainder to get mixed radix representation */ - l = 0; - for(j = 0; j < nb_mods - 1; j++) { - y[j].v = ntt_mod1(y[j].v, mf[j]); - for(k = j + 1; k < nb_mods; k++) { - y[k].v = ntt_mul_mod(y[k].v - y[j].v, - mods_cr_vec[l], mf[k], m_inv[k]); - l++; - } - } - y[j].v = ntt_mod1(y[j].v, mf[j]); - - for(p = 0; p < VEC_LEN; p++) { - /* back to normal representation */ - u[0] = (int64_t)y[nb_mods - 1].d[p]; - l = 1; - for(j = nb_mods - 2; j >= 1; j--) { - r = (int64_t)y[j].d[p]; - for(k = 0; k < l; k++) { - t = (dlimb_t)u[k] * mods[j] + r; - r = t >> LIMB_BITS; - u[k] = t; - } - u[l] = r; - l++; - } - /* XXX: for nb_mods = 5, l should be 4 */ - - /* last step adds the carry */ - r = (int64_t)y[0].d[p]; - for(k = 0; k < l; k++) { - t = (dlimb_t)u[k] * mods[j] + r + carry[k]; - r = t >> LIMB_BITS; - u[k] = t; - } - u[l] = r + carry[l]; - - /* write the digits */ - pos = i * dpl; - for(j = 0; j < n_limb1; j++) { - put_bits(tabr, r_len, pos, u[j]); - pos += LIMB_BITS; - } - put_bits(tabr, r_len, pos, u[n_limb1] & base_mask1); - /* shift by dpl digits and set the carry */ - if (shift == 0) { - for(j = n_limb1 + 1; j < nb_mods; j++) - carry[j - (n_limb1 + 1)] = u[j]; - } else { - for(j = n_limb1; j < nb_mods - 1; j++) { - carry[j - n_limb1] = (u[j] >> shift) | - (u[j + 1] << (LIMB_BITS - shift)); - } - carry[nb_mods - 1 - n_limb1] = u[nb_mods - 1] >> shift; - } - i++; - } - } -} -#else -static no_inline void ntt_to_limb(BFNTTState *s, limb_t *tabr, limb_t r_len, - const NTTLimb *buf, int fft_len_log2, int dpl, - int nb_mods) -{ - const limb_t *mods = ntt_mods + NB_MODS - nb_mods; - const limb_t *mods_cr, *mods_cr_inv; - limb_t y[NB_MODS], u[NB_MODS], carry[NB_MODS], fft_len, base_mask1, r; - slimb_t i, len, pos; - int j, k, l, shift, n_limb1; - dlimb_t t; - - j = NB_MODS * (NB_MODS - 1) / 2 - nb_mods * (nb_mods - 1) / 2; - mods_cr = ntt_mods_cr + j; - mods_cr_inv = s->ntt_mods_cr_inv + j; - - shift = dpl & (LIMB_BITS - 1); - if (shift == 0) - base_mask1 = -1; - else - base_mask1 = ((limb_t)1 << shift) - 1; - n_limb1 = ((unsigned)dpl - 1) / LIMB_BITS; - for(j = 0; j < NB_MODS; j++) - carry[j] = 0; - for(j = 0; j < NB_MODS; j++) - u[j] = 0; /* avoid warnings */ - memset(tabr, 0, sizeof(limb_t) * r_len); - fft_len = (limb_t)1 << fft_len_log2; - len = bf_min(fft_len, (r_len * LIMB_BITS + dpl - 1) / dpl); - for(i = 0; i < len; i++) { - for(j = 0; j < nb_mods; j++) { - y[j] = ntt_limb_to_int(buf[i + fft_len * j], mods[j]); - } - - /* Chinese remainder to get mixed radix representation */ - l = 0; - for(j = 0; j < nb_mods - 1; j++) { - for(k = j + 1; k < nb_mods; k++) { - limb_t m; - m = mods[k]; - /* Note: there is no overflow in the sub_mod() because - the modulos are sorted by increasing order */ - y[k] = mul_mod_fast2(y[k] - y[j] + m, - mods_cr[l], m, mods_cr_inv[l]); - l++; - } - } - - /* back to normal representation */ - u[0] = y[nb_mods - 1]; - l = 1; - for(j = nb_mods - 2; j >= 1; j--) { - r = y[j]; - for(k = 0; k < l; k++) { - t = (dlimb_t)u[k] * mods[j] + r; - r = t >> LIMB_BITS; - u[k] = t; - } - u[l] = r; - l++; - } - - /* last step adds the carry */ - r = y[0]; - for(k = 0; k < l; k++) { - t = (dlimb_t)u[k] * mods[j] + r + carry[k]; - r = t >> LIMB_BITS; - u[k] = t; - } - u[l] = r + carry[l]; - - /* write the digits */ - pos = i * dpl; - for(j = 0; j < n_limb1; j++) { - put_bits(tabr, r_len, pos, u[j]); - pos += LIMB_BITS; - } - put_bits(tabr, r_len, pos, u[n_limb1] & base_mask1); - /* shift by dpl digits and set the carry */ - if (shift == 0) { - for(j = n_limb1 + 1; j < nb_mods; j++) - carry[j - (n_limb1 + 1)] = u[j]; - } else { - for(j = n_limb1; j < nb_mods - 1; j++) { - carry[j - n_limb1] = (u[j] >> shift) | - (u[j + 1] << (LIMB_BITS - shift)); - } - carry[nb_mods - 1 - n_limb1] = u[nb_mods - 1] >> shift; - } - } -} -#endif - -static int ntt_static_init(bf_context_t *s1) -{ - BFNTTState *s; - int inverse, i, j, k, l; - limb_t c, c_inv, c_inv2, m, m_inv; - - if (s1->ntt_state) - return 0; -#if defined(__AVX2__) - s = bf_aligned_malloc(s1, sizeof(*s), 64); -#else - s = bf_malloc(s1, sizeof(*s)); -#endif - if (!s) - return -1; - memset(s, 0, sizeof(*s)); - s1->ntt_state = s; - s->ctx = s1; - - for(j = 0; j < NB_MODS; j++) { - m = ntt_mods[j]; - m_inv = init_mul_mod_fast(m); - s->ntt_mods_div[j] = m_inv; -#if defined(__AVX2__) - s->ntt_mods_vec[j] = _mm256_set1_pd(m); - s->ntt_mods_inv_vec[j] = _mm256_set1_pd(1.0 / (double)m); -#endif - c_inv2 = (m + 1) / 2; /* 1/2 */ - c_inv = 1; - for(i = 0; i <= NTT_PROOT_2EXP; i++) { - s->ntt_len_inv[j][i][0] = c_inv; - s->ntt_len_inv[j][i][1] = init_mul_mod_fast2(c_inv, m); - c_inv = mul_mod_fast(c_inv, c_inv2, m, m_inv); - } - - for(inverse = 0; inverse < 2; inverse++) { - c = ntt_proot[inverse][j]; - for(i = 0; i < NTT_PROOT_2EXP; i++) { - s->ntt_proot_pow[j][inverse][NTT_PROOT_2EXP - i] = c; - s->ntt_proot_pow_inv[j][inverse][NTT_PROOT_2EXP - i] = - init_mul_mod_fast2(c, m); - c = mul_mod_fast(c, c, m, m_inv); - } - } - } - - l = 0; - for(j = 0; j < NB_MODS - 1; j++) { - for(k = j + 1; k < NB_MODS; k++) { -#if defined(__AVX2__) - s->ntt_mods_cr_vec[l] = _mm256_set1_pd(int_to_ntt_limb2(ntt_mods_cr[l], - ntt_mods[k])); -#else - s->ntt_mods_cr_inv[l] = init_mul_mod_fast2(ntt_mods_cr[l], - ntt_mods[k]); -#endif - l++; - } - } - return 0; -} - -int bf_get_fft_size(int *pdpl, int *pnb_mods, limb_t len) -{ - int dpl, fft_len_log2, n_bits, nb_mods, dpl_found, fft_len_log2_found; - int int_bits, nb_mods_found; - limb_t cost, min_cost; - - min_cost = -1; - dpl_found = 0; - nb_mods_found = 4; - fft_len_log2_found = 0; - for(nb_mods = 3; nb_mods <= NB_MODS; nb_mods++) { - int_bits = ntt_int_bits[NB_MODS - nb_mods]; - dpl = bf_min((int_bits - 4) / 2, - 2 * LIMB_BITS + 2 * NTT_MOD_LOG2_MIN - NTT_MOD_LOG2_MAX); - for(;;) { - fft_len_log2 = ceil_log2((len * LIMB_BITS + dpl - 1) / dpl); - if (fft_len_log2 > NTT_PROOT_2EXP) - goto next; - n_bits = fft_len_log2 + 2 * dpl; - if (n_bits <= int_bits) { - cost = ((limb_t)(fft_len_log2 + 1) << fft_len_log2) * nb_mods; - // printf("n=%d dpl=%d: cost=%" PRId64 "\n", nb_mods, dpl, (int64_t)cost); - if (cost < min_cost) { - min_cost = cost; - dpl_found = dpl; - nb_mods_found = nb_mods; - fft_len_log2_found = fft_len_log2; - } - break; - } - dpl--; - if (dpl == 0) - break; - } - next: ; - } - if (!dpl_found) - abort(); - /* limit dpl if possible to reduce fixed cost of limb/NTT conversion */ - if (dpl_found > (LIMB_BITS + NTT_MOD_LOG2_MIN) && - ((limb_t)(LIMB_BITS + NTT_MOD_LOG2_MIN) << fft_len_log2_found) >= - len * LIMB_BITS) { - dpl_found = LIMB_BITS + NTT_MOD_LOG2_MIN; - } - *pnb_mods = nb_mods_found; - *pdpl = dpl_found; - return fft_len_log2_found; -} - -/* return 0 if OK, -1 if memory error */ -static no_inline int fft_mul(bf_context_t *s1, - bf_t *res, limb_t *a_tab, limb_t a_len, - limb_t *b_tab, limb_t b_len, int mul_flags) -{ - BFNTTState *s; - int dpl, fft_len_log2, j, nb_mods, reduced_mem; - slimb_t len, fft_len; - NTTLimb *buf1, *buf2, *ptr; -#if defined(USE_MUL_CHECK) - limb_t ha, hb, hr, h_ref; -#endif - - if (ntt_static_init(s1)) - return -1; - s = s1->ntt_state; - - /* find the optimal number of digits per limb (dpl) */ - len = a_len + b_len; - fft_len_log2 = bf_get_fft_size(&dpl, &nb_mods, len); - fft_len = (uint64_t)1 << fft_len_log2; - // printf("len=%" PRId64 " fft_len_log2=%d dpl=%d\n", len, fft_len_log2, dpl); -#if defined(USE_MUL_CHECK) - ha = mp_mod1(a_tab, a_len, BF_CHKSUM_MOD, 0); - hb = mp_mod1(b_tab, b_len, BF_CHKSUM_MOD, 0); -#endif - if ((mul_flags & (FFT_MUL_R_OVERLAP_A | FFT_MUL_R_OVERLAP_B)) == 0) { - if (!(mul_flags & FFT_MUL_R_NORESIZE)) - bf_resize(res, 0); - } else if (mul_flags & FFT_MUL_R_OVERLAP_B) { - limb_t *tmp_tab, tmp_len; - /* it is better to free 'b' first */ - tmp_tab = a_tab; - a_tab = b_tab; - b_tab = tmp_tab; - tmp_len = a_len; - a_len = b_len; - b_len = tmp_len; - } - buf1 = ntt_malloc(s, sizeof(NTTLimb) * fft_len * nb_mods); - if (!buf1) - return -1; - limb_to_ntt(s, buf1, fft_len, a_tab, a_len, dpl, - NB_MODS - nb_mods, nb_mods); - if ((mul_flags & (FFT_MUL_R_OVERLAP_A | FFT_MUL_R_OVERLAP_B)) == - FFT_MUL_R_OVERLAP_A) { - if (!(mul_flags & FFT_MUL_R_NORESIZE)) - bf_resize(res, 0); - } - reduced_mem = (fft_len_log2 >= 14); - if (!reduced_mem) { - buf2 = ntt_malloc(s, sizeof(NTTLimb) * fft_len * nb_mods); - if (!buf2) - goto fail; - limb_to_ntt(s, buf2, fft_len, b_tab, b_len, dpl, - NB_MODS - nb_mods, nb_mods); - if (!(mul_flags & FFT_MUL_R_NORESIZE)) - bf_resize(res, 0); /* in case res == b */ - } else { - buf2 = ntt_malloc(s, sizeof(NTTLimb) * fft_len); - if (!buf2) - goto fail; - } - for(j = 0; j < nb_mods; j++) { - if (reduced_mem) { - limb_to_ntt(s, buf2, fft_len, b_tab, b_len, dpl, - NB_MODS - nb_mods + j, 1); - ptr = buf2; - } else { - ptr = buf2 + fft_len * j; - } - if (ntt_conv(s, buf1 + fft_len * j, ptr, - fft_len_log2, fft_len_log2, j + NB_MODS - nb_mods)) - goto fail; - } - if (!(mul_flags & FFT_MUL_R_NORESIZE)) - bf_resize(res, 0); /* in case res == b and reduced mem */ - ntt_free(s, buf2); - buf2 = NULL; - if (!(mul_flags & FFT_MUL_R_NORESIZE)) { - if (bf_resize(res, len)) - goto fail; - } - ntt_to_limb(s, res->tab, len, buf1, fft_len_log2, dpl, nb_mods); - ntt_free(s, buf1); -#if defined(USE_MUL_CHECK) - hr = mp_mod1(res->tab, len, BF_CHKSUM_MOD, 0); - h_ref = mul_mod(ha, hb, BF_CHKSUM_MOD); - if (hr != h_ref) { - printf("ntt_mul_error: len=%" PRId_LIMB " fft_len_log2=%d dpl=%d nb_mods=%d\n", - len, fft_len_log2, dpl, nb_mods); - // printf("ha=0x" FMT_LIMB" hb=0x" FMT_LIMB " hr=0x" FMT_LIMB " expected=0x" FMT_LIMB "\n", ha, hb, hr, h_ref); - exit(1); - } -#endif - return 0; - fail: - ntt_free(s, buf1); - ntt_free(s, buf2); - return -1; -} - -#else /* USE_FFT_MUL */ - -int bf_get_fft_size(int *pdpl, int *pnb_mods, limb_t len) -{ - return 0; -} - -#endif /* !USE_FFT_MUL */ diff --git a/vendor/quickjs-ng/libbf.h b/vendor/quickjs-ng/libbf.h deleted file mode 100644 index d89d09cb9..000000000 --- a/vendor/quickjs-ng/libbf.h +++ /dev/null @@ -1,535 +0,0 @@ -/* - * Tiny arbitrary precision floating point library - * - * Copyright (c) 2017-2021 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef LIBBF_H -#define LIBBF_H - -#include -#include - -#if INTPTR_MAX >= INT64_MAX && !defined(_WIN32) && !defined(__TINYC__) -#define LIMB_LOG2_BITS 6 -#else -#define LIMB_LOG2_BITS 5 -#endif - -#define LIMB_BITS (1 << LIMB_LOG2_BITS) - -#if LIMB_BITS == 64 -typedef __int128 int128_t; -typedef unsigned __int128 uint128_t; -typedef int64_t slimb_t; -typedef uint64_t limb_t; -typedef uint128_t dlimb_t; -#define BF_RAW_EXP_MIN INT64_MIN -#define BF_RAW_EXP_MAX INT64_MAX - -#define LIMB_DIGITS 19 -#define BF_DEC_BASE UINT64_C(10000000000000000000) - -#else - -typedef int32_t slimb_t; -typedef uint32_t limb_t; -typedef uint64_t dlimb_t; -#define BF_RAW_EXP_MIN INT32_MIN -#define BF_RAW_EXP_MAX INT32_MAX - -#define LIMB_DIGITS 9 -#define BF_DEC_BASE 1000000000U - -#endif - -/* in bits */ -/* minimum number of bits for the exponent */ -#define BF_EXP_BITS_MIN 3 -/* maximum number of bits for the exponent */ -#define BF_EXP_BITS_MAX (LIMB_BITS - 3) -/* extended range for exponent, used internally */ -#define BF_EXT_EXP_BITS_MAX (BF_EXP_BITS_MAX + 1) -/* minimum possible precision */ -#define BF_PREC_MIN 2 -/* minimum possible precision */ -#define BF_PREC_MAX (((limb_t)1 << (LIMB_BITS - 2)) - 2) -/* some operations support infinite precision */ -#define BF_PREC_INF (BF_PREC_MAX + 1) /* infinite precision */ - -#if LIMB_BITS == 64 -#define BF_CHKSUM_MOD (UINT64_C(975620677) * UINT64_C(9795002197)) -#else -#define BF_CHKSUM_MOD 975620677U -#endif - -#define BF_EXP_ZERO BF_RAW_EXP_MIN -#define BF_EXP_INF (BF_RAW_EXP_MAX - 1) -#define BF_EXP_NAN BF_RAW_EXP_MAX - -/* +/-zero is represented with expn = BF_EXP_ZERO and len = 0, - +/-infinity is represented with expn = BF_EXP_INF and len = 0, - NaN is represented with expn = BF_EXP_NAN and len = 0 (sign is ignored) - */ -typedef struct { - struct bf_context_t *ctx; - int sign; - slimb_t expn; - limb_t len; - limb_t *tab; -} bf_t; - -typedef struct { - /* must be kept identical to bf_t */ - struct bf_context_t *ctx; - int sign; - slimb_t expn; - limb_t len; - limb_t *tab; -} bfdec_t; - -typedef enum { - BF_RNDN, /* round to nearest, ties to even */ - BF_RNDZ, /* round to zero */ - BF_RNDD, /* round to -inf (the code relies on (BF_RNDD xor BF_RNDU) = 1) */ - BF_RNDU, /* round to +inf */ - BF_RNDNA, /* round to nearest, ties away from zero */ - BF_RNDA, /* round away from zero */ - BF_RNDF, /* faithful rounding (nondeterministic, either RNDD or RNDU, - inexact flag is always set) */ -} bf_rnd_t; - -/* allow subnormal numbers. Only available if the number of exponent - bits is <= BF_EXP_BITS_USER_MAX and prec != BF_PREC_INF. */ -#define BF_FLAG_SUBNORMAL (1 << 3) -/* 'prec' is the precision after the radix point instead of the whole - mantissa. Can only be used with bf_round() and - bfdec_[add|sub|mul|div|sqrt|round](). */ -#define BF_FLAG_RADPNT_PREC (1 << 4) - -#define BF_RND_MASK 0x7 -#define BF_EXP_BITS_SHIFT 5 -#define BF_EXP_BITS_MASK 0x3f - -/* shortcut for bf_set_exp_bits(BF_EXT_EXP_BITS_MAX) */ -#define BF_FLAG_EXT_EXP (BF_EXP_BITS_MASK << BF_EXP_BITS_SHIFT) - -/* contains the rounding mode and number of exponents bits */ -typedef uint32_t bf_flags_t; - -typedef void *bf_realloc_func_t(void *opaque, void *ptr, size_t size); - -typedef struct { - bf_t val; - limb_t prec; -} BFConstCache; - -typedef struct bf_context_t { - void *realloc_opaque; - bf_realloc_func_t *realloc_func; - BFConstCache log2_cache; - BFConstCache pi_cache; - struct BFNTTState *ntt_state; -} bf_context_t; - -static inline int bf_get_exp_bits(bf_flags_t flags) -{ - int e; - e = (flags >> BF_EXP_BITS_SHIFT) & BF_EXP_BITS_MASK; - if (e == BF_EXP_BITS_MASK) - return BF_EXP_BITS_MAX + 1; - else - return BF_EXP_BITS_MAX - e; -} - -static inline bf_flags_t bf_set_exp_bits(int n) -{ - return ((BF_EXP_BITS_MAX - n) & BF_EXP_BITS_MASK) << BF_EXP_BITS_SHIFT; -} - -/* returned status */ -#define BF_ST_INVALID_OP (1 << 0) -#define BF_ST_DIVIDE_ZERO (1 << 1) -#define BF_ST_OVERFLOW (1 << 2) -#define BF_ST_UNDERFLOW (1 << 3) -#define BF_ST_INEXACT (1 << 4) -/* indicate that a memory allocation error occured. NaN is returned */ -#define BF_ST_MEM_ERROR (1 << 5) - -#define BF_RADIX_MAX 36 /* maximum radix for bf_atof() and bf_ftoa() */ - -static inline slimb_t bf_max(slimb_t a, slimb_t b) -{ - if (a > b) - return a; - else - return b; -} - -static inline slimb_t bf_min(slimb_t a, slimb_t b) -{ - if (a < b) - return a; - else - return b; -} - -void bf_context_init(bf_context_t *s, bf_realloc_func_t *realloc_func, - void *realloc_opaque); -void bf_context_end(bf_context_t *s); -/* free memory allocated for the bf cache data */ -void bf_clear_cache(bf_context_t *s); - -static inline void *bf_realloc(bf_context_t *s, void *ptr, size_t size) -{ - return s->realloc_func(s->realloc_opaque, ptr, size); -} - -/* 'size' must be != 0 */ -static inline void *bf_malloc(bf_context_t *s, size_t size) -{ - return bf_realloc(s, NULL, size); -} - -static inline void bf_free(bf_context_t *s, void *ptr) -{ - /* must test ptr otherwise equivalent to malloc(0) */ - if (ptr) - bf_realloc(s, ptr, 0); -} - -void bf_init(bf_context_t *s, bf_t *r); - -static inline void bf_delete(bf_t *r) -{ - bf_context_t *s = r->ctx; - /* we accept to delete a zeroed bf_t structure */ - if (s && r->tab) { - bf_realloc(s, r->tab, 0); - } -} - -static inline void bf_neg(bf_t *r) -{ - r->sign ^= 1; -} - -static inline int bf_is_finite(const bf_t *a) -{ - return (a->expn < BF_EXP_INF); -} - -static inline int bf_is_nan(const bf_t *a) -{ - return (a->expn == BF_EXP_NAN); -} - -static inline int bf_is_zero(const bf_t *a) -{ - return (a->expn == BF_EXP_ZERO); -} - -static inline void bf_memcpy(bf_t *r, const bf_t *a) -{ - *r = *a; -} - -int bf_set_ui(bf_t *r, uint64_t a); -int bf_set_si(bf_t *r, int64_t a); -void bf_set_nan(bf_t *r); -void bf_set_zero(bf_t *r, int is_neg); -void bf_set_inf(bf_t *r, int is_neg); -int bf_set(bf_t *r, const bf_t *a); -void bf_move(bf_t *r, bf_t *a); -int bf_get_float64(const bf_t *a, double *pres, bf_rnd_t rnd_mode); -int bf_set_float64(bf_t *a, double d); - -int bf_cmpu(const bf_t *a, const bf_t *b); -int bf_cmp_full(const bf_t *a, const bf_t *b); -int bf_cmp(const bf_t *a, const bf_t *b); -static inline int bf_cmp_eq(const bf_t *a, const bf_t *b) -{ - return bf_cmp(a, b) == 0; -} - -static inline int bf_cmp_le(const bf_t *a, const bf_t *b) -{ - return bf_cmp(a, b) <= 0; -} - -static inline int bf_cmp_lt(const bf_t *a, const bf_t *b) -{ - return bf_cmp(a, b) < 0; -} - -int bf_add(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, bf_flags_t flags); -int bf_sub(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, bf_flags_t flags); -int bf_add_si(bf_t *r, const bf_t *a, int64_t b1, limb_t prec, bf_flags_t flags); -int bf_mul(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, bf_flags_t flags); -int bf_mul_ui(bf_t *r, const bf_t *a, uint64_t b1, limb_t prec, bf_flags_t flags); -int bf_mul_si(bf_t *r, const bf_t *a, int64_t b1, limb_t prec, - bf_flags_t flags); -int bf_mul_2exp(bf_t *r, slimb_t e, limb_t prec, bf_flags_t flags); -int bf_div(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, bf_flags_t flags); -#define BF_DIVREM_EUCLIDIAN BF_RNDF -int bf_divrem(bf_t *q, bf_t *r, const bf_t *a, const bf_t *b, - limb_t prec, bf_flags_t flags, int rnd_mode); -int bf_rem(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags, int rnd_mode); -int bf_remquo(slimb_t *pq, bf_t *r, const bf_t *a, const bf_t *b, limb_t prec, - bf_flags_t flags, int rnd_mode); -/* round to integer with infinite precision */ -int bf_rint(bf_t *r, int rnd_mode); -int bf_round(bf_t *r, limb_t prec, bf_flags_t flags); -int bf_sqrtrem(bf_t *r, bf_t *rem1, const bf_t *a); -int bf_sqrt(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -slimb_t bf_get_exp_min(const bf_t *a); -int bf_logic_or(bf_t *r, const bf_t *a, const bf_t *b); -int bf_logic_xor(bf_t *r, const bf_t *a, const bf_t *b); -int bf_logic_and(bf_t *r, const bf_t *a, const bf_t *b); - -/* additional flags for bf_atof */ -/* do not accept hex radix prefix (0x or 0X) if radix = 0 or radix = 16 */ -#define BF_ATOF_NO_HEX (1 << 16) -/* accept binary (0b or 0B) or octal (0o or 0O) radix prefix if radix = 0 */ -#define BF_ATOF_BIN_OCT (1 << 17) -/* Do not parse NaN or Inf */ -#define BF_ATOF_NO_NAN_INF (1 << 18) -/* return the exponent separately */ -#define BF_ATOF_EXPONENT (1 << 19) - -int bf_atof(bf_t *a, const char *str, const char **pnext, int radix, - limb_t prec, bf_flags_t flags); -/* this version accepts prec = BF_PREC_INF and returns the radix - exponent */ -int bf_atof2(bf_t *r, slimb_t *pexponent, - const char *str, const char **pnext, int radix, - limb_t prec, bf_flags_t flags); -int bf_mul_pow_radix(bf_t *r, const bf_t *T, limb_t radix, - slimb_t expn, limb_t prec, bf_flags_t flags); - - -/* Conversion of floating point number to string. Return a null - terminated string or NULL if memory error. *plen contains its - length if plen != NULL. The exponent letter is "e" for base 10, - "p" for bases 2, 8, 16 with a binary exponent and "@" for the other - bases. */ - -#define BF_FTOA_FORMAT_MASK (3 << 16) - -/* fixed format: prec significant digits rounded with (flags & - BF_RND_MASK). Exponential notation is used if too many zeros are - needed.*/ -#define BF_FTOA_FORMAT_FIXED (0 << 16) -/* fractional format: prec digits after the decimal point rounded with - (flags & BF_RND_MASK) */ -#define BF_FTOA_FORMAT_FRAC (1 << 16) -/* free format: - - For binary radices with bf_ftoa() and for bfdec_ftoa(): use the minimum - number of digits to represent 'a'. The precision and the rounding - mode are ignored. - - For the non binary radices with bf_ftoa(): use as many digits as - necessary so that bf_atof() return the same number when using - precision 'prec', rounding to nearest and the subnormal - configuration of 'flags'. The result is meaningful only if 'a' is - already rounded to 'prec' bits. If the subnormal flag is set, the - exponent in 'flags' must also be set to the desired exponent range. -*/ -#define BF_FTOA_FORMAT_FREE (2 << 16) -/* same as BF_FTOA_FORMAT_FREE but uses the minimum number of digits - (takes more computation time). Identical to BF_FTOA_FORMAT_FREE for - binary radices with bf_ftoa() and for bfdec_ftoa(). */ -#define BF_FTOA_FORMAT_FREE_MIN (3 << 16) - -/* force exponential notation for fixed or free format */ -#define BF_FTOA_FORCE_EXP (1 << 20) -/* add 0x prefix for base 16, 0o prefix for base 8 or 0b prefix for - base 2 if non zero value */ -#define BF_FTOA_ADD_PREFIX (1 << 21) -/* return "Infinity" instead of "Inf" and add a "+" for positive - exponents */ -#define BF_FTOA_JS_QUIRKS (1 << 22) - -char *bf_ftoa(size_t *plen, const bf_t *a, int radix, limb_t prec, - bf_flags_t flags); - -/* modulo 2^n instead of saturation. NaN and infinity return 0 */ -#define BF_GET_INT_MOD (1 << 0) -int bf_get_int32(int *pres, const bf_t *a, int flags); -int bf_get_int64(int64_t *pres, const bf_t *a, int flags); -int bf_get_uint64(uint64_t *pres, const bf_t *a); - -/* the following functions are exported for testing only. */ -void mp_print_str(const char *str, const limb_t *tab, limb_t n); -void bf_print_str(const char *str, const bf_t *a); -int bf_resize(bf_t *r, limb_t len); -int bf_get_fft_size(int *pdpl, int *pnb_mods, limb_t len); -int bf_normalize_and_round(bf_t *r, limb_t prec1, bf_flags_t flags); -int bf_can_round(const bf_t *a, slimb_t prec, bf_rnd_t rnd_mode, slimb_t k); -slimb_t bf_mul_log2_radix(slimb_t a1, unsigned int radix, int is_inv, - int is_ceil1); -int mp_mul(bf_context_t *s, limb_t *result, - const limb_t *op1, limb_t op1_size, - const limb_t *op2, limb_t op2_size); -limb_t mp_add(limb_t *res, const limb_t *op1, const limb_t *op2, - limb_t n, limb_t carry); -limb_t mp_add_ui(limb_t *tab, limb_t b, size_t n); -int mp_sqrtrem(bf_context_t *s, limb_t *tabs, limb_t *taba, limb_t n); -int mp_recip(bf_context_t *s, limb_t *tabr, const limb_t *taba, limb_t n); -limb_t bf_isqrt(limb_t a); - -/* transcendental functions */ -int bf_const_log2(bf_t *T, limb_t prec, bf_flags_t flags); -int bf_const_pi(bf_t *T, limb_t prec, bf_flags_t flags); -int bf_exp(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -int bf_log(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -#define BF_POW_JS_QUIRKS (1 << 16) /* (+/-1)^(+/-Inf) = NaN, 1^NaN = NaN */ -int bf_pow(bf_t *r, const bf_t *x, const bf_t *y, limb_t prec, bf_flags_t flags); -int bf_cos(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -int bf_sin(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -int bf_tan(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -int bf_atan(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -int bf_atan2(bf_t *r, const bf_t *y, const bf_t *x, - limb_t prec, bf_flags_t flags); -int bf_asin(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); -int bf_acos(bf_t *r, const bf_t *a, limb_t prec, bf_flags_t flags); - -/* decimal floating point */ - -static inline void bfdec_init(bf_context_t *s, bfdec_t *r) -{ - bf_init(s, (bf_t *)r); -} -static inline void bfdec_delete(bfdec_t *r) -{ - bf_delete((bf_t *)r); -} - -static inline void bfdec_neg(bfdec_t *r) -{ - r->sign ^= 1; -} - -static inline int bfdec_is_finite(const bfdec_t *a) -{ - return (a->expn < BF_EXP_INF); -} - -static inline int bfdec_is_nan(const bfdec_t *a) -{ - return (a->expn == BF_EXP_NAN); -} - -static inline int bfdec_is_zero(const bfdec_t *a) -{ - return (a->expn == BF_EXP_ZERO); -} - -static inline void bfdec_memcpy(bfdec_t *r, const bfdec_t *a) -{ - bf_memcpy((bf_t *)r, (const bf_t *)a); -} - -int bfdec_set_ui(bfdec_t *r, uint64_t a); -int bfdec_set_si(bfdec_t *r, int64_t a); - -static inline void bfdec_set_nan(bfdec_t *r) -{ - bf_set_nan((bf_t *)r); -} -static inline void bfdec_set_zero(bfdec_t *r, int is_neg) -{ - bf_set_zero((bf_t *)r, is_neg); -} -static inline void bfdec_set_inf(bfdec_t *r, int is_neg) -{ - bf_set_inf((bf_t *)r, is_neg); -} -static inline int bfdec_set(bfdec_t *r, const bfdec_t *a) -{ - return bf_set((bf_t *)r, (bf_t *)a); -} -static inline void bfdec_move(bfdec_t *r, bfdec_t *a) -{ - bf_move((bf_t *)r, (bf_t *)a); -} -static inline int bfdec_cmpu(const bfdec_t *a, const bfdec_t *b) -{ - return bf_cmpu((const bf_t *)a, (const bf_t *)b); -} -static inline int bfdec_cmp_full(const bfdec_t *a, const bfdec_t *b) -{ - return bf_cmp_full((const bf_t *)a, (const bf_t *)b); -} -static inline int bfdec_cmp(const bfdec_t *a, const bfdec_t *b) -{ - return bf_cmp((const bf_t *)a, (const bf_t *)b); -} -static inline int bfdec_cmp_eq(const bfdec_t *a, const bfdec_t *b) -{ - return bfdec_cmp(a, b) == 0; -} -static inline int bfdec_cmp_le(const bfdec_t *a, const bfdec_t *b) -{ - return bfdec_cmp(a, b) <= 0; -} -static inline int bfdec_cmp_lt(const bfdec_t *a, const bfdec_t *b) -{ - return bfdec_cmp(a, b) < 0; -} - -int bfdec_add(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags); -int bfdec_sub(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags); -int bfdec_add_si(bfdec_t *r, const bfdec_t *a, int64_t b1, limb_t prec, - bf_flags_t flags); -int bfdec_mul(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags); -int bfdec_mul_si(bfdec_t *r, const bfdec_t *a, int64_t b1, limb_t prec, - bf_flags_t flags); -int bfdec_div(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags); -int bfdec_divrem(bfdec_t *q, bfdec_t *r, const bfdec_t *a, const bfdec_t *b, - limb_t prec, bf_flags_t flags, int rnd_mode); -int bfdec_rem(bfdec_t *r, const bfdec_t *a, const bfdec_t *b, limb_t prec, - bf_flags_t flags, int rnd_mode); -int bfdec_rint(bfdec_t *r, int rnd_mode); -int bfdec_sqrt(bfdec_t *r, const bfdec_t *a, limb_t prec, bf_flags_t flags); -int bfdec_round(bfdec_t *r, limb_t prec, bf_flags_t flags); -int bfdec_get_int32(int *pres, const bfdec_t *a); -int bfdec_pow_ui(bfdec_t *r, const bfdec_t *a, limb_t b); - -char *bfdec_ftoa(size_t *plen, const bfdec_t *a, limb_t prec, bf_flags_t flags); -int bfdec_atof(bfdec_t *r, const char *str, const char **pnext, - limb_t prec, bf_flags_t flags); - -/* the following functions are exported for testing only. */ -extern const limb_t mp_pow_dec[LIMB_DIGITS + 1]; -void bfdec_print_str(const char *str, const bfdec_t *a); -static inline int bfdec_resize(bfdec_t *r, limb_t len) -{ - return bf_resize((bf_t *)r, len); -} -int bfdec_normalize_and_round(bfdec_t *r, limb_t prec1, bf_flags_t flags); - -#endif /* LIBBF_H */ diff --git a/vendor/quickjs-ng/libregexp-opcode.h b/vendor/quickjs-ng/libregexp-opcode.h deleted file mode 100644 index 7fdc887ae..000000000 --- a/vendor/quickjs-ng/libregexp-opcode.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Regular Expression Engine - * - * Copyright (c) 2017-2018 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifdef DEF - -DEF(invalid, 1) /* never used */ -DEF(char8, 2) /* 7 bits in fact */ -DEF(char16, 3) -DEF(char32, 5) -DEF(dot, 1) -DEF(any, 1) /* same as dot but match any character including line terminator */ -DEF(line_start, 1) -DEF(line_end, 1) -DEF(goto, 5) -DEF(split_goto_first, 5) -DEF(split_next_first, 5) -DEF(match, 1) -DEF(save_start, 2) /* save start position */ -DEF(save_end, 2) /* save end position, must come after saved_start */ -DEF(save_reset, 3) /* reset save positions */ -DEF(loop, 5) /* decrement the top the stack and goto if != 0 */ -DEF(push_i32, 5) /* push integer on the stack */ -DEF(drop, 1) -DEF(word_boundary, 1) -DEF(not_word_boundary, 1) -DEF(back_reference, 2) -DEF(backward_back_reference, 2) /* must come after back_reference */ -DEF(range, 3) /* variable length */ -DEF(range32, 3) /* variable length */ -DEF(lookahead, 5) -DEF(negative_lookahead, 5) -DEF(push_char_pos, 1) /* push the character position on the stack */ -DEF(bne_char_pos, 5) /* pop one stack element and jump if equal to the character - position */ -DEF(prev, 1) /* go to the previous char */ -DEF(simple_greedy_quant, 17) - -#endif /* DEF */ diff --git a/vendor/quickjs-ng/libregexp.c b/vendor/quickjs-ng/libregexp.c deleted file mode 100644 index c2f9a1fb8..000000000 --- a/vendor/quickjs-ng/libregexp.c +++ /dev/null @@ -1,2715 +0,0 @@ -/* - * Regular Expression Engine - * - * Copyright (c) 2017-2018 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -#include "cutils.h" -#include "libregexp.h" - -/* - TODO: - - - Add full unicode canonicalize rules for character ranges (not - really useful but needed for exact "ignorecase" compatibility). - - - Add a lock step execution mode (=linear time execution guaranteed) - when the regular expression is "simple" i.e. no backreference nor - complicated lookahead. The opcodes are designed for this execution - model. -*/ - -#if defined(TEST) -#define DUMP_REOP -#endif - -typedef enum { -#define DEF(id, size) REOP_ ## id, -#include "libregexp-opcode.h" -#undef DEF - REOP_COUNT, -} REOPCodeEnum; - -#define CAPTURE_COUNT_MAX 255 -#define STACK_SIZE_MAX 255 - -/* unicode code points */ -#define CP_LS 0x2028 -#define CP_PS 0x2029 - -#define TMP_BUF_SIZE 128 - -// invariant: is_unicode ^ unicode_sets (or neither, but not both) -typedef struct { - DynBuf byte_code; - const uint8_t *buf_ptr; - const uint8_t *buf_end; - const uint8_t *buf_start; - int re_flags; - BOOL is_unicode; - BOOL unicode_sets; - BOOL ignore_case; - BOOL dotall; - int capture_count; - int total_capture_count; /* -1 = not computed yet */ - int has_named_captures; /* -1 = don't know, 0 = no, 1 = yes */ - void *opaque; - DynBuf group_names; - union { - char error_msg[TMP_BUF_SIZE]; - char tmp_buf[TMP_BUF_SIZE]; - } u; -} REParseState; - -typedef struct { -#ifdef DUMP_REOP - const char *name; -#endif - uint8_t size; -} REOpCode; - -static const REOpCode reopcode_info[REOP_COUNT] = { -#ifdef DUMP_REOP -#define DEF(id, size) { #id, size }, -#else -#define DEF(id, size) { size }, -#endif -#include "libregexp-opcode.h" -#undef DEF -}; - -#define RE_HEADER_FLAGS 0 -#define RE_HEADER_CAPTURE_COUNT 2 -#define RE_HEADER_STACK_SIZE 3 -#define RE_HEADER_BYTECODE_LEN 4 - -#define RE_HEADER_LEN 8 - -static inline int is_digit(int c) { - return c >= '0' && c <= '9'; -} - -/* insert 'len' bytes at position 'pos'. Return < 0 if error. */ -static int dbuf_insert(DynBuf *s, int pos, int len) -{ - if (dbuf_realloc(s, s->size + len)) - return -1; - memmove(s->buf + pos + len, s->buf + pos, s->size - pos); - s->size += len; - return 0; -} - -/* canonicalize with the specific JS regexp rules */ -static uint32_t lre_canonicalize(uint32_t c, BOOL is_unicode) -{ - uint32_t res[LRE_CC_RES_LEN_MAX]; - int len; - if (is_unicode) { - if (likely(c < 128)) { - if (c >= 'A' && c <= 'Z') - c = c - 'A' + 'a'; - } else { - lre_case_conv(res, c, 2); - c = res[0]; - } - } else { - if (likely(c < 128)) { - if (c >= 'a' && c <= 'z') - c = c - 'a' + 'A'; - } else { - /* legacy regexp: to upper case if single char >= 128 */ - len = lre_case_conv(res, c, FALSE); - if (len == 1 && res[0] >= 128) - c = res[0]; - } - } - return c; -} - -static const uint16_t char_range_d[] = { - 1, - 0x0030, 0x0039 + 1, -}; - -/* code point ranges for Zs,Zl or Zp property */ -static const uint16_t char_range_s[] = { - 10, - 0x0009, 0x000D + 1, - 0x0020, 0x0020 + 1, - 0x00A0, 0x00A0 + 1, - 0x1680, 0x1680 + 1, - 0x2000, 0x200A + 1, - /* 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; */ - /* 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; */ - 0x2028, 0x2029 + 1, - 0x202F, 0x202F + 1, - 0x205F, 0x205F + 1, - 0x3000, 0x3000 + 1, - /* FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; */ - 0xFEFF, 0xFEFF + 1, -}; - -BOOL lre_is_space(int c) -{ - int i, n, low, high; - n = (countof(char_range_s) - 1) / 2; - for(i = 0; i < n; i++) { - low = char_range_s[2 * i + 1]; - if (c < low) - return FALSE; - high = char_range_s[2 * i + 2]; - if (c < high) - return TRUE; - } - return FALSE; -} - -uint32_t const lre_id_start_table_ascii[4] = { - /* $ A-Z _ a-z */ - 0x00000000, 0x00000010, 0x87FFFFFE, 0x07FFFFFE -}; - -uint32_t const lre_id_continue_table_ascii[4] = { - /* $ 0-9 A-Z _ a-z */ - 0x00000000, 0x03FF0010, 0x87FFFFFE, 0x07FFFFFE -}; - - -static const uint16_t char_range_w[] = { - 4, - 0x0030, 0x0039 + 1, - 0x0041, 0x005A + 1, - 0x005F, 0x005F + 1, - 0x0061, 0x007A + 1, -}; - -#define CLASS_RANGE_BASE 0x40000000 - -typedef enum { - CHAR_RANGE_d, - CHAR_RANGE_D, - CHAR_RANGE_s, - CHAR_RANGE_S, - CHAR_RANGE_w, - CHAR_RANGE_W, -} CharRangeEnum; - -static const uint16_t *char_range_table[] = { - char_range_d, - char_range_s, - char_range_w, -}; - -static int cr_init_char_range(REParseState *s, CharRange *cr, uint32_t c) -{ - BOOL invert; - const uint16_t *c_pt; - int len, i; - - invert = c & 1; - c_pt = char_range_table[c >> 1]; - len = *c_pt++; - cr_init(cr, s->opaque, lre_realloc); - for(i = 0; i < len * 2; i++) { - if (cr_add_point(cr, c_pt[i])) - goto fail; - } - if (invert) { - if (cr_invert(cr)) - goto fail; - } - return 0; - fail: - cr_free(cr); - return -1; -} - -static int cr_canonicalize(CharRange *cr) -{ - CharRange a; - uint32_t pt[2]; - int i, ret; - - cr_init(&a, cr->mem_opaque, lre_realloc); - pt[0] = 'a'; - pt[1] = 'z' + 1; - ret = cr_op(&a, cr->points, cr->len, pt, 2, CR_OP_INTER); - if (ret) - goto fail; - /* convert to upper case */ - /* XXX: the generic unicode case would be much more complicated - and not really useful */ - for(i = 0; i < a.len; i++) { - a.points[i] += 'A' - 'a'; - } - /* Note: for simplicity we keep the lower case ranges */ - ret = cr_union1(cr, a.points, a.len); - fail: - cr_free(&a); - return ret; -} - -#ifdef DUMP_REOP -static __maybe_unused void lre_dump_bytecode(const uint8_t *buf, - int buf_len) -{ - int pos, len, opcode, bc_len, re_flags, i; - uint32_t val; - - assert(buf_len >= RE_HEADER_LEN); - - re_flags = lre_get_flags(buf); - bc_len = get_u32(buf + RE_HEADER_BYTECODE_LEN); - assert(bc_len + RE_HEADER_LEN <= buf_len); - printf("flags: 0x%x capture_count=%d stack_size=%d\n", - re_flags, buf[RE_HEADER_CAPTURE_COUNT], buf[RE_HEADER_STACK_SIZE]); - if (re_flags & LRE_FLAG_NAMED_GROUPS) { - const char *p; - p = (char *)buf + RE_HEADER_LEN + bc_len; - printf("named groups: "); - for(i = 1; i < buf[RE_HEADER_CAPTURE_COUNT]; i++) { - if (i != 1) - printf(","); - printf("<%s>", p); - p += strlen(p) + 1; - } - printf("\n"); - assert(p == (char *)(buf + buf_len)); - } - printf("bytecode_len=%d\n", bc_len); - - buf += RE_HEADER_LEN; - pos = 0; - while (pos < bc_len) { - printf("%5u: ", pos); - opcode = buf[pos]; - len = reopcode_info[opcode].size; - if (opcode >= REOP_COUNT) { - printf(" invalid opcode=0x%02x\n", opcode); - break; - } - if ((pos + len) > bc_len) { - printf(" buffer overflow (opcode=0x%02x)\n", opcode); - break; - } - printf("%s", reopcode_info[opcode].name); - switch(opcode) { - case REOP_char8: - val = get_u8(buf + pos + 1); - goto printchar; - case REOP_char16: - val = get_u16(buf + pos + 1); - goto printchar; - case REOP_char32: - val = get_u32(buf + pos + 1); - printchar: - if (val >= ' ' && val <= 126) - printf(" '%c'", val); - else - printf(" 0x%08x", val); - break; - case REOP_goto: - case REOP_split_goto_first: - case REOP_split_next_first: - case REOP_loop: - case REOP_lookahead: - case REOP_negative_lookahead: - case REOP_bne_char_pos: - val = get_u32(buf + pos + 1); - val += (pos + 5); - printf(" %u", val); - break; - case REOP_simple_greedy_quant: - printf(" %u %u %u %u", - get_u32(buf + pos + 1) + (pos + 17), - get_u32(buf + pos + 1 + 4), - get_u32(buf + pos + 1 + 8), - get_u32(buf + pos + 1 + 12)); - break; - case REOP_save_start: - case REOP_save_end: - case REOP_back_reference: - case REOP_backward_back_reference: - printf(" %u", buf[pos + 1]); - break; - case REOP_save_reset: - printf(" %u %u", buf[pos + 1], buf[pos + 2]); - break; - case REOP_push_i32: - val = get_u32(buf + pos + 1); - printf(" %d", val); - break; - case REOP_range: - { - int n, i; - n = get_u16(buf + pos + 1); - len += n * 4; - for(i = 0; i < n * 2; i++) { - val = get_u16(buf + pos + 3 + i * 2); - printf(" 0x%04x", val); - } - } - break; - case REOP_range32: - { - int n, i; - n = get_u16(buf + pos + 1); - len += n * 8; - for(i = 0; i < n * 2; i++) { - val = get_u32(buf + pos + 3 + i * 4); - printf(" 0x%08x", val); - } - } - break; - default: - break; - } - printf("\n"); - pos += len; - } -} -#endif - -static void re_emit_op(REParseState *s, int op) -{ - dbuf_putc(&s->byte_code, op); -} - -/* return the offset of the u32 value */ -static int re_emit_op_u32(REParseState *s, int op, uint32_t val) -{ - int pos; - dbuf_putc(&s->byte_code, op); - pos = s->byte_code.size; - dbuf_put_u32(&s->byte_code, val); - return pos; -} - -static int re_emit_goto(REParseState *s, int op, uint32_t val) -{ - int pos; - dbuf_putc(&s->byte_code, op); - pos = s->byte_code.size; - dbuf_put_u32(&s->byte_code, val - (pos + 4)); - return pos; -} - -static void re_emit_op_u8(REParseState *s, int op, uint32_t val) -{ - dbuf_putc(&s->byte_code, op); - dbuf_putc(&s->byte_code, val); -} - -static void re_emit_op_u16(REParseState *s, int op, uint32_t val) -{ - dbuf_putc(&s->byte_code, op); - dbuf_put_u16(&s->byte_code, val); -} - -static int __attribute__((format(printf, 2, 3))) re_parse_error(REParseState *s, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vsnprintf(s->u.error_msg, sizeof(s->u.error_msg), fmt, ap); - va_end(ap); - return -1; -} - -static int re_parse_out_of_memory(REParseState *s) -{ - return re_parse_error(s, "out of memory"); -} - -/* If allow_overflow is false, return -1 in case of - overflow. Otherwise return INT32_MAX. */ -static int parse_digits(const uint8_t **pp, BOOL allow_overflow) -{ - const uint8_t *p; - uint64_t v; - int c; - - p = *pp; - v = 0; - for(;;) { - c = *p; - if (c < '0' || c > '9') - break; - v = v * 10 + c - '0'; - if (v >= INT32_MAX) { - if (allow_overflow) - v = INT32_MAX; - else - return -1; - } - p++; - } - *pp = p; - return v; -} - -static int re_parse_expect(REParseState *s, const uint8_t **pp, int c) -{ - const uint8_t *p; - p = *pp; - if (*p != c) - return re_parse_error(s, "expecting '%c'", c); - p++; - *pp = p; - return 0; -} - -/* Parse an escape sequence, *pp points after the '\': - allow_utf16 value: - 0 : no UTF-16 escapes allowed - 1 : UTF-16 escapes allowed - 2 : UTF-16 escapes allowed and escapes of surrogate pairs are - converted to a unicode character (unicode regexp case). - - Return the unicode char and update *pp if recognized, - return -1 if malformed escape, - return -2 otherwise. */ -int lre_parse_escape(const uint8_t **pp, int allow_utf16) -{ - const uint8_t *p; - uint32_t c; - - p = *pp; - c = *p++; - switch(c) { - case 'b': - c = '\b'; - break; - case 'f': - c = '\f'; - break; - case 'n': - c = '\n'; - break; - case 'r': - c = '\r'; - break; - case 't': - c = '\t'; - break; - case 'v': - c = '\v'; - break; - case 'x': - case 'u': - { - int h, n, i; - uint32_t c1; - - if (*p == '{' && allow_utf16) { - p++; - c = 0; - for(;;) { - h = from_hex(*p++); - if (h < 0) - return -1; - c = (c << 4) | h; - if (c > 0x10FFFF) - return -1; - if (*p == '}') - break; - } - p++; - } else { - if (c == 'x') { - n = 2; - } else { - n = 4; - } - - c = 0; - for(i = 0; i < n; i++) { - h = from_hex(*p++); - if (h < 0) { - return -1; - } - c = (c << 4) | h; - } - if (is_hi_surrogate(c) && - allow_utf16 == 2 && p[0] == '\\' && p[1] == 'u') { - /* convert an escaped surrogate pair into a - unicode char */ - c1 = 0; - for(i = 0; i < 4; i++) { - h = from_hex(p[2 + i]); - if (h < 0) - break; - c1 = (c1 << 4) | h; - } - if (i == 4 && is_lo_surrogate(c1)) { - p += 6; - c = from_surrogate(c, c1); - } - } - } - } - break; - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - c -= '0'; - if (allow_utf16 == 2) { - /* only accept \0 not followed by digit */ - if (c != 0 || is_digit(*p)) - return -1; - } else { - /* parse a legacy octal sequence */ - uint32_t v; - v = *p - '0'; - if (v > 7) - break; - c = (c << 3) | v; - p++; - if (c >= 32) - break; - v = *p - '0'; - if (v > 7) - break; - c = (c << 3) | v; - p++; - } - break; - default: - return -2; - } - *pp = p; - return c; -} - -/* XXX: we use the same chars for name and value */ -static BOOL is_unicode_char(int c) -{ - return ((c >= '0' && c <= '9') || - (c >= 'A' && c <= 'Z') || - (c >= 'a' && c <= 'z') || - (c == '_')); -} - -static int parse_unicode_property(REParseState *s, CharRange *cr, - const uint8_t **pp, BOOL is_inv) -{ - const uint8_t *p; - char name[64], value[64]; - char *q; - BOOL script_ext; - int ret; - - p = *pp; - if (*p != '{') - return re_parse_error(s, "expecting '{' after \\p"); - p++; - q = name; - while (is_unicode_char(*p)) { - if ((q - name) >= sizeof(name) - 1) - goto unknown_property_name; - *q++ = *p++; - } - *q = '\0'; - q = value; - if (*p == '=') { - p++; - while (is_unicode_char(*p)) { - if ((q - value) >= sizeof(value) - 1) - return re_parse_error(s, "unknown unicode property value"); - *q++ = *p++; - } - } - *q = '\0'; - if (*p != '}') - return re_parse_error(s, "expecting '}'"); - p++; - // printf("name=%s value=%s\n", name, value); - - if (!strcmp(name, "Script") || !strcmp(name, "sc")) { - script_ext = FALSE; - goto do_script; - } else if (!strcmp(name, "Script_Extensions") || !strcmp(name, "scx")) { - script_ext = TRUE; - do_script: - cr_init(cr, s->opaque, lre_realloc); - ret = unicode_script(cr, value, script_ext); - if (ret) { - cr_free(cr); - if (ret == -2) - return re_parse_error(s, "unknown unicode script"); - else - goto out_of_memory; - } - } else if (!strcmp(name, "General_Category") || !strcmp(name, "gc")) { - cr_init(cr, s->opaque, lre_realloc); - ret = unicode_general_category(cr, value); - if (ret) { - cr_free(cr); - if (ret == -2) - return re_parse_error(s, "unknown unicode general category"); - else - goto out_of_memory; - } - } else if (value[0] == '\0') { - cr_init(cr, s->opaque, lre_realloc); - ret = unicode_general_category(cr, name); - if (ret == -1) { - cr_free(cr); - goto out_of_memory; - } - if (ret < 0) { - ret = unicode_prop(cr, name); - if (ret) { - cr_free(cr); - if (ret == -2) - goto unknown_property_name; - else - goto out_of_memory; - } - } - } else { - unknown_property_name: - return re_parse_error(s, "unknown unicode property name"); - } - - if (is_inv) { - if (cr_invert(cr)) { - cr_free(cr); - return -1; - } - } - *pp = p; - return 0; - out_of_memory: - return re_parse_out_of_memory(s); -} - -/* return -1 if error otherwise the character or a class range - (CLASS_RANGE_BASE). In case of class range, 'cr' is - initialized. Otherwise, it is ignored. */ -static int get_class_atom(REParseState *s, CharRange *cr, - const uint8_t **pp, BOOL inclass) -{ - const uint8_t *p; - uint32_t c; - int ret; - - p = *pp; - - c = *p; - switch(c) { - case '\\': - p++; - if (p >= s->buf_end) - goto unexpected_end; - c = *p++; - switch(c) { - case 'd': - c = CHAR_RANGE_d; - goto class_range; - case 'D': - c = CHAR_RANGE_D; - goto class_range; - case 's': - c = CHAR_RANGE_s; - goto class_range; - case 'S': - c = CHAR_RANGE_S; - goto class_range; - case 'w': - c = CHAR_RANGE_w; - goto class_range; - case 'W': - c = CHAR_RANGE_W; - class_range: - if (cr_init_char_range(s, cr, c)) - return -1; - c = CLASS_RANGE_BASE; - break; - case 'c': - c = *p; - if ((c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (((c >= '0' && c <= '9') || c == '_') && - inclass && !s->is_unicode)) { /* Annex B.1.4 */ - c &= 0x1f; - p++; - } else if (s->is_unicode) { - goto invalid_escape; - } else { - /* otherwise return '\' and 'c' */ - p--; - c = '\\'; - } - break; - case 'p': - case 'P': - if (s->is_unicode) { - if (parse_unicode_property(s, cr, &p, (c == 'P'))) - return -1; - c = CLASS_RANGE_BASE; - break; - } - /* fall thru */ - default: - p--; - ret = lre_parse_escape(&p, s->is_unicode * 2); - if (ret >= 0) { - c = ret; - } else { - if (ret == -2 && *p != '\0' && strchr("^$\\.*+?()[]{}|/", *p)) { - /* always valid to escape these characters */ - goto normal_char; - } else if (s->is_unicode) { - invalid_escape: - return re_parse_error(s, "invalid escape sequence in regular expression"); - } else { - /* just ignore the '\' */ - goto normal_char; - } - } - break; - } - break; - case '\0': - if (p >= s->buf_end) { - unexpected_end: - return re_parse_error(s, "unexpected end"); - } - /* fall thru */ - default: - normal_char: - /* normal char */ - if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); - if ((unsigned)c > 0xffff && !s->is_unicode) { - /* XXX: should handle non BMP-1 code points */ - return re_parse_error(s, "malformed unicode char"); - } - } else { - p++; - } - break; - } - *pp = p; - return c; -} - -static int re_emit_range(REParseState *s, const CharRange *cr) -{ - int len, i; - uint32_t high; - - len = (unsigned)cr->len / 2; - if (len >= 65535) - return re_parse_error(s, "too many ranges"); - if (len == 0) { - /* not sure it can really happen. Emit a match that is always - false */ - re_emit_op_u32(s, REOP_char32, -1); - } else { - high = cr->points[cr->len - 1]; - if (high == UINT32_MAX) - high = cr->points[cr->len - 2]; - if (high <= 0xffff) { - /* can use 16 bit ranges with the conversion that 0xffff = - infinity */ - re_emit_op_u16(s, REOP_range, len); - for(i = 0; i < cr->len; i += 2) { - dbuf_put_u16(&s->byte_code, cr->points[i]); - high = cr->points[i + 1] - 1; - if (high == UINT32_MAX - 1) - high = 0xffff; - dbuf_put_u16(&s->byte_code, high); - } - } else { - re_emit_op_u16(s, REOP_range32, len); - for(i = 0; i < cr->len; i += 2) { - dbuf_put_u32(&s->byte_code, cr->points[i]); - dbuf_put_u32(&s->byte_code, cr->points[i + 1] - 1); - } - } - } - return 0; -} - -// s->unicode turns patterns like []] into syntax errors -// s->unicode_sets turns more patterns into errors, like [a-] or [[] -static int re_parse_char_class(REParseState *s, const uint8_t **pp) -{ - const uint8_t *p; - uint32_t c1, c2; - CharRange cr_s, *cr = &cr_s; - CharRange cr1_s, *cr1 = &cr1_s; - BOOL invert; - - cr_init(cr, s->opaque, lre_realloc); - p = *pp; - p++; /* skip '[' */ - - if (s->unicode_sets) { - static const char verboten[] = - "()[{}/-|" "\0" - "&&!!##$$%%**++,,..::;;<<==>>??@@``~~" "\0" - "^^^_^^"; - const char *s = verboten; - int n = 1; - do { - if (!memcmp(s, p, n)) - if (p[n] == ']') - goto invalid_class_range; - s += n; - if (!*s) { - s++; - n++; - } - } while (n < 4); - } - - invert = FALSE; - if (*p == '^') { - p++; - invert = TRUE; - } - - for(;;) { - if (*p == ']') - break; - c1 = get_class_atom(s, cr1, &p, TRUE); - if ((int)c1 < 0) - goto fail; - if (*p == '-' && p[1] == ']' && s->unicode_sets) { - if (c1 >= CLASS_RANGE_BASE) - cr_free(cr1); - goto invalid_class_range; - } - if (*p == '-' && p[1] != ']') { - const uint8_t *p0 = p + 1; - if (c1 >= CLASS_RANGE_BASE) { - if (s->is_unicode) { - cr_free(cr1); - goto invalid_class_range; - } - /* Annex B: match '-' character */ - goto class_atom; - } - c2 = get_class_atom(s, cr1, &p0, TRUE); - if ((int)c2 < 0) - goto fail; - if (c2 >= CLASS_RANGE_BASE) { - cr_free(cr1); - if (s->is_unicode) { - goto invalid_class_range; - } - /* Annex B: match '-' character */ - goto class_atom; - } - p = p0; - if (c2 < c1) { - invalid_class_range: - re_parse_error(s, "invalid class range"); - goto fail; - } - if (cr_union_interval(cr, c1, c2)) - goto memory_error; - } else { - class_atom: - if (c1 >= CLASS_RANGE_BASE) { - int ret; - ret = cr_union1(cr, cr1->points, cr1->len); - cr_free(cr1); - if (ret) - goto memory_error; - } else { - if (cr_union_interval(cr, c1, c1)) - goto memory_error; - } - } - } - if (s->ignore_case) { - if (cr_canonicalize(cr)) - goto memory_error; - } - if (invert) { - if (cr_invert(cr)) - goto memory_error; - } - if (re_emit_range(s, cr)) - goto fail; - cr_free(cr); - p++; /* skip ']' */ - *pp = p; - return 0; - memory_error: - re_parse_out_of_memory(s); - fail: - cr_free(cr); - return -1; -} - -/* Return: - 1 if the opcodes in bc_buf[] always advance the character pointer. - 0 if the character pointer may not be advanced. - -1 if the code may depend on side effects of its previous execution (backreference) -*/ -static int re_check_advance(const uint8_t *bc_buf, int bc_buf_len) -{ - int pos, opcode, ret, len, i; - uint32_t val, last; - BOOL has_back_reference; - uint8_t capture_bitmap[CAPTURE_COUNT_MAX]; - - ret = -2; /* not known yet */ - pos = 0; - has_back_reference = FALSE; - memset(capture_bitmap, 0, sizeof(capture_bitmap)); - - while (pos < bc_buf_len) { - opcode = bc_buf[pos]; - len = reopcode_info[opcode].size; - switch(opcode) { - case REOP_range: - val = get_u16(bc_buf + pos + 1); - len += val * 4; - goto simple_char; - case REOP_range32: - val = get_u16(bc_buf + pos + 1); - len += val * 8; - goto simple_char; - case REOP_char32: - case REOP_char16: - case REOP_char8: - case REOP_dot: - case REOP_any: - simple_char: - if (ret == -2) - ret = 1; - break; - case REOP_line_start: - case REOP_line_end: - case REOP_push_i32: - case REOP_push_char_pos: - case REOP_drop: - case REOP_word_boundary: - case REOP_not_word_boundary: - case REOP_prev: - /* no effect */ - break; - case REOP_save_start: - case REOP_save_end: - val = bc_buf[pos + 1]; - capture_bitmap[val] |= 1; - break; - case REOP_save_reset: - { - val = bc_buf[pos + 1]; - last = bc_buf[pos + 2]; - while (val < last) - capture_bitmap[val++] |= 1; - } - break; - case REOP_back_reference: - case REOP_backward_back_reference: - val = bc_buf[pos + 1]; - capture_bitmap[val] |= 2; - has_back_reference = TRUE; - break; - default: - /* safe behvior: we cannot predict the outcome */ - if (ret == -2) - ret = 0; - break; - } - pos += len; - } - if (has_back_reference) { - /* check if there is back reference which references a capture - made in the some code */ - for(i = 0; i < CAPTURE_COUNT_MAX; i++) { - if (capture_bitmap[i] == 3) - return -1; - } - } - if (ret == -2) - ret = 0; - return ret; -} - -/* return -1 if a simple quantifier cannot be used. Otherwise return - the number of characters in the atom. */ -static int re_is_simple_quantifier(const uint8_t *bc_buf, int bc_buf_len) -{ - int pos, opcode, len, count; - uint32_t val; - - count = 0; - pos = 0; - while (pos < bc_buf_len) { - opcode = bc_buf[pos]; - len = reopcode_info[opcode].size; - switch(opcode) { - case REOP_range: - val = get_u16(bc_buf + pos + 1); - len += val * 4; - goto simple_char; - case REOP_range32: - val = get_u16(bc_buf + pos + 1); - len += val * 8; - goto simple_char; - case REOP_char32: - case REOP_char16: - case REOP_char8: - case REOP_dot: - case REOP_any: - simple_char: - count++; - break; - case REOP_line_start: - case REOP_line_end: - case REOP_word_boundary: - case REOP_not_word_boundary: - break; - default: - return -1; - } - pos += len; - } - return count; -} - -/* '*pp' is the first char after '<' */ -static int re_parse_group_name(char *buf, int buf_size, const uint8_t **pp) -{ - const uint8_t *p, *p1; - uint32_t c, d; - char *q; - - p = *pp; - q = buf; - for(;;) { - c = *p; - if (c == '\\') { - p++; - if (*p != 'u') - return -1; - c = lre_parse_escape(&p, 2); // accept surrogate pairs - } else if (c == '>') { - break; - } else if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); - if (is_hi_surrogate(c)) { - d = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1); - if (is_lo_surrogate(d)) { - c = from_surrogate(c, d); - p = p1; - } - } - } else { - p++; - } - if (c > 0x10FFFF) - return -1; - if (q == buf) { - if (!lre_js_is_ident_first(c)) - return -1; - } else { - if (!lre_js_is_ident_next(c)) - return -1; - } - if ((q - buf + UTF8_CHAR_LEN_MAX + 1) > buf_size) - return -1; - if (c < 128) { - *q++ = c; - } else { - q += unicode_to_utf8((uint8_t*)q, c); - } - } - if (q == buf) - return -1; - *q = '\0'; - p++; - *pp = p; - return 0; -} - -/* if capture_name = NULL: return the number of captures + 1. - Otherwise, return the capture index corresponding to capture_name - or -1 if none */ -static int re_parse_captures(REParseState *s, int *phas_named_captures, - const char *capture_name) -{ - const uint8_t *p; - int capture_index; - char name[TMP_BUF_SIZE]; - - capture_index = 1; - *phas_named_captures = 0; - for (p = s->buf_start; p < s->buf_end; p++) { - switch (*p) { - case '(': - if (p[1] == '?') { - if (p[2] == '<' && p[3] != '=' && p[3] != '!') { - *phas_named_captures = 1; - /* potential named capture */ - if (capture_name) { - p += 3; - if (re_parse_group_name(name, sizeof(name), &p) == 0) { - if (!strcmp(name, capture_name)) - return capture_index; - } - } - capture_index++; - if (capture_index >= CAPTURE_COUNT_MAX) - goto done; - } - } else { - capture_index++; - if (capture_index >= CAPTURE_COUNT_MAX) - goto done; - } - break; - case '\\': - p++; - break; - case '[': - for (p += 1 + (*p == ']'); p < s->buf_end && *p != ']'; p++) { - if (*p == '\\') - p++; - } - break; - } - } - done: - if (capture_name) - return -1; - else - return capture_index; -} - -static int re_count_captures(REParseState *s) -{ - if (s->total_capture_count < 0) { - s->total_capture_count = re_parse_captures(s, &s->has_named_captures, - NULL); - } - return s->total_capture_count; -} - -static BOOL re_has_named_captures(REParseState *s) -{ - if (s->has_named_captures < 0) - re_count_captures(s); - return s->has_named_captures; -} - -static int find_group_name(REParseState *s, const char *name) -{ - const char *p, *buf_end; - size_t len, name_len; - int capture_index; - - p = (char *)s->group_names.buf; - if (!p) return -1; - buf_end = (char *)s->group_names.buf + s->group_names.size; - name_len = strlen(name); - capture_index = 1; - while (p < buf_end) { - len = strlen(p); - if (len == name_len && memcmp(name, p, name_len) == 0) - return capture_index; - p += len + 1; - capture_index++; - } - return -1; -} - -static int re_parse_disjunction(REParseState *s, BOOL is_backward_dir); - -static int re_parse_term(REParseState *s, BOOL is_backward_dir) -{ - const uint8_t *p; - int c, last_atom_start, quant_min, quant_max, last_capture_count; - BOOL greedy, add_zero_advance_check, is_neg, is_backward_lookahead; - CharRange cr_s, *cr = &cr_s; - - last_atom_start = -1; - last_capture_count = 0; - p = s->buf_ptr; - c = *p; - switch(c) { - case '^': - p++; - re_emit_op(s, REOP_line_start); - break; - case '$': - p++; - re_emit_op(s, REOP_line_end); - break; - case '.': - p++; - last_atom_start = s->byte_code.size; - last_capture_count = s->capture_count; - if (is_backward_dir) - re_emit_op(s, REOP_prev); - re_emit_op(s, s->dotall ? REOP_any : REOP_dot); - if (is_backward_dir) - re_emit_op(s, REOP_prev); - break; - case '{': - if (s->is_unicode) { - return re_parse_error(s, "syntax error"); - } else if (!is_digit(p[1])) { - /* Annex B: we accept '{' not followed by digits as a - normal atom */ - goto parse_class_atom; - } else { - const uint8_t *p1 = p + 1; - /* Annex B: error if it is like a repetition count */ - parse_digits(&p1, TRUE); - if (*p1 == ',') { - p1++; - if (is_digit(*p1)) { - parse_digits(&p1, TRUE); - } - } - if (*p1 != '}') { - goto parse_class_atom; - } - } - /* fall thru */ - case '*': - case '+': - case '?': - return re_parse_error(s, "nothing to repeat"); - case '(': - if (p[1] == '?') { - if (p[2] == ':') { - p += 3; - last_atom_start = s->byte_code.size; - last_capture_count = s->capture_count; - s->buf_ptr = p; - if (re_parse_disjunction(s, is_backward_dir)) - return -1; - p = s->buf_ptr; - if (re_parse_expect(s, &p, ')')) - return -1; - } else if ((p[2] == '=' || p[2] == '!')) { - is_neg = (p[2] == '!'); - is_backward_lookahead = FALSE; - p += 3; - goto lookahead; - } else if (p[2] == '<' && - (p[3] == '=' || p[3] == '!')) { - int pos; - is_neg = (p[3] == '!'); - is_backward_lookahead = TRUE; - p += 4; - /* lookahead */ - lookahead: - /* Annex B allows lookahead to be used as an atom for - the quantifiers */ - if (!s->is_unicode && !is_backward_lookahead) { - last_atom_start = s->byte_code.size; - last_capture_count = s->capture_count; - } - pos = re_emit_op_u32(s, REOP_lookahead + is_neg, 0); - s->buf_ptr = p; - if (re_parse_disjunction(s, is_backward_lookahead)) - return -1; - p = s->buf_ptr; - if (re_parse_expect(s, &p, ')')) - return -1; - re_emit_op(s, REOP_match); - /* jump after the 'match' after the lookahead is successful */ - if (dbuf_error(&s->byte_code)) - return -1; - put_u32(s->byte_code.buf + pos, s->byte_code.size - (pos + 4)); - } else if (p[2] == '<') { - p += 3; - if (re_parse_group_name(s->u.tmp_buf, sizeof(s->u.tmp_buf), - &p)) { - return re_parse_error(s, "invalid group name"); - } - if (find_group_name(s, s->u.tmp_buf) > 0) { - return re_parse_error(s, "duplicate group name"); - } - /* group name with a trailing zero */ - dbuf_put(&s->group_names, (uint8_t *)s->u.tmp_buf, - strlen(s->u.tmp_buf) + 1); - s->has_named_captures = 1; - goto parse_capture; - } else { - return re_parse_error(s, "invalid group"); - } - } else { - int capture_index; - p++; - /* capture without group name */ - dbuf_putc(&s->group_names, 0); - parse_capture: - if (s->capture_count >= CAPTURE_COUNT_MAX) - return re_parse_error(s, "too many captures"); - last_atom_start = s->byte_code.size; - last_capture_count = s->capture_count; - capture_index = s->capture_count++; - re_emit_op_u8(s, REOP_save_start + is_backward_dir, - capture_index); - - s->buf_ptr = p; - if (re_parse_disjunction(s, is_backward_dir)) - return -1; - p = s->buf_ptr; - - re_emit_op_u8(s, REOP_save_start + 1 - is_backward_dir, - capture_index); - - if (re_parse_expect(s, &p, ')')) - return -1; - } - break; - case '\\': - switch(p[1]) { - case 'b': - case 'B': - re_emit_op(s, REOP_word_boundary + (p[1] != 'b')); - p += 2; - break; - case 'k': - { - const uint8_t *p1; - int dummy_res; - - p1 = p; - if (p1[2] != '<') { - /* annex B: we tolerate invalid group names in non - unicode mode if there is no named capture - definition */ - if (s->is_unicode || re_has_named_captures(s)) - return re_parse_error(s, "expecting group name"); - else - goto parse_class_atom; - } - p1 += 3; - if (re_parse_group_name(s->u.tmp_buf, sizeof(s->u.tmp_buf), - &p1)) { - if (s->is_unicode || re_has_named_captures(s)) - return re_parse_error(s, "invalid group name"); - else - goto parse_class_atom; - } - c = find_group_name(s, s->u.tmp_buf); - if (c < 0) { - /* no capture name parsed before, try to look - after (inefficient, but hopefully not common */ - c = re_parse_captures(s, &dummy_res, s->u.tmp_buf); - if (c < 0) { - if (s->is_unicode || re_has_named_captures(s)) - return re_parse_error(s, "group name not defined"); - else - goto parse_class_atom; - } - } - p = p1; - } - goto emit_back_reference; - case '0': - p += 2; - c = 0; - if (s->is_unicode) { - if (is_digit(*p)) { - return re_parse_error(s, "invalid decimal escape in regular expression"); - } - } else { - /* Annex B.1.4: accept legacy octal */ - if (*p >= '0' && *p <= '7') { - c = *p++ - '0'; - if (*p >= '0' && *p <= '7') { - c = (c << 3) + *p++ - '0'; - } - } - } - goto normal_char; - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': - { - const uint8_t *q = ++p; - - c = parse_digits(&p, FALSE); - if (c < 0 || (c >= s->capture_count && c >= re_count_captures(s))) { - if (!s->is_unicode) { - /* Annex B.1.4: accept legacy octal */ - p = q; - if (*p <= '7') { - c = 0; - if (*p <= '3') - c = *p++ - '0'; - if (*p >= '0' && *p <= '7') { - c = (c << 3) + *p++ - '0'; - if (*p >= '0' && *p <= '7') { - c = (c << 3) + *p++ - '0'; - } - } - } else { - c = *p++; - } - goto normal_char; - } - return re_parse_error(s, "back reference out of range in regular expression"); - } - emit_back_reference: - last_atom_start = s->byte_code.size; - last_capture_count = s->capture_count; - re_emit_op_u8(s, REOP_back_reference + is_backward_dir, c); - } - break; - default: - goto parse_class_atom; - } - break; - case '[': - last_atom_start = s->byte_code.size; - last_capture_count = s->capture_count; - if (is_backward_dir) - re_emit_op(s, REOP_prev); - if (re_parse_char_class(s, &p)) - return -1; - if (is_backward_dir) - re_emit_op(s, REOP_prev); - break; - case ']': - case '}': - if (s->is_unicode) - return re_parse_error(s, "syntax error"); - goto parse_class_atom; - default: - parse_class_atom: - c = get_class_atom(s, cr, &p, FALSE); - if ((int)c < 0) - return -1; - normal_char: - last_atom_start = s->byte_code.size; - last_capture_count = s->capture_count; - if (is_backward_dir) - re_emit_op(s, REOP_prev); - if (c >= CLASS_RANGE_BASE) { - int ret; - /* Note: canonicalization is not needed */ - ret = re_emit_range(s, cr); - cr_free(cr); - if (ret) - return -1; - } else { - if (s->ignore_case) - c = lre_canonicalize(c, s->is_unicode); - if (c <= 0x7f) - re_emit_op_u8(s, REOP_char8, c); - else if (c <= 0xffff) - re_emit_op_u16(s, REOP_char16, c); - else - re_emit_op_u32(s, REOP_char32, c); - } - if (is_backward_dir) - re_emit_op(s, REOP_prev); - break; - } - - /* quantifier */ - if (last_atom_start >= 0) { - c = *p; - switch(c) { - case '*': - p++; - quant_min = 0; - quant_max = INT32_MAX; - goto quantifier; - case '+': - p++; - quant_min = 1; - quant_max = INT32_MAX; - goto quantifier; - case '?': - p++; - quant_min = 0; - quant_max = 1; - goto quantifier; - case '{': - { - const uint8_t *p1 = p; - /* As an extension (see ES6 annex B), we accept '{' not - followed by digits as a normal atom */ - if (!is_digit(p[1])) { - if (s->is_unicode) - goto invalid_quant_count; - break; - } - p++; - quant_min = parse_digits(&p, TRUE); - quant_max = quant_min; - if (*p == ',') { - p++; - if (is_digit(*p)) { - quant_max = parse_digits(&p, TRUE); - if (quant_max < quant_min) { - invalid_quant_count: - return re_parse_error(s, "invalid repetition count"); - } - } else { - quant_max = INT32_MAX; /* infinity */ - } - } - if (*p != '}' && !s->is_unicode) { - /* Annex B: normal atom if invalid '{' syntax */ - p = p1; - break; - } - if (re_parse_expect(s, &p, '}')) - return -1; - } - quantifier: - greedy = TRUE; - if (*p == '?') { - p++; - greedy = FALSE; - } - if (last_atom_start < 0) { - return re_parse_error(s, "nothing to repeat"); - } - if (greedy) { - int len, pos; - - if (quant_max > 0) { - /* specific optimization for simple quantifiers */ - if (dbuf_error(&s->byte_code)) - goto out_of_memory; - len = re_is_simple_quantifier(s->byte_code.buf + last_atom_start, - s->byte_code.size - last_atom_start); - if (len > 0) { - re_emit_op(s, REOP_match); - - if (dbuf_insert(&s->byte_code, last_atom_start, 17)) - goto out_of_memory; - pos = last_atom_start; - s->byte_code.buf[pos++] = REOP_simple_greedy_quant; - put_u32(&s->byte_code.buf[pos], - s->byte_code.size - last_atom_start - 17); - pos += 4; - put_u32(&s->byte_code.buf[pos], quant_min); - pos += 4; - put_u32(&s->byte_code.buf[pos], quant_max); - pos += 4; - put_u32(&s->byte_code.buf[pos], len); - pos += 4; - goto done; - } - } - - if (dbuf_error(&s->byte_code)) - goto out_of_memory; - add_zero_advance_check = (re_check_advance(s->byte_code.buf + last_atom_start, - s->byte_code.size - last_atom_start) == 0); - } else { - add_zero_advance_check = FALSE; - } - - { - int len, pos; - len = s->byte_code.size - last_atom_start; - if (quant_min == 0) { - /* need to reset the capture in case the atom is - not executed */ - if (last_capture_count != s->capture_count) { - if (dbuf_insert(&s->byte_code, last_atom_start, 3)) - goto out_of_memory; - s->byte_code.buf[last_atom_start++] = REOP_save_reset; - s->byte_code.buf[last_atom_start++] = last_capture_count; - s->byte_code.buf[last_atom_start++] = s->capture_count - 1; - } - if (quant_max == 0) { - s->byte_code.size = last_atom_start; - } else if (quant_max == 1) { - if (dbuf_insert(&s->byte_code, last_atom_start, 5)) - goto out_of_memory; - s->byte_code.buf[last_atom_start] = REOP_split_goto_first + - greedy; - put_u32(s->byte_code.buf + last_atom_start + 1, len); - } else if (quant_max == INT32_MAX) { - if (dbuf_insert(&s->byte_code, last_atom_start, 5 + add_zero_advance_check)) - goto out_of_memory; - s->byte_code.buf[last_atom_start] = REOP_split_goto_first + - greedy; - put_u32(s->byte_code.buf + last_atom_start + 1, - len + 5 + add_zero_advance_check); - if (add_zero_advance_check) { - /* avoid infinite loop by stoping the - recursion if no advance was made in the - atom (only works if the atom has no - side effect) */ - s->byte_code.buf[last_atom_start + 1 + 4] = REOP_push_char_pos; - re_emit_goto(s, REOP_bne_char_pos, last_atom_start); - } else { - re_emit_goto(s, REOP_goto, last_atom_start); - } - } else { - if (dbuf_insert(&s->byte_code, last_atom_start, 10)) - goto out_of_memory; - pos = last_atom_start; - s->byte_code.buf[pos++] = REOP_push_i32; - put_u32(s->byte_code.buf + pos, quant_max); - pos += 4; - s->byte_code.buf[pos++] = REOP_split_goto_first + greedy; - put_u32(s->byte_code.buf + pos, len + 5); - re_emit_goto(s, REOP_loop, last_atom_start + 5); - re_emit_op(s, REOP_drop); - } - } else if (quant_min == 1 && quant_max == INT32_MAX && - !add_zero_advance_check) { - re_emit_goto(s, REOP_split_next_first - greedy, - last_atom_start); - } else { - if (quant_min == 1) { - /* nothing to add */ - } else { - if (dbuf_insert(&s->byte_code, last_atom_start, 5)) - goto out_of_memory; - s->byte_code.buf[last_atom_start] = REOP_push_i32; - put_u32(s->byte_code.buf + last_atom_start + 1, - quant_min); - last_atom_start += 5; - re_emit_goto(s, REOP_loop, last_atom_start); - re_emit_op(s, REOP_drop); - } - if (quant_max == INT32_MAX) { - pos = s->byte_code.size; - re_emit_op_u32(s, REOP_split_goto_first + greedy, - len + 5 + add_zero_advance_check); - if (add_zero_advance_check) - re_emit_op(s, REOP_push_char_pos); - /* copy the atom */ - dbuf_put_self(&s->byte_code, last_atom_start, len); - if (add_zero_advance_check) - re_emit_goto(s, REOP_bne_char_pos, pos); - else - re_emit_goto(s, REOP_goto, pos); - } else if (quant_max > quant_min) { - re_emit_op_u32(s, REOP_push_i32, quant_max - quant_min); - pos = s->byte_code.size; - re_emit_op_u32(s, REOP_split_goto_first + greedy, len + 5); - /* copy the atom */ - dbuf_put_self(&s->byte_code, last_atom_start, len); - - re_emit_goto(s, REOP_loop, pos); - re_emit_op(s, REOP_drop); - } - } - last_atom_start = -1; - } - break; - default: - break; - } - } - done: - s->buf_ptr = p; - return 0; - out_of_memory: - return re_parse_out_of_memory(s); -} - -static int re_parse_alternative(REParseState *s, BOOL is_backward_dir) -{ - const uint8_t *p; - int ret; - size_t start, term_start, end, term_size; - - start = s->byte_code.size; - for(;;) { - p = s->buf_ptr; - if (p >= s->buf_end) - break; - if (*p == '|' || *p == ')') - break; - term_start = s->byte_code.size; - ret = re_parse_term(s, is_backward_dir); - if (ret) - return ret; - if (is_backward_dir) { - /* reverse the order of the terms (XXX: inefficient, but - speed is not really critical here) */ - end = s->byte_code.size; - term_size = end - term_start; - if (dbuf_realloc(&s->byte_code, end + term_size)) - return -1; - memmove(s->byte_code.buf + start + term_size, - s->byte_code.buf + start, - end - start); - memcpy(s->byte_code.buf + start, s->byte_code.buf + end, - term_size); - } - } - return 0; -} - -static int re_parse_disjunction(REParseState *s, BOOL is_backward_dir) -{ - int start, len, pos; - - if (lre_check_stack_overflow(s->opaque, 0)) - return re_parse_error(s, "stack overflow"); - - start = s->byte_code.size; - if (re_parse_alternative(s, is_backward_dir)) - return -1; - while (*s->buf_ptr == '|') { - s->buf_ptr++; - - len = s->byte_code.size - start; - - /* insert a split before the first alternative */ - if (dbuf_insert(&s->byte_code, start, 5)) { - return re_parse_out_of_memory(s); - } - s->byte_code.buf[start] = REOP_split_next_first; - put_u32(s->byte_code.buf + start + 1, len + 5); - - pos = re_emit_op_u32(s, REOP_goto, 0); - - if (re_parse_alternative(s, is_backward_dir)) - return -1; - - /* patch the goto */ - len = s->byte_code.size - (pos + 4); - put_u32(s->byte_code.buf + pos, len); - } - return 0; -} - -/* the control flow is recursive so the analysis can be linear */ -static int compute_stack_size(const uint8_t *bc_buf, int bc_buf_len) -{ - int stack_size, stack_size_max, pos, opcode, len; - uint32_t val; - - stack_size = 0; - stack_size_max = 0; - bc_buf += RE_HEADER_LEN; - bc_buf_len -= RE_HEADER_LEN; - pos = 0; - while (pos < bc_buf_len) { - opcode = bc_buf[pos]; - len = reopcode_info[opcode].size; - assert(opcode < REOP_COUNT); - assert((pos + len) <= bc_buf_len); - switch(opcode) { - case REOP_push_i32: - case REOP_push_char_pos: - stack_size++; - if (stack_size > stack_size_max) { - if (stack_size > STACK_SIZE_MAX) - return -1; - stack_size_max = stack_size; - } - break; - case REOP_drop: - case REOP_bne_char_pos: - assert(stack_size > 0); - stack_size--; - break; - case REOP_range: - val = get_u16(bc_buf + pos + 1); - len += val * 4; - break; - case REOP_range32: - val = get_u16(bc_buf + pos + 1); - len += val * 8; - break; - } - pos += len; - } - return stack_size_max; -} - -/* 'buf' must be a zero terminated UTF-8 string of length buf_len. - Return NULL if error and allocate an error message in *perror_msg, - otherwise the compiled bytecode and its length in plen. -*/ -uint8_t *lre_compile(int *plen, char *error_msg, int error_msg_size, - const char *buf, size_t buf_len, int re_flags, - void *opaque) -{ - REParseState s_s, *s = &s_s; - int stack_size; - BOOL is_sticky; - - memset(s, 0, sizeof(*s)); - s->opaque = opaque; - s->buf_ptr = (const uint8_t *)buf; - s->buf_end = s->buf_ptr + buf_len; - s->buf_start = s->buf_ptr; - s->re_flags = re_flags; - s->is_unicode = ((re_flags & LRE_FLAG_UNICODE) != 0); - is_sticky = ((re_flags & LRE_FLAG_STICKY) != 0); - s->ignore_case = ((re_flags & LRE_FLAG_IGNORECASE) != 0); - s->dotall = ((re_flags & LRE_FLAG_DOTALL) != 0); - s->unicode_sets = ((re_flags & LRE_FLAG_UNICODE_SETS) != 0); - s->capture_count = 1; - s->total_capture_count = -1; - s->has_named_captures = -1; - - dbuf_init2(&s->byte_code, opaque, lre_realloc); - dbuf_init2(&s->group_names, opaque, lre_realloc); - - dbuf_put_u16(&s->byte_code, re_flags); /* first element is the flags */ - dbuf_putc(&s->byte_code, 0); /* second element is the number of captures */ - dbuf_putc(&s->byte_code, 0); /* stack size */ - dbuf_put_u32(&s->byte_code, 0); /* bytecode length */ - - if (!is_sticky) { - /* iterate thru all positions (about the same as .*?( ... ) ) - . We do it without an explicit loop so that lock step - thread execution will be possible in an optimized - implementation */ - re_emit_op_u32(s, REOP_split_goto_first, 1 + 5); - re_emit_op(s, REOP_any); - re_emit_op_u32(s, REOP_goto, -(5 + 1 + 5)); - } - re_emit_op_u8(s, REOP_save_start, 0); - - if (re_parse_disjunction(s, FALSE)) { - error: - dbuf_free(&s->byte_code); - dbuf_free(&s->group_names); - pstrcpy(error_msg, error_msg_size, s->u.error_msg); - *plen = 0; - return NULL; - } - - re_emit_op_u8(s, REOP_save_end, 0); - - re_emit_op(s, REOP_match); - - if (*s->buf_ptr != '\0') { - re_parse_error(s, "extraneous characters at the end"); - goto error; - } - - if (dbuf_error(&s->byte_code)) { - re_parse_out_of_memory(s); - goto error; - } - - stack_size = compute_stack_size(s->byte_code.buf, s->byte_code.size); - if (stack_size < 0) { - re_parse_error(s, "too many imbricated quantifiers"); - goto error; - } - - s->byte_code.buf[RE_HEADER_CAPTURE_COUNT] = s->capture_count; - s->byte_code.buf[RE_HEADER_STACK_SIZE] = stack_size; - put_u32(s->byte_code.buf + RE_HEADER_BYTECODE_LEN, - s->byte_code.size - RE_HEADER_LEN); - - /* add the named groups if needed */ - if (s->group_names.size > (s->capture_count - 1)) { - dbuf_put(&s->byte_code, s->group_names.buf, s->group_names.size); - put_u16(s->byte_code.buf + RE_HEADER_FLAGS, - LRE_FLAG_NAMED_GROUPS | lre_get_flags(s->byte_code.buf)); - } - dbuf_free(&s->group_names); - -#ifdef DUMP_REOP - lre_dump_bytecode(s->byte_code.buf, s->byte_code.size); -#endif - - error_msg[0] = '\0'; - *plen = s->byte_code.size; - return s->byte_code.buf; -} - -static BOOL is_line_terminator(uint32_t c) -{ - return (c == '\n' || c == '\r' || c == CP_LS || c == CP_PS); -} - -static BOOL is_word_char(uint32_t c) -{ - return ((c >= '0' && c <= '9') || - (c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c == '_')); -} - -#define GET_CHAR(c, cptr, cbuf_end) \ - do { \ - if (cbuf_type == 0) { \ - c = *cptr++; \ - } else { \ - const uint16_t *_p = (uint16_t *)cptr; \ - const uint16_t *_end = (uint16_t *)cbuf_end; \ - c = *_p++; \ - if (is_hi_surrogate(c)) \ - if (cbuf_type == 2) \ - if (_p < _end) \ - if (is_lo_surrogate(*_p)) \ - c = from_surrogate(c, *_p++); \ - cptr = (void *) _p; \ - } \ - } while (0) - -#define PEEK_CHAR(c, cptr, cbuf_end) \ - do { \ - if (cbuf_type == 0) { \ - c = cptr[0]; \ - } else { \ - const uint16_t *_p = (uint16_t *)cptr; \ - const uint16_t *_end = (uint16_t *)cbuf_end; \ - c = *_p++; \ - if (is_hi_surrogate(c)) \ - if (cbuf_type == 2) \ - if (_p < _end) \ - if (is_lo_surrogate(*_p)) \ - c = from_surrogate(c, *_p++); \ - } \ - } while (0) - -#define PEEK_PREV_CHAR(c, cptr, cbuf_start) \ - do { \ - if (cbuf_type == 0) { \ - c = cptr[-1]; \ - } else { \ - const uint16_t *_p = (uint16_t *)cptr - 1; \ - const uint16_t *_start = (uint16_t *)cbuf_start; \ - c = *_p; \ - if (is_lo_surrogate(c)) \ - if (cbuf_type == 2) \ - if (_p > _start) \ - if (is_hi_surrogate(*--_p)) \ - c = from_surrogate(*_p, c); \ - } \ - } while (0) - -#define GET_PREV_CHAR(c, cptr, cbuf_start) \ - do { \ - if (cbuf_type == 0) { \ - cptr--; \ - c = cptr[0]; \ - } else { \ - const uint16_t *_p = (uint16_t *)cptr - 1; \ - const uint16_t *_start = (uint16_t *)cbuf_start; \ - c = *_p; \ - if (is_lo_surrogate(c)) \ - if (cbuf_type == 2) \ - if (_p > _start) \ - if (is_hi_surrogate(*--_p)) \ - c = from_surrogate(*_p, c); \ - cptr = (void *) _p; \ - } \ - } while (0) - -#define PREV_CHAR(cptr, cbuf_start) \ - do { \ - if (cbuf_type == 0) { \ - cptr--; \ - } else { \ - const uint16_t *_p = (uint16_t *)cptr - 1; \ - const uint16_t *_start = (uint16_t *)cbuf_start; \ - if (is_lo_surrogate(*_p)) \ - if (cbuf_type == 2) \ - if (_p > _start) \ - if (is_hi_surrogate(_p[-1])) \ - _p--; \ - cptr = (void *) _p; \ - } \ - } while (0) - -typedef uintptr_t StackInt; - -typedef enum { - RE_EXEC_STATE_SPLIT, - RE_EXEC_STATE_LOOKAHEAD, - RE_EXEC_STATE_NEGATIVE_LOOKAHEAD, - RE_EXEC_STATE_GREEDY_QUANT, -} REExecStateEnum; - -typedef struct REExecState { - REExecStateEnum type : 8; - uint8_t stack_len; - size_t count; /* only used for RE_EXEC_STATE_GREEDY_QUANT */ - const uint8_t *cptr; - const uint8_t *pc; - void *buf[0]; -} REExecState; - -typedef struct { - const uint8_t *cbuf; - const uint8_t *cbuf_end; - /* 0 = 8 bit chars, 1 = 16 bit chars, 2 = 16 bit chars, UTF-16 */ - int cbuf_type; - int capture_count; - int stack_size_max; - BOOL multi_line; - BOOL ignore_case; - BOOL is_unicode; - void *opaque; /* used for stack overflow check */ - - size_t state_size; - uint8_t *state_stack; - size_t state_stack_size; - size_t state_stack_len; -} REExecContext; - -static int push_state(REExecContext *s, - uint8_t **capture, - StackInt *stack, size_t stack_len, - const uint8_t *pc, const uint8_t *cptr, - REExecStateEnum type, size_t count) -{ - REExecState *rs; - uint8_t *new_stack; - size_t new_size, i, n; - StackInt *stack_buf; - - if (unlikely((s->state_stack_len + 1) > s->state_stack_size)) { - /* reallocate the stack */ - new_size = s->state_stack_size * 3 / 2; - if (new_size < 8) - new_size = 8; - new_stack = lre_realloc(s->opaque, s->state_stack, new_size * s->state_size); - if (!new_stack) - return -1; - s->state_stack_size = new_size; - s->state_stack = new_stack; - } - rs = (REExecState *)(s->state_stack + s->state_stack_len * s->state_size); - s->state_stack_len++; - rs->type = type; - rs->count = count; - rs->stack_len = stack_len; - rs->cptr = cptr; - rs->pc = pc; - n = 2 * s->capture_count; - for(i = 0; i < n; i++) - rs->buf[i] = capture[i]; - stack_buf = (StackInt *)(rs->buf + n); - for(i = 0; i < stack_len; i++) - stack_buf[i] = stack[i]; - return 0; -} - -/* return 1 if match, 0 if not match or -1 if error. */ -static intptr_t lre_exec_backtrack(REExecContext *s, uint8_t **capture, - StackInt *stack, int stack_len, - const uint8_t *pc, const uint8_t *cptr, - BOOL no_recurse) -{ - int opcode, ret; - int cbuf_type; - uint32_t val, c; - const uint8_t *cbuf_end; - - cbuf_type = s->cbuf_type; - cbuf_end = s->cbuf_end; - - for(;;) { - // printf("top=%p: pc=%d\n", th_list.top, (int)(pc - (bc_buf + RE_HEADER_LEN))); - opcode = *pc++; - switch(opcode) { - case REOP_match: - { - REExecState *rs; - if (no_recurse) - return (intptr_t)cptr; - ret = 1; - goto recurse; - no_match: - if (no_recurse) - return 0; - ret = 0; - recurse: - for(;;) { - if (s->state_stack_len == 0) - return ret; - rs = (REExecState *)(s->state_stack + - (s->state_stack_len - 1) * s->state_size); - if (rs->type == RE_EXEC_STATE_SPLIT) { - if (!ret) { - pop_state: - memcpy(capture, rs->buf, - sizeof(capture[0]) * 2 * s->capture_count); - pop_state1: - pc = rs->pc; - cptr = rs->cptr; - stack_len = rs->stack_len; - memcpy(stack, rs->buf + 2 * s->capture_count, - stack_len * sizeof(stack[0])); - s->state_stack_len--; - break; - } - } else if (rs->type == RE_EXEC_STATE_GREEDY_QUANT) { - if (!ret) { - uint32_t char_count, i; - memcpy(capture, rs->buf, - sizeof(capture[0]) * 2 * s->capture_count); - stack_len = rs->stack_len; - memcpy(stack, rs->buf + 2 * s->capture_count, - stack_len * sizeof(stack[0])); - pc = rs->pc; - cptr = rs->cptr; - /* go backward */ - char_count = get_u32(pc + 12); - for(i = 0; i < char_count; i++) { - PREV_CHAR(cptr, s->cbuf); - } - pc = (pc + 16) + (int)get_u32(pc); - rs->cptr = cptr; - rs->count--; - if (rs->count == 0) { - s->state_stack_len--; - } - break; - } - } else { - ret = ((rs->type == RE_EXEC_STATE_LOOKAHEAD && ret) || - (rs->type == RE_EXEC_STATE_NEGATIVE_LOOKAHEAD && !ret)); - if (ret) { - /* keep the capture in case of positive lookahead */ - if (rs->type == RE_EXEC_STATE_LOOKAHEAD) - goto pop_state1; - else - goto pop_state; - } - } - s->state_stack_len--; - } - } - break; - case REOP_char32: - val = get_u32(pc); - pc += 4; - goto test_char; - case REOP_char16: - val = get_u16(pc); - pc += 2; - goto test_char; - case REOP_char8: - val = get_u8(pc); - pc += 1; - test_char: - if (cptr >= cbuf_end) - goto no_match; - GET_CHAR(c, cptr, cbuf_end); - if (s->ignore_case) { - c = lre_canonicalize(c, s->is_unicode); - } - if (val != c) - goto no_match; - break; - case REOP_split_goto_first: - case REOP_split_next_first: - { - const uint8_t *pc1; - - val = get_u32(pc); - pc += 4; - if (opcode == REOP_split_next_first) { - pc1 = pc + (int)val; - } else { - pc1 = pc; - pc = pc + (int)val; - } - ret = push_state(s, capture, stack, stack_len, - pc1, cptr, RE_EXEC_STATE_SPLIT, 0); - if (ret < 0) - return -1; - break; - } - case REOP_lookahead: - case REOP_negative_lookahead: - val = get_u32(pc); - pc += 4; - ret = push_state(s, capture, stack, stack_len, - pc + (int)val, cptr, - RE_EXEC_STATE_LOOKAHEAD + opcode - REOP_lookahead, - 0); - if (ret < 0) - return -1; - break; - - case REOP_goto: - val = get_u32(pc); - pc += 4 + (int)val; - break; - case REOP_line_start: - if (cptr == s->cbuf) - break; - if (!s->multi_line) - goto no_match; - PEEK_PREV_CHAR(c, cptr, s->cbuf); - if (!is_line_terminator(c)) - goto no_match; - break; - case REOP_line_end: - if (cptr == cbuf_end) - break; - if (!s->multi_line) - goto no_match; - PEEK_CHAR(c, cptr, cbuf_end); - if (!is_line_terminator(c)) - goto no_match; - break; - case REOP_dot: - if (cptr == cbuf_end) - goto no_match; - GET_CHAR(c, cptr, cbuf_end); - if (is_line_terminator(c)) - goto no_match; - break; - case REOP_any: - if (cptr == cbuf_end) - goto no_match; - GET_CHAR(c, cptr, cbuf_end); - break; - case REOP_save_start: - case REOP_save_end: - val = *pc++; - assert(val < s->capture_count); - capture[2 * val + opcode - REOP_save_start] = (uint8_t *)cptr; - break; - case REOP_save_reset: - { - uint32_t val2; - val = pc[0]; - val2 = pc[1]; - pc += 2; - assert(val2 < s->capture_count); - while (val <= val2) { - capture[2 * val] = NULL; - capture[2 * val + 1] = NULL; - val++; - } - } - break; - case REOP_push_i32: - val = get_u32(pc); - pc += 4; - stack[stack_len++] = val; - break; - case REOP_drop: - stack_len--; - break; - case REOP_loop: - val = get_u32(pc); - pc += 4; - if (--stack[stack_len - 1] != 0) { - pc += (int)val; - } - break; - case REOP_push_char_pos: - stack[stack_len++] = (uintptr_t)cptr; - break; - case REOP_bne_char_pos: - val = get_u32(pc); - pc += 4; - if (stack[--stack_len] != (uintptr_t)cptr) - pc += (int)val; - break; - case REOP_word_boundary: - case REOP_not_word_boundary: - { - BOOL v1, v2; - /* char before */ - if (cptr == s->cbuf) { - v1 = FALSE; - } else { - PEEK_PREV_CHAR(c, cptr, s->cbuf); - v1 = is_word_char(c); - } - /* current char */ - if (cptr >= cbuf_end) { - v2 = FALSE; - } else { - PEEK_CHAR(c, cptr, cbuf_end); - v2 = is_word_char(c); - } - if (v1 ^ v2 ^ (REOP_not_word_boundary - opcode)) - goto no_match; - } - break; - case REOP_back_reference: - case REOP_backward_back_reference: - { - const uint8_t *cptr1, *cptr1_end, *cptr1_start; - uint32_t c1, c2; - - val = *pc++; - if (val >= s->capture_count) - goto no_match; - cptr1_start = capture[2 * val]; - cptr1_end = capture[2 * val + 1]; - if (!cptr1_start || !cptr1_end) - break; - if (opcode == REOP_back_reference) { - cptr1 = cptr1_start; - while (cptr1 < cptr1_end) { - if (cptr >= cbuf_end) - goto no_match; - GET_CHAR(c1, cptr1, cptr1_end); - GET_CHAR(c2, cptr, cbuf_end); - if (s->ignore_case) { - c1 = lre_canonicalize(c1, s->is_unicode); - c2 = lre_canonicalize(c2, s->is_unicode); - } - if (c1 != c2) - goto no_match; - } - } else { - cptr1 = cptr1_end; - while (cptr1 > cptr1_start) { - if (cptr == s->cbuf) - goto no_match; - GET_PREV_CHAR(c1, cptr1, cptr1_start); - GET_PREV_CHAR(c2, cptr, s->cbuf); - if (s->ignore_case) { - c1 = lre_canonicalize(c1, s->is_unicode); - c2 = lre_canonicalize(c2, s->is_unicode); - } - if (c1 != c2) - goto no_match; - } - } - } - break; - case REOP_range: - { - int n; - uint32_t low, high, idx_min, idx_max, idx; - - n = get_u16(pc); /* n must be >= 1 */ - pc += 2; - if (cptr >= cbuf_end) - goto no_match; - GET_CHAR(c, cptr, cbuf_end); - if (s->ignore_case) { - c = lre_canonicalize(c, s->is_unicode); - } - idx_min = 0; - low = get_u16(pc + 0 * 4); - if (c < low) - goto no_match; - idx_max = n - 1; - high = get_u16(pc + idx_max * 4 + 2); - /* 0xffff in for last value means +infinity */ - if (unlikely(c >= 0xffff) && high == 0xffff) - goto range_match; - if (c > high) - goto no_match; - while (idx_min <= idx_max) { - idx = (idx_min + idx_max) / 2; - low = get_u16(pc + idx * 4); - high = get_u16(pc + idx * 4 + 2); - if (c < low) - idx_max = idx - 1; - else if (c > high) - idx_min = idx + 1; - else - goto range_match; - } - goto no_match; - range_match: - pc += 4 * n; - } - break; - case REOP_range32: - { - int n; - uint32_t low, high, idx_min, idx_max, idx; - - n = get_u16(pc); /* n must be >= 1 */ - pc += 2; - if (cptr >= cbuf_end) - goto no_match; - GET_CHAR(c, cptr, cbuf_end); - if (s->ignore_case) { - c = lre_canonicalize(c, s->is_unicode); - } - idx_min = 0; - low = get_u32(pc + 0 * 8); - if (c < low) - goto no_match; - idx_max = n - 1; - high = get_u32(pc + idx_max * 8 + 4); - if (c > high) - goto no_match; - while (idx_min <= idx_max) { - idx = (idx_min + idx_max) / 2; - low = get_u32(pc + idx * 8); - high = get_u32(pc + idx * 8 + 4); - if (c < low) - idx_max = idx - 1; - else if (c > high) - idx_min = idx + 1; - else - goto range32_match; - } - goto no_match; - range32_match: - pc += 8 * n; - } - break; - case REOP_prev: - /* go to the previous char */ - if (cptr == s->cbuf) - goto no_match; - PREV_CHAR(cptr, s->cbuf); - break; - case REOP_simple_greedy_quant: - { - uint32_t next_pos, quant_min, quant_max; - size_t q; - intptr_t res; - const uint8_t *pc1; - - next_pos = get_u32(pc); - quant_min = get_u32(pc + 4); - quant_max = get_u32(pc + 8); - pc += 16; - pc1 = pc; - pc += (int)next_pos; - - q = 0; - for(;;) { - res = lre_exec_backtrack(s, capture, stack, stack_len, - pc1, cptr, TRUE); - if (res == -1) - return res; - if (!res) - break; - cptr = (uint8_t *)res; - q++; - if (q >= quant_max && quant_max != INT32_MAX) - break; - } - if (q < quant_min) - goto no_match; - if (q > quant_min) { - /* will examine all matches down to quant_min */ - ret = push_state(s, capture, stack, stack_len, - pc1 - 16, cptr, - RE_EXEC_STATE_GREEDY_QUANT, - q - quant_min); - if (ret < 0) - return -1; - } - } - break; - default: - abort(); - } - } -} - -/* Return 1 if match, 0 if not match or -1 if error. cindex is the - starting position of the match and must be such as 0 <= cindex <= - clen. */ -int lre_exec(uint8_t **capture, - const uint8_t *bc_buf, const uint8_t *cbuf, int cindex, int clen, - int cbuf_type, void *opaque) -{ - REExecContext s_s, *s = &s_s; - int re_flags, i, alloca_size, ret; - StackInt *stack_buf; - - re_flags = lre_get_flags(bc_buf); - s->multi_line = (re_flags & LRE_FLAG_MULTILINE) != 0; - s->ignore_case = (re_flags & LRE_FLAG_IGNORECASE) != 0; - s->is_unicode = (re_flags & LRE_FLAG_UNICODE) != 0; - s->capture_count = bc_buf[RE_HEADER_CAPTURE_COUNT]; - s->stack_size_max = bc_buf[RE_HEADER_STACK_SIZE]; - s->cbuf = cbuf; - s->cbuf_end = cbuf + (clen << cbuf_type); - s->cbuf_type = cbuf_type; - if (s->cbuf_type == 1 && s->is_unicode) - s->cbuf_type = 2; - s->opaque = opaque; - - s->state_size = sizeof(REExecState) + - s->capture_count * sizeof(capture[0]) * 2 + - s->stack_size_max * sizeof(stack_buf[0]); - s->state_stack = NULL; - s->state_stack_len = 0; - s->state_stack_size = 0; - - for(i = 0; i < s->capture_count * 2; i++) - capture[i] = NULL; - alloca_size = s->stack_size_max * sizeof(stack_buf[0]); - stack_buf = alloca(alloca_size); - ret = lre_exec_backtrack(s, capture, stack_buf, 0, bc_buf + RE_HEADER_LEN, - cbuf + (cindex << cbuf_type), FALSE); - lre_realloc(s->opaque, s->state_stack, 0); - return ret; -} - -int lre_get_capture_count(const uint8_t *bc_buf) -{ - return bc_buf[RE_HEADER_CAPTURE_COUNT]; -} - -int lre_get_flags(const uint8_t *bc_buf) -{ - return get_u16(bc_buf + RE_HEADER_FLAGS); -} - -/* Return NULL if no group names. Otherwise, return a pointer to - 'capture_count - 1' zero terminated UTF-8 strings. */ -const char *lre_get_groupnames(const uint8_t *bc_buf) -{ - uint32_t re_bytecode_len; - if ((lre_get_flags(bc_buf) & LRE_FLAG_NAMED_GROUPS) == 0) - return NULL; - re_bytecode_len = get_u32(bc_buf + RE_HEADER_BYTECODE_LEN); - return (const char *)(bc_buf + RE_HEADER_LEN + re_bytecode_len); -} - -void lre_byte_swap(uint8_t *buf, size_t len, BOOL is_byte_swapped) -{ - uint8_t *p, *pe; - uint32_t n, r; - - p = buf; - if (len < RE_HEADER_LEN) - abort(); - - // format is: - //
- // - // - // - // etc. - inplace_bswap16(&p[RE_HEADER_FLAGS]); - - n = get_u32(&p[RE_HEADER_BYTECODE_LEN]); - inplace_bswap32(&p[RE_HEADER_BYTECODE_LEN]); - if (is_byte_swapped) - n = bswap32(n); - if (n > len - RE_HEADER_LEN) - abort(); - - p = &buf[RE_HEADER_LEN]; - pe = &p[n]; - - while (p < pe) { - n = reopcode_info[*p].size; - switch (n) { - case 1: - case 2: - break; - case 3: - switch (*p) { - case REOP_save_reset: // has two 8 bit arguments - break; - case REOP_range32: // variable length - for (r = 3 + 4 * get_u16(&p[1]); n < r; n += 4) - inplace_bswap32(&p[n]); - goto doswap16; - case REOP_range: // variable length - for (r = 3 + 2 * get_u16(&p[1]); n < r; n += 2) - inplace_bswap16(&p[n]); - goto doswap16; - default: - doswap16: - inplace_bswap16(&p[1]); - } - break; - case 5: - inplace_bswap32(&p[1]); - break; - case 17: - assert(*p == REOP_simple_greedy_quant); - inplace_bswap32(&p[1]); - inplace_bswap32(&p[5]); - inplace_bswap32(&p[9]); - inplace_bswap32(&p[13]); - break; - default: - abort(); - } - p = &p[n]; - } -} - -#ifdef TEST - -BOOL lre_check_stack_overflow(void *opaque, size_t alloca_size) -{ - return FALSE; -} - -void *lre_realloc(void *opaque, void *ptr, size_t size) -{ - return realloc(ptr, size); -} - -int main(int argc, char **argv) -{ - int len, flags, ret, i; - uint8_t *bc; - char error_msg[64]; - uint8_t *capture[CAPTURE_COUNT_MAX * 2]; - const char *input; - int input_len, capture_count; - - if (argc < 4) { - printf("usage: %s regexp flags input\n", argv[0]); - exit(1); - } - flags = atoi(argv[2]); - bc = lre_compile(&len, error_msg, sizeof(error_msg), argv[1], - strlen(argv[1]), flags, NULL); - if (!bc) { - fprintf(stderr, "error: %s\n", error_msg); - exit(1); - } - - input = argv[3]; - input_len = strlen(input); - - ret = lre_exec(capture, bc, (uint8_t *)input, 0, input_len, 0, NULL); - printf("ret=%d\n", ret); - if (ret == 1) { - capture_count = lre_get_capture_count(bc); - for(i = 0; i < 2 * capture_count; i++) { - uint8_t *ptr; - ptr = capture[i]; - printf("%d: ", i); - if (!ptr) - printf(""); - else - printf("%u", (int)(ptr - (uint8_t *)input)); - printf("\n"); - } - } - return 0; -} -#endif diff --git a/vendor/quickjs-ng/libregexp.h b/vendor/quickjs-ng/libregexp.h deleted file mode 100644 index f0293090f..000000000 --- a/vendor/quickjs-ng/libregexp.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Regular Expression Engine - * - * Copyright (c) 2017-2018 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef LIBREGEXP_H -#define LIBREGEXP_H - -#include - -#include "libunicode.h" - -#define LRE_BOOL int /* for documentation purposes */ - -#define LRE_FLAG_GLOBAL (1 << 0) -#define LRE_FLAG_IGNORECASE (1 << 1) -#define LRE_FLAG_MULTILINE (1 << 2) -#define LRE_FLAG_DOTALL (1 << 3) -#define LRE_FLAG_UNICODE (1 << 4) -#define LRE_FLAG_STICKY (1 << 5) -#define LRE_FLAG_INDICES (1 << 6) /* Unused by libregexp, just recorded. */ -#define LRE_FLAG_NAMED_GROUPS (1 << 7) /* named groups are present in the regexp */ -#define LRE_FLAG_UNICODE_SETS (1 << 8) - -uint8_t *lre_compile(int *plen, char *error_msg, int error_msg_size, - const char *buf, size_t buf_len, int re_flags, - void *opaque); -int lre_get_capture_count(const uint8_t *bc_buf); -int lre_get_flags(const uint8_t *bc_buf); -const char *lre_get_groupnames(const uint8_t *bc_buf); -int lre_exec(uint8_t **capture, - const uint8_t *bc_buf, const uint8_t *cbuf, int cindex, int clen, - int cbuf_type, void *opaque); - -int lre_parse_escape(const uint8_t **pp, int allow_utf16); -LRE_BOOL lre_is_space(int c); - -void lre_byte_swap(uint8_t *buf, size_t len, BOOL is_byte_swapped); - -/* must be provided by the user */ -LRE_BOOL lre_check_stack_overflow(void *opaque, size_t alloca_size); -void *lre_realloc(void *opaque, void *ptr, size_t size); - -/* JS identifier test */ -extern uint32_t const lre_id_start_table_ascii[4]; -extern uint32_t const lre_id_continue_table_ascii[4]; - -static inline int lre_js_is_ident_first(int c) -{ - if ((uint32_t)c < 128) { - return (lre_id_start_table_ascii[c >> 5] >> (c & 31)) & 1; - } else { - return lre_is_id_start(c); - } -} - -static inline int lre_js_is_ident_next(int c) -{ - if ((uint32_t)c < 128) { - return (lre_id_continue_table_ascii[c >> 5] >> (c & 31)) & 1; - } else { - /* ZWNJ and ZWJ are accepted in identifiers */ - return lre_is_id_continue(c) || c == 0x200C || c == 0x200D; - } -} - -#undef LRE_BOOL - -#endif /* LIBREGEXP_H */ diff --git a/vendor/quickjs-ng/libunicode-table.h b/vendor/quickjs-ng/libunicode-table.h deleted file mode 100644 index a7b1e9d73..000000000 --- a/vendor/quickjs-ng/libunicode-table.h +++ /dev/null @@ -1,4484 +0,0 @@ -/* Compressed unicode tables */ -/* Automatically generated file - do not edit */ - -#include - -static const uint32_t case_conv_table1[370] = { - 0x00209a30, 0x00309a00, 0x005a8173, 0x00601730, - 0x006c0730, 0x006f81b3, 0x00701700, 0x007c0700, - 0x007f8100, 0x00803040, 0x009801c3, 0x00988190, - 0x00990640, 0x009c9040, 0x00a481b4, 0x00a52e40, - 0x00bc0130, 0x00bc8640, 0x00bf8170, 0x00c00100, - 0x00c08130, 0x00c10440, 0x00c30130, 0x00c38240, - 0x00c48230, 0x00c58240, 0x00c70130, 0x00c78130, - 0x00c80130, 0x00c88240, 0x00c98130, 0x00ca0130, - 0x00ca8100, 0x00cb0130, 0x00cb8130, 0x00cc0240, - 0x00cd0100, 0x00ce0130, 0x00ce8130, 0x00cf0100, - 0x00cf8130, 0x00d00640, 0x00d30130, 0x00d38240, - 0x00d48130, 0x00d60240, 0x00d70130, 0x00d78240, - 0x00d88230, 0x00d98440, 0x00db8130, 0x00dc0240, - 0x00de0240, 0x00df8100, 0x00e20350, 0x00e38350, - 0x00e50350, 0x00e69040, 0x00ee8100, 0x00ef1240, - 0x00f801b4, 0x00f88350, 0x00fa0240, 0x00fb0130, - 0x00fb8130, 0x00fc2840, 0x01100130, 0x01111240, - 0x011d0131, 0x011d8240, 0x011e8130, 0x011f0131, - 0x011f8201, 0x01208240, 0x01218130, 0x01220130, - 0x01228130, 0x01230a40, 0x01280101, 0x01288101, - 0x01290101, 0x01298100, 0x012a0100, 0x012b0200, - 0x012c8100, 0x012d8100, 0x012e0101, 0x01300100, - 0x01308101, 0x01318100, 0x01328101, 0x01330101, - 0x01340100, 0x01348100, 0x01350101, 0x01358101, - 0x01360101, 0x01378100, 0x01388101, 0x01390100, - 0x013a8100, 0x013e8101, 0x01400100, 0x01410101, - 0x01418100, 0x01438101, 0x01440100, 0x01448100, - 0x01450200, 0x01460100, 0x01490100, 0x014e8101, - 0x014f0101, 0x01a28173, 0x01b80440, 0x01bb0240, - 0x01bd8300, 0x01bf8130, 0x01c30130, 0x01c40330, - 0x01c60130, 0x01c70230, 0x01c801d0, 0x01c89130, - 0x01d18930, 0x01d60100, 0x01d68300, 0x01d801d3, - 0x01d89100, 0x01e10173, 0x01e18900, 0x01e60100, - 0x01e68200, 0x01e78130, 0x01e80173, 0x01e88173, - 0x01ea8173, 0x01eb0173, 0x01eb8100, 0x01ec1840, - 0x01f80173, 0x01f88173, 0x01f90100, 0x01f98100, - 0x01fa01a0, 0x01fa8173, 0x01fb8240, 0x01fc8130, - 0x01fd0240, 0x01fe8330, 0x02001030, 0x02082030, - 0x02182000, 0x02281000, 0x02302240, 0x02453640, - 0x02600130, 0x02608e40, 0x02678100, 0x02686040, - 0x0298a630, 0x02b0a600, 0x02c381b5, 0x08502631, - 0x08638131, 0x08668131, 0x08682b00, 0x087e8300, - 0x09d05011, 0x09f80610, 0x09fc0620, 0x0e400174, - 0x0e408174, 0x0e410174, 0x0e418174, 0x0e420174, - 0x0e428174, 0x0e430174, 0x0e438180, 0x0e440180, - 0x0e482b30, 0x0e5e8330, 0x0ebc8101, 0x0ebe8101, - 0x0ec70101, 0x0f007e40, 0x0f3f1840, 0x0f4b01b5, - 0x0f4b81b6, 0x0f4c01b6, 0x0f4c81b6, 0x0f4d01b7, - 0x0f4d8180, 0x0f4f0130, 0x0f506040, 0x0f800800, - 0x0f840830, 0x0f880600, 0x0f8c0630, 0x0f900800, - 0x0f940830, 0x0f980800, 0x0f9c0830, 0x0fa00600, - 0x0fa40630, 0x0fa801b0, 0x0fa88100, 0x0fa901d3, - 0x0fa98100, 0x0faa01d3, 0x0faa8100, 0x0fab01d3, - 0x0fab8100, 0x0fac8130, 0x0fad8130, 0x0fae8130, - 0x0faf8130, 0x0fb00800, 0x0fb40830, 0x0fb80200, - 0x0fb90400, 0x0fbb0200, 0x0fbc0201, 0x0fbd0201, - 0x0fbe0201, 0x0fc008b7, 0x0fc40867, 0x0fc808b8, - 0x0fcc0868, 0x0fd008b8, 0x0fd40868, 0x0fd80200, - 0x0fd901b9, 0x0fd981b1, 0x0fda01b9, 0x0fdb01b1, - 0x0fdb81d7, 0x0fdc0230, 0x0fdd0230, 0x0fde0161, - 0x0fdf0173, 0x0fe101b9, 0x0fe181b2, 0x0fe201ba, - 0x0fe301b2, 0x0fe381d8, 0x0fe40430, 0x0fe60162, - 0x0fe80200, 0x0fe901d0, 0x0fe981d0, 0x0feb01b0, - 0x0feb81d0, 0x0fec0230, 0x0fed0230, 0x0ff00201, - 0x0ff101d3, 0x0ff181d3, 0x0ff201ba, 0x0ff28101, - 0x0ff301b0, 0x0ff381d3, 0x0ff40230, 0x0ff50230, - 0x0ff60131, 0x0ff901ba, 0x0ff981b2, 0x0ffa01bb, - 0x0ffb01b2, 0x0ffb81d9, 0x0ffc0230, 0x0ffd0230, - 0x0ffe0162, 0x109301a0, 0x109501a0, 0x109581a0, - 0x10990131, 0x10a70101, 0x10b01031, 0x10b81001, - 0x10c18240, 0x125b1a31, 0x12681a01, 0x16003031, - 0x16183001, 0x16300240, 0x16310130, 0x16318130, - 0x16320130, 0x16328100, 0x16330100, 0x16338640, - 0x16368130, 0x16370130, 0x16378130, 0x16380130, - 0x16390240, 0x163a8240, 0x163f0230, 0x16406440, - 0x16758440, 0x16790240, 0x16802600, 0x16938100, - 0x16968100, 0x53202e40, 0x53401c40, 0x53910e40, - 0x53993e40, 0x53bc8440, 0x53be8130, 0x53bf0a40, - 0x53c58240, 0x53c68130, 0x53c80440, 0x53ca0101, - 0x53cb1440, 0x53d50130, 0x53d58130, 0x53d60130, - 0x53d68130, 0x53d70130, 0x53d80130, 0x53d88130, - 0x53d90130, 0x53d98131, 0x53da1040, 0x53e20131, - 0x53e28130, 0x53e30130, 0x53e38440, 0x53e80240, - 0x53eb0440, 0x53fa8240, 0x55a98101, 0x55b85020, - 0x7d8001b2, 0x7d8081b2, 0x7d8101b2, 0x7d8181da, - 0x7d8201da, 0x7d8281b3, 0x7d8301b3, 0x7d8981bb, - 0x7d8a01bb, 0x7d8a81bb, 0x7d8b01bc, 0x7d8b81bb, - 0x7f909a31, 0x7fa09a01, 0x82002831, 0x82142801, - 0x82582431, 0x826c2401, 0x82b80b31, 0x82be0f31, - 0x82c60731, 0x82ca0231, 0x82cb8b01, 0x82d18f01, - 0x82d98701, 0x82dd8201, 0x86403331, 0x86603301, - 0x8c502031, 0x8c602001, 0xb7202031, 0xb7302001, - 0xf4802231, 0xf4912201, -}; - -static const uint8_t case_conv_table2[370] = { - 0x01, 0x00, 0x9c, 0x06, 0x07, 0x4d, 0x03, 0x04, - 0x10, 0x00, 0x8f, 0x0b, 0x00, 0x00, 0x11, 0x00, - 0x08, 0x00, 0x53, 0x4a, 0x51, 0x00, 0x52, 0x00, - 0x53, 0x00, 0x3a, 0x54, 0x55, 0x00, 0x57, 0x59, - 0x3f, 0x5d, 0x5c, 0x00, 0x46, 0x61, 0x63, 0x42, - 0x64, 0x00, 0x66, 0x00, 0x68, 0x00, 0x6a, 0x00, - 0x6c, 0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x1a, 0x00, 0x93, 0x00, 0x00, 0x20, - 0x35, 0x00, 0x27, 0x00, 0x21, 0x00, 0x24, 0x22, - 0x2a, 0x00, 0x13, 0x6b, 0x6d, 0x00, 0x26, 0x24, - 0x27, 0x14, 0x16, 0x18, 0x1b, 0x1c, 0x3e, 0x1e, - 0x3f, 0x1f, 0x39, 0x3d, 0x22, 0x21, 0x41, 0x1e, - 0x40, 0x25, 0x25, 0x26, 0x28, 0x20, 0x2a, 0x48, - 0x2c, 0x43, 0x2e, 0x4b, 0x30, 0x4c, 0x32, 0x44, - 0x42, 0x99, 0x00, 0x00, 0x95, 0x8f, 0x7d, 0x7e, - 0x83, 0x84, 0x12, 0x80, 0x82, 0x76, 0x77, 0x12, - 0x7b, 0xa3, 0x7c, 0x78, 0x79, 0x8a, 0x92, 0x98, - 0xa6, 0xa0, 0x85, 0x00, 0x9a, 0xa1, 0x93, 0x75, - 0x33, 0x95, 0x00, 0x8e, 0x00, 0x74, 0x99, 0x98, - 0x97, 0x96, 0x00, 0x00, 0x9e, 0x00, 0x9c, 0x00, - 0xa1, 0xa0, 0x15, 0x2e, 0x2f, 0x30, 0xb4, 0xb5, - 0x4f, 0xaa, 0xa9, 0x12, 0x14, 0x1e, 0x21, 0x22, - 0x22, 0x2a, 0x34, 0x35, 0xa6, 0xa7, 0x36, 0x1f, - 0x49, 0x00, 0x00, 0x97, 0x01, 0x5a, 0xda, 0x1d, - 0x36, 0x05, 0x00, 0xc4, 0xc3, 0xc6, 0xc5, 0xc8, - 0xc7, 0xca, 0xc9, 0xcc, 0xcb, 0xc4, 0xd5, 0x45, - 0xd6, 0x42, 0xd7, 0x46, 0xd8, 0xce, 0xd0, 0xd2, - 0xd4, 0xda, 0xd9, 0xee, 0xf6, 0xfe, 0x0e, 0x07, - 0x0f, 0x80, 0x9f, 0x00, 0x21, 0x80, 0xa3, 0xed, - 0x00, 0xc0, 0x40, 0xc6, 0x60, 0xe7, 0xdb, 0xe6, - 0x99, 0xc0, 0x00, 0x00, 0x06, 0x60, 0xdc, 0x29, - 0xfd, 0x15, 0x12, 0x06, 0x16, 0xf8, 0xdd, 0x06, - 0x15, 0x12, 0x84, 0x08, 0xc6, 0x16, 0xff, 0xdf, - 0x03, 0xc0, 0x40, 0x00, 0x46, 0x60, 0xde, 0xe0, - 0x6d, 0x37, 0x38, 0x39, 0x15, 0x14, 0x17, 0x16, - 0x00, 0x1a, 0x19, 0x1c, 0x1b, 0x00, 0x5f, 0xb7, - 0x65, 0x44, 0x47, 0x00, 0x4f, 0x62, 0x4e, 0x50, - 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0xa3, 0xa4, - 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, - 0x00, 0x5a, 0x00, 0x47, 0x00, 0x5b, 0x56, 0x58, - 0x60, 0x5e, 0x70, 0x69, 0x6f, 0x4e, 0x00, 0x3b, - 0x67, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x45, 0xa8, - 0x8a, 0x8b, 0x8c, 0xab, 0xac, 0x58, 0x58, 0xaf, - 0x94, 0xb0, 0x6f, 0xb2, 0x5d, 0x5c, 0x5f, 0x5e, - 0x61, 0x60, 0x66, 0x67, 0x68, 0x69, 0x62, 0x63, - 0x64, 0x65, 0x6b, 0x6a, 0x6d, 0x6c, 0x6f, 0x6e, - 0x71, 0x70, -}; - -static const uint16_t case_conv_ext[58] = { - 0x0399, 0x0308, 0x0301, 0x03a5, 0x0313, 0x0300, 0x0342, 0x0391, - 0x0397, 0x03a9, 0x0046, 0x0049, 0x004c, 0x0053, 0x0069, 0x0307, - 0x02bc, 0x004e, 0x004a, 0x030c, 0x0535, 0x0552, 0x0048, 0x0331, - 0x0054, 0x0057, 0x030a, 0x0059, 0x0041, 0x02be, 0x1f08, 0x1f80, - 0x1f28, 0x1f90, 0x1f68, 0x1fa0, 0x1fba, 0x0386, 0x1fb3, 0x1fca, - 0x0389, 0x1fc3, 0x03a1, 0x1ffa, 0x038f, 0x1ff3, 0x0544, 0x0546, - 0x053b, 0x054e, 0x053d, 0x03b8, 0x0462, 0xa64a, 0x1e60, 0x03c9, - 0x006b, 0x00e5, -}; - -static const uint8_t unicode_prop_Cased1_table[196] = { - 0x40, 0xa9, 0x80, 0x8e, 0x80, 0xfc, 0x80, 0xd3, - 0x80, 0x8c, 0x80, 0x8d, 0x81, 0x8d, 0x02, 0x80, - 0xe1, 0x80, 0x91, 0x85, 0x9a, 0x01, 0x00, 0x01, - 0x11, 0x00, 0x01, 0x04, 0x08, 0x01, 0x08, 0x30, - 0x08, 0x01, 0x15, 0x20, 0x00, 0x39, 0x99, 0x31, - 0x9d, 0x84, 0x40, 0x94, 0x80, 0xd6, 0x82, 0xa6, - 0x80, 0x41, 0x62, 0x80, 0xa6, 0x80, 0x4b, 0x72, - 0x80, 0x4c, 0x02, 0xf8, 0x02, 0x80, 0x8f, 0x80, - 0xb0, 0x40, 0xdb, 0x08, 0x80, 0x41, 0xd0, 0x80, - 0x8c, 0x80, 0x8f, 0x8c, 0xe4, 0x03, 0x01, 0x89, - 0x00, 0x14, 0x28, 0x10, 0x11, 0x02, 0x01, 0x18, - 0x0b, 0x24, 0x4b, 0x26, 0x01, 0x01, 0x86, 0xe5, - 0x80, 0x60, 0x79, 0xb6, 0x81, 0x40, 0x91, 0x81, - 0xbd, 0x88, 0x94, 0x05, 0x80, 0x98, 0x80, 0xa2, - 0x00, 0x80, 0x9b, 0x12, 0x82, 0x43, 0x34, 0xa2, - 0x06, 0x80, 0x8d, 0x60, 0x5c, 0x15, 0x01, 0x10, - 0xa9, 0x80, 0x88, 0x60, 0xcc, 0x44, 0xd4, 0x80, - 0xc6, 0x01, 0x08, 0x09, 0x0b, 0x80, 0x8b, 0x00, - 0x06, 0x80, 0xc0, 0x03, 0x0f, 0x06, 0x80, 0x9b, - 0x03, 0x04, 0x00, 0x16, 0x80, 0x41, 0x53, 0x81, - 0x98, 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80, - 0x9e, 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80, - 0x9e, 0x80, 0x98, 0x07, 0x47, 0x33, 0x89, 0x80, - 0x93, 0x2d, 0x41, 0x04, 0xbd, 0x50, 0xc1, 0x99, - 0x85, 0x99, 0x85, 0x99, -}; - -static const uint8_t unicode_prop_Cased1_index[21] = { - 0xb9, 0x02, 0xe0, 0xc0, 0x1d, 0x20, 0xe5, 0x2c, - 0x20, 0xb1, 0x07, 0x21, 0xc1, 0xd6, 0x21, 0x4a, - 0xf1, 0x01, 0x8a, 0xf1, 0x01, -}; - -static const uint8_t unicode_prop_Case_Ignorable_table[737] = { - 0xa6, 0x05, 0x80, 0x8a, 0x80, 0xa2, 0x00, 0x80, - 0xc6, 0x03, 0x00, 0x03, 0x01, 0x81, 0x41, 0xf6, - 0x40, 0xbf, 0x19, 0x18, 0x88, 0x08, 0x80, 0x40, - 0xfa, 0x86, 0x40, 0xce, 0x04, 0x80, 0xb0, 0xac, - 0x00, 0x01, 0x01, 0x00, 0xab, 0x80, 0x8a, 0x85, - 0x89, 0x8a, 0x00, 0xa2, 0x80, 0x89, 0x94, 0x8f, - 0x80, 0xe4, 0x38, 0x89, 0x03, 0xa0, 0x00, 0x80, - 0x9d, 0x9a, 0xda, 0x8a, 0xb9, 0x8a, 0x18, 0x08, - 0x97, 0x97, 0xaa, 0x82, 0xab, 0x06, 0x0d, 0x87, - 0xa8, 0xb9, 0xb6, 0x00, 0x03, 0x3b, 0x02, 0x86, - 0x89, 0x81, 0x8c, 0x80, 0x8e, 0x80, 0xb9, 0x03, - 0x1f, 0x80, 0x93, 0x81, 0x99, 0x01, 0x81, 0xb8, - 0x03, 0x0b, 0x09, 0x12, 0x80, 0x9d, 0x0a, 0x80, - 0x8a, 0x81, 0xb8, 0x03, 0x20, 0x0b, 0x80, 0x93, - 0x81, 0x95, 0x28, 0x80, 0xb9, 0x01, 0x00, 0x1f, - 0x06, 0x81, 0x8a, 0x81, 0x9d, 0x80, 0xbc, 0x80, - 0x8b, 0x80, 0xb1, 0x02, 0x80, 0xb6, 0x00, 0x14, - 0x10, 0x1e, 0x81, 0x8a, 0x81, 0x9c, 0x80, 0xb9, - 0x01, 0x05, 0x04, 0x81, 0x93, 0x81, 0x9b, 0x81, - 0xb8, 0x0b, 0x1f, 0x80, 0x93, 0x81, 0x9c, 0x80, - 0xc7, 0x06, 0x10, 0x80, 0xd9, 0x01, 0x86, 0x8a, - 0x88, 0xe1, 0x01, 0x88, 0x88, 0x00, 0x86, 0xc8, - 0x81, 0x9a, 0x00, 0x00, 0x80, 0xb6, 0x8d, 0x04, - 0x01, 0x84, 0x8a, 0x80, 0xa3, 0x88, 0x80, 0xe5, - 0x18, 0x28, 0x09, 0x81, 0x98, 0x0b, 0x82, 0x8f, - 0x83, 0x8c, 0x01, 0x0d, 0x80, 0x8e, 0x80, 0xdd, - 0x80, 0x42, 0x5f, 0x82, 0x43, 0xb1, 0x82, 0x9c, - 0x81, 0x9d, 0x81, 0x9d, 0x81, 0xbf, 0x08, 0x37, - 0x01, 0x8a, 0x10, 0x20, 0xac, 0x84, 0xb2, 0x80, - 0xc0, 0x81, 0xa1, 0x80, 0xf5, 0x13, 0x81, 0x88, - 0x05, 0x82, 0x40, 0xda, 0x09, 0x80, 0xb9, 0x00, - 0x30, 0x00, 0x01, 0x3d, 0x89, 0x08, 0xa6, 0x07, - 0x9e, 0xb0, 0x83, 0xaf, 0x00, 0x20, 0x04, 0x80, - 0xa7, 0x88, 0x8b, 0x81, 0x9f, 0x19, 0x08, 0x82, - 0xb7, 0x00, 0x0a, 0x00, 0x82, 0xb9, 0x39, 0x81, - 0xbf, 0x85, 0xd1, 0x10, 0x8c, 0x06, 0x18, 0x28, - 0x11, 0xb1, 0xbe, 0x8c, 0x80, 0xa1, 0xe4, 0x41, - 0xbc, 0x00, 0x82, 0x8a, 0x82, 0x8c, 0x82, 0x8c, - 0x82, 0x8c, 0x81, 0x8b, 0x27, 0x81, 0x89, 0x01, - 0x01, 0x84, 0xb0, 0x20, 0x89, 0x00, 0x8c, 0x80, - 0x8f, 0x8c, 0xb2, 0xa0, 0x4b, 0x8a, 0x81, 0xf0, - 0x82, 0xfc, 0x80, 0x8e, 0x80, 0xdf, 0x9f, 0xae, - 0x80, 0x41, 0xd4, 0x80, 0xa3, 0x1a, 0x24, 0x80, - 0xdc, 0x85, 0xdc, 0x82, 0x60, 0x6f, 0x15, 0x80, - 0x44, 0xe1, 0x85, 0x41, 0x0d, 0x80, 0xe1, 0x18, - 0x89, 0x00, 0x9b, 0x83, 0xcf, 0x81, 0x8d, 0xa1, - 0xcd, 0x80, 0x96, 0x82, 0xe6, 0x12, 0x0f, 0x02, - 0x03, 0x80, 0x98, 0x0c, 0x80, 0x40, 0x96, 0x81, - 0x99, 0x91, 0x8c, 0x80, 0xa5, 0x87, 0x98, 0x8a, - 0xad, 0x82, 0xaf, 0x01, 0x19, 0x81, 0x90, 0x80, - 0x94, 0x81, 0xc1, 0x29, 0x09, 0x81, 0x8b, 0x07, - 0x80, 0xa2, 0x80, 0x8a, 0x80, 0xb2, 0x00, 0x11, - 0x0c, 0x08, 0x80, 0x9a, 0x80, 0x8d, 0x0c, 0x08, - 0x80, 0xe3, 0x84, 0x88, 0x82, 0xf8, 0x01, 0x03, - 0x80, 0x60, 0x4f, 0x2f, 0x80, 0x40, 0x92, 0x90, - 0x42, 0x3c, 0x8f, 0x10, 0x8b, 0x8f, 0xa1, 0x01, - 0x80, 0x40, 0xa8, 0x06, 0x05, 0x80, 0x8a, 0x80, - 0xa2, 0x00, 0x80, 0xae, 0x80, 0xac, 0x81, 0xc2, - 0x80, 0x94, 0x82, 0x42, 0x00, 0x80, 0x40, 0xe1, - 0x80, 0x40, 0x94, 0x84, 0x44, 0x04, 0x28, 0xa9, - 0x80, 0x88, 0x42, 0x45, 0x10, 0x0c, 0x83, 0xa7, - 0x13, 0x80, 0x40, 0xa4, 0x81, 0x42, 0x3c, 0x83, - 0x41, 0x82, 0x81, 0xcf, 0x82, 0xc5, 0x8a, 0xb0, - 0x83, 0xfa, 0x80, 0xb5, 0x8e, 0xa8, 0x01, 0x81, - 0x89, 0x82, 0xb0, 0x19, 0x09, 0x03, 0x80, 0x89, - 0x80, 0xb1, 0x82, 0xa3, 0x20, 0x87, 0xbd, 0x80, - 0x8b, 0x81, 0xb3, 0x88, 0x89, 0x19, 0x80, 0xde, - 0x11, 0x00, 0x0d, 0x01, 0x80, 0x40, 0x9c, 0x02, - 0x87, 0x94, 0x81, 0xb8, 0x0a, 0x80, 0xa4, 0x32, - 0x84, 0x40, 0xc2, 0x39, 0x10, 0x80, 0x96, 0x80, - 0xd3, 0x28, 0x03, 0x08, 0x81, 0x40, 0xed, 0x1d, - 0x08, 0x81, 0x9a, 0x81, 0xd4, 0x39, 0x00, 0x81, - 0xe9, 0x00, 0x01, 0x28, 0x80, 0xe4, 0x11, 0x18, - 0x84, 0x41, 0x02, 0x88, 0x01, 0x40, 0xff, 0x08, - 0x03, 0x80, 0x40, 0x8f, 0x19, 0x0b, 0x80, 0x9f, - 0x89, 0xa7, 0x29, 0x1f, 0x80, 0x88, 0x29, 0x82, - 0xad, 0x8c, 0x01, 0x41, 0x95, 0x30, 0x28, 0x80, - 0xd1, 0x95, 0x0e, 0x01, 0x01, 0xf9, 0x2a, 0x00, - 0x08, 0x30, 0x80, 0xc7, 0x0a, 0x00, 0x80, 0x41, - 0x5a, 0x81, 0x8a, 0x81, 0xb3, 0x24, 0x00, 0x80, - 0x54, 0xec, 0x90, 0x85, 0x8e, 0x60, 0x36, 0x99, - 0x84, 0xba, 0x86, 0x88, 0x83, 0x44, 0x0a, 0x80, - 0xbe, 0x90, 0xbf, 0x08, 0x81, 0x60, 0x40, 0x0a, - 0x18, 0x30, 0x81, 0x4c, 0x9d, 0x08, 0x83, 0x52, - 0x5b, 0xad, 0x81, 0x96, 0x42, 0x1f, 0x82, 0x88, - 0x8f, 0x0e, 0x9d, 0x83, 0x40, 0x93, 0x82, 0x47, - 0xba, 0xb6, 0x83, 0xb1, 0x38, 0x8d, 0x80, 0x95, - 0x20, 0x8e, 0x45, 0x4f, 0x30, 0x90, 0x0e, 0x01, - 0x04, 0x84, 0xbd, 0xa0, 0x80, 0x40, 0x9f, 0x8d, - 0x41, 0x6f, 0x80, 0xbc, 0x83, 0x41, 0xfa, 0x84, - 0x43, 0xdf, 0x86, 0xec, 0x87, 0x4a, 0xae, 0x84, - 0x6c, 0x0c, 0x00, 0x80, 0x9d, 0xdf, 0xff, 0x40, - 0xef, -}; - -static const uint8_t unicode_prop_Case_Ignorable_index[69] = { - 0xbe, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x52, 0x0a, - 0xa0, 0xc1, 0x0b, 0x00, 0x82, 0x0d, 0x00, 0x3f, - 0x10, 0x80, 0xd4, 0x17, 0x40, 0xcf, 0x1a, 0x20, - 0xf5, 0x1c, 0x00, 0x80, 0x20, 0x00, 0x16, 0xa0, - 0x00, 0xc6, 0xa8, 0x00, 0xc2, 0xaa, 0x60, 0x56, - 0xfe, 0x20, 0xb1, 0x07, 0x01, 0x75, 0x10, 0x01, - 0xeb, 0x12, 0x21, 0x41, 0x16, 0x01, 0x5c, 0x1a, - 0x01, 0x43, 0x1f, 0x01, 0x2e, 0xcf, 0x41, 0x25, - 0xe0, 0x01, 0xf0, 0x01, 0x0e, -}; - -static const uint8_t unicode_prop_ID_Start_table[1100] = { - 0xc0, 0x99, 0x85, 0x99, 0xae, 0x80, 0x89, 0x03, - 0x04, 0x96, 0x80, 0x9e, 0x80, 0x41, 0xc9, 0x83, - 0x8b, 0x8d, 0x26, 0x00, 0x80, 0x40, 0x80, 0x20, - 0x09, 0x18, 0x05, 0x00, 0x10, 0x00, 0x93, 0x80, - 0xd2, 0x80, 0x40, 0x8a, 0x87, 0x40, 0xa5, 0x80, - 0xa5, 0x08, 0x85, 0xa8, 0xc6, 0x9a, 0x1b, 0xac, - 0xaa, 0xa2, 0x08, 0xe2, 0x00, 0x8e, 0x0e, 0x81, - 0x89, 0x11, 0x80, 0x8f, 0x00, 0x9d, 0x9c, 0xd8, - 0x8a, 0x80, 0x97, 0xa0, 0x88, 0x0b, 0x04, 0x95, - 0x18, 0x88, 0x02, 0x80, 0x96, 0x98, 0x86, 0x8a, - 0x84, 0x97, 0x05, 0x90, 0xa9, 0xb9, 0xb5, 0x10, - 0x91, 0x06, 0x89, 0x8e, 0x8f, 0x1f, 0x09, 0x81, - 0x95, 0x06, 0x00, 0x13, 0x10, 0x8f, 0x80, 0x8c, - 0x08, 0x82, 0x8d, 0x81, 0x89, 0x07, 0x2b, 0x09, - 0x95, 0x06, 0x01, 0x01, 0x01, 0x9e, 0x18, 0x80, - 0x92, 0x82, 0x8f, 0x88, 0x02, 0x80, 0x95, 0x06, - 0x01, 0x04, 0x10, 0x91, 0x80, 0x8e, 0x81, 0x96, - 0x80, 0x8a, 0x39, 0x09, 0x95, 0x06, 0x01, 0x04, - 0x10, 0x9d, 0x08, 0x82, 0x8e, 0x80, 0x90, 0x00, - 0x2a, 0x10, 0x1a, 0x08, 0x00, 0x0a, 0x0a, 0x12, - 0x8b, 0x95, 0x80, 0xb3, 0x38, 0x10, 0x96, 0x80, - 0x8f, 0x10, 0x99, 0x11, 0x01, 0x81, 0x9d, 0x03, - 0x38, 0x10, 0x96, 0x80, 0x89, 0x04, 0x10, 0x9e, - 0x08, 0x81, 0x8e, 0x81, 0x90, 0x88, 0x02, 0x80, - 0xa8, 0x08, 0x8f, 0x04, 0x17, 0x82, 0x97, 0x2c, - 0x91, 0x82, 0x97, 0x80, 0x88, 0x00, 0x0e, 0xb9, - 0xaf, 0x01, 0x8b, 0x86, 0xb9, 0x08, 0x00, 0x20, - 0x97, 0x00, 0x80, 0x89, 0x01, 0x88, 0x01, 0x20, - 0x80, 0x94, 0x83, 0x9f, 0x80, 0xbe, 0x38, 0xa3, - 0x9a, 0x84, 0xf2, 0xaa, 0x93, 0x80, 0x8f, 0x2b, - 0x1a, 0x02, 0x0e, 0x13, 0x8c, 0x8b, 0x80, 0x90, - 0xa5, 0x00, 0x20, 0x81, 0xaa, 0x80, 0x41, 0x4c, - 0x03, 0x0e, 0x00, 0x03, 0x81, 0xa8, 0x03, 0x81, - 0xa0, 0x03, 0x0e, 0x00, 0x03, 0x81, 0x8e, 0x80, - 0xb8, 0x03, 0x81, 0xc2, 0xa4, 0x8f, 0x8f, 0xd5, - 0x0d, 0x82, 0x42, 0x6b, 0x81, 0x90, 0x80, 0x99, - 0x84, 0xca, 0x82, 0x8a, 0x86, 0x91, 0x8c, 0x92, - 0x8d, 0x91, 0x8d, 0x8c, 0x02, 0x8e, 0xb3, 0xa2, - 0x03, 0x80, 0xc2, 0xd8, 0x86, 0xa8, 0x00, 0x84, - 0xc5, 0x89, 0x9e, 0xb0, 0x9d, 0x0c, 0x8a, 0xab, - 0x83, 0x99, 0xb5, 0x96, 0x88, 0xb4, 0xd1, 0x80, - 0xdc, 0xae, 0x90, 0x87, 0xb5, 0x9d, 0x8c, 0x81, - 0x89, 0xab, 0x99, 0xa3, 0xa8, 0x82, 0x89, 0xa3, - 0x81, 0x88, 0x86, 0xaa, 0x0a, 0xa8, 0x18, 0x28, - 0x0a, 0x04, 0x40, 0xbf, 0xbf, 0x41, 0x15, 0x0d, - 0x81, 0xa5, 0x0d, 0x0f, 0x00, 0x00, 0x00, 0x80, - 0x9e, 0x81, 0xb4, 0x06, 0x00, 0x12, 0x06, 0x13, - 0x0d, 0x83, 0x8c, 0x22, 0x06, 0xf3, 0x80, 0x8c, - 0x80, 0x8f, 0x8c, 0xe4, 0x03, 0x01, 0x89, 0x00, - 0x0d, 0x28, 0x00, 0x00, 0x80, 0x8f, 0x0b, 0x24, - 0x18, 0x90, 0xa8, 0x4a, 0x76, 0x40, 0xe4, 0x2b, - 0x11, 0x8b, 0xa5, 0x00, 0x20, 0x81, 0xb7, 0x30, - 0x8f, 0x96, 0x88, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x86, 0x42, 0x25, 0x82, 0x98, 0x88, - 0x34, 0x0c, 0x83, 0xd5, 0x1c, 0x80, 0xd9, 0x03, - 0x84, 0xaa, 0x80, 0xdd, 0x90, 0x9f, 0xaf, 0x8f, - 0x41, 0xff, 0x59, 0xbf, 0xbf, 0x60, 0x56, 0x8c, - 0xc2, 0xad, 0x81, 0x41, 0x0c, 0x82, 0x8f, 0x89, - 0x81, 0x93, 0xae, 0x8f, 0x9e, 0x81, 0xcf, 0xa6, - 0x88, 0x81, 0xe6, 0x81, 0xbf, 0x21, 0x00, 0x04, - 0x97, 0x8f, 0x02, 0x03, 0x80, 0x96, 0x9c, 0xb3, - 0x8d, 0xb1, 0xbd, 0x2a, 0x00, 0x81, 0x8a, 0x9b, - 0x89, 0x96, 0x98, 0x9c, 0x86, 0xae, 0x9b, 0x80, - 0x8f, 0x20, 0x89, 0x89, 0x20, 0xa8, 0x96, 0x10, - 0x87, 0x93, 0x96, 0x10, 0x82, 0xb1, 0x00, 0x11, - 0x0c, 0x08, 0x00, 0x97, 0x11, 0x8a, 0x32, 0x8b, - 0x29, 0x29, 0x85, 0x88, 0x30, 0x30, 0xaa, 0x80, - 0x8d, 0x85, 0xf2, 0x9c, 0x60, 0x2b, 0xa3, 0x8b, - 0x96, 0x83, 0xb0, 0x60, 0x21, 0x03, 0x41, 0x6d, - 0x81, 0xe9, 0xa5, 0x86, 0x8b, 0x24, 0x00, 0x89, - 0x80, 0x8c, 0x04, 0x00, 0x01, 0x01, 0x80, 0xeb, - 0xa0, 0x41, 0x6a, 0x91, 0xbf, 0x81, 0xb5, 0xa7, - 0x8b, 0xf3, 0x20, 0x40, 0x86, 0xa3, 0x99, 0x85, - 0x99, 0x8a, 0xd8, 0x15, 0x0d, 0x0d, 0x0a, 0xa2, - 0x8b, 0x80, 0x99, 0x80, 0x92, 0x01, 0x80, 0x8e, - 0x81, 0x8d, 0xa1, 0xfa, 0xc4, 0xb4, 0x41, 0x0a, - 0x9c, 0x82, 0xb0, 0xae, 0x9f, 0x8c, 0x9d, 0x84, - 0xa5, 0x89, 0x9d, 0x81, 0xa3, 0x1f, 0x04, 0xa9, - 0x40, 0x9d, 0x91, 0xa3, 0x83, 0xa3, 0x83, 0xa7, - 0x87, 0xb3, 0x8b, 0x8a, 0x80, 0x8e, 0x06, 0x01, - 0x80, 0x8a, 0x80, 0x8e, 0x06, 0x01, 0xc2, 0x41, - 0x36, 0x88, 0x95, 0x89, 0x87, 0x97, 0x28, 0xa9, - 0x80, 0x88, 0xc4, 0x29, 0x00, 0xab, 0x01, 0x10, - 0x81, 0x96, 0x89, 0x96, 0x88, 0x9e, 0xc0, 0x92, - 0x01, 0x89, 0x95, 0x89, 0x99, 0xc5, 0xb7, 0x29, - 0xbf, 0x80, 0x8e, 0x18, 0x10, 0x9c, 0xa9, 0x9c, - 0x82, 0x9c, 0xa2, 0x38, 0x9b, 0x9a, 0xb5, 0x89, - 0x95, 0x89, 0x92, 0x8c, 0x91, 0xed, 0xc8, 0xb6, - 0xb2, 0x8c, 0xb2, 0x8c, 0xa3, 0x41, 0x5b, 0xa9, - 0x29, 0xcd, 0x9c, 0x89, 0x07, 0x95, 0xa9, 0x91, - 0xad, 0x94, 0x9a, 0x96, 0x8b, 0xb4, 0xb8, 0x09, - 0x80, 0x8c, 0xac, 0x9f, 0x98, 0x99, 0xa3, 0x9c, - 0x01, 0x07, 0xa2, 0x10, 0x8b, 0xaf, 0x8d, 0x83, - 0x94, 0x00, 0x80, 0xa2, 0x91, 0x80, 0x98, 0x92, - 0x81, 0xbe, 0x30, 0x00, 0x18, 0x8e, 0x80, 0x89, - 0x86, 0xae, 0xa5, 0x39, 0x09, 0x95, 0x06, 0x01, - 0x04, 0x10, 0x91, 0x80, 0x8b, 0x84, 0x40, 0x9d, - 0xb4, 0x91, 0x83, 0x93, 0x82, 0x9d, 0xaf, 0x93, - 0x08, 0x80, 0x40, 0xb7, 0xae, 0xa8, 0x83, 0xa3, - 0xaf, 0x93, 0x80, 0xba, 0xaa, 0x8c, 0x80, 0xc6, - 0x9a, 0xa4, 0x86, 0x40, 0xb8, 0xab, 0xf3, 0xbf, - 0x9e, 0x39, 0x01, 0x38, 0x08, 0x97, 0x8e, 0x00, - 0x80, 0xdd, 0x39, 0xa6, 0x8f, 0x00, 0x80, 0x9b, - 0x80, 0x89, 0xa7, 0x30, 0x94, 0x80, 0x8a, 0xad, - 0x92, 0x80, 0x91, 0xc8, 0x41, 0x06, 0x88, 0x80, - 0xa4, 0x90, 0x80, 0xb0, 0x9d, 0xef, 0x30, 0x08, - 0xa5, 0x94, 0x80, 0x98, 0x28, 0x08, 0x9f, 0x8d, - 0x80, 0x41, 0x46, 0x92, 0x8e, 0x00, 0x8c, 0x80, - 0xa1, 0xfb, 0x80, 0xce, 0x43, 0x99, 0xe5, 0xee, - 0x90, 0x40, 0xc3, 0x4a, 0x4b, 0xe0, 0x8e, 0x44, - 0x2f, 0x90, 0x85, 0x4f, 0xb8, 0x42, 0x46, 0x60, - 0x21, 0xb8, 0x42, 0x38, 0x86, 0x9e, 0x90, 0xce, - 0x90, 0x9d, 0x91, 0xaf, 0x8f, 0x83, 0x9e, 0x94, - 0x84, 0x92, 0x42, 0xaf, 0xbf, 0xff, 0xca, 0x20, - 0xc1, 0x8c, 0xbf, 0x08, 0x80, 0x9b, 0x57, 0xf7, - 0x87, 0x44, 0xd5, 0xa9, 0x88, 0x60, 0x22, 0xe6, - 0x18, 0x30, 0x08, 0x41, 0x22, 0x8e, 0x80, 0x9c, - 0x11, 0x80, 0x8d, 0x1f, 0x41, 0x8b, 0x49, 0x03, - 0xea, 0x84, 0x8c, 0x82, 0x88, 0x86, 0x89, 0x57, - 0x65, 0xd4, 0x80, 0xc6, 0x01, 0x08, 0x09, 0x0b, - 0x80, 0x8b, 0x00, 0x06, 0x80, 0xc0, 0x03, 0x0f, - 0x06, 0x80, 0x9b, 0x03, 0x04, 0x00, 0x16, 0x80, - 0x41, 0x53, 0x81, 0x98, 0x80, 0x98, 0x80, 0x9e, - 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80, 0x9e, - 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x07, 0x47, - 0x33, 0x9e, 0x2d, 0x41, 0x04, 0xbd, 0x40, 0x91, - 0xac, 0x89, 0x86, 0x8f, 0x80, 0x41, 0x40, 0x9d, - 0x91, 0xab, 0x41, 0xe3, 0x9b, 0x42, 0xf3, 0x30, - 0x18, 0x08, 0x8e, 0x80, 0x40, 0xc4, 0xba, 0xc3, - 0x30, 0x44, 0xb3, 0x18, 0x9a, 0x01, 0x00, 0x08, - 0x80, 0x89, 0x03, 0x00, 0x00, 0x28, 0x18, 0x00, - 0x00, 0x02, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x0b, 0x06, 0x03, 0x03, 0x00, - 0x80, 0x89, 0x80, 0x90, 0x22, 0x04, 0x80, 0x90, - 0x51, 0x43, 0x60, 0xa6, 0xdf, 0x9f, 0x50, 0x39, - 0x85, 0x40, 0xdd, 0x81, 0x56, 0x81, 0x8d, 0x5d, - 0x30, 0x4c, 0x1e, 0x42, 0x1d, 0x45, 0xe1, 0x53, - 0x4a, 0x84, 0x50, 0x5f, -}; - -static const uint8_t unicode_prop_ID_Start_index[105] = { - 0xf6, 0x03, 0x20, 0xa6, 0x07, 0x00, 0xa9, 0x09, - 0x20, 0xb1, 0x0a, 0x00, 0xba, 0x0b, 0x20, 0x3b, - 0x0d, 0x20, 0xc7, 0x0e, 0x20, 0x49, 0x12, 0x00, - 0x9b, 0x16, 0x00, 0xac, 0x19, 0x00, 0xc0, 0x1d, - 0x80, 0x80, 0x20, 0x20, 0x70, 0x2d, 0x00, 0x00, - 0x32, 0x00, 0xda, 0xa7, 0x00, 0x4c, 0xaa, 0x20, - 0xc7, 0xd7, 0x20, 0xfc, 0xfd, 0x20, 0x9d, 0x02, - 0x21, 0x96, 0x05, 0x01, 0xf3, 0x08, 0x01, 0xb3, - 0x0c, 0x21, 0x73, 0x11, 0x61, 0x34, 0x13, 0x01, - 0x1b, 0x17, 0x21, 0x8a, 0x1a, 0x01, 0x34, 0x1f, - 0x21, 0xbf, 0x6a, 0x01, 0x23, 0xb1, 0xa1, 0xad, - 0xd4, 0x01, 0x6f, 0xd7, 0x01, 0xff, 0xe7, 0x61, - 0x5e, 0xee, 0x01, 0xe1, 0xeb, 0x22, 0xb0, 0x23, - 0x03, -}; - -static const uint8_t unicode_prop_ID_Continue1_table[660] = { - 0xaf, 0x89, 0xa4, 0x80, 0xd6, 0x80, 0x42, 0x47, - 0xef, 0x96, 0x80, 0x40, 0xfa, 0x84, 0x41, 0x08, - 0xac, 0x00, 0x01, 0x01, 0x00, 0xc7, 0x8a, 0xaf, - 0x9e, 0x28, 0xe4, 0x31, 0x29, 0x08, 0x19, 0x89, - 0x96, 0x80, 0x9d, 0x9a, 0xda, 0x8a, 0x8e, 0x89, - 0xa0, 0x88, 0x88, 0x80, 0x97, 0x18, 0x88, 0x02, - 0x04, 0xaa, 0x82, 0xbb, 0x87, 0xa9, 0x97, 0x80, - 0xa0, 0xb5, 0x10, 0x91, 0x06, 0x89, 0x09, 0x89, - 0x90, 0x82, 0xb7, 0x00, 0x31, 0x09, 0x82, 0x88, - 0x80, 0x89, 0x09, 0x89, 0x8d, 0x01, 0x82, 0xb7, - 0x00, 0x23, 0x09, 0x12, 0x80, 0x93, 0x8b, 0x10, - 0x8a, 0x82, 0xb7, 0x00, 0x38, 0x10, 0x82, 0x93, - 0x09, 0x89, 0x89, 0x28, 0x82, 0xb7, 0x00, 0x31, - 0x09, 0x16, 0x82, 0x89, 0x09, 0x89, 0x91, 0x80, - 0xba, 0x22, 0x10, 0x83, 0x88, 0x80, 0x8d, 0x89, - 0x8f, 0x84, 0xb6, 0x00, 0x30, 0x10, 0x1e, 0x81, - 0x8a, 0x09, 0x89, 0x90, 0x82, 0xb7, 0x00, 0x30, - 0x10, 0x1e, 0x81, 0x8a, 0x09, 0x89, 0x10, 0x8b, - 0x83, 0xb6, 0x08, 0x30, 0x10, 0x83, 0x88, 0x80, - 0x89, 0x09, 0x89, 0x90, 0x82, 0xc5, 0x03, 0x28, - 0x00, 0x3d, 0x89, 0x09, 0xbc, 0x01, 0x86, 0x8b, - 0x38, 0x89, 0xd6, 0x01, 0x88, 0x8a, 0x30, 0x89, - 0xbd, 0x0d, 0x89, 0x8a, 0x00, 0x00, 0x03, 0x81, - 0xb0, 0x93, 0x01, 0x84, 0x8a, 0x80, 0xa3, 0x88, - 0x80, 0xe3, 0x93, 0x80, 0x89, 0x8b, 0x1b, 0x10, - 0x11, 0x32, 0x83, 0x8c, 0x8b, 0x80, 0x8e, 0x42, - 0xbe, 0x82, 0x88, 0x88, 0x43, 0x9f, 0x83, 0x9b, - 0x82, 0x9c, 0x81, 0x9d, 0x81, 0xbf, 0x9f, 0x88, - 0x01, 0x89, 0xa0, 0x10, 0x8a, 0x40, 0x8e, 0x80, - 0xf5, 0x8b, 0x83, 0x8b, 0x89, 0x89, 0xff, 0x8a, - 0xbb, 0x84, 0xb8, 0x89, 0x80, 0x9c, 0x81, 0x8a, - 0x85, 0x89, 0x95, 0x8d, 0x80, 0x8f, 0xb0, 0x84, - 0xae, 0x90, 0x8a, 0x89, 0x90, 0x88, 0x8b, 0x82, - 0x9d, 0x8c, 0x81, 0x89, 0xab, 0x8d, 0xaf, 0x93, - 0x87, 0x89, 0x85, 0x89, 0xf5, 0x10, 0x94, 0x18, - 0x28, 0x0a, 0x40, 0xc5, 0xbf, 0x42, 0x3e, 0x81, - 0x92, 0x80, 0xfa, 0x8c, 0x18, 0x82, 0x8b, 0x4b, - 0xfd, 0x82, 0x40, 0x8c, 0x80, 0xdf, 0x9f, 0x42, - 0x29, 0x85, 0xe8, 0x81, 0x60, 0x75, 0x84, 0x89, - 0xc4, 0x03, 0x89, 0x9f, 0x81, 0xcf, 0x81, 0x41, - 0x0f, 0x02, 0x03, 0x80, 0x96, 0x23, 0x80, 0xd2, - 0x81, 0xb1, 0x91, 0x89, 0x89, 0x85, 0x91, 0x8c, - 0x8a, 0x9b, 0x87, 0x98, 0x8c, 0xab, 0x83, 0xae, - 0x8d, 0x8e, 0x89, 0x8a, 0x80, 0x89, 0x89, 0xae, - 0x8d, 0x8b, 0x07, 0x09, 0x89, 0xa0, 0x82, 0xb1, - 0x00, 0x11, 0x0c, 0x08, 0x80, 0xa8, 0x24, 0x81, - 0x40, 0xeb, 0x38, 0x09, 0x89, 0x60, 0x4f, 0x23, - 0x80, 0x42, 0xe0, 0x8f, 0x8f, 0x8f, 0x11, 0x97, - 0x82, 0x40, 0xbf, 0x89, 0xa4, 0x80, 0x42, 0xbc, - 0x80, 0x40, 0xe1, 0x80, 0x40, 0x94, 0x84, 0x41, - 0x24, 0x89, 0x45, 0x56, 0x10, 0x0c, 0x83, 0xa7, - 0x13, 0x80, 0x40, 0xa4, 0x81, 0x42, 0x3c, 0x1f, - 0x89, 0x41, 0x70, 0x81, 0xcf, 0x82, 0xc5, 0x8a, - 0xb0, 0x83, 0xf9, 0x82, 0xb4, 0x8e, 0x9e, 0x8a, - 0x09, 0x89, 0x83, 0xac, 0x8a, 0x30, 0xac, 0x89, - 0x2a, 0xa3, 0x8d, 0x80, 0x89, 0x21, 0xab, 0x80, - 0x8b, 0x82, 0xaf, 0x8d, 0x3b, 0x80, 0x8b, 0xd1, - 0x8b, 0x28, 0x08, 0x40, 0x9c, 0x8b, 0x84, 0x89, - 0x2b, 0xb6, 0x08, 0x31, 0x09, 0x82, 0x88, 0x80, - 0x89, 0x09, 0x32, 0x84, 0x40, 0xbf, 0x91, 0x88, - 0x89, 0x18, 0xd0, 0x93, 0x8b, 0x89, 0x40, 0xd4, - 0x31, 0x88, 0x9a, 0x81, 0xd1, 0x90, 0x8e, 0x89, - 0xd0, 0x8c, 0x87, 0x89, 0xd2, 0x8e, 0x83, 0x89, - 0x40, 0xf1, 0x8e, 0x40, 0xa4, 0x89, 0xc5, 0x28, - 0x09, 0x18, 0x00, 0x81, 0x8b, 0x89, 0xf6, 0x31, - 0x32, 0x80, 0x9b, 0x89, 0xa7, 0x30, 0x1f, 0x80, - 0x88, 0x8a, 0xad, 0x8f, 0x41, 0x94, 0x38, 0x87, - 0x8f, 0x89, 0xb7, 0x95, 0x80, 0x8d, 0xf9, 0x2a, - 0x00, 0x08, 0x30, 0x07, 0x89, 0xaf, 0x20, 0x08, - 0x27, 0x89, 0x41, 0x48, 0x83, 0x88, 0x08, 0x80, - 0xaf, 0x32, 0x84, 0x8c, 0x89, 0x54, 0xe5, 0x05, - 0x8e, 0x60, 0x36, 0x09, 0x89, 0xd5, 0x89, 0xa5, - 0x84, 0xba, 0x86, 0x98, 0x89, 0x43, 0xf4, 0x00, - 0xb6, 0x33, 0xd0, 0x80, 0x8a, 0x81, 0x60, 0x4c, - 0xaa, 0x81, 0x52, 0x60, 0xad, 0x81, 0x96, 0x42, - 0x1d, 0x22, 0x2f, 0x39, 0x86, 0x9d, 0x83, 0x40, - 0x93, 0x82, 0x45, 0x88, 0xb1, 0x41, 0xff, 0xb6, - 0x83, 0xb1, 0x38, 0x8d, 0x80, 0x95, 0x20, 0x8e, - 0x45, 0x4f, 0x30, 0x90, 0x0e, 0x01, 0x04, 0xe3, - 0x80, 0x40, 0x9f, 0x86, 0x88, 0x89, 0x41, 0x63, - 0x80, 0xbc, 0x8d, 0x41, 0xf1, 0x8d, 0x43, 0xd5, - 0x86, 0xec, 0x34, 0x89, 0x52, 0x95, 0x89, 0x6c, - 0x05, 0x05, 0x40, 0xef, -}; - -static const uint8_t unicode_prop_ID_Continue1_index[63] = { - 0xfa, 0x06, 0x00, 0x70, 0x09, 0x00, 0xf0, 0x0a, - 0x40, 0x57, 0x0c, 0x00, 0xf0, 0x0d, 0x60, 0xc7, - 0x0f, 0x20, 0xea, 0x17, 0x40, 0x05, 0x1b, 0x00, - 0x41, 0x20, 0x00, 0x0c, 0xa8, 0x80, 0x37, 0xaa, - 0x20, 0x50, 0xfe, 0x20, 0x3a, 0x0d, 0x21, 0x74, - 0x11, 0x01, 0x5a, 0x14, 0x21, 0x44, 0x19, 0x81, - 0x5a, 0x1d, 0xa1, 0xf5, 0x6a, 0x21, 0x45, 0xd2, - 0x41, 0xaf, 0xe2, 0x21, 0xf0, 0x01, 0x0e, -}; - -static const uint8_t unicode_cc_table[899] = { - 0xb2, 0xcf, 0xd4, 0x00, 0xe8, 0x03, 0xdc, 0x00, - 0xe8, 0x00, 0xd8, 0x04, 0xdc, 0x01, 0xca, 0x03, - 0xdc, 0x01, 0xca, 0x0a, 0xdc, 0x04, 0x01, 0x03, - 0xdc, 0xc7, 0x00, 0xf0, 0xc0, 0x02, 0xdc, 0xc2, - 0x01, 0xdc, 0x80, 0xc2, 0x03, 0xdc, 0xc0, 0x00, - 0xe8, 0x01, 0xdc, 0xc0, 0x41, 0xe9, 0x00, 0xea, - 0x41, 0xe9, 0x00, 0xea, 0x00, 0xe9, 0xcc, 0xb0, - 0xe2, 0xc4, 0xb0, 0xd8, 0x00, 0xdc, 0xc3, 0x00, - 0xdc, 0xc2, 0x00, 0xde, 0x00, 0xdc, 0xc5, 0x05, - 0xdc, 0xc1, 0x00, 0xdc, 0xc1, 0x00, 0xde, 0x00, - 0xe4, 0xc0, 0x49, 0x0a, 0x43, 0x13, 0x80, 0x00, - 0x17, 0x80, 0x41, 0x18, 0x80, 0xc0, 0x00, 0xdc, - 0x80, 0x00, 0x12, 0xb0, 0x17, 0xc7, 0x42, 0x1e, - 0xaf, 0x47, 0x1b, 0xc1, 0x01, 0xdc, 0xc4, 0x00, - 0xdc, 0xc1, 0x00, 0xdc, 0x8f, 0x00, 0x23, 0xb0, - 0x34, 0xc6, 0x81, 0xc3, 0x00, 0xdc, 0xc0, 0x81, - 0xc1, 0x80, 0x00, 0xdc, 0xc1, 0x00, 0xdc, 0xa2, - 0x00, 0x24, 0x9d, 0xc0, 0x00, 0xdc, 0xc1, 0x00, - 0xdc, 0xc1, 0x02, 0xdc, 0xc0, 0x01, 0xdc, 0xc0, - 0x00, 0xdc, 0xc2, 0x00, 0xdc, 0xc0, 0x00, 0xdc, - 0xc0, 0x00, 0xdc, 0xc0, 0x00, 0xdc, 0xc1, 0xb0, - 0x6f, 0xc6, 0x00, 0xdc, 0xc0, 0x88, 0x00, 0xdc, - 0x97, 0xc3, 0x80, 0xc8, 0x80, 0xc2, 0x80, 0xc4, - 0xaa, 0x02, 0xdc, 0xb0, 0x0b, 0xc0, 0x02, 0xdc, - 0xc3, 0xa9, 0xc4, 0x04, 0xdc, 0xcd, 0x80, 0x00, - 0xdc, 0xc1, 0x00, 0xdc, 0xc1, 0x00, 0xdc, 0xc2, - 0x02, 0xdc, 0x42, 0x1b, 0xc2, 0x00, 0xdc, 0xc1, - 0x01, 0xdc, 0xc4, 0xb0, 0x0b, 0x00, 0x07, 0x8f, - 0x00, 0x09, 0x82, 0xc0, 0x00, 0xdc, 0xc1, 0xb0, - 0x36, 0x00, 0x07, 0x8f, 0x00, 0x09, 0xaf, 0xc0, - 0xb0, 0x0c, 0x00, 0x07, 0x8f, 0x00, 0x09, 0xb0, - 0x3d, 0x00, 0x07, 0x8f, 0x00, 0x09, 0xb0, 0x3d, - 0x00, 0x07, 0x8f, 0x00, 0x09, 0xb0, 0x4e, 0x00, - 0x09, 0xb0, 0x3d, 0x00, 0x07, 0x8f, 0x00, 0x09, - 0x86, 0x00, 0x54, 0x00, 0x5b, 0xb0, 0x34, 0x00, - 0x07, 0x8f, 0x00, 0x09, 0xb0, 0x3c, 0x01, 0x09, - 0x8f, 0x00, 0x09, 0xb0, 0x4b, 0x00, 0x09, 0xb0, - 0x3c, 0x01, 0x67, 0x00, 0x09, 0x8c, 0x03, 0x6b, - 0xb0, 0x3b, 0x01, 0x76, 0x00, 0x09, 0x8c, 0x03, - 0x7a, 0xb0, 0x1b, 0x01, 0xdc, 0x9a, 0x00, 0xdc, - 0x80, 0x00, 0xdc, 0x80, 0x00, 0xd8, 0xb0, 0x06, - 0x41, 0x81, 0x80, 0x00, 0x84, 0x84, 0x03, 0x82, - 0x81, 0x00, 0x82, 0x80, 0xc1, 0x00, 0x09, 0x80, - 0xc1, 0xb0, 0x0d, 0x00, 0xdc, 0xb0, 0x3f, 0x00, - 0x07, 0x80, 0x01, 0x09, 0xb0, 0x21, 0x00, 0xdc, - 0xb2, 0x9e, 0xc2, 0xb3, 0x83, 0x01, 0x09, 0x9d, - 0x00, 0x09, 0xb0, 0x6c, 0x00, 0x09, 0x89, 0xc0, - 0xb0, 0x9a, 0x00, 0xe4, 0xb0, 0x5e, 0x00, 0xde, - 0xc0, 0x00, 0xdc, 0xb0, 0xaa, 0xc0, 0x00, 0xdc, - 0xb0, 0x16, 0x00, 0x09, 0x93, 0xc7, 0x81, 0x00, - 0xdc, 0xaf, 0xc4, 0x05, 0xdc, 0xc1, 0x00, 0xdc, - 0x80, 0x01, 0xdc, 0xc1, 0x01, 0xdc, 0xc4, 0x00, - 0xdc, 0xc3, 0xb0, 0x34, 0x00, 0x07, 0x8e, 0x00, - 0x09, 0xa5, 0xc0, 0x00, 0xdc, 0xc6, 0xb0, 0x05, - 0x01, 0x09, 0xb0, 0x09, 0x00, 0x07, 0x8a, 0x01, - 0x09, 0xb0, 0x12, 0x00, 0x07, 0xb0, 0x67, 0xc2, - 0x41, 0x00, 0x04, 0xdc, 0xc1, 0x03, 0xdc, 0xc0, - 0x41, 0x00, 0x05, 0x01, 0x83, 0x00, 0xdc, 0x85, - 0xc0, 0x82, 0xc1, 0xb0, 0x95, 0xc1, 0x00, 0xdc, - 0xc6, 0x00, 0xdc, 0xc1, 0x00, 0xea, 0x00, 0xd6, - 0x00, 0xdc, 0x00, 0xca, 0xe4, 0x00, 0xe8, 0x01, - 0xe4, 0x00, 0xdc, 0x00, 0xda, 0xc0, 0x00, 0xe9, - 0x00, 0xdc, 0xc0, 0x00, 0xdc, 0xb2, 0x9f, 0xc1, - 0x01, 0x01, 0xc3, 0x02, 0x01, 0xc1, 0x83, 0xc0, - 0x82, 0x01, 0x01, 0xc0, 0x00, 0xdc, 0xc0, 0x01, - 0x01, 0x03, 0xdc, 0xc0, 0xb8, 0x03, 0xcd, 0xc2, - 0xb0, 0x5c, 0x00, 0x09, 0xb0, 0x2f, 0xdf, 0xb1, - 0xf9, 0x00, 0xda, 0x00, 0xe4, 0x00, 0xe8, 0x00, - 0xde, 0x01, 0xe0, 0xb0, 0x38, 0x01, 0x08, 0xb8, - 0x6d, 0xa3, 0xc0, 0x83, 0xc9, 0x9f, 0xc1, 0xb0, - 0x1f, 0xc1, 0xb0, 0xe3, 0x00, 0x09, 0xa4, 0x00, - 0x09, 0xb0, 0x66, 0x00, 0x09, 0x9a, 0xd1, 0xb0, - 0x08, 0x02, 0xdc, 0xa4, 0x00, 0x09, 0xb0, 0x2e, - 0x00, 0x07, 0x8b, 0x00, 0x09, 0xb0, 0xbe, 0xc0, - 0x80, 0xc1, 0x00, 0xdc, 0x81, 0xc1, 0x84, 0xc1, - 0x80, 0xc0, 0xb0, 0x03, 0x00, 0x09, 0xb0, 0xc5, - 0x00, 0x09, 0xb8, 0x46, 0xff, 0x00, 0x1a, 0xb2, - 0xd0, 0xc6, 0x06, 0xdc, 0xc1, 0xb3, 0x9c, 0x00, - 0xdc, 0xb0, 0xb1, 0x00, 0xdc, 0xb0, 0x64, 0xc4, - 0xb6, 0x61, 0x00, 0xdc, 0x80, 0xc0, 0xa7, 0xc0, - 0x00, 0x01, 0x00, 0xdc, 0x83, 0x00, 0x09, 0xb0, - 0x74, 0xc0, 0x00, 0xdc, 0xb2, 0x0c, 0xc3, 0xb1, - 0x52, 0xc1, 0xb0, 0x1f, 0x02, 0xdc, 0xb0, 0x15, - 0x01, 0xdc, 0xc2, 0x00, 0xdc, 0xc0, 0x03, 0xdc, - 0xb0, 0x00, 0xc0, 0x00, 0xdc, 0xc0, 0x00, 0xdc, - 0xb0, 0x8f, 0x00, 0x09, 0xa8, 0x00, 0x09, 0x8d, - 0x00, 0x09, 0xb0, 0x08, 0x00, 0x09, 0x00, 0x07, - 0xb0, 0x14, 0xc2, 0xaf, 0x01, 0x09, 0xb0, 0x0d, - 0x00, 0x07, 0xb0, 0x1b, 0x00, 0x09, 0x88, 0x00, - 0x07, 0xb0, 0x39, 0x00, 0x09, 0x00, 0x07, 0xb0, - 0x81, 0x00, 0x07, 0x00, 0x09, 0xb0, 0x1f, 0x01, - 0x07, 0x8f, 0x00, 0x09, 0x97, 0xc6, 0x82, 0xc4, - 0xb0, 0x9c, 0x00, 0x09, 0x82, 0x00, 0x07, 0x96, - 0xc0, 0xb0, 0x32, 0x00, 0x09, 0x00, 0x07, 0xb0, - 0xca, 0x00, 0x09, 0x00, 0x07, 0xb0, 0x4d, 0x00, - 0x09, 0xb0, 0x45, 0x00, 0x09, 0x00, 0x07, 0xb0, - 0x42, 0x00, 0x09, 0xb0, 0xdc, 0x00, 0x09, 0x00, - 0x07, 0xb0, 0xd1, 0x01, 0x09, 0x83, 0x00, 0x07, - 0xb0, 0x6b, 0x00, 0x09, 0xb0, 0x22, 0x00, 0x09, - 0x91, 0x00, 0x09, 0xb0, 0x20, 0x00, 0x09, 0xb1, - 0x74, 0x00, 0x09, 0xb0, 0xd1, 0x00, 0x07, 0x80, - 0x01, 0x09, 0xb0, 0x20, 0x00, 0x09, 0xb1, 0x78, - 0x01, 0x09, 0xb8, 0x43, 0x7c, 0x04, 0x01, 0xb0, - 0x0a, 0xc6, 0xb4, 0x88, 0x01, 0x06, 0xb8, 0x44, - 0x7b, 0x00, 0x01, 0xb8, 0x0c, 0x95, 0x01, 0xd8, - 0x02, 0x01, 0x82, 0x00, 0xe2, 0x04, 0xd8, 0x87, - 0x07, 0xdc, 0x81, 0xc4, 0x01, 0xdc, 0x9d, 0xc3, - 0xb0, 0x63, 0xc2, 0xb8, 0x05, 0x8a, 0xc6, 0x80, - 0xd0, 0x81, 0xc6, 0x80, 0xc1, 0x80, 0xc4, 0xb0, - 0x33, 0xc0, 0xb0, 0x6f, 0xc6, 0xb1, 0x46, 0xc0, - 0xb0, 0x0c, 0xc3, 0xb1, 0xcb, 0x01, 0xe8, 0x00, - 0xdc, 0xc0, 0xb3, 0xaf, 0x06, 0xdc, 0xb0, 0x3c, - 0xc5, 0x00, 0x07, -}; - -static const uint8_t unicode_cc_index[87] = { - 0x4d, 0x03, 0x00, 0x97, 0x05, 0x20, 0xc6, 0x05, - 0x00, 0xe7, 0x06, 0x00, 0x45, 0x07, 0x00, 0x9c, - 0x08, 0x00, 0x4d, 0x09, 0x00, 0x3c, 0x0b, 0x00, - 0x3d, 0x0d, 0x00, 0x36, 0x0f, 0x00, 0x38, 0x10, - 0x20, 0x3a, 0x19, 0x00, 0xcb, 0x1a, 0x20, 0xd3, - 0x1c, 0x00, 0xcf, 0x1d, 0x00, 0xe2, 0x20, 0x00, - 0x2e, 0x30, 0x20, 0x2b, 0xa9, 0x20, 0xed, 0xab, - 0x00, 0x39, 0x0a, 0x01, 0x51, 0x0f, 0x01, 0x73, - 0x11, 0x01, 0x75, 0x13, 0x01, 0x2b, 0x17, 0x21, - 0x3f, 0x1c, 0x21, 0x9e, 0xbc, 0x21, 0x08, 0xe0, - 0x01, 0x44, 0xe9, 0x01, 0x4b, 0xe9, 0x01, -}; - -static const uint32_t unicode_decomp_table1[699] = { - 0x00280081, 0x002a0097, 0x002a8081, 0x002bc097, - 0x002c8115, 0x002d0097, 0x002d4081, 0x002e0097, - 0x002e4115, 0x002f0199, 0x00302016, 0x00400842, - 0x00448a42, 0x004a0442, 0x004c0096, 0x004c8117, - 0x004d0242, 0x004e4342, 0x004fc12f, 0x0050c342, - 0x005240bf, 0x00530342, 0x00550942, 0x005a0842, - 0x005e0096, 0x005e4342, 0x005fc081, 0x00680142, - 0x006bc142, 0x00710185, 0x0071c317, 0x00734844, - 0x00778344, 0x00798342, 0x007b02be, 0x007c4197, - 0x007d0142, 0x007e0444, 0x00800e42, 0x00878142, - 0x00898744, 0x00ac0483, 0x00b60317, 0x00b80283, - 0x00d00214, 0x00d10096, 0x00dd0080, 0x00de8097, - 0x00df8080, 0x00e10097, 0x00e1413e, 0x00e1c080, - 0x00e204be, 0x00ea83ae, 0x00f282ae, 0x00f401ad, - 0x00f4c12e, 0x00f54103, 0x00fc0303, 0x00fe4081, - 0x0100023e, 0x0101c0be, 0x010301be, 0x010640be, - 0x010e40be, 0x0114023e, 0x0115c0be, 0x011701be, - 0x011d8144, 0x01304144, 0x01340244, 0x01358144, - 0x01368344, 0x01388344, 0x013a8644, 0x013e0144, - 0x0161c085, 0x018882ae, 0x019d422f, 0x01b00184, - 0x01b4c084, 0x024a4084, 0x024c4084, 0x024d0084, - 0x0256042e, 0x0272c12e, 0x02770120, 0x0277c084, - 0x028cc084, 0x028d8084, 0x029641ae, 0x02978084, - 0x02d20084, 0x02d2c12e, 0x02d70120, 0x02e50084, - 0x02f281ae, 0x03120084, 0x03300084, 0x0331c122, - 0x0332812e, 0x035281ae, 0x03768084, 0x037701ae, - 0x038cc085, 0x03acc085, 0x03b7012f, 0x03c30081, - 0x03d0c084, 0x03d34084, 0x03d48084, 0x03d5c084, - 0x03d70084, 0x03da4084, 0x03dcc084, 0x03dd412e, - 0x03ddc085, 0x03de0084, 0x03de4085, 0x03e04084, - 0x03e4c084, 0x03e74084, 0x03e88084, 0x03e9c084, - 0x03eb0084, 0x03ee4084, 0x04098084, 0x043f0081, - 0x06c18484, 0x06c48084, 0x06cec184, 0x06d00120, - 0x06d0c084, 0x074b0383, 0x074cc41f, 0x074f1783, - 0x075e0081, 0x0766d283, 0x07801d44, 0x078e8942, - 0x07931844, 0x079f0d42, 0x07a58216, 0x07a68085, - 0x07a6c0be, 0x07a80d44, 0x07aea044, 0x07c00122, - 0x07c08344, 0x07c20122, 0x07c28344, 0x07c40122, - 0x07c48244, 0x07c60122, 0x07c68244, 0x07c8113e, - 0x07d08244, 0x07d20122, 0x07d28244, 0x07d40122, - 0x07d48344, 0x07d64c3e, 0x07dc4080, 0x07dc80be, - 0x07dcc080, 0x07dd00be, 0x07dd4080, 0x07dd80be, - 0x07ddc080, 0x07de00be, 0x07de4080, 0x07de80be, - 0x07dec080, 0x07df00be, 0x07df4080, 0x07e00820, - 0x07e40820, 0x07e80820, 0x07ec05be, 0x07eec080, - 0x07ef00be, 0x07ef4097, 0x07ef8080, 0x07efc117, - 0x07f0443e, 0x07f24080, 0x07f280be, 0x07f2c080, - 0x07f303be, 0x07f4c080, 0x07f582ae, 0x07f6c080, - 0x07f7433e, 0x07f8c080, 0x07f903ae, 0x07fac080, - 0x07fb013e, 0x07fb8102, 0x07fc83be, 0x07fe4080, - 0x07fe80be, 0x07fec080, 0x07ff00be, 0x07ff4080, - 0x07ff8097, 0x0800011e, 0x08008495, 0x08044081, - 0x0805c097, 0x08090081, 0x08094097, 0x08098099, - 0x080bc081, 0x080cc085, 0x080d00b1, 0x080d8085, - 0x080dc0b1, 0x080f0197, 0x0811c197, 0x0815c0b3, - 0x0817c081, 0x081c0595, 0x081ec081, 0x081f0215, - 0x0820051f, 0x08228583, 0x08254415, 0x082a0097, - 0x08400119, 0x08408081, 0x0840c0bf, 0x08414119, - 0x0841c081, 0x084240bf, 0x0842852d, 0x08454081, - 0x08458097, 0x08464295, 0x08480097, 0x08484099, - 0x08488097, 0x08490081, 0x08498080, 0x084a0081, - 0x084a8102, 0x084b0495, 0x084d421f, 0x084e4081, - 0x084ec099, 0x084f0283, 0x08514295, 0x08540119, - 0x0854809b, 0x0854c619, 0x0857c097, 0x08580081, - 0x08584097, 0x08588099, 0x0858c097, 0x08590081, - 0x08594097, 0x08598099, 0x0859c09b, 0x085a0097, - 0x085a4081, 0x085a8097, 0x085ac099, 0x085b0295, - 0x085c4097, 0x085c8099, 0x085cc097, 0x085d0081, - 0x085d4097, 0x085d8099, 0x085dc09b, 0x085e0097, - 0x085e4081, 0x085e8097, 0x085ec099, 0x085f0215, - 0x08624099, 0x0866813e, 0x086b80be, 0x087341be, - 0x088100be, 0x088240be, 0x088300be, 0x088901be, - 0x088b0085, 0x088b40b1, 0x088bc085, 0x088c00b1, - 0x089040be, 0x089100be, 0x0891c1be, 0x089801be, - 0x089b42be, 0x089d0144, 0x089e0144, 0x08a00144, - 0x08a10144, 0x08a20144, 0x08ab023e, 0x08b80244, - 0x08ba8220, 0x08ca411e, 0x0918049f, 0x091a4523, - 0x091cc097, 0x091d04a5, 0x091f452b, 0x0921c09b, - 0x092204a1, 0x09244525, 0x0926c099, 0x09270d25, - 0x092d8d1f, 0x09340d1f, 0x093a8081, 0x0a8300b3, - 0x0a9d0099, 0x0a9d4097, 0x0a9d8099, 0x0ab700be, - 0x0b1f0115, 0x0b5bc081, 0x0ba7c081, 0x0bbcc081, - 0x0bc004ad, 0x0bc244ad, 0x0bc484ad, 0x0bc6f383, - 0x0be0852d, 0x0be31d03, 0x0bf1882d, 0x0c000081, - 0x0c0d8283, 0x0c130b84, 0x0c194284, 0x0c1c0122, - 0x0c1cc122, 0x0c1d8122, 0x0c1e4122, 0x0c1f0122, - 0x0c250084, 0x0c26c123, 0x0c278084, 0x0c27c085, - 0x0c2b0b84, 0x0c314284, 0x0c340122, 0x0c34c122, - 0x0c358122, 0x0c364122, 0x0c370122, 0x0c3d0084, - 0x0c3dc220, 0x0c3f8084, 0x0c3fc085, 0x0c4c4a2d, - 0x0c51451f, 0x0c53ca9f, 0x0c5915ad, 0x0c648703, - 0x0c800741, 0x0c838089, 0x0c83c129, 0x0c8441a9, - 0x0c850089, 0x0c854129, 0x0c85c2a9, 0x0c870089, - 0x0c87408f, 0x0c87808d, 0x0c881241, 0x0c910203, - 0x0c940099, 0x0c9444a3, 0x0c968323, 0x0c98072d, - 0x0c9b84af, 0x0c9dc2a1, 0x0c9f00b5, 0x0c9f40b3, - 0x0c9f8085, 0x0ca01883, 0x0cac4223, 0x0cad4523, - 0x0cafc097, 0x0cb004a1, 0x0cb241a5, 0x0cb30097, - 0x0cb34099, 0x0cb38097, 0x0cb3c099, 0x0cb417ad, - 0x0cbfc085, 0x0cc001b3, 0x0cc0c0b1, 0x0cc100b3, - 0x0cc14131, 0x0cc1c0b5, 0x0cc200b3, 0x0cc241b1, - 0x0cc30133, 0x0cc38131, 0x0cc40085, 0x0cc440b1, - 0x0cc48133, 0x0cc50085, 0x0cc540b5, 0x0cc580b7, - 0x0cc5c0b5, 0x0cc600b1, 0x0cc64135, 0x0cc6c0b3, - 0x0cc701b1, 0x0cc7c0b3, 0x0cc800b5, 0x0cc840b3, - 0x0cc881b1, 0x0cc9422f, 0x0cca4131, 0x0ccac0b5, - 0x0ccb00b1, 0x0ccb40b3, 0x0ccb80b5, 0x0ccbc0b1, - 0x0ccc012f, 0x0ccc80b5, 0x0cccc0b3, 0x0ccd00b5, - 0x0ccd40b1, 0x0ccd80b5, 0x0ccdc085, 0x0cce02b1, - 0x0ccf40b3, 0x0ccf80b1, 0x0ccfc085, 0x0cd001b1, - 0x0cd0c0b3, 0x0cd101b1, 0x0cd1c0b5, 0x0cd200b3, - 0x0cd24085, 0x0cd280b5, 0x0cd2c085, 0x0cd30133, - 0x0cd381b1, 0x0cd440b3, 0x0cd48085, 0x0cd4c0b1, - 0x0cd500b3, 0x0cd54085, 0x0cd580b5, 0x0cd5c0b1, - 0x0cd60521, 0x0cd88525, 0x0cdb02a5, 0x0cdc4099, - 0x0cdc8117, 0x0cdd0099, 0x0cdd4197, 0x0cde0127, - 0x0cde8285, 0x0cdfc089, 0x0ce0043f, 0x0ce20099, - 0x0ce2409b, 0x0ce283bf, 0x0ce44219, 0x0ce54205, - 0x0ce6433f, 0x0ce7c131, 0x0ce84085, 0x0ce881b1, - 0x0ce94085, 0x0ce98107, 0x0cea0089, 0x0cea4097, - 0x0cea8219, 0x0ceb809d, 0x0cebc08d, 0x0cec083f, - 0x0cf00105, 0x0cf0809b, 0x0cf0c197, 0x0cf1809b, - 0x0cf1c099, 0x0cf20517, 0x0cf48099, 0x0cf4c117, - 0x0cf54119, 0x0cf5c097, 0x0cf6009b, 0x0cf64099, - 0x0cf68217, 0x0cf78119, 0x0cf804a1, 0x0cfa4525, - 0x0cfcc525, 0x0cff4125, 0x0cffc099, 0x29a70103, - 0x29dc0081, 0x29fc8195, 0x29fe0103, 0x2ad70203, - 0x2ada4081, 0x3e401482, 0x3e4a7f82, 0x3e6a3f82, - 0x3e8aa102, 0x3e9b0110, 0x3e9c2f82, 0x3eb3c590, - 0x3ec00197, 0x3ec0c119, 0x3ec1413f, 0x3ec4c2af, - 0x3ec74184, 0x3ec804ad, 0x3eca4081, 0x3eca8304, - 0x3ecc03a0, 0x3ece02a0, 0x3ecf8084, 0x3ed00120, - 0x3ed0c120, 0x3ed184ae, 0x3ed3c085, 0x3ed4312d, - 0x3ef4cbad, 0x3efa892f, 0x3eff022d, 0x3f002f2f, - 0x3f1782a5, 0x3f18c0b1, 0x3f1907af, 0x3f1cffaf, - 0x3f3c81a5, 0x3f3d64af, 0x3f542031, 0x3f649b31, - 0x3f7c0131, 0x3f7c83b3, 0x3f7e40b1, 0x3f7e80bd, - 0x3f7ec0bb, 0x3f7f00b3, 0x3f840503, 0x3f8c01ad, - 0x3f8cc315, 0x3f8e462d, 0x3f91cc03, 0x3f97c695, - 0x3f9c01af, 0x3f9d0085, 0x3f9d852f, 0x3fa03aad, - 0x3fbd442f, 0x3fc06f1f, 0x3fd7c11f, 0x3fd85fad, - 0x3fe80081, 0x3fe84f1f, 0x3ff0831f, 0x3ff2831f, - 0x3ff4831f, 0x3ff6819f, 0x3ff80783, 0x41e04d83, - 0x41e70f91, 0x44268192, 0x442ac092, 0x444b8112, - 0x44d2c112, 0x452ec212, 0x456e8112, 0x464e0092, - 0x74578392, 0x746ec312, 0x75000d1f, 0x75068d1f, - 0x750d0d1f, 0x7513839f, 0x7515891f, 0x751a0d1f, - 0x75208d1f, 0x75271015, 0x752f439f, 0x7531459f, - 0x75340d1f, 0x753a8d1f, 0x75410395, 0x7543441f, - 0x7545839f, 0x75478d1f, 0x754e0795, 0x7552839f, - 0x75548d1f, 0x755b0d1f, 0x75618d1f, 0x75680d1f, - 0x756e8d1f, 0x75750d1f, 0x757b8d1f, 0x75820d1f, - 0x75888d1f, 0x758f0d1f, 0x75958d1f, 0x759c0d1f, - 0x75a28d1f, 0x75a90103, 0x75aa089f, 0x75ae4081, - 0x75ae839f, 0x75b04081, 0x75b08c9f, 0x75b6c081, - 0x75b7032d, 0x75b8889f, 0x75bcc081, 0x75bd039f, - 0x75bec081, 0x75bf0c9f, 0x75c54081, 0x75c5832d, - 0x75c7089f, 0x75cb4081, 0x75cb839f, 0x75cd4081, - 0x75cd8c9f, 0x75d3c081, 0x75d4032d, 0x75d5889f, - 0x75d9c081, 0x75da039f, 0x75dbc081, 0x75dc0c9f, - 0x75e24081, 0x75e2832d, 0x75e4089f, 0x75e84081, - 0x75e8839f, 0x75ea4081, 0x75ea8c9f, 0x75f0c081, - 0x75f1042d, 0x75f3851f, 0x75f6051f, 0x75f8851f, - 0x75fb051f, 0x75fd851f, 0x780c049f, 0x780e419f, - 0x780f059f, 0x7811c203, 0x7812d0ad, 0x781b0103, - 0x7b80022d, 0x7b814dad, 0x7b884203, 0x7b89c081, - 0x7b8a452d, 0x7b8d0403, 0x7b908081, 0x7b91dc03, - 0x7ba0052d, 0x7ba2c8ad, 0x7ba84483, 0x7baac8ad, - 0x7c400097, 0x7c404521, 0x7c440d25, 0x7c4a8087, - 0x7c4ac115, 0x7c4b4117, 0x7c4c0d1f, 0x7c528217, - 0x7c538099, 0x7c53c097, 0x7c5a8197, 0x7c640097, - 0x7c80012f, 0x7c808081, 0x7c841603, 0x7c9004c1, - 0x7c940103, 0x7efc051f, 0xbe0001ac, 0xbe00d110, - 0xbe0947ac, 0xbe0d3910, 0xbe29872c, 0xbe2d022c, - 0xbe2e3790, 0xbe49ff90, 0xbe69bc10, -}; - -static const uint16_t unicode_decomp_table2[699] = { - 0x0020, 0x0000, 0x0061, 0x0002, 0x0004, 0x0006, 0x03bc, 0x0008, - 0x000a, 0x000c, 0x0015, 0x0095, 0x00a5, 0x00b9, 0x00c1, 0x00c3, - 0x00c7, 0x00cb, 0x00d1, 0x00d7, 0x00dd, 0x00e0, 0x00e6, 0x00f8, - 0x0108, 0x010a, 0x0073, 0x0110, 0x0112, 0x0114, 0x0120, 0x012c, - 0x0144, 0x014d, 0x0153, 0x0162, 0x0168, 0x016a, 0x0176, 0x0192, - 0x0194, 0x01a9, 0x01bb, 0x01c7, 0x01d1, 0x01d5, 0x02b9, 0x01d7, - 0x003b, 0x01d9, 0x01db, 0x00b7, 0x01e1, 0x01fc, 0x020c, 0x0218, - 0x021d, 0x0223, 0x0227, 0x03a3, 0x0233, 0x023f, 0x0242, 0x024b, - 0x024e, 0x0251, 0x025d, 0x0260, 0x0269, 0x026c, 0x026f, 0x0275, - 0x0278, 0x0281, 0x028a, 0x029c, 0x029f, 0x02a3, 0x02af, 0x02b9, - 0x02c5, 0x02c9, 0x02cd, 0x02d1, 0x02d5, 0x02e7, 0x02ed, 0x02f1, - 0x02f5, 0x02f9, 0x02fd, 0x0305, 0x0309, 0x030d, 0x0313, 0x0317, - 0x031b, 0x0323, 0x0327, 0x032b, 0x032f, 0x0335, 0x033d, 0x0341, - 0x0349, 0x034d, 0x0351, 0x0f0b, 0x0357, 0x035b, 0x035f, 0x0363, - 0x0367, 0x036b, 0x036f, 0x0373, 0x0379, 0x037d, 0x0381, 0x0385, - 0x0389, 0x038d, 0x0391, 0x0395, 0x0399, 0x039d, 0x03a1, 0x10dc, - 0x03a5, 0x03c9, 0x03cd, 0x03d9, 0x03dd, 0x03e1, 0x03ef, 0x03f1, - 0x043d, 0x044f, 0x0499, 0x04f0, 0x0502, 0x054a, 0x0564, 0x056c, - 0x0570, 0x0573, 0x059a, 0x05fa, 0x05fe, 0x0607, 0x060b, 0x0614, - 0x0618, 0x061e, 0x0622, 0x0628, 0x068e, 0x0694, 0x0698, 0x069e, - 0x06a2, 0x06ab, 0x03ac, 0x06f3, 0x03ad, 0x06f6, 0x03ae, 0x06f9, - 0x03af, 0x06fc, 0x03cc, 0x06ff, 0x03cd, 0x0702, 0x03ce, 0x0705, - 0x0709, 0x070d, 0x0711, 0x0386, 0x0732, 0x0735, 0x03b9, 0x0737, - 0x073b, 0x0388, 0x0753, 0x0389, 0x0756, 0x0390, 0x076b, 0x038a, - 0x0777, 0x03b0, 0x0789, 0x038e, 0x0799, 0x079f, 0x07a3, 0x038c, - 0x07b8, 0x038f, 0x07bb, 0x00b4, 0x07be, 0x07c0, 0x07c2, 0x2010, - 0x07cb, 0x002e, 0x07cd, 0x07cf, 0x0020, 0x07d2, 0x07d6, 0x07db, - 0x07df, 0x07e4, 0x07ea, 0x07f0, 0x0020, 0x07f6, 0x2212, 0x0801, - 0x0805, 0x0807, 0x081d, 0x0825, 0x0827, 0x0043, 0x082d, 0x0830, - 0x0190, 0x0836, 0x0839, 0x004e, 0x0845, 0x0847, 0x084c, 0x084e, - 0x0851, 0x005a, 0x03a9, 0x005a, 0x0853, 0x0857, 0x0860, 0x0069, - 0x0862, 0x0865, 0x086f, 0x0874, 0x087a, 0x087e, 0x08a2, 0x0049, - 0x08a4, 0x08a6, 0x08a9, 0x0056, 0x08ab, 0x08ad, 0x08b0, 0x08b4, - 0x0058, 0x08b6, 0x08b8, 0x08bb, 0x08c0, 0x08c2, 0x08c5, 0x0076, - 0x08c7, 0x08c9, 0x08cc, 0x08d0, 0x0078, 0x08d2, 0x08d4, 0x08d7, - 0x08db, 0x08de, 0x08e4, 0x08e7, 0x08f0, 0x08f3, 0x08f6, 0x08f9, - 0x0902, 0x0906, 0x090b, 0x090f, 0x0914, 0x0917, 0x091a, 0x0923, - 0x092c, 0x093b, 0x093e, 0x0941, 0x0944, 0x0947, 0x094a, 0x0956, - 0x095c, 0x0960, 0x0962, 0x0964, 0x0968, 0x096a, 0x0970, 0x0978, - 0x097c, 0x0980, 0x0986, 0x0989, 0x098f, 0x0991, 0x0030, 0x0993, - 0x0999, 0x099c, 0x099e, 0x09a1, 0x09a4, 0x2d61, 0x6bcd, 0x9f9f, - 0x09a6, 0x09b1, 0x09bc, 0x09c7, 0x0a95, 0x0aa1, 0x0b15, 0x0020, - 0x0b27, 0x0b31, 0x0b8d, 0x0ba1, 0x0ba5, 0x0ba9, 0x0bad, 0x0bb1, - 0x0bb5, 0x0bb9, 0x0bbd, 0x0bc1, 0x0bc5, 0x0c21, 0x0c35, 0x0c39, - 0x0c3d, 0x0c41, 0x0c45, 0x0c49, 0x0c4d, 0x0c51, 0x0c55, 0x0c59, - 0x0c6f, 0x0c71, 0x0c73, 0x0ca0, 0x0cbc, 0x0cdc, 0x0ce4, 0x0cec, - 0x0cf4, 0x0cfc, 0x0d04, 0x0d0c, 0x0d14, 0x0d22, 0x0d2e, 0x0d7a, - 0x0d82, 0x0d85, 0x0d89, 0x0d8d, 0x0d9d, 0x0db1, 0x0db5, 0x0dbc, - 0x0dc2, 0x0dc6, 0x0e28, 0x0e2c, 0x0e30, 0x0e32, 0x0e36, 0x0e3c, - 0x0e3e, 0x0e41, 0x0e43, 0x0e46, 0x0e77, 0x0e7b, 0x0e89, 0x0e8e, - 0x0e94, 0x0e9c, 0x0ea3, 0x0ea9, 0x0eb4, 0x0ebe, 0x0ec6, 0x0eca, - 0x0ecf, 0x0ed9, 0x0edd, 0x0ee4, 0x0eec, 0x0ef3, 0x0ef8, 0x0f04, - 0x0f0a, 0x0f15, 0x0f1b, 0x0f22, 0x0f28, 0x0f33, 0x0f3d, 0x0f45, - 0x0f4c, 0x0f51, 0x0f57, 0x0f5e, 0x0f63, 0x0f69, 0x0f70, 0x0f76, - 0x0f7d, 0x0f82, 0x0f89, 0x0f8d, 0x0f9e, 0x0fa4, 0x0fa9, 0x0fad, - 0x0fb8, 0x0fbe, 0x0fc9, 0x0fd0, 0x0fd6, 0x0fda, 0x0fe1, 0x0fe5, - 0x0fef, 0x0ffa, 0x1000, 0x1004, 0x1009, 0x100f, 0x1013, 0x101a, - 0x101f, 0x1023, 0x1029, 0x102f, 0x1032, 0x1036, 0x1039, 0x103f, - 0x1045, 0x1059, 0x1061, 0x1079, 0x107c, 0x1080, 0x1095, 0x10a1, - 0x10b1, 0x10c3, 0x10cb, 0x10cf, 0x10da, 0x10de, 0x10ea, 0x10f2, - 0x10f4, 0x1100, 0x1105, 0x1111, 0x1141, 0x1149, 0x114d, 0x1153, - 0x1157, 0x115a, 0x116e, 0x1171, 0x1175, 0x117b, 0x117d, 0x1181, - 0x1184, 0x118c, 0x1192, 0x1196, 0x119c, 0x11a2, 0x11a8, 0x11ab, - 0xa76f, 0x11af, 0x11b2, 0x11b6, 0x028d, 0x11be, 0x1210, 0x130e, - 0x140c, 0x1490, 0x1495, 0x1553, 0x156c, 0x1572, 0x1578, 0x157e, - 0x158a, 0x1596, 0x002b, 0x15a1, 0x15b9, 0x15bd, 0x15c1, 0x15c5, - 0x15c9, 0x15cd, 0x15e1, 0x15e5, 0x1649, 0x1662, 0x1688, 0x168e, - 0x174c, 0x1752, 0x1757, 0x1777, 0x1877, 0x187d, 0x1911, 0x19d3, - 0x1a77, 0x1a7f, 0x1a9d, 0x1aa2, 0x1ab6, 0x1ac0, 0x1ac6, 0x1ada, - 0x1adf, 0x1ae5, 0x1af3, 0x1b23, 0x1b30, 0x1b38, 0x1b3c, 0x1b52, - 0x1bc9, 0x1bdb, 0x1bdd, 0x1bdf, 0x3164, 0x1c20, 0x1c22, 0x1c24, - 0x1c26, 0x1c28, 0x1c2a, 0x1c48, 0x1c7e, 0x1cc4, 0x1cd2, 0x1cd7, - 0x1ce0, 0x1ce9, 0x1cfb, 0x1d04, 0x1d09, 0x1d29, 0x1d44, 0x1d46, - 0x1d48, 0x1d4a, 0x1d4c, 0x1d4e, 0x1d50, 0x1d52, 0x1d72, 0x1d74, - 0x1d76, 0x1d78, 0x1d7a, 0x1d81, 0x1d83, 0x1d85, 0x1d87, 0x1d96, - 0x1d98, 0x1d9a, 0x1d9c, 0x1d9e, 0x1da0, 0x1da2, 0x1da4, 0x1da6, - 0x1da8, 0x1daa, 0x1dac, 0x1dae, 0x1db0, 0x1db2, 0x1db6, 0x03f4, - 0x1db8, 0x2207, 0x1dba, 0x2202, 0x1dbc, 0x1dc4, 0x03f4, 0x1dc6, - 0x2207, 0x1dc8, 0x2202, 0x1dca, 0x1dd2, 0x03f4, 0x1dd4, 0x2207, - 0x1dd6, 0x2202, 0x1dd8, 0x1de0, 0x03f4, 0x1de2, 0x2207, 0x1de4, - 0x2202, 0x1de6, 0x1dee, 0x03f4, 0x1df0, 0x2207, 0x1df2, 0x2202, - 0x1df4, 0x1dfe, 0x1e00, 0x1e02, 0x1e04, 0x1e06, 0x1e08, 0x1e0a, - 0x1e0c, 0x1e0e, 0x1e16, 0x1e39, 0x1e3d, 0x1e43, 0x1e60, 0x062d, - 0x1e68, 0x1e74, 0x062c, 0x1e84, 0x1ef4, 0x1f00, 0x1f13, 0x1f25, - 0x1f38, 0x1f3a, 0x1f3e, 0x1f44, 0x1f4a, 0x1f4c, 0x1f50, 0x1f52, - 0x1f5a, 0x1f5d, 0x1f5f, 0x1f65, 0x1f67, 0x30b5, 0x1f6d, 0x1fc5, - 0x1fdb, 0x1fdf, 0x1fe1, 0x1fe6, 0x2033, 0x2044, 0x2145, 0x2155, - 0x215b, 0x2255, 0x2373, -}; - -static const uint8_t unicode_decomp_data[9345] = { - 0x20, 0x88, 0x20, 0x84, 0x32, 0x33, 0x20, 0x81, - 0x20, 0xa7, 0x31, 0x6f, 0x31, 0xd0, 0x34, 0x31, - 0xd0, 0x32, 0x33, 0xd0, 0x34, 0x41, 0x80, 0x41, - 0x81, 0x41, 0x82, 0x41, 0x83, 0x41, 0x88, 0x41, - 0x8a, 0x00, 0x00, 0x43, 0xa7, 0x45, 0x80, 0x45, - 0x81, 0x45, 0x82, 0x45, 0x88, 0x49, 0x80, 0x49, - 0x81, 0x49, 0x82, 0x49, 0x88, 0x00, 0x00, 0x4e, - 0x83, 0x4f, 0x80, 0x4f, 0x81, 0x4f, 0x82, 0x4f, - 0x83, 0x4f, 0x88, 0x00, 0x00, 0x00, 0x00, 0x55, - 0x80, 0x55, 0x81, 0x55, 0x82, 0x55, 0x88, 0x59, - 0x81, 0x00, 0x00, 0x00, 0x00, 0x61, 0x80, 0x61, - 0x81, 0x61, 0x82, 0x61, 0x83, 0x61, 0x88, 0x61, - 0x8a, 0x00, 0x00, 0x63, 0xa7, 0x65, 0x80, 0x65, - 0x81, 0x65, 0x82, 0x65, 0x88, 0x69, 0x80, 0x69, - 0x81, 0x69, 0x82, 0x69, 0x88, 0x00, 0x00, 0x6e, - 0x83, 0x6f, 0x80, 0x6f, 0x81, 0x6f, 0x82, 0x6f, - 0x83, 0x6f, 0x88, 0x00, 0x00, 0x00, 0x00, 0x75, - 0x80, 0x75, 0x81, 0x75, 0x82, 0x75, 0x88, 0x79, - 0x81, 0x00, 0x00, 0x79, 0x88, 0x41, 0x84, 0x41, - 0x86, 0x41, 0xa8, 0x43, 0x81, 0x43, 0x82, 0x43, - 0x87, 0x43, 0x8c, 0x44, 0x8c, 0x45, 0x84, 0x45, - 0x86, 0x45, 0x87, 0x45, 0xa8, 0x45, 0x8c, 0x47, - 0x82, 0x47, 0x86, 0x47, 0x87, 0x47, 0xa7, 0x48, - 0x82, 0x49, 0x83, 0x49, 0x84, 0x49, 0x86, 0x49, - 0xa8, 0x49, 0x87, 0x49, 0x4a, 0x69, 0x6a, 0x4a, - 0x82, 0x4b, 0xa7, 0x4c, 0x81, 0x4c, 0xa7, 0x4c, - 0x8c, 0x4c, 0x00, 0x00, 0x6b, 0x20, 0x6b, 0x4e, - 0x81, 0x4e, 0xa7, 0x4e, 0x8c, 0xbc, 0x02, 0x6e, - 0x4f, 0x84, 0x4f, 0x86, 0x4f, 0x8b, 0x52, 0x81, - 0x52, 0xa7, 0x52, 0x8c, 0x53, 0x81, 0x53, 0x82, - 0x53, 0xa7, 0x53, 0x8c, 0x54, 0xa7, 0x54, 0x8c, - 0x55, 0x83, 0x55, 0x84, 0x55, 0x86, 0x55, 0x8a, - 0x55, 0x8b, 0x55, 0xa8, 0x57, 0x82, 0x59, 0x82, - 0x59, 0x88, 0x5a, 0x81, 0x5a, 0x87, 0x5a, 0x8c, - 0x4f, 0x9b, 0x55, 0x9b, 0x44, 0x00, 0x7d, 0x01, - 0x44, 0x00, 0x7e, 0x01, 0x64, 0x00, 0x7e, 0x01, - 0x4c, 0x4a, 0x4c, 0x6a, 0x6c, 0x6a, 0x4e, 0x4a, - 0x4e, 0x6a, 0x6e, 0x6a, 0x41, 0x00, 0x8c, 0x49, - 0x00, 0x8c, 0x4f, 0x00, 0x8c, 0x55, 0x00, 0x8c, - 0xdc, 0x00, 0x84, 0xdc, 0x00, 0x81, 0xdc, 0x00, - 0x8c, 0xdc, 0x00, 0x80, 0xc4, 0x00, 0x84, 0x26, - 0x02, 0x84, 0xc6, 0x00, 0x84, 0x47, 0x8c, 0x4b, - 0x8c, 0x4f, 0xa8, 0xea, 0x01, 0x84, 0xeb, 0x01, - 0x84, 0xb7, 0x01, 0x8c, 0x92, 0x02, 0x8c, 0x6a, - 0x00, 0x8c, 0x44, 0x5a, 0x44, 0x7a, 0x64, 0x7a, - 0x47, 0x81, 0x4e, 0x00, 0x80, 0xc5, 0x00, 0x81, - 0xc6, 0x00, 0x81, 0xd8, 0x00, 0x81, 0x41, 0x8f, - 0x41, 0x91, 0x45, 0x8f, 0x45, 0x91, 0x49, 0x8f, - 0x49, 0x91, 0x4f, 0x8f, 0x4f, 0x91, 0x52, 0x8f, - 0x52, 0x91, 0x55, 0x8f, 0x55, 0x91, 0x53, 0xa6, - 0x54, 0xa6, 0x48, 0x8c, 0x41, 0x00, 0x87, 0x45, - 0x00, 0xa7, 0xd6, 0x00, 0x84, 0xd5, 0x00, 0x84, - 0x4f, 0x00, 0x87, 0x2e, 0x02, 0x84, 0x59, 0x00, - 0x84, 0x68, 0x00, 0x66, 0x02, 0x6a, 0x00, 0x72, - 0x00, 0x79, 0x02, 0x7b, 0x02, 0x81, 0x02, 0x77, - 0x00, 0x79, 0x00, 0x20, 0x86, 0x20, 0x87, 0x20, - 0x8a, 0x20, 0xa8, 0x20, 0x83, 0x20, 0x8b, 0x63, - 0x02, 0x6c, 0x00, 0x73, 0x00, 0x78, 0x00, 0x95, - 0x02, 0x80, 0x81, 0x00, 0x93, 0x88, 0x81, 0x20, - 0xc5, 0x20, 0x81, 0xa8, 0x00, 0x81, 0x91, 0x03, - 0x81, 0x95, 0x03, 0x81, 0x97, 0x03, 0x81, 0x99, - 0x03, 0x81, 0x00, 0x00, 0x00, 0x9f, 0x03, 0x81, - 0x00, 0x00, 0x00, 0xa5, 0x03, 0x81, 0xa9, 0x03, - 0x81, 0xca, 0x03, 0x81, 0x01, 0x03, 0x98, 0x07, - 0xa4, 0x07, 0xb0, 0x00, 0xb4, 0x00, 0xb6, 0x00, - 0xb8, 0x00, 0xca, 0x00, 0x01, 0x03, 0xb8, 0x07, - 0xc4, 0x07, 0xbe, 0x00, 0xc4, 0x00, 0xc8, 0x00, - 0xa5, 0x03, 0x0d, 0x13, 0x00, 0x01, 0x03, 0xd1, - 0x00, 0xd1, 0x07, 0xc6, 0x03, 0xc0, 0x03, 0xba, - 0x03, 0xc1, 0x03, 0xc2, 0x03, 0x00, 0x00, 0x98, - 0x03, 0xb5, 0x03, 0x15, 0x04, 0x80, 0x15, 0x04, - 0x88, 0x00, 0x00, 0x00, 0x13, 0x04, 0x81, 0x06, - 0x04, 0x88, 0x1a, 0x04, 0x81, 0x18, 0x04, 0x80, - 0x23, 0x04, 0x86, 0x18, 0x04, 0x86, 0x38, 0x04, - 0x86, 0x35, 0x04, 0x80, 0x35, 0x04, 0x88, 0x00, - 0x00, 0x00, 0x33, 0x04, 0x81, 0x56, 0x04, 0x88, - 0x3a, 0x04, 0x81, 0x38, 0x04, 0x80, 0x43, 0x04, - 0x86, 0x74, 0x04, 0x8f, 0x16, 0x04, 0x86, 0x10, - 0x04, 0x86, 0x10, 0x04, 0x88, 0x15, 0x04, 0x86, - 0xd8, 0x04, 0x88, 0x16, 0x04, 0x88, 0x17, 0x04, - 0x88, 0x18, 0x04, 0x84, 0x18, 0x04, 0x88, 0x1e, - 0x04, 0x88, 0xe8, 0x04, 0x88, 0x2d, 0x04, 0x88, - 0x23, 0x04, 0x84, 0x23, 0x04, 0x88, 0x23, 0x04, - 0x8b, 0x27, 0x04, 0x88, 0x2b, 0x04, 0x88, 0x65, - 0x05, 0x82, 0x05, 0x27, 0x06, 0x00, 0x2c, 0x00, - 0x2d, 0x21, 0x2d, 0x00, 0x2e, 0x23, 0x2d, 0x27, - 0x06, 0x00, 0x4d, 0x21, 0x4d, 0xa0, 0x4d, 0x23, - 0x4d, 0xd5, 0x06, 0x54, 0x06, 0x00, 0x00, 0x00, - 0x00, 0xc1, 0x06, 0x54, 0x06, 0xd2, 0x06, 0x54, - 0x06, 0x28, 0x09, 0x3c, 0x09, 0x30, 0x09, 0x3c, - 0x09, 0x33, 0x09, 0x3c, 0x09, 0x15, 0x09, 0x00, - 0x27, 0x01, 0x27, 0x02, 0x27, 0x07, 0x27, 0x0c, - 0x27, 0x0d, 0x27, 0x16, 0x27, 0x1a, 0x27, 0xbe, - 0x09, 0x09, 0x00, 0x09, 0x19, 0xa1, 0x09, 0xbc, - 0x09, 0xaf, 0x09, 0xbc, 0x09, 0x32, 0x0a, 0x3c, - 0x0a, 0x38, 0x0a, 0x3c, 0x0a, 0x16, 0x0a, 0x00, - 0x26, 0x01, 0x26, 0x06, 0x26, 0x2b, 0x0a, 0x3c, - 0x0a, 0x47, 0x0b, 0x56, 0x0b, 0x3e, 0x0b, 0x09, - 0x00, 0x09, 0x19, 0x21, 0x0b, 0x3c, 0x0b, 0x92, - 0x0b, 0xd7, 0x0b, 0xbe, 0x0b, 0x08, 0x00, 0x09, - 0x00, 0x08, 0x19, 0x46, 0x0c, 0x56, 0x0c, 0xbf, - 0x0c, 0xd5, 0x0c, 0xc6, 0x0c, 0xd5, 0x0c, 0xc2, - 0x0c, 0x04, 0x00, 0x08, 0x13, 0x3e, 0x0d, 0x08, - 0x00, 0x09, 0x00, 0x08, 0x19, 0xd9, 0x0d, 0xca, - 0x0d, 0xca, 0x0d, 0x0f, 0x05, 0x12, 0x00, 0x0f, - 0x15, 0x4d, 0x0e, 0x32, 0x0e, 0xcd, 0x0e, 0xb2, - 0x0e, 0x99, 0x0e, 0x12, 0x00, 0x12, 0x08, 0x42, - 0x0f, 0xb7, 0x0f, 0x4c, 0x0f, 0xb7, 0x0f, 0x51, - 0x0f, 0xb7, 0x0f, 0x56, 0x0f, 0xb7, 0x0f, 0x5b, - 0x0f, 0xb7, 0x0f, 0x40, 0x0f, 0xb5, 0x0f, 0x71, - 0x0f, 0x72, 0x0f, 0x71, 0x0f, 0x00, 0x03, 0x41, - 0x0f, 0xb2, 0x0f, 0x81, 0x0f, 0xb3, 0x0f, 0x80, - 0x0f, 0xb3, 0x0f, 0x81, 0x0f, 0x71, 0x0f, 0x80, - 0x0f, 0x92, 0x0f, 0xb7, 0x0f, 0x9c, 0x0f, 0xb7, - 0x0f, 0xa1, 0x0f, 0xb7, 0x0f, 0xa6, 0x0f, 0xb7, - 0x0f, 0xab, 0x0f, 0xb7, 0x0f, 0x90, 0x0f, 0xb5, - 0x0f, 0x25, 0x10, 0x2e, 0x10, 0x05, 0x1b, 0x35, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1b, 0x35, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1b, 0x35, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x1b, 0x35, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x1b, 0x35, - 0x1b, 0x11, 0x1b, 0x35, 0x1b, 0x3a, 0x1b, 0x35, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1b, 0x35, - 0x1b, 0x3e, 0x1b, 0x35, 0x1b, 0x42, 0x1b, 0x35, - 0x1b, 0x41, 0x00, 0xc6, 0x00, 0x42, 0x00, 0x00, - 0x00, 0x44, 0x00, 0x45, 0x00, 0x8e, 0x01, 0x47, - 0x00, 0x4f, 0x00, 0x22, 0x02, 0x50, 0x00, 0x52, - 0x00, 0x54, 0x00, 0x55, 0x00, 0x57, 0x00, 0x61, - 0x00, 0x50, 0x02, 0x51, 0x02, 0x02, 0x1d, 0x62, - 0x00, 0x64, 0x00, 0x65, 0x00, 0x59, 0x02, 0x5b, - 0x02, 0x5c, 0x02, 0x67, 0x00, 0x00, 0x00, 0x6b, - 0x00, 0x6d, 0x00, 0x4b, 0x01, 0x6f, 0x00, 0x54, - 0x02, 0x16, 0x1d, 0x17, 0x1d, 0x70, 0x00, 0x74, - 0x00, 0x75, 0x00, 0x1d, 0x1d, 0x6f, 0x02, 0x76, - 0x00, 0x25, 0x1d, 0xb2, 0x03, 0xb3, 0x03, 0xb4, - 0x03, 0xc6, 0x03, 0xc7, 0x03, 0x69, 0x00, 0x72, - 0x00, 0x75, 0x00, 0x76, 0x00, 0xb2, 0x03, 0xb3, - 0x03, 0xc1, 0x03, 0xc6, 0x03, 0xc7, 0x03, 0x52, - 0x02, 0x63, 0x00, 0x55, 0x02, 0xf0, 0x00, 0x5c, - 0x02, 0x66, 0x00, 0x5f, 0x02, 0x61, 0x02, 0x65, - 0x02, 0x68, 0x02, 0x69, 0x02, 0x6a, 0x02, 0x7b, - 0x1d, 0x9d, 0x02, 0x6d, 0x02, 0x85, 0x1d, 0x9f, - 0x02, 0x71, 0x02, 0x70, 0x02, 0x72, 0x02, 0x73, - 0x02, 0x74, 0x02, 0x75, 0x02, 0x78, 0x02, 0x82, - 0x02, 0x83, 0x02, 0xab, 0x01, 0x89, 0x02, 0x8a, - 0x02, 0x1c, 0x1d, 0x8b, 0x02, 0x8c, 0x02, 0x7a, - 0x00, 0x90, 0x02, 0x91, 0x02, 0x92, 0x02, 0xb8, - 0x03, 0x41, 0x00, 0xa5, 0x42, 0x00, 0x87, 0x42, - 0x00, 0xa3, 0x42, 0x00, 0xb1, 0xc7, 0x00, 0x81, - 0x44, 0x00, 0x87, 0x44, 0x00, 0xa3, 0x44, 0x00, - 0xb1, 0x44, 0x00, 0xa7, 0x44, 0x00, 0xad, 0x12, - 0x01, 0x80, 0x12, 0x01, 0x81, 0x45, 0x00, 0xad, - 0x45, 0x00, 0xb0, 0x28, 0x02, 0x86, 0x46, 0x00, - 0x87, 0x47, 0x00, 0x84, 0x48, 0x00, 0x87, 0x48, - 0x00, 0xa3, 0x48, 0x00, 0x88, 0x48, 0x00, 0xa7, - 0x48, 0x00, 0xae, 0x49, 0x00, 0xb0, 0xcf, 0x00, - 0x81, 0x4b, 0x00, 0x81, 0x4b, 0x00, 0xa3, 0x4b, - 0x00, 0xb1, 0x4c, 0x00, 0xa3, 0x36, 0x1e, 0x84, - 0x4c, 0xb1, 0x4c, 0xad, 0x4d, 0x81, 0x4d, 0x87, - 0x4d, 0xa3, 0x4e, 0x87, 0x4e, 0xa3, 0x4e, 0xb1, - 0x4e, 0xad, 0xd5, 0x00, 0x81, 0xd5, 0x00, 0x88, - 0x4c, 0x01, 0x80, 0x4c, 0x01, 0x81, 0x50, 0x00, - 0x81, 0x50, 0x00, 0x87, 0x52, 0x00, 0x87, 0x52, - 0x00, 0xa3, 0x5a, 0x1e, 0x84, 0x52, 0x00, 0xb1, - 0x53, 0x00, 0x87, 0x53, 0x00, 0xa3, 0x5a, 0x01, - 0x87, 0x60, 0x01, 0x87, 0x62, 0x1e, 0x87, 0x54, - 0x00, 0x87, 0x54, 0x00, 0xa3, 0x54, 0x00, 0xb1, - 0x54, 0x00, 0xad, 0x55, 0x00, 0xa4, 0x55, 0x00, - 0xb0, 0x55, 0x00, 0xad, 0x68, 0x01, 0x81, 0x6a, - 0x01, 0x88, 0x56, 0x83, 0x56, 0xa3, 0x57, 0x80, - 0x57, 0x81, 0x57, 0x88, 0x57, 0x87, 0x57, 0xa3, - 0x58, 0x87, 0x58, 0x88, 0x59, 0x87, 0x5a, 0x82, - 0x5a, 0xa3, 0x5a, 0xb1, 0x68, 0xb1, 0x74, 0x88, - 0x77, 0x8a, 0x79, 0x8a, 0x61, 0x00, 0xbe, 0x02, - 0x7f, 0x01, 0x87, 0x41, 0x00, 0xa3, 0x41, 0x00, - 0x89, 0xc2, 0x00, 0x81, 0xc2, 0x00, 0x80, 0xc2, - 0x00, 0x89, 0xc2, 0x00, 0x83, 0xa0, 0x1e, 0x82, - 0x02, 0x01, 0x81, 0x02, 0x01, 0x80, 0x02, 0x01, - 0x89, 0x02, 0x01, 0x83, 0xa0, 0x1e, 0x86, 0x45, - 0x00, 0xa3, 0x45, 0x00, 0x89, 0x45, 0x00, 0x83, - 0xca, 0x00, 0x81, 0xca, 0x00, 0x80, 0xca, 0x00, - 0x89, 0xca, 0x00, 0x83, 0xb8, 0x1e, 0x82, 0x49, - 0x00, 0x89, 0x49, 0x00, 0xa3, 0x4f, 0x00, 0xa3, - 0x4f, 0x00, 0x89, 0xd4, 0x00, 0x81, 0xd4, 0x00, - 0x80, 0xd4, 0x00, 0x89, 0xd4, 0x00, 0x83, 0xcc, - 0x1e, 0x82, 0xa0, 0x01, 0x81, 0xa0, 0x01, 0x80, - 0xa0, 0x01, 0x89, 0xa0, 0x01, 0x83, 0xa0, 0x01, - 0xa3, 0x55, 0x00, 0xa3, 0x55, 0x00, 0x89, 0xaf, - 0x01, 0x81, 0xaf, 0x01, 0x80, 0xaf, 0x01, 0x89, - 0xaf, 0x01, 0x83, 0xaf, 0x01, 0xa3, 0x59, 0x00, - 0x80, 0x59, 0x00, 0xa3, 0x59, 0x00, 0x89, 0x59, - 0x00, 0x83, 0xb1, 0x03, 0x13, 0x03, 0x00, 0x1f, - 0x80, 0x00, 0x1f, 0x81, 0x00, 0x1f, 0xc2, 0x91, - 0x03, 0x13, 0x03, 0x08, 0x1f, 0x80, 0x08, 0x1f, - 0x81, 0x08, 0x1f, 0xc2, 0xb5, 0x03, 0x13, 0x03, - 0x10, 0x1f, 0x80, 0x10, 0x1f, 0x81, 0x95, 0x03, - 0x13, 0x03, 0x18, 0x1f, 0x80, 0x18, 0x1f, 0x81, - 0xb7, 0x03, 0x93, 0xb7, 0x03, 0x94, 0x20, 0x1f, - 0x80, 0x21, 0x1f, 0x80, 0x20, 0x1f, 0x81, 0x21, - 0x1f, 0x81, 0x20, 0x1f, 0xc2, 0x21, 0x1f, 0xc2, - 0x97, 0x03, 0x93, 0x97, 0x03, 0x94, 0x28, 0x1f, - 0x80, 0x29, 0x1f, 0x80, 0x28, 0x1f, 0x81, 0x29, - 0x1f, 0x81, 0x28, 0x1f, 0xc2, 0x29, 0x1f, 0xc2, - 0xb9, 0x03, 0x93, 0xb9, 0x03, 0x94, 0x30, 0x1f, - 0x80, 0x31, 0x1f, 0x80, 0x30, 0x1f, 0x81, 0x31, - 0x1f, 0x81, 0x30, 0x1f, 0xc2, 0x31, 0x1f, 0xc2, - 0x99, 0x03, 0x93, 0x99, 0x03, 0x94, 0x38, 0x1f, - 0x80, 0x39, 0x1f, 0x80, 0x38, 0x1f, 0x81, 0x39, - 0x1f, 0x81, 0x38, 0x1f, 0xc2, 0x39, 0x1f, 0xc2, - 0xbf, 0x03, 0x93, 0xbf, 0x03, 0x94, 0x40, 0x1f, - 0x80, 0x40, 0x1f, 0x81, 0x9f, 0x03, 0x13, 0x03, - 0x48, 0x1f, 0x80, 0x48, 0x1f, 0x81, 0xc5, 0x03, - 0x13, 0x03, 0x50, 0x1f, 0x80, 0x50, 0x1f, 0x81, - 0x50, 0x1f, 0xc2, 0xa5, 0x03, 0x94, 0x00, 0x00, - 0x00, 0x59, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x59, - 0x1f, 0x81, 0x00, 0x00, 0x00, 0x59, 0x1f, 0xc2, - 0xc9, 0x03, 0x93, 0xc9, 0x03, 0x94, 0x60, 0x1f, - 0x80, 0x61, 0x1f, 0x80, 0x60, 0x1f, 0x81, 0x61, - 0x1f, 0x81, 0x60, 0x1f, 0xc2, 0x61, 0x1f, 0xc2, - 0xa9, 0x03, 0x93, 0xa9, 0x03, 0x94, 0x68, 0x1f, - 0x80, 0x69, 0x1f, 0x80, 0x68, 0x1f, 0x81, 0x69, - 0x1f, 0x81, 0x68, 0x1f, 0xc2, 0x69, 0x1f, 0xc2, - 0xb1, 0x03, 0x80, 0xb5, 0x03, 0x80, 0xb7, 0x03, - 0x80, 0xb9, 0x03, 0x80, 0xbf, 0x03, 0x80, 0xc5, - 0x03, 0x80, 0xc9, 0x03, 0x80, 0x00, 0x1f, 0x45, - 0x03, 0x20, 0x1f, 0x45, 0x03, 0x60, 0x1f, 0x45, - 0x03, 0xb1, 0x03, 0x86, 0xb1, 0x03, 0x84, 0x70, - 0x1f, 0xc5, 0xb1, 0x03, 0xc5, 0xac, 0x03, 0xc5, - 0x00, 0x00, 0x00, 0xb1, 0x03, 0xc2, 0xb6, 0x1f, - 0xc5, 0x91, 0x03, 0x86, 0x91, 0x03, 0x84, 0x91, - 0x03, 0x80, 0x91, 0x03, 0xc5, 0x20, 0x93, 0x20, - 0x93, 0x20, 0xc2, 0xa8, 0x00, 0xc2, 0x74, 0x1f, - 0xc5, 0xb7, 0x03, 0xc5, 0xae, 0x03, 0xc5, 0x00, - 0x00, 0x00, 0xb7, 0x03, 0xc2, 0xc6, 0x1f, 0xc5, - 0x95, 0x03, 0x80, 0x97, 0x03, 0x80, 0x97, 0x03, - 0xc5, 0xbf, 0x1f, 0x80, 0xbf, 0x1f, 0x81, 0xbf, - 0x1f, 0xc2, 0xb9, 0x03, 0x86, 0xb9, 0x03, 0x84, - 0xca, 0x03, 0x80, 0x00, 0x03, 0xb9, 0x42, 0xca, - 0x42, 0x99, 0x06, 0x99, 0x04, 0x99, 0x00, 0xfe, - 0x1f, 0x80, 0xfe, 0x1f, 0x81, 0xfe, 0x1f, 0xc2, - 0xc5, 0x03, 0x86, 0xc5, 0x03, 0x84, 0xcb, 0x03, - 0x80, 0x00, 0x03, 0xc1, 0x13, 0xc1, 0x14, 0xc5, - 0x42, 0xcb, 0x42, 0xa5, 0x06, 0xa5, 0x04, 0xa5, - 0x00, 0xa1, 0x03, 0x94, 0xa8, 0x00, 0x80, 0x85, - 0x03, 0x60, 0x00, 0x7c, 0x1f, 0xc5, 0xc9, 0x03, - 0xc5, 0xce, 0x03, 0xc5, 0x00, 0x00, 0x00, 0xc9, - 0x03, 0xc2, 0xf6, 0x1f, 0xc5, 0x9f, 0x03, 0x80, - 0xa9, 0x03, 0x80, 0xa9, 0x03, 0xc5, 0x20, 0x94, - 0x02, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0xb3, 0x2e, 0x2e, 0x2e, - 0x2e, 0x2e, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, - 0x00, 0x00, 0x00, 0x35, 0x20, 0x35, 0x20, 0x35, - 0x20, 0x00, 0x00, 0x00, 0x21, 0x21, 0x00, 0x00, - 0x20, 0x85, 0x3f, 0x3f, 0x3f, 0x21, 0x21, 0x3f, - 0x32, 0x20, 0x00, 0x00, 0x00, 0x00, 0x30, 0x69, - 0x00, 0x00, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, - 0x2b, 0x3d, 0x28, 0x29, 0x6e, 0x30, 0x00, 0x2b, - 0x00, 0x12, 0x22, 0x3d, 0x00, 0x28, 0x00, 0x29, - 0x00, 0x00, 0x00, 0x61, 0x00, 0x65, 0x00, 0x6f, - 0x00, 0x78, 0x00, 0x59, 0x02, 0x68, 0x6b, 0x6c, - 0x6d, 0x6e, 0x70, 0x73, 0x74, 0x52, 0x73, 0x61, - 0x2f, 0x63, 0x61, 0x2f, 0x73, 0xb0, 0x00, 0x43, - 0x63, 0x2f, 0x6f, 0x63, 0x2f, 0x75, 0xb0, 0x00, - 0x46, 0x48, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, - 0xdf, 0x01, 0x01, 0x04, 0x24, 0x4e, 0x6f, 0x50, - 0x51, 0x52, 0x52, 0x52, 0x53, 0x4d, 0x54, 0x45, - 0x4c, 0x54, 0x4d, 0x4b, 0x00, 0xc5, 0x00, 0x42, - 0x43, 0x00, 0x65, 0x45, 0x46, 0x00, 0x4d, 0x6f, - 0xd0, 0x05, 0x46, 0x41, 0x58, 0xc0, 0x03, 0xb3, - 0x03, 0x93, 0x03, 0xa0, 0x03, 0x11, 0x22, 0x44, - 0x64, 0x65, 0x69, 0x6a, 0x31, 0xd0, 0x37, 0x31, - 0xd0, 0x39, 0x31, 0xd0, 0x31, 0x30, 0x31, 0xd0, - 0x33, 0x32, 0xd0, 0x33, 0x31, 0xd0, 0x35, 0x32, - 0xd0, 0x35, 0x33, 0xd0, 0x35, 0x34, 0xd0, 0x35, - 0x31, 0xd0, 0x36, 0x35, 0xd0, 0x36, 0x31, 0xd0, - 0x38, 0x33, 0xd0, 0x38, 0x35, 0xd0, 0x38, 0x37, - 0xd0, 0x38, 0x31, 0xd0, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x56, 0x56, 0x49, 0x56, 0x49, 0x49, - 0x56, 0x49, 0x49, 0x49, 0x49, 0x58, 0x58, 0x49, - 0x58, 0x49, 0x49, 0x4c, 0x43, 0x44, 0x4d, 0x69, - 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x76, 0x76, - 0x69, 0x76, 0x69, 0x69, 0x76, 0x69, 0x69, 0x69, - 0x69, 0x78, 0x78, 0x69, 0x78, 0x69, 0x69, 0x6c, - 0x63, 0x64, 0x6d, 0x30, 0xd0, 0x33, 0x90, 0x21, - 0xb8, 0x92, 0x21, 0xb8, 0x94, 0x21, 0xb8, 0xd0, - 0x21, 0xb8, 0xd4, 0x21, 0xb8, 0xd2, 0x21, 0xb8, - 0x03, 0x22, 0xb8, 0x08, 0x22, 0xb8, 0x0b, 0x22, - 0xb8, 0x23, 0x22, 0xb8, 0x00, 0x00, 0x00, 0x25, - 0x22, 0xb8, 0x2b, 0x22, 0x2b, 0x22, 0x2b, 0x22, - 0x00, 0x00, 0x00, 0x2e, 0x22, 0x2e, 0x22, 0x2e, - 0x22, 0x00, 0x00, 0x00, 0x3c, 0x22, 0xb8, 0x43, - 0x22, 0xb8, 0x45, 0x22, 0xb8, 0x00, 0x00, 0x00, - 0x48, 0x22, 0xb8, 0x3d, 0x00, 0xb8, 0x00, 0x00, - 0x00, 0x61, 0x22, 0xb8, 0x4d, 0x22, 0xb8, 0x3c, - 0x00, 0xb8, 0x3e, 0x00, 0xb8, 0x64, 0x22, 0xb8, - 0x65, 0x22, 0xb8, 0x72, 0x22, 0xb8, 0x76, 0x22, - 0xb8, 0x7a, 0x22, 0xb8, 0x82, 0x22, 0xb8, 0x86, - 0x22, 0xb8, 0xa2, 0x22, 0xb8, 0xa8, 0x22, 0xb8, - 0xa9, 0x22, 0xb8, 0xab, 0x22, 0xb8, 0x7c, 0x22, - 0xb8, 0x91, 0x22, 0xb8, 0xb2, 0x22, 0x38, 0x03, - 0x08, 0x30, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, - 0x32, 0x30, 0x28, 0x00, 0x31, 0x00, 0x29, 0x00, - 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, - 0x28, 0x32, 0x30, 0x29, 0x31, 0x00, 0x2e, 0x00, - 0x31, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x32, 0x30, - 0x2e, 0x28, 0x00, 0x61, 0x00, 0x29, 0x00, 0x41, - 0x00, 0x61, 0x00, 0x2b, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x3a, 0x3a, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, - 0x3d, 0xdd, 0x2a, 0xb8, 0x6a, 0x56, 0x00, 0x4e, - 0x00, 0x28, 0x36, 0x3f, 0x59, 0x85, 0x8c, 0xa0, - 0xba, 0x3f, 0x51, 0x00, 0x26, 0x2c, 0x43, 0x57, - 0x6c, 0xa1, 0xb6, 0xc1, 0x9b, 0x52, 0x00, 0x5e, - 0x7a, 0x7f, 0x9d, 0xa6, 0xc1, 0xce, 0xe7, 0xb6, - 0x53, 0xc8, 0x53, 0xe3, 0x53, 0xd7, 0x56, 0x1f, - 0x57, 0xeb, 0x58, 0x02, 0x59, 0x0a, 0x59, 0x15, - 0x59, 0x27, 0x59, 0x73, 0x59, 0x50, 0x5b, 0x80, - 0x5b, 0xf8, 0x5b, 0x0f, 0x5c, 0x22, 0x5c, 0x38, - 0x5c, 0x6e, 0x5c, 0x71, 0x5c, 0xdb, 0x5d, 0xe5, - 0x5d, 0xf1, 0x5d, 0xfe, 0x5d, 0x72, 0x5e, 0x7a, - 0x5e, 0x7f, 0x5e, 0xf4, 0x5e, 0xfe, 0x5e, 0x0b, - 0x5f, 0x13, 0x5f, 0x50, 0x5f, 0x61, 0x5f, 0x73, - 0x5f, 0xc3, 0x5f, 0x08, 0x62, 0x36, 0x62, 0x4b, - 0x62, 0x2f, 0x65, 0x34, 0x65, 0x87, 0x65, 0x97, - 0x65, 0xa4, 0x65, 0xb9, 0x65, 0xe0, 0x65, 0xe5, - 0x65, 0xf0, 0x66, 0x08, 0x67, 0x28, 0x67, 0x20, - 0x6b, 0x62, 0x6b, 0x79, 0x6b, 0xb3, 0x6b, 0xcb, - 0x6b, 0xd4, 0x6b, 0xdb, 0x6b, 0x0f, 0x6c, 0x14, - 0x6c, 0x34, 0x6c, 0x6b, 0x70, 0x2a, 0x72, 0x36, - 0x72, 0x3b, 0x72, 0x3f, 0x72, 0x47, 0x72, 0x59, - 0x72, 0x5b, 0x72, 0xac, 0x72, 0x84, 0x73, 0x89, - 0x73, 0xdc, 0x74, 0xe6, 0x74, 0x18, 0x75, 0x1f, - 0x75, 0x28, 0x75, 0x30, 0x75, 0x8b, 0x75, 0x92, - 0x75, 0x76, 0x76, 0x7d, 0x76, 0xae, 0x76, 0xbf, - 0x76, 0xee, 0x76, 0xdb, 0x77, 0xe2, 0x77, 0xf3, - 0x77, 0x3a, 0x79, 0xb8, 0x79, 0xbe, 0x79, 0x74, - 0x7a, 0xcb, 0x7a, 0xf9, 0x7a, 0x73, 0x7c, 0xf8, - 0x7c, 0x36, 0x7f, 0x51, 0x7f, 0x8a, 0x7f, 0xbd, - 0x7f, 0x01, 0x80, 0x0c, 0x80, 0x12, 0x80, 0x33, - 0x80, 0x7f, 0x80, 0x89, 0x80, 0xe3, 0x81, 0x00, - 0x07, 0x10, 0x19, 0x29, 0x38, 0x3c, 0x8b, 0x8f, - 0x95, 0x4d, 0x86, 0x6b, 0x86, 0x40, 0x88, 0x4c, - 0x88, 0x63, 0x88, 0x7e, 0x89, 0x8b, 0x89, 0xd2, - 0x89, 0x00, 0x8a, 0x37, 0x8c, 0x46, 0x8c, 0x55, - 0x8c, 0x78, 0x8c, 0x9d, 0x8c, 0x64, 0x8d, 0x70, - 0x8d, 0xb3, 0x8d, 0xab, 0x8e, 0xca, 0x8e, 0x9b, - 0x8f, 0xb0, 0x8f, 0xb5, 0x8f, 0x91, 0x90, 0x49, - 0x91, 0xc6, 0x91, 0xcc, 0x91, 0xd1, 0x91, 0x77, - 0x95, 0x80, 0x95, 0x1c, 0x96, 0xb6, 0x96, 0xb9, - 0x96, 0xe8, 0x96, 0x51, 0x97, 0x5e, 0x97, 0x62, - 0x97, 0x69, 0x97, 0xcb, 0x97, 0xed, 0x97, 0xf3, - 0x97, 0x01, 0x98, 0xa8, 0x98, 0xdb, 0x98, 0xdf, - 0x98, 0x96, 0x99, 0x99, 0x99, 0xac, 0x99, 0xa8, - 0x9a, 0xd8, 0x9a, 0xdf, 0x9a, 0x25, 0x9b, 0x2f, - 0x9b, 0x32, 0x9b, 0x3c, 0x9b, 0x5a, 0x9b, 0xe5, - 0x9c, 0x75, 0x9e, 0x7f, 0x9e, 0xa5, 0x9e, 0x00, - 0x16, 0x1e, 0x28, 0x2c, 0x54, 0x58, 0x69, 0x6e, - 0x7b, 0x96, 0xa5, 0xad, 0xe8, 0xf7, 0xfb, 0x12, - 0x30, 0x00, 0x00, 0x41, 0x53, 0x44, 0x53, 0x45, - 0x53, 0x4b, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x4d, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x4f, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x51, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x53, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x55, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x59, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x5b, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x5d, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x5f, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x61, 0x30, 0x99, 0x30, 0x64, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x66, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x68, 0x30, 0x99, - 0x30, 0x6f, 0x30, 0x99, 0x30, 0x72, 0x30, 0x99, - 0x30, 0x75, 0x30, 0x99, 0x30, 0x78, 0x30, 0x99, - 0x30, 0x7b, 0x30, 0x99, 0x30, 0x46, 0x30, 0x99, - 0x30, 0x20, 0x00, 0x99, 0x30, 0x9d, 0x30, 0x99, - 0x30, 0x88, 0x30, 0x8a, 0x30, 0xab, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xad, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xb3, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x30, 0x99, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x30, 0x99, - 0x30, 0xc4, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0xc6, 0x30, 0x99, 0x30, 0x00, 0x00, 0x00, - 0x00, 0xc8, 0x30, 0x99, 0x30, 0xcf, 0x30, 0x99, - 0x30, 0xd2, 0x30, 0x99, 0x30, 0xd5, 0x30, 0x99, - 0x30, 0xd8, 0x30, 0x99, 0x30, 0xdb, 0x30, 0x99, - 0x30, 0xa6, 0x30, 0x99, 0x30, 0xef, 0x30, 0x99, - 0x30, 0xfd, 0x30, 0x99, 0x30, 0xb3, 0x30, 0xc8, - 0x30, 0x00, 0x11, 0x00, 0x01, 0xaa, 0x02, 0xac, - 0xad, 0x03, 0x04, 0x05, 0xb0, 0xb1, 0xb2, 0xb3, - 0xb4, 0xb5, 0x1a, 0x06, 0x07, 0x08, 0x21, 0x09, - 0x11, 0x61, 0x11, 0x14, 0x11, 0x4c, 0x00, 0x01, - 0xb3, 0xb4, 0xb8, 0xba, 0xbf, 0xc3, 0xc5, 0x08, - 0xc9, 0xcb, 0x09, 0x0a, 0x0c, 0x0e, 0x0f, 0x13, - 0x15, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1e, 0x22, - 0x2c, 0x33, 0x38, 0xdd, 0xde, 0x43, 0x44, 0x45, - 0x70, 0x71, 0x74, 0x7d, 0x7e, 0x80, 0x8a, 0x8d, - 0x00, 0x4e, 0x8c, 0x4e, 0x09, 0x4e, 0xdb, 0x56, - 0x0a, 0x4e, 0x2d, 0x4e, 0x0b, 0x4e, 0x32, 0x75, - 0x59, 0x4e, 0x19, 0x4e, 0x01, 0x4e, 0x29, 0x59, - 0x30, 0x57, 0xba, 0x4e, 0x28, 0x00, 0x29, 0x00, - 0x00, 0x11, 0x02, 0x11, 0x03, 0x11, 0x05, 0x11, - 0x06, 0x11, 0x07, 0x11, 0x09, 0x11, 0x0b, 0x11, - 0x0c, 0x11, 0x0e, 0x11, 0x0f, 0x11, 0x10, 0x11, - 0x11, 0x11, 0x12, 0x11, 0x28, 0x00, 0x00, 0x11, - 0x61, 0x11, 0x29, 0x00, 0x28, 0x00, 0x02, 0x11, - 0x61, 0x11, 0x29, 0x00, 0x28, 0x00, 0x05, 0x11, - 0x61, 0x11, 0x29, 0x00, 0x28, 0x00, 0x09, 0x11, - 0x61, 0x11, 0x29, 0x00, 0x28, 0x00, 0x0b, 0x11, - 0x61, 0x11, 0x29, 0x00, 0x28, 0x00, 0x0e, 0x11, - 0x61, 0x11, 0x29, 0x00, 0x28, 0x00, 0x0c, 0x11, - 0x6e, 0x11, 0x29, 0x00, 0x28, 0x00, 0x0b, 0x11, - 0x69, 0x11, 0x0c, 0x11, 0x65, 0x11, 0xab, 0x11, - 0x29, 0x00, 0x28, 0x00, 0x0b, 0x11, 0x69, 0x11, - 0x12, 0x11, 0x6e, 0x11, 0x29, 0x00, 0x28, 0x00, - 0x29, 0x00, 0x00, 0x4e, 0x8c, 0x4e, 0x09, 0x4e, - 0xdb, 0x56, 0x94, 0x4e, 0x6d, 0x51, 0x03, 0x4e, - 0x6b, 0x51, 0x5d, 0x4e, 0x41, 0x53, 0x08, 0x67, - 0x6b, 0x70, 0x34, 0x6c, 0x28, 0x67, 0xd1, 0x91, - 0x1f, 0x57, 0xe5, 0x65, 0x2a, 0x68, 0x09, 0x67, - 0x3e, 0x79, 0x0d, 0x54, 0x79, 0x72, 0xa1, 0x8c, - 0x5d, 0x79, 0xb4, 0x52, 0xe3, 0x4e, 0x7c, 0x54, - 0x66, 0x5b, 0xe3, 0x76, 0x01, 0x4f, 0xc7, 0x8c, - 0x54, 0x53, 0x6d, 0x79, 0x11, 0x4f, 0xea, 0x81, - 0xf3, 0x81, 0x4f, 0x55, 0x7c, 0x5e, 0x87, 0x65, - 0x8f, 0x7b, 0x50, 0x54, 0x45, 0x32, 0x00, 0x31, - 0x00, 0x33, 0x00, 0x30, 0x00, 0x00, 0x11, 0x00, - 0x02, 0x03, 0x05, 0x06, 0x07, 0x09, 0x0b, 0x0c, - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x00, 0x11, 0x00, - 0x61, 0x02, 0x61, 0x03, 0x61, 0x05, 0x61, 0x06, - 0x61, 0x07, 0x61, 0x09, 0x61, 0x0b, 0x61, 0x0c, - 0x61, 0x0e, 0x11, 0x61, 0x11, 0x00, 0x11, 0x0e, - 0x61, 0xb7, 0x00, 0x69, 0x0b, 0x11, 0x01, 0x63, - 0x00, 0x69, 0x0b, 0x11, 0x6e, 0x11, 0x00, 0x4e, - 0x8c, 0x4e, 0x09, 0x4e, 0xdb, 0x56, 0x94, 0x4e, - 0x6d, 0x51, 0x03, 0x4e, 0x6b, 0x51, 0x5d, 0x4e, - 0x41, 0x53, 0x08, 0x67, 0x6b, 0x70, 0x34, 0x6c, - 0x28, 0x67, 0xd1, 0x91, 0x1f, 0x57, 0xe5, 0x65, - 0x2a, 0x68, 0x09, 0x67, 0x3e, 0x79, 0x0d, 0x54, - 0x79, 0x72, 0xa1, 0x8c, 0x5d, 0x79, 0xb4, 0x52, - 0xd8, 0x79, 0x37, 0x75, 0x73, 0x59, 0x69, 0x90, - 0x2a, 0x51, 0x70, 0x53, 0xe8, 0x6c, 0x05, 0x98, - 0x11, 0x4f, 0x99, 0x51, 0x63, 0x6b, 0x0a, 0x4e, - 0x2d, 0x4e, 0x0b, 0x4e, 0xe6, 0x5d, 0xf3, 0x53, - 0x3b, 0x53, 0x97, 0x5b, 0x66, 0x5b, 0xe3, 0x76, - 0x01, 0x4f, 0xc7, 0x8c, 0x54, 0x53, 0x1c, 0x59, - 0x33, 0x00, 0x36, 0x00, 0x34, 0x00, 0x30, 0x00, - 0x35, 0x30, 0x31, 0x00, 0x08, 0x67, 0x31, 0x00, - 0x30, 0x00, 0x08, 0x67, 0x48, 0x67, 0x65, 0x72, - 0x67, 0x65, 0x56, 0x4c, 0x54, 0x44, 0xa2, 0x30, - 0x00, 0x02, 0x04, 0x06, 0x08, 0x09, 0x0b, 0x0d, - 0x0f, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, - 0x1f, 0x22, 0x24, 0x26, 0x28, 0x29, 0x2a, 0x2b, - 0x2c, 0x2d, 0x30, 0x33, 0x36, 0x39, 0x3c, 0x3d, - 0x3e, 0x3f, 0x40, 0x42, 0x44, 0x46, 0x47, 0x48, - 0x49, 0x4a, 0x4b, 0x4d, 0x4e, 0x4f, 0x50, 0xe4, - 0x4e, 0x8c, 0x54, 0xa1, 0x30, 0x01, 0x30, 0x5b, - 0x27, 0x01, 0x4a, 0x34, 0x00, 0x01, 0x52, 0x39, - 0x01, 0xa2, 0x30, 0x00, 0x5a, 0x49, 0xa4, 0x30, - 0x00, 0x27, 0x4f, 0x0c, 0xa4, 0x30, 0x00, 0x4f, - 0x1d, 0x02, 0x05, 0x4f, 0xa8, 0x30, 0x00, 0x11, - 0x07, 0x54, 0x21, 0xa8, 0x30, 0x00, 0x54, 0x03, - 0x54, 0xa4, 0x30, 0x06, 0x4f, 0x15, 0x06, 0x58, - 0x3c, 0x07, 0x00, 0x46, 0xab, 0x30, 0x00, 0x3e, - 0x18, 0x1d, 0x00, 0x42, 0x3f, 0x51, 0xac, 0x30, - 0x00, 0x41, 0x47, 0x00, 0x47, 0x32, 0xae, 0x30, - 0xac, 0x30, 0xae, 0x30, 0x00, 0x1d, 0x4e, 0xad, - 0x30, 0x00, 0x38, 0x3d, 0x4f, 0x01, 0x3e, 0x13, - 0x4f, 0xad, 0x30, 0xed, 0x30, 0xad, 0x30, 0x00, - 0x40, 0x03, 0x3c, 0x33, 0xad, 0x30, 0x00, 0x40, - 0x34, 0x4f, 0x1b, 0x3e, 0xad, 0x30, 0x00, 0x40, - 0x42, 0x16, 0x1b, 0xb0, 0x30, 0x00, 0x39, 0x30, - 0xa4, 0x30, 0x0c, 0x45, 0x3c, 0x24, 0x4f, 0x0b, - 0x47, 0x18, 0x00, 0x49, 0xaf, 0x30, 0x00, 0x3e, - 0x4d, 0x1e, 0xb1, 0x30, 0x00, 0x4b, 0x08, 0x02, - 0x3a, 0x19, 0x02, 0x4b, 0x2c, 0xa4, 0x30, 0x11, - 0x00, 0x0b, 0x47, 0xb5, 0x30, 0x00, 0x3e, 0x0c, - 0x47, 0x2b, 0xb0, 0x30, 0x07, 0x3a, 0x43, 0x00, - 0xb9, 0x30, 0x02, 0x3a, 0x08, 0x02, 0x3a, 0x0f, - 0x07, 0x43, 0x00, 0xb7, 0x30, 0x10, 0x00, 0x12, - 0x34, 0x11, 0x3c, 0x13, 0x17, 0xa4, 0x30, 0x2a, - 0x1f, 0x24, 0x2b, 0x00, 0x20, 0xbb, 0x30, 0x16, - 0x41, 0x00, 0x38, 0x0d, 0xc4, 0x30, 0x0d, 0x38, - 0x00, 0xd0, 0x30, 0x00, 0x2c, 0x1c, 0x1b, 0xa2, - 0x30, 0x32, 0x00, 0x17, 0x26, 0x49, 0xaf, 0x30, - 0x25, 0x00, 0x3c, 0xb3, 0x30, 0x21, 0x00, 0x20, - 0x38, 0xa1, 0x30, 0x34, 0x00, 0x48, 0x22, 0x28, - 0xa3, 0x30, 0x32, 0x00, 0x59, 0x25, 0xa7, 0x30, - 0x2f, 0x1c, 0x10, 0x00, 0x44, 0xd5, 0x30, 0x00, - 0x14, 0x1e, 0xaf, 0x30, 0x29, 0x00, 0x10, 0x4d, - 0x3c, 0xda, 0x30, 0xbd, 0x30, 0xb8, 0x30, 0x22, - 0x13, 0x1a, 0x20, 0x33, 0x0c, 0x22, 0x3b, 0x01, - 0x22, 0x44, 0x00, 0x21, 0x44, 0x07, 0xa4, 0x30, - 0x39, 0x00, 0x4f, 0x24, 0xc8, 0x30, 0x14, 0x23, - 0x00, 0xdb, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0x14, - 0x2a, 0x00, 0x12, 0x33, 0x22, 0x12, 0x33, 0x2a, - 0xa4, 0x30, 0x3a, 0x00, 0x0b, 0x49, 0xa4, 0x30, - 0x3a, 0x00, 0x47, 0x3a, 0x1f, 0x2b, 0x3a, 0x47, - 0x0b, 0xb7, 0x30, 0x27, 0x3c, 0x00, 0x30, 0x3c, - 0xaf, 0x30, 0x30, 0x00, 0x3e, 0x44, 0xdf, 0x30, - 0xea, 0x30, 0xd0, 0x30, 0x0f, 0x1a, 0x00, 0x2c, - 0x1b, 0xe1, 0x30, 0xac, 0x30, 0xac, 0x30, 0x35, - 0x00, 0x1c, 0x47, 0x35, 0x50, 0x1c, 0x3f, 0xa2, - 0x30, 0x42, 0x5a, 0x27, 0x42, 0x5a, 0x49, 0x44, - 0x00, 0x51, 0xc3, 0x30, 0x27, 0x00, 0x05, 0x28, - 0xea, 0x30, 0xe9, 0x30, 0xd4, 0x30, 0x17, 0x00, - 0x28, 0xd6, 0x30, 0x15, 0x26, 0x00, 0x15, 0xec, - 0x30, 0xe0, 0x30, 0xb2, 0x30, 0x3a, 0x41, 0x16, - 0x00, 0x41, 0xc3, 0x30, 0x2c, 0x00, 0x05, 0x30, - 0x00, 0xb9, 0x70, 0x31, 0x00, 0x30, 0x00, 0xb9, - 0x70, 0x32, 0x00, 0x30, 0x00, 0xb9, 0x70, 0x68, - 0x50, 0x61, 0x64, 0x61, 0x41, 0x55, 0x62, 0x61, - 0x72, 0x6f, 0x56, 0x70, 0x63, 0x64, 0x6d, 0x64, - 0x00, 0x6d, 0x00, 0xb2, 0x00, 0x49, 0x00, 0x55, - 0x00, 0x73, 0x5e, 0x10, 0x62, 0x2d, 0x66, 0x8c, - 0x54, 0x27, 0x59, 0x63, 0x6b, 0x0e, 0x66, 0xbb, - 0x6c, 0x2a, 0x68, 0x0f, 0x5f, 0x1a, 0x4f, 0x3e, - 0x79, 0x70, 0x00, 0x41, 0x6e, 0x00, 0x41, 0xbc, - 0x03, 0x41, 0x6d, 0x00, 0x41, 0x6b, 0x00, 0x41, - 0x4b, 0x00, 0x42, 0x4d, 0x00, 0x42, 0x47, 0x00, - 0x42, 0x63, 0x61, 0x6c, 0x6b, 0x63, 0x61, 0x6c, - 0x70, 0x00, 0x46, 0x6e, 0x00, 0x46, 0xbc, 0x03, - 0x46, 0xbc, 0x03, 0x67, 0x6d, 0x00, 0x67, 0x6b, - 0x00, 0x67, 0x48, 0x00, 0x7a, 0x6b, 0x48, 0x7a, - 0x4d, 0x48, 0x7a, 0x47, 0x48, 0x7a, 0x54, 0x48, - 0x7a, 0xbc, 0x03, 0x13, 0x21, 0x6d, 0x00, 0x13, - 0x21, 0x64, 0x00, 0x13, 0x21, 0x6b, 0x00, 0x13, - 0x21, 0x66, 0x00, 0x6d, 0x6e, 0x00, 0x6d, 0xbc, - 0x03, 0x6d, 0x6d, 0x00, 0x6d, 0x63, 0x00, 0x6d, - 0x6b, 0x00, 0x6d, 0x63, 0x00, 0x0a, 0x0a, 0x4f, - 0x00, 0x0a, 0x4f, 0x6d, 0x00, 0xb2, 0x00, 0x63, - 0x00, 0x08, 0x0a, 0x4f, 0x0a, 0x0a, 0x50, 0x00, - 0x0a, 0x50, 0x6d, 0x00, 0xb3, 0x00, 0x6b, 0x00, - 0x6d, 0x00, 0xb3, 0x00, 0x6d, 0x00, 0x15, 0x22, - 0x73, 0x00, 0x6d, 0x00, 0x15, 0x22, 0x73, 0x00, - 0xb2, 0x00, 0x50, 0x61, 0x6b, 0x50, 0x61, 0x4d, - 0x50, 0x61, 0x47, 0x50, 0x61, 0x72, 0x61, 0x64, - 0x72, 0x61, 0x64, 0xd1, 0x73, 0x72, 0x00, 0x61, - 0x00, 0x64, 0x00, 0x15, 0x22, 0x73, 0x00, 0xb2, - 0x00, 0x70, 0x00, 0x73, 0x6e, 0x00, 0x73, 0xbc, - 0x03, 0x73, 0x6d, 0x00, 0x73, 0x70, 0x00, 0x56, - 0x6e, 0x00, 0x56, 0xbc, 0x03, 0x56, 0x6d, 0x00, - 0x56, 0x6b, 0x00, 0x56, 0x4d, 0x00, 0x56, 0x70, - 0x00, 0x57, 0x6e, 0x00, 0x57, 0xbc, 0x03, 0x57, - 0x6d, 0x00, 0x57, 0x6b, 0x00, 0x57, 0x4d, 0x00, - 0x57, 0x6b, 0x00, 0xa9, 0x03, 0x4d, 0x00, 0xa9, - 0x03, 0x61, 0x2e, 0x6d, 0x2e, 0x42, 0x71, 0x63, - 0x63, 0x63, 0x64, 0x43, 0xd1, 0x6b, 0x67, 0x43, - 0x6f, 0x2e, 0x64, 0x42, 0x47, 0x79, 0x68, 0x61, - 0x48, 0x50, 0x69, 0x6e, 0x4b, 0x4b, 0x4b, 0x4d, - 0x6b, 0x74, 0x6c, 0x6d, 0x6c, 0x6e, 0x6c, 0x6f, - 0x67, 0x6c, 0x78, 0x6d, 0x62, 0x6d, 0x69, 0x6c, - 0x6d, 0x6f, 0x6c, 0x50, 0x48, 0x70, 0x2e, 0x6d, - 0x2e, 0x50, 0x50, 0x4d, 0x50, 0x52, 0x73, 0x72, - 0x53, 0x76, 0x57, 0x62, 0x56, 0xd1, 0x6d, 0x41, - 0xd1, 0x6d, 0x31, 0x00, 0xe5, 0x65, 0x31, 0x00, - 0x30, 0x00, 0xe5, 0x65, 0x32, 0x00, 0x30, 0x00, - 0xe5, 0x65, 0x33, 0x00, 0x30, 0x00, 0xe5, 0x65, - 0x67, 0x61, 0x6c, 0x4a, 0x04, 0x4c, 0x04, 0x43, - 0x46, 0x51, 0x26, 0x01, 0x53, 0x01, 0x27, 0xa7, - 0x37, 0xab, 0x6b, 0x02, 0x52, 0xab, 0x48, 0x8c, - 0xf4, 0x66, 0xca, 0x8e, 0xc8, 0x8c, 0xd1, 0x6e, - 0x32, 0x4e, 0xe5, 0x53, 0x9c, 0x9f, 0x9c, 0x9f, - 0x51, 0x59, 0xd1, 0x91, 0x87, 0x55, 0x48, 0x59, - 0xf6, 0x61, 0x69, 0x76, 0x85, 0x7f, 0x3f, 0x86, - 0xba, 0x87, 0xf8, 0x88, 0x8f, 0x90, 0x02, 0x6a, - 0x1b, 0x6d, 0xd9, 0x70, 0xde, 0x73, 0x3d, 0x84, - 0x6a, 0x91, 0xf1, 0x99, 0x82, 0x4e, 0x75, 0x53, - 0x04, 0x6b, 0x1b, 0x72, 0x2d, 0x86, 0x1e, 0x9e, - 0x50, 0x5d, 0xeb, 0x6f, 0xcd, 0x85, 0x64, 0x89, - 0xc9, 0x62, 0xd8, 0x81, 0x1f, 0x88, 0xca, 0x5e, - 0x17, 0x67, 0x6a, 0x6d, 0xfc, 0x72, 0xce, 0x90, - 0x86, 0x4f, 0xb7, 0x51, 0xde, 0x52, 0xc4, 0x64, - 0xd3, 0x6a, 0x10, 0x72, 0xe7, 0x76, 0x01, 0x80, - 0x06, 0x86, 0x5c, 0x86, 0xef, 0x8d, 0x32, 0x97, - 0x6f, 0x9b, 0xfa, 0x9d, 0x8c, 0x78, 0x7f, 0x79, - 0xa0, 0x7d, 0xc9, 0x83, 0x04, 0x93, 0x7f, 0x9e, - 0xd6, 0x8a, 0xdf, 0x58, 0x04, 0x5f, 0x60, 0x7c, - 0x7e, 0x80, 0x62, 0x72, 0xca, 0x78, 0xc2, 0x8c, - 0xf7, 0x96, 0xd8, 0x58, 0x62, 0x5c, 0x13, 0x6a, - 0xda, 0x6d, 0x0f, 0x6f, 0x2f, 0x7d, 0x37, 0x7e, - 0x4b, 0x96, 0xd2, 0x52, 0x8b, 0x80, 0xdc, 0x51, - 0xcc, 0x51, 0x1c, 0x7a, 0xbe, 0x7d, 0xf1, 0x83, - 0x75, 0x96, 0x80, 0x8b, 0xcf, 0x62, 0x02, 0x6a, - 0xfe, 0x8a, 0x39, 0x4e, 0xe7, 0x5b, 0x12, 0x60, - 0x87, 0x73, 0x70, 0x75, 0x17, 0x53, 0xfb, 0x78, - 0xbf, 0x4f, 0xa9, 0x5f, 0x0d, 0x4e, 0xcc, 0x6c, - 0x78, 0x65, 0x22, 0x7d, 0xc3, 0x53, 0x5e, 0x58, - 0x01, 0x77, 0x49, 0x84, 0xaa, 0x8a, 0xba, 0x6b, - 0xb0, 0x8f, 0x88, 0x6c, 0xfe, 0x62, 0xe5, 0x82, - 0xa0, 0x63, 0x65, 0x75, 0xae, 0x4e, 0x69, 0x51, - 0xc9, 0x51, 0x81, 0x68, 0xe7, 0x7c, 0x6f, 0x82, - 0xd2, 0x8a, 0xcf, 0x91, 0xf5, 0x52, 0x42, 0x54, - 0x73, 0x59, 0xec, 0x5e, 0xc5, 0x65, 0xfe, 0x6f, - 0x2a, 0x79, 0xad, 0x95, 0x6a, 0x9a, 0x97, 0x9e, - 0xce, 0x9e, 0x9b, 0x52, 0xc6, 0x66, 0x77, 0x6b, - 0x62, 0x8f, 0x74, 0x5e, 0x90, 0x61, 0x00, 0x62, - 0x9a, 0x64, 0x23, 0x6f, 0x49, 0x71, 0x89, 0x74, - 0xca, 0x79, 0xf4, 0x7d, 0x6f, 0x80, 0x26, 0x8f, - 0xee, 0x84, 0x23, 0x90, 0x4a, 0x93, 0x17, 0x52, - 0xa3, 0x52, 0xbd, 0x54, 0xc8, 0x70, 0xc2, 0x88, - 0xaa, 0x8a, 0xc9, 0x5e, 0xf5, 0x5f, 0x7b, 0x63, - 0xae, 0x6b, 0x3e, 0x7c, 0x75, 0x73, 0xe4, 0x4e, - 0xf9, 0x56, 0xe7, 0x5b, 0xba, 0x5d, 0x1c, 0x60, - 0xb2, 0x73, 0x69, 0x74, 0x9a, 0x7f, 0x46, 0x80, - 0x34, 0x92, 0xf6, 0x96, 0x48, 0x97, 0x18, 0x98, - 0x8b, 0x4f, 0xae, 0x79, 0xb4, 0x91, 0xb8, 0x96, - 0xe1, 0x60, 0x86, 0x4e, 0xda, 0x50, 0xee, 0x5b, - 0x3f, 0x5c, 0x99, 0x65, 0x02, 0x6a, 0xce, 0x71, - 0x42, 0x76, 0xfc, 0x84, 0x7c, 0x90, 0x8d, 0x9f, - 0x88, 0x66, 0x2e, 0x96, 0x89, 0x52, 0x7b, 0x67, - 0xf3, 0x67, 0x41, 0x6d, 0x9c, 0x6e, 0x09, 0x74, - 0x59, 0x75, 0x6b, 0x78, 0x10, 0x7d, 0x5e, 0x98, - 0x6d, 0x51, 0x2e, 0x62, 0x78, 0x96, 0x2b, 0x50, - 0x19, 0x5d, 0xea, 0x6d, 0x2a, 0x8f, 0x8b, 0x5f, - 0x44, 0x61, 0x17, 0x68, 0x87, 0x73, 0x86, 0x96, - 0x29, 0x52, 0x0f, 0x54, 0x65, 0x5c, 0x13, 0x66, - 0x4e, 0x67, 0xa8, 0x68, 0xe5, 0x6c, 0x06, 0x74, - 0xe2, 0x75, 0x79, 0x7f, 0xcf, 0x88, 0xe1, 0x88, - 0xcc, 0x91, 0xe2, 0x96, 0x3f, 0x53, 0xba, 0x6e, - 0x1d, 0x54, 0xd0, 0x71, 0x98, 0x74, 0xfa, 0x85, - 0xa3, 0x96, 0x57, 0x9c, 0x9f, 0x9e, 0x97, 0x67, - 0xcb, 0x6d, 0xe8, 0x81, 0xcb, 0x7a, 0x20, 0x7b, - 0x92, 0x7c, 0xc0, 0x72, 0x99, 0x70, 0x58, 0x8b, - 0xc0, 0x4e, 0x36, 0x83, 0x3a, 0x52, 0x07, 0x52, - 0xa6, 0x5e, 0xd3, 0x62, 0xd6, 0x7c, 0x85, 0x5b, - 0x1e, 0x6d, 0xb4, 0x66, 0x3b, 0x8f, 0x4c, 0x88, - 0x4d, 0x96, 0x8b, 0x89, 0xd3, 0x5e, 0x40, 0x51, - 0xc0, 0x55, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x58, - 0x00, 0x00, 0x74, 0x66, 0x00, 0x00, 0x00, 0x00, - 0xde, 0x51, 0x2a, 0x73, 0xca, 0x76, 0x3c, 0x79, - 0x5e, 0x79, 0x65, 0x79, 0x8f, 0x79, 0x56, 0x97, - 0xbe, 0x7c, 0xbd, 0x7f, 0x00, 0x00, 0x12, 0x86, - 0x00, 0x00, 0xf8, 0x8a, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x90, 0xfd, 0x90, 0xef, 0x98, 0xfc, 0x98, - 0x28, 0x99, 0xb4, 0x9d, 0xde, 0x90, 0xb7, 0x96, - 0xae, 0x4f, 0xe7, 0x50, 0x4d, 0x51, 0xc9, 0x52, - 0xe4, 0x52, 0x51, 0x53, 0x9d, 0x55, 0x06, 0x56, - 0x68, 0x56, 0x40, 0x58, 0xa8, 0x58, 0x64, 0x5c, - 0x6e, 0x5c, 0x94, 0x60, 0x68, 0x61, 0x8e, 0x61, - 0xf2, 0x61, 0x4f, 0x65, 0xe2, 0x65, 0x91, 0x66, - 0x85, 0x68, 0x77, 0x6d, 0x1a, 0x6e, 0x22, 0x6f, - 0x6e, 0x71, 0x2b, 0x72, 0x22, 0x74, 0x91, 0x78, - 0x3e, 0x79, 0x49, 0x79, 0x48, 0x79, 0x50, 0x79, - 0x56, 0x79, 0x5d, 0x79, 0x8d, 0x79, 0x8e, 0x79, - 0x40, 0x7a, 0x81, 0x7a, 0xc0, 0x7b, 0xf4, 0x7d, - 0x09, 0x7e, 0x41, 0x7e, 0x72, 0x7f, 0x05, 0x80, - 0xed, 0x81, 0x79, 0x82, 0x79, 0x82, 0x57, 0x84, - 0x10, 0x89, 0x96, 0x89, 0x01, 0x8b, 0x39, 0x8b, - 0xd3, 0x8c, 0x08, 0x8d, 0xb6, 0x8f, 0x38, 0x90, - 0xe3, 0x96, 0xff, 0x97, 0x3b, 0x98, 0x75, 0x60, - 0xee, 0x42, 0x18, 0x82, 0x02, 0x26, 0x4e, 0xb5, - 0x51, 0x68, 0x51, 0x80, 0x4f, 0x45, 0x51, 0x80, - 0x51, 0xc7, 0x52, 0xfa, 0x52, 0x9d, 0x55, 0x55, - 0x55, 0x99, 0x55, 0xe2, 0x55, 0x5a, 0x58, 0xb3, - 0x58, 0x44, 0x59, 0x54, 0x59, 0x62, 0x5a, 0x28, - 0x5b, 0xd2, 0x5e, 0xd9, 0x5e, 0x69, 0x5f, 0xad, - 0x5f, 0xd8, 0x60, 0x4e, 0x61, 0x08, 0x61, 0x8e, - 0x61, 0x60, 0x61, 0xf2, 0x61, 0x34, 0x62, 0xc4, - 0x63, 0x1c, 0x64, 0x52, 0x64, 0x56, 0x65, 0x74, - 0x66, 0x17, 0x67, 0x1b, 0x67, 0x56, 0x67, 0x79, - 0x6b, 0xba, 0x6b, 0x41, 0x6d, 0xdb, 0x6e, 0xcb, - 0x6e, 0x22, 0x6f, 0x1e, 0x70, 0x6e, 0x71, 0xa7, - 0x77, 0x35, 0x72, 0xaf, 0x72, 0x2a, 0x73, 0x71, - 0x74, 0x06, 0x75, 0x3b, 0x75, 0x1d, 0x76, 0x1f, - 0x76, 0xca, 0x76, 0xdb, 0x76, 0xf4, 0x76, 0x4a, - 0x77, 0x40, 0x77, 0xcc, 0x78, 0xb1, 0x7a, 0xc0, - 0x7b, 0x7b, 0x7c, 0x5b, 0x7d, 0xf4, 0x7d, 0x3e, - 0x7f, 0x05, 0x80, 0x52, 0x83, 0xef, 0x83, 0x79, - 0x87, 0x41, 0x89, 0x86, 0x89, 0x96, 0x89, 0xbf, - 0x8a, 0xf8, 0x8a, 0xcb, 0x8a, 0x01, 0x8b, 0xfe, - 0x8a, 0xed, 0x8a, 0x39, 0x8b, 0x8a, 0x8b, 0x08, - 0x8d, 0x38, 0x8f, 0x72, 0x90, 0x99, 0x91, 0x76, - 0x92, 0x7c, 0x96, 0xe3, 0x96, 0x56, 0x97, 0xdb, - 0x97, 0xff, 0x97, 0x0b, 0x98, 0x3b, 0x98, 0x12, - 0x9b, 0x9c, 0x9f, 0x4a, 0x28, 0x44, 0x28, 0xd5, - 0x33, 0x9d, 0x3b, 0x18, 0x40, 0x39, 0x40, 0x49, - 0x52, 0xd0, 0x5c, 0xd3, 0x7e, 0x43, 0x9f, 0x8e, - 0x9f, 0x2a, 0xa0, 0x02, 0x66, 0x66, 0x66, 0x69, - 0x66, 0x6c, 0x66, 0x66, 0x69, 0x66, 0x66, 0x6c, - 0x7f, 0x01, 0x74, 0x73, 0x00, 0x74, 0x65, 0x05, - 0x0f, 0x11, 0x0f, 0x00, 0x0f, 0x06, 0x19, 0x11, - 0x0f, 0x08, 0xd9, 0x05, 0xb4, 0x05, 0x00, 0x00, - 0x00, 0x00, 0xf2, 0x05, 0xb7, 0x05, 0xd0, 0x05, - 0x12, 0x00, 0x03, 0x04, 0x0b, 0x0c, 0x0d, 0x18, - 0x1a, 0xe9, 0x05, 0xc1, 0x05, 0xe9, 0x05, 0xc2, - 0x05, 0x49, 0xfb, 0xc1, 0x05, 0x49, 0xfb, 0xc2, - 0x05, 0xd0, 0x05, 0xb7, 0x05, 0xd0, 0x05, 0xb8, - 0x05, 0xd0, 0x05, 0xbc, 0x05, 0xd8, 0x05, 0xbc, - 0x05, 0xde, 0x05, 0xbc, 0x05, 0xe0, 0x05, 0xbc, - 0x05, 0xe3, 0x05, 0xbc, 0x05, 0xb9, 0x05, 0x2d, - 0x03, 0x2e, 0x03, 0x2f, 0x03, 0x30, 0x03, 0x31, - 0x03, 0x1c, 0x00, 0x18, 0x06, 0x22, 0x06, 0x2b, - 0x06, 0xd0, 0x05, 0xdc, 0x05, 0x71, 0x06, 0x00, - 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0d, 0x0d, 0x0d, - 0x0d, 0x0f, 0x0f, 0x0f, 0x0f, 0x09, 0x09, 0x09, - 0x09, 0x0e, 0x0e, 0x0e, 0x0e, 0x08, 0x08, 0x08, - 0x08, 0x33, 0x33, 0x33, 0x33, 0x35, 0x35, 0x35, - 0x35, 0x13, 0x13, 0x13, 0x13, 0x12, 0x12, 0x12, - 0x12, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, - 0x16, 0x1c, 0x1c, 0x1b, 0x1b, 0x1d, 0x1d, 0x17, - 0x17, 0x27, 0x27, 0x20, 0x20, 0x38, 0x38, 0x38, - 0x38, 0x3e, 0x3e, 0x3e, 0x3e, 0x42, 0x42, 0x42, - 0x42, 0x40, 0x40, 0x40, 0x40, 0x49, 0x49, 0x4a, - 0x4a, 0x4a, 0x4a, 0x4f, 0x4f, 0x50, 0x50, 0x50, - 0x50, 0x4d, 0x4d, 0x4d, 0x4d, 0x61, 0x61, 0x62, - 0x62, 0x49, 0x06, 0x64, 0x64, 0x64, 0x64, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7f, 0x7f, 0x2e, 0x82, 0x82, - 0x7c, 0x7c, 0x80, 0x80, 0x87, 0x87, 0x87, 0x87, - 0x00, 0x00, 0x26, 0x06, 0x00, 0x01, 0x00, 0x01, - 0x00, 0xaf, 0x00, 0xaf, 0x00, 0x22, 0x00, 0x22, - 0x00, 0xa1, 0x00, 0xa1, 0x00, 0xa0, 0x00, 0xa0, - 0x00, 0xa2, 0x00, 0xa2, 0x00, 0xaa, 0x00, 0xaa, - 0x00, 0xaa, 0x00, 0x23, 0x00, 0x23, 0x00, 0x23, - 0xcc, 0x06, 0x00, 0x00, 0x00, 0x00, 0x26, 0x06, - 0x00, 0x06, 0x00, 0x07, 0x00, 0x1f, 0x00, 0x23, - 0x00, 0x24, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08, - 0x02, 0x1f, 0x02, 0x23, 0x02, 0x24, 0x04, 0x06, - 0x04, 0x07, 0x04, 0x08, 0x04, 0x1f, 0x04, 0x23, - 0x04, 0x24, 0x05, 0x06, 0x05, 0x1f, 0x05, 0x23, - 0x05, 0x24, 0x06, 0x07, 0x06, 0x1f, 0x07, 0x06, - 0x07, 0x1f, 0x08, 0x06, 0x08, 0x07, 0x08, 0x1f, - 0x0d, 0x06, 0x0d, 0x07, 0x0d, 0x08, 0x0d, 0x1f, - 0x0f, 0x07, 0x0f, 0x1f, 0x10, 0x06, 0x10, 0x07, - 0x10, 0x08, 0x10, 0x1f, 0x11, 0x07, 0x11, 0x1f, - 0x12, 0x1f, 0x13, 0x06, 0x13, 0x1f, 0x14, 0x06, - 0x14, 0x1f, 0x1b, 0x06, 0x1b, 0x07, 0x1b, 0x08, - 0x1b, 0x1f, 0x1b, 0x23, 0x1b, 0x24, 0x1c, 0x07, - 0x1c, 0x1f, 0x1c, 0x23, 0x1c, 0x24, 0x1d, 0x01, - 0x1d, 0x06, 0x1d, 0x07, 0x1d, 0x08, 0x1d, 0x1e, - 0x1d, 0x1f, 0x1d, 0x23, 0x1d, 0x24, 0x1e, 0x06, - 0x1e, 0x07, 0x1e, 0x08, 0x1e, 0x1f, 0x1e, 0x23, - 0x1e, 0x24, 0x1f, 0x06, 0x1f, 0x07, 0x1f, 0x08, - 0x1f, 0x1f, 0x1f, 0x23, 0x1f, 0x24, 0x20, 0x06, - 0x20, 0x07, 0x20, 0x08, 0x20, 0x1f, 0x20, 0x23, - 0x20, 0x24, 0x21, 0x06, 0x21, 0x1f, 0x21, 0x23, - 0x21, 0x24, 0x24, 0x06, 0x24, 0x07, 0x24, 0x08, - 0x24, 0x1f, 0x24, 0x23, 0x24, 0x24, 0x0a, 0x4a, - 0x0b, 0x4a, 0x23, 0x4a, 0x20, 0x00, 0x4c, 0x06, - 0x51, 0x06, 0x51, 0x06, 0xff, 0x00, 0x1f, 0x26, - 0x06, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x1f, 0x00, - 0x20, 0x00, 0x23, 0x00, 0x24, 0x02, 0x0b, 0x02, - 0x0c, 0x02, 0x1f, 0x02, 0x20, 0x02, 0x23, 0x02, - 0x24, 0x04, 0x0b, 0x04, 0x0c, 0x04, 0x1f, 0x26, - 0x06, 0x04, 0x20, 0x04, 0x23, 0x04, 0x24, 0x05, - 0x0b, 0x05, 0x0c, 0x05, 0x1f, 0x05, 0x20, 0x05, - 0x23, 0x05, 0x24, 0x1b, 0x23, 0x1b, 0x24, 0x1c, - 0x23, 0x1c, 0x24, 0x1d, 0x01, 0x1d, 0x1e, 0x1d, - 0x1f, 0x1d, 0x23, 0x1d, 0x24, 0x1e, 0x1f, 0x1e, - 0x23, 0x1e, 0x24, 0x1f, 0x01, 0x1f, 0x1f, 0x20, - 0x0b, 0x20, 0x0c, 0x20, 0x1f, 0x20, 0x20, 0x20, - 0x23, 0x20, 0x24, 0x23, 0x4a, 0x24, 0x0b, 0x24, - 0x0c, 0x24, 0x1f, 0x24, 0x20, 0x24, 0x23, 0x24, - 0x24, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, - 0x1f, 0x00, 0x21, 0x02, 0x06, 0x02, 0x07, 0x02, - 0x08, 0x02, 0x1f, 0x02, 0x21, 0x04, 0x06, 0x04, - 0x07, 0x04, 0x08, 0x04, 0x1f, 0x04, 0x21, 0x05, - 0x1f, 0x06, 0x07, 0x06, 0x1f, 0x07, 0x06, 0x07, - 0x1f, 0x08, 0x06, 0x08, 0x1f, 0x0d, 0x06, 0x0d, - 0x07, 0x0d, 0x08, 0x0d, 0x1f, 0x0f, 0x07, 0x0f, - 0x08, 0x0f, 0x1f, 0x10, 0x06, 0x10, 0x07, 0x10, - 0x08, 0x10, 0x1f, 0x11, 0x07, 0x12, 0x1f, 0x13, - 0x06, 0x13, 0x1f, 0x14, 0x06, 0x14, 0x1f, 0x1b, - 0x06, 0x1b, 0x07, 0x1b, 0x08, 0x1b, 0x1f, 0x1c, - 0x07, 0x1c, 0x1f, 0x1d, 0x06, 0x1d, 0x07, 0x1d, - 0x08, 0x1d, 0x1e, 0x1d, 0x1f, 0x1e, 0x06, 0x1e, - 0x07, 0x1e, 0x08, 0x1e, 0x1f, 0x1e, 0x21, 0x1f, - 0x06, 0x1f, 0x07, 0x1f, 0x08, 0x1f, 0x1f, 0x20, - 0x06, 0x20, 0x07, 0x20, 0x08, 0x20, 0x1f, 0x20, - 0x21, 0x21, 0x06, 0x21, 0x1f, 0x21, 0x4a, 0x24, - 0x06, 0x24, 0x07, 0x24, 0x08, 0x24, 0x1f, 0x24, - 0x21, 0x00, 0x1f, 0x00, 0x21, 0x02, 0x1f, 0x02, - 0x21, 0x04, 0x1f, 0x04, 0x21, 0x05, 0x1f, 0x05, - 0x21, 0x0d, 0x1f, 0x0d, 0x21, 0x0e, 0x1f, 0x0e, - 0x21, 0x1d, 0x1e, 0x1d, 0x1f, 0x1e, 0x1f, 0x20, - 0x1f, 0x20, 0x21, 0x24, 0x1f, 0x24, 0x21, 0x40, - 0x06, 0x4e, 0x06, 0x51, 0x06, 0x27, 0x06, 0x10, - 0x22, 0x10, 0x23, 0x12, 0x22, 0x12, 0x23, 0x13, - 0x22, 0x13, 0x23, 0x0c, 0x22, 0x0c, 0x23, 0x0d, - 0x22, 0x0d, 0x23, 0x06, 0x22, 0x06, 0x23, 0x05, - 0x22, 0x05, 0x23, 0x07, 0x22, 0x07, 0x23, 0x0e, - 0x22, 0x0e, 0x23, 0x0f, 0x22, 0x0f, 0x23, 0x0d, - 0x05, 0x0d, 0x06, 0x0d, 0x07, 0x0d, 0x1e, 0x0d, - 0x0a, 0x0c, 0x0a, 0x0e, 0x0a, 0x0f, 0x0a, 0x10, - 0x22, 0x10, 0x23, 0x12, 0x22, 0x12, 0x23, 0x13, - 0x22, 0x13, 0x23, 0x0c, 0x22, 0x0c, 0x23, 0x0d, - 0x22, 0x0d, 0x23, 0x06, 0x22, 0x06, 0x23, 0x05, - 0x22, 0x05, 0x23, 0x07, 0x22, 0x07, 0x23, 0x0e, - 0x22, 0x0e, 0x23, 0x0f, 0x22, 0x0f, 0x23, 0x0d, - 0x05, 0x0d, 0x06, 0x0d, 0x07, 0x0d, 0x1e, 0x0d, - 0x0a, 0x0c, 0x0a, 0x0e, 0x0a, 0x0f, 0x0a, 0x0d, - 0x05, 0x0d, 0x06, 0x0d, 0x07, 0x0d, 0x1e, 0x0c, - 0x20, 0x0d, 0x20, 0x10, 0x1e, 0x0c, 0x05, 0x0c, - 0x06, 0x0c, 0x07, 0x0d, 0x05, 0x0d, 0x06, 0x0d, - 0x07, 0x10, 0x1e, 0x11, 0x1e, 0x00, 0x24, 0x00, - 0x24, 0x2a, 0x06, 0x00, 0x02, 0x1b, 0x00, 0x03, - 0x02, 0x00, 0x03, 0x02, 0x00, 0x03, 0x1b, 0x00, - 0x04, 0x1b, 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x03, - 0x00, 0x1b, 0x04, 0x02, 0x1b, 0x03, 0x02, 0x1b, - 0x03, 0x03, 0x1b, 0x20, 0x03, 0x1b, 0x1f, 0x09, - 0x03, 0x02, 0x09, 0x02, 0x03, 0x09, 0x02, 0x1f, - 0x09, 0x1b, 0x03, 0x09, 0x1b, 0x03, 0x09, 0x1b, - 0x02, 0x09, 0x1b, 0x1b, 0x09, 0x1b, 0x1b, 0x0b, - 0x03, 0x03, 0x0b, 0x03, 0x03, 0x0b, 0x1b, 0x1b, - 0x0a, 0x03, 0x1b, 0x0a, 0x03, 0x1b, 0x0a, 0x02, - 0x20, 0x0a, 0x1b, 0x04, 0x0a, 0x1b, 0x04, 0x0a, - 0x1b, 0x1b, 0x0a, 0x1b, 0x1b, 0x0c, 0x03, 0x1f, - 0x0c, 0x04, 0x1b, 0x0c, 0x04, 0x1b, 0x0d, 0x1b, - 0x03, 0x0d, 0x1b, 0x03, 0x0d, 0x1b, 0x1b, 0x0d, - 0x1b, 0x20, 0x0f, 0x02, 0x1b, 0x0f, 0x1b, 0x1b, - 0x0f, 0x1b, 0x1b, 0x0f, 0x1b, 0x1f, 0x10, 0x1b, - 0x1b, 0x10, 0x1b, 0x20, 0x10, 0x1b, 0x1f, 0x17, - 0x04, 0x1b, 0x17, 0x04, 0x1b, 0x18, 0x1b, 0x03, - 0x18, 0x1b, 0x1b, 0x1a, 0x03, 0x1b, 0x1a, 0x03, - 0x20, 0x1a, 0x03, 0x1f, 0x1a, 0x02, 0x02, 0x1a, - 0x02, 0x02, 0x1a, 0x04, 0x1b, 0x1a, 0x04, 0x1b, - 0x1a, 0x1b, 0x03, 0x1a, 0x1b, 0x03, 0x1b, 0x03, - 0x02, 0x1b, 0x03, 0x1b, 0x1b, 0x03, 0x20, 0x1b, - 0x02, 0x03, 0x1b, 0x02, 0x1b, 0x1b, 0x04, 0x02, - 0x1b, 0x04, 0x1b, 0x28, 0x06, 0x1d, 0x04, 0x06, - 0x1f, 0x1d, 0x04, 0x1f, 0x1d, 0x1d, 0x1e, 0x05, - 0x1d, 0x1e, 0x05, 0x21, 0x1e, 0x04, 0x1d, 0x1e, - 0x04, 0x1d, 0x1e, 0x04, 0x21, 0x1e, 0x1d, 0x22, - 0x1e, 0x1d, 0x21, 0x22, 0x1d, 0x1d, 0x22, 0x1d, - 0x1d, 0x00, 0x06, 0x22, 0x02, 0x04, 0x22, 0x02, - 0x04, 0x21, 0x02, 0x06, 0x22, 0x02, 0x06, 0x21, - 0x02, 0x1d, 0x22, 0x02, 0x1d, 0x21, 0x04, 0x1d, - 0x22, 0x04, 0x05, 0x21, 0x04, 0x1d, 0x21, 0x0b, - 0x06, 0x21, 0x0d, 0x05, 0x22, 0x0c, 0x05, 0x22, - 0x0e, 0x05, 0x22, 0x1c, 0x04, 0x22, 0x1c, 0x1d, - 0x22, 0x22, 0x05, 0x22, 0x22, 0x04, 0x22, 0x22, - 0x1d, 0x22, 0x1d, 0x1d, 0x22, 0x1a, 0x1d, 0x22, - 0x1e, 0x05, 0x22, 0x1a, 0x1d, 0x05, 0x1c, 0x05, - 0x1d, 0x11, 0x1d, 0x22, 0x1b, 0x1d, 0x22, 0x1e, - 0x04, 0x05, 0x1d, 0x06, 0x22, 0x1c, 0x04, 0x1d, - 0x1b, 0x1d, 0x1d, 0x1c, 0x04, 0x1d, 0x1e, 0x04, - 0x05, 0x04, 0x05, 0x22, 0x05, 0x04, 0x22, 0x1d, - 0x04, 0x22, 0x19, 0x1d, 0x22, 0x00, 0x05, 0x22, - 0x1b, 0x1d, 0x1d, 0x11, 0x04, 0x1d, 0x0d, 0x1d, - 0x1d, 0x0b, 0x06, 0x22, 0x1e, 0x04, 0x22, 0x35, - 0x06, 0x00, 0x0f, 0x9d, 0x0d, 0x0f, 0x9d, 0x27, - 0x06, 0x00, 0x1d, 0x1d, 0x20, 0x00, 0x1c, 0x01, - 0x0a, 0x1e, 0x06, 0x1e, 0x08, 0x0e, 0x1d, 0x12, - 0x1e, 0x0a, 0x0c, 0x21, 0x1d, 0x12, 0x1d, 0x23, - 0x20, 0x21, 0x0c, 0x1d, 0x1e, 0x35, 0x06, 0x00, - 0x0f, 0x14, 0x27, 0x06, 0x0e, 0x1d, 0x22, 0xff, - 0x00, 0x1d, 0x1d, 0x20, 0xff, 0x12, 0x1d, 0x23, - 0x20, 0xff, 0x21, 0x0c, 0x1d, 0x1e, 0x27, 0x06, - 0x05, 0x1d, 0xff, 0x05, 0x1d, 0x00, 0x1d, 0x20, - 0x27, 0x06, 0x0a, 0xa5, 0x00, 0x1d, 0x2c, 0x00, - 0x01, 0x30, 0x02, 0x30, 0x3a, 0x00, 0x3b, 0x00, - 0x21, 0x00, 0x3f, 0x00, 0x16, 0x30, 0x17, 0x30, - 0x26, 0x20, 0x13, 0x20, 0x12, 0x01, 0x00, 0x5f, - 0x5f, 0x28, 0x29, 0x7b, 0x7d, 0x08, 0x30, 0x0c, - 0x0d, 0x08, 0x09, 0x02, 0x03, 0x00, 0x01, 0x04, - 0x05, 0x06, 0x07, 0x5b, 0x00, 0x5d, 0x00, 0x3e, - 0x20, 0x3e, 0x20, 0x3e, 0x20, 0x3e, 0x20, 0x5f, - 0x00, 0x5f, 0x00, 0x5f, 0x00, 0x2c, 0x00, 0x01, - 0x30, 0x2e, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x3a, - 0x00, 0x3f, 0x00, 0x21, 0x00, 0x14, 0x20, 0x28, - 0x00, 0x29, 0x00, 0x7b, 0x00, 0x7d, 0x00, 0x14, - 0x30, 0x15, 0x30, 0x23, 0x26, 0x2a, 0x2b, 0x2d, - 0x3c, 0x3e, 0x3d, 0x00, 0x5c, 0x24, 0x25, 0x40, - 0x40, 0x06, 0xff, 0x0b, 0x00, 0x0b, 0xff, 0x0c, - 0x20, 0x00, 0x4d, 0x06, 0x40, 0x06, 0xff, 0x0e, - 0x00, 0x0e, 0xff, 0x0f, 0x00, 0x0f, 0xff, 0x10, - 0x00, 0x10, 0xff, 0x11, 0x00, 0x11, 0xff, 0x12, - 0x00, 0x12, 0x21, 0x06, 0x00, 0x01, 0x01, 0x02, - 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x05, - 0x05, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, - 0x08, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0f, - 0x0f, 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, 0x12, - 0x12, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, - 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, - 0x16, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, - 0x18, 0x19, 0x19, 0x19, 0x19, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22, - 0x22, 0x23, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, - 0x24, 0x25, 0x25, 0x25, 0x25, 0x26, 0x26, 0x26, - 0x26, 0x27, 0x27, 0x28, 0x28, 0x29, 0x29, 0x29, - 0x29, 0x22, 0x06, 0x22, 0x00, 0x22, 0x00, 0x22, - 0x01, 0x22, 0x01, 0x22, 0x03, 0x22, 0x03, 0x22, - 0x05, 0x22, 0x05, 0x21, 0x00, 0x85, 0x29, 0x01, - 0x30, 0x01, 0x0b, 0x0c, 0x00, 0xfa, 0xf1, 0xa0, - 0xa2, 0xa4, 0xa6, 0xa8, 0xe2, 0xe4, 0xe6, 0xc2, - 0xfb, 0xa1, 0xa3, 0xa5, 0xa7, 0xa9, 0xaa, 0xac, - 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, - 0xbe, 0xc0, 0xc3, 0xc5, 0xc7, 0xc9, 0xca, 0xcb, - 0xcc, 0xcd, 0xce, 0xd1, 0xd4, 0xd7, 0xda, 0xdd, - 0xde, 0xdf, 0xe0, 0xe1, 0xe3, 0xe5, 0xe7, 0xe8, - 0xe9, 0xea, 0xeb, 0xec, 0xee, 0xf2, 0x98, 0x99, - 0x31, 0x31, 0x4f, 0x31, 0x55, 0x31, 0x5b, 0x31, - 0x61, 0x31, 0xa2, 0x00, 0xa3, 0x00, 0xac, 0x00, - 0xaf, 0x00, 0xa6, 0x00, 0xa5, 0x00, 0xa9, 0x20, - 0x00, 0x00, 0x02, 0x25, 0x90, 0x21, 0x91, 0x21, - 0x92, 0x21, 0x93, 0x21, 0xa0, 0x25, 0xcb, 0x25, - 0xd0, 0x02, 0xd1, 0x02, 0xe6, 0x00, 0x99, 0x02, - 0x53, 0x02, 0x00, 0x00, 0xa3, 0x02, 0x66, 0xab, - 0xa5, 0x02, 0xa4, 0x02, 0x56, 0x02, 0x57, 0x02, - 0x91, 0x1d, 0x58, 0x02, 0x5e, 0x02, 0xa9, 0x02, - 0x64, 0x02, 0x62, 0x02, 0x60, 0x02, 0x9b, 0x02, - 0x27, 0x01, 0x9c, 0x02, 0x67, 0x02, 0x84, 0x02, - 0xaa, 0x02, 0xab, 0x02, 0x6c, 0x02, 0x04, 0xdf, - 0x8e, 0xa7, 0x6e, 0x02, 0x05, 0xdf, 0x8e, 0x02, - 0x06, 0xdf, 0xf8, 0x00, 0x76, 0x02, 0x77, 0x02, - 0x71, 0x00, 0x7a, 0x02, 0x08, 0xdf, 0x7d, 0x02, - 0x7e, 0x02, 0x80, 0x02, 0xa8, 0x02, 0xa6, 0x02, - 0x67, 0xab, 0xa7, 0x02, 0x88, 0x02, 0x71, 0x2c, - 0x00, 0x00, 0x8f, 0x02, 0xa1, 0x02, 0xa2, 0x02, - 0x98, 0x02, 0xc0, 0x01, 0xc1, 0x01, 0xc2, 0x01, - 0x0a, 0xdf, 0x1e, 0xdf, 0x41, 0x04, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x14, 0x99, 0x10, 0xba, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x9b, 0x10, 0xba, 0x10, - 0x05, 0x05, 0xa5, 0x10, 0xba, 0x10, 0x05, 0x31, - 0x11, 0x27, 0x11, 0x32, 0x11, 0x27, 0x11, 0x55, - 0x47, 0x13, 0x3e, 0x13, 0x47, 0x13, 0x57, 0x13, - 0x55, 0xb9, 0x14, 0xba, 0x14, 0xb9, 0x14, 0xb0, - 0x14, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x14, 0xbd, - 0x14, 0x55, 0x50, 0xb8, 0x15, 0xaf, 0x15, 0xb9, - 0x15, 0xaf, 0x15, 0x55, 0x35, 0x19, 0x30, 0x19, - 0x05, 0x57, 0xd1, 0x65, 0xd1, 0x58, 0xd1, 0x65, - 0xd1, 0x5f, 0xd1, 0x6e, 0xd1, 0x5f, 0xd1, 0x6f, - 0xd1, 0x5f, 0xd1, 0x70, 0xd1, 0x5f, 0xd1, 0x71, - 0xd1, 0x5f, 0xd1, 0x72, 0xd1, 0x55, 0x55, 0x55, - 0x05, 0xb9, 0xd1, 0x65, 0xd1, 0xba, 0xd1, 0x65, - 0xd1, 0xbb, 0xd1, 0x6e, 0xd1, 0xbc, 0xd1, 0x6e, - 0xd1, 0xbb, 0xd1, 0x6f, 0xd1, 0xbc, 0xd1, 0x6f, - 0xd1, 0x55, 0x55, 0x55, 0x41, 0x00, 0x61, 0x00, - 0x41, 0x00, 0x61, 0x00, 0x69, 0x00, 0x41, 0x00, - 0x61, 0x00, 0x41, 0x00, 0x43, 0x44, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x4a, 0x4b, 0x00, 0x00, 0x4e, - 0x4f, 0x50, 0x51, 0x00, 0x53, 0x54, 0x55, 0x56, - 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63, 0x64, - 0x00, 0x66, 0x68, 0x00, 0x70, 0x00, 0x41, 0x00, - 0x61, 0x00, 0x41, 0x42, 0x00, 0x44, 0x45, 0x46, - 0x47, 0x4a, 0x00, 0x53, 0x00, 0x61, 0x00, 0x41, - 0x42, 0x00, 0x44, 0x45, 0x46, 0x47, 0x00, 0x49, - 0x4a, 0x4b, 0x4c, 0x4d, 0x00, 0x4f, 0x53, 0x00, - 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41, 0x00, - 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41, 0x00, - 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41, 0x00, - 0x61, 0x00, 0x31, 0x01, 0x37, 0x02, 0x91, 0x03, - 0xa3, 0x03, 0xb1, 0x03, 0xd1, 0x03, 0x24, 0x00, - 0x1f, 0x04, 0x20, 0x05, 0x91, 0x03, 0xa3, 0x03, - 0xb1, 0x03, 0xd1, 0x03, 0x24, 0x00, 0x1f, 0x04, - 0x20, 0x05, 0x91, 0x03, 0xa3, 0x03, 0xb1, 0x03, - 0xd1, 0x03, 0x24, 0x00, 0x1f, 0x04, 0x20, 0x05, - 0x91, 0x03, 0xa3, 0x03, 0xb1, 0x03, 0xd1, 0x03, - 0x24, 0x00, 0x1f, 0x04, 0x20, 0x05, 0x91, 0x03, - 0xa3, 0x03, 0xb1, 0x03, 0xd1, 0x03, 0x24, 0x00, - 0x1f, 0x04, 0x20, 0x05, 0x0b, 0x0c, 0x30, 0x00, - 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, - 0x30, 0x04, 0x3a, 0x04, 0x3e, 0x04, 0x4b, 0x04, - 0x4d, 0x04, 0x4e, 0x04, 0x89, 0xa6, 0x30, 0x04, - 0xa9, 0x26, 0x28, 0xb9, 0x7f, 0x9f, 0x00, 0x01, - 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0a, - 0x0b, 0x0e, 0x0f, 0x11, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x18, 0x1a, 0x1b, 0x61, 0x26, 0x25, 0x2f, - 0x7b, 0x51, 0xa6, 0xb1, 0x04, 0x27, 0x06, 0x00, - 0x01, 0x05, 0x08, 0x2a, 0x06, 0x1e, 0x08, 0x03, - 0x0d, 0x20, 0x19, 0x1a, 0x1b, 0x1c, 0x09, 0x0f, - 0x17, 0x0b, 0x18, 0x07, 0x0a, 0x00, 0x01, 0x04, - 0x06, 0x0c, 0x0e, 0x10, 0x44, 0x90, 0x77, 0x45, - 0x28, 0x06, 0x2c, 0x06, 0x00, 0x00, 0x47, 0x06, - 0x33, 0x06, 0x17, 0x10, 0x11, 0x12, 0x13, 0x00, - 0x06, 0x0e, 0x02, 0x0f, 0x34, 0x06, 0x2a, 0x06, - 0x2b, 0x06, 0x2e, 0x06, 0x00, 0x00, 0x36, 0x06, - 0x00, 0x00, 0x3a, 0x06, 0x2d, 0x06, 0x00, 0x00, - 0x4a, 0x06, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, - 0x46, 0x06, 0x33, 0x06, 0x39, 0x06, 0x00, 0x00, - 0x35, 0x06, 0x42, 0x06, 0x00, 0x00, 0x34, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x06, 0x00, 0x00, - 0x36, 0x06, 0x00, 0x00, 0x3a, 0x06, 0x00, 0x00, - 0xba, 0x06, 0x00, 0x00, 0x6f, 0x06, 0x00, 0x00, - 0x28, 0x06, 0x2c, 0x06, 0x00, 0x00, 0x47, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x2d, 0x06, 0x37, 0x06, - 0x4a, 0x06, 0x43, 0x06, 0x00, 0x00, 0x45, 0x06, - 0x46, 0x06, 0x33, 0x06, 0x39, 0x06, 0x41, 0x06, - 0x35, 0x06, 0x42, 0x06, 0x00, 0x00, 0x34, 0x06, - 0x2a, 0x06, 0x2b, 0x06, 0x2e, 0x06, 0x00, 0x00, - 0x36, 0x06, 0x38, 0x06, 0x3a, 0x06, 0x6e, 0x06, - 0x00, 0x00, 0xa1, 0x06, 0x27, 0x06, 0x00, 0x01, - 0x05, 0x08, 0x20, 0x21, 0x0b, 0x06, 0x10, 0x23, - 0x2a, 0x06, 0x1a, 0x1b, 0x1c, 0x09, 0x0f, 0x17, - 0x0b, 0x18, 0x07, 0x0a, 0x00, 0x01, 0x04, 0x06, - 0x0c, 0x0e, 0x10, 0x28, 0x06, 0x2c, 0x06, 0x2f, - 0x06, 0x00, 0x00, 0x48, 0x06, 0x32, 0x06, 0x2d, - 0x06, 0x37, 0x06, 0x4a, 0x06, 0x2a, 0x06, 0x1a, - 0x1b, 0x1c, 0x09, 0x0f, 0x17, 0x0b, 0x18, 0x07, - 0x0a, 0x00, 0x01, 0x04, 0x06, 0x0c, 0x0e, 0x10, - 0x30, 0x2e, 0x30, 0x00, 0x2c, 0x00, 0x28, 0x00, - 0x41, 0x00, 0x29, 0x00, 0x14, 0x30, 0x53, 0x00, - 0x15, 0x30, 0x43, 0x52, 0x43, 0x44, 0x57, 0x5a, - 0x41, 0x00, 0x48, 0x56, 0x4d, 0x56, 0x53, 0x44, - 0x53, 0x53, 0x50, 0x50, 0x56, 0x57, 0x43, 0x4d, - 0x43, 0x4d, 0x44, 0x4d, 0x52, 0x44, 0x4a, 0x4b, - 0x30, 0x30, 0x00, 0x68, 0x68, 0x4b, 0x62, 0x57, - 0x5b, 0xcc, 0x53, 0xc7, 0x30, 0x8c, 0x4e, 0x1a, - 0x59, 0xe3, 0x89, 0x29, 0x59, 0xa4, 0x4e, 0x20, - 0x66, 0x21, 0x71, 0x99, 0x65, 0x4d, 0x52, 0x8c, - 0x5f, 0x8d, 0x51, 0xb0, 0x65, 0x1d, 0x52, 0x42, - 0x7d, 0x1f, 0x75, 0xa9, 0x8c, 0xf0, 0x58, 0x39, - 0x54, 0x14, 0x6f, 0x95, 0x62, 0x55, 0x63, 0x00, - 0x4e, 0x09, 0x4e, 0x4a, 0x90, 0xe6, 0x5d, 0x2d, - 0x4e, 0xf3, 0x53, 0x07, 0x63, 0x70, 0x8d, 0x53, - 0x62, 0x81, 0x79, 0x7a, 0x7a, 0x08, 0x54, 0x80, - 0x6e, 0x09, 0x67, 0x08, 0x67, 0x33, 0x75, 0x72, - 0x52, 0xb6, 0x55, 0x4d, 0x91, 0x14, 0x30, 0x15, - 0x30, 0x2c, 0x67, 0x09, 0x4e, 0x8c, 0x4e, 0x89, - 0x5b, 0xb9, 0x70, 0x53, 0x62, 0xd7, 0x76, 0xdd, - 0x52, 0x57, 0x65, 0x97, 0x5f, 0xef, 0x53, 0x30, - 0x00, 0x38, 0x4e, 0x05, 0x00, 0x09, 0x22, 0x01, - 0x60, 0x4f, 0xae, 0x4f, 0xbb, 0x4f, 0x02, 0x50, - 0x7a, 0x50, 0x99, 0x50, 0xe7, 0x50, 0xcf, 0x50, - 0x9e, 0x34, 0x3a, 0x06, 0x4d, 0x51, 0x54, 0x51, - 0x64, 0x51, 0x77, 0x51, 0x1c, 0x05, 0xb9, 0x34, - 0x67, 0x51, 0x8d, 0x51, 0x4b, 0x05, 0x97, 0x51, - 0xa4, 0x51, 0xcc, 0x4e, 0xac, 0x51, 0xb5, 0x51, - 0xdf, 0x91, 0xf5, 0x51, 0x03, 0x52, 0xdf, 0x34, - 0x3b, 0x52, 0x46, 0x52, 0x72, 0x52, 0x77, 0x52, - 0x15, 0x35, 0x02, 0x00, 0x20, 0x80, 0x80, 0x00, - 0x08, 0x00, 0x00, 0xc7, 0x52, 0x00, 0x02, 0x1d, - 0x33, 0x3e, 0x3f, 0x50, 0x82, 0x8a, 0x93, 0xac, - 0xb6, 0xb8, 0xb8, 0xb8, 0x2c, 0x0a, 0x70, 0x70, - 0xca, 0x53, 0xdf, 0x53, 0x63, 0x0b, 0xeb, 0x53, - 0xf1, 0x53, 0x06, 0x54, 0x9e, 0x54, 0x38, 0x54, - 0x48, 0x54, 0x68, 0x54, 0xa2, 0x54, 0xf6, 0x54, - 0x10, 0x55, 0x53, 0x55, 0x63, 0x55, 0x84, 0x55, - 0x84, 0x55, 0x99, 0x55, 0xab, 0x55, 0xb3, 0x55, - 0xc2, 0x55, 0x16, 0x57, 0x06, 0x56, 0x17, 0x57, - 0x51, 0x56, 0x74, 0x56, 0x07, 0x52, 0xee, 0x58, - 0xce, 0x57, 0xf4, 0x57, 0x0d, 0x58, 0x8b, 0x57, - 0x32, 0x58, 0x31, 0x58, 0xac, 0x58, 0xe4, 0x14, - 0xf2, 0x58, 0xf7, 0x58, 0x06, 0x59, 0x1a, 0x59, - 0x22, 0x59, 0x62, 0x59, 0xa8, 0x16, 0xea, 0x16, - 0xec, 0x59, 0x1b, 0x5a, 0x27, 0x5a, 0xd8, 0x59, - 0x66, 0x5a, 0xee, 0x36, 0xfc, 0x36, 0x08, 0x5b, - 0x3e, 0x5b, 0x3e, 0x5b, 0xc8, 0x19, 0xc3, 0x5b, - 0xd8, 0x5b, 0xe7, 0x5b, 0xf3, 0x5b, 0x18, 0x1b, - 0xff, 0x5b, 0x06, 0x5c, 0x53, 0x5f, 0x22, 0x5c, - 0x81, 0x37, 0x60, 0x5c, 0x6e, 0x5c, 0xc0, 0x5c, - 0x8d, 0x5c, 0xe4, 0x1d, 0x43, 0x5d, 0xe6, 0x1d, - 0x6e, 0x5d, 0x6b, 0x5d, 0x7c, 0x5d, 0xe1, 0x5d, - 0xe2, 0x5d, 0x2f, 0x38, 0xfd, 0x5d, 0x28, 0x5e, - 0x3d, 0x5e, 0x69, 0x5e, 0x62, 0x38, 0x83, 0x21, - 0x7c, 0x38, 0xb0, 0x5e, 0xb3, 0x5e, 0xb6, 0x5e, - 0xca, 0x5e, 0x92, 0xa3, 0xfe, 0x5e, 0x31, 0x23, - 0x31, 0x23, 0x01, 0x82, 0x22, 0x5f, 0x22, 0x5f, - 0xc7, 0x38, 0xb8, 0x32, 0xda, 0x61, 0x62, 0x5f, - 0x6b, 0x5f, 0xe3, 0x38, 0x9a, 0x5f, 0xcd, 0x5f, - 0xd7, 0x5f, 0xf9, 0x5f, 0x81, 0x60, 0x3a, 0x39, - 0x1c, 0x39, 0x94, 0x60, 0xd4, 0x26, 0xc7, 0x60, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x0a, 0x00, 0x00, 0x02, 0x08, - 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, 0x80, 0x28, - 0x80, 0x02, 0x00, 0x00, 0x02, 0x48, 0x61, 0x00, - 0x04, 0x06, 0x04, 0x32, 0x46, 0x6a, 0x5c, 0x67, - 0x96, 0xaa, 0xae, 0xc8, 0xd3, 0x5d, 0x62, 0x00, - 0x54, 0x77, 0xf3, 0x0c, 0x2b, 0x3d, 0x63, 0xfc, - 0x62, 0x68, 0x63, 0x83, 0x63, 0xe4, 0x63, 0xf1, - 0x2b, 0x22, 0x64, 0xc5, 0x63, 0xa9, 0x63, 0x2e, - 0x3a, 0x69, 0x64, 0x7e, 0x64, 0x9d, 0x64, 0x77, - 0x64, 0x6c, 0x3a, 0x4f, 0x65, 0x6c, 0x65, 0x0a, - 0x30, 0xe3, 0x65, 0xf8, 0x66, 0x49, 0x66, 0x19, - 0x3b, 0x91, 0x66, 0x08, 0x3b, 0xe4, 0x3a, 0x92, - 0x51, 0x95, 0x51, 0x00, 0x67, 0x9c, 0x66, 0xad, - 0x80, 0xd9, 0x43, 0x17, 0x67, 0x1b, 0x67, 0x21, - 0x67, 0x5e, 0x67, 0x53, 0x67, 0xc3, 0x33, 0x49, - 0x3b, 0xfa, 0x67, 0x85, 0x67, 0x52, 0x68, 0x85, - 0x68, 0x6d, 0x34, 0x8e, 0x68, 0x1f, 0x68, 0x14, - 0x69, 0x9d, 0x3b, 0x42, 0x69, 0xa3, 0x69, 0xea, - 0x69, 0xa8, 0x6a, 0xa3, 0x36, 0xdb, 0x6a, 0x18, - 0x3c, 0x21, 0x6b, 0xa7, 0x38, 0x54, 0x6b, 0x4e, - 0x3c, 0x72, 0x6b, 0x9f, 0x6b, 0xba, 0x6b, 0xbb, - 0x6b, 0x8d, 0x3a, 0x0b, 0x1d, 0xfa, 0x3a, 0x4e, - 0x6c, 0xbc, 0x3c, 0xbf, 0x6c, 0xcd, 0x6c, 0x67, - 0x6c, 0x16, 0x6d, 0x3e, 0x6d, 0x77, 0x6d, 0x41, - 0x6d, 0x69, 0x6d, 0x78, 0x6d, 0x85, 0x6d, 0x1e, - 0x3d, 0x34, 0x6d, 0x2f, 0x6e, 0x6e, 0x6e, 0x33, - 0x3d, 0xcb, 0x6e, 0xc7, 0x6e, 0xd1, 0x3e, 0xf9, - 0x6d, 0x6e, 0x6f, 0x5e, 0x3f, 0x8e, 0x3f, 0xc6, - 0x6f, 0x39, 0x70, 0x1e, 0x70, 0x1b, 0x70, 0x96, - 0x3d, 0x4a, 0x70, 0x7d, 0x70, 0x77, 0x70, 0xad, - 0x70, 0x25, 0x05, 0x45, 0x71, 0x63, 0x42, 0x9c, - 0x71, 0xab, 0x43, 0x28, 0x72, 0x35, 0x72, 0x50, - 0x72, 0x08, 0x46, 0x80, 0x72, 0x95, 0x72, 0x35, - 0x47, 0x02, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x02, 0x02, - 0x80, 0x8a, 0x00, 0x00, 0x20, 0x00, 0x08, 0x0a, - 0x00, 0x80, 0x88, 0x80, 0x20, 0x14, 0x48, 0x7a, - 0x73, 0x8b, 0x73, 0xac, 0x3e, 0xa5, 0x73, 0xb8, - 0x3e, 0xb8, 0x3e, 0x47, 0x74, 0x5c, 0x74, 0x71, - 0x74, 0x85, 0x74, 0xca, 0x74, 0x1b, 0x3f, 0x24, - 0x75, 0x36, 0x4c, 0x3e, 0x75, 0x92, 0x4c, 0x70, - 0x75, 0x9f, 0x21, 0x10, 0x76, 0xa1, 0x4f, 0xb8, - 0x4f, 0x44, 0x50, 0xfc, 0x3f, 0x08, 0x40, 0xf4, - 0x76, 0xf3, 0x50, 0xf2, 0x50, 0x19, 0x51, 0x33, - 0x51, 0x1e, 0x77, 0x1f, 0x77, 0x1f, 0x77, 0x4a, - 0x77, 0x39, 0x40, 0x8b, 0x77, 0x46, 0x40, 0x96, - 0x40, 0x1d, 0x54, 0x4e, 0x78, 0x8c, 0x78, 0xcc, - 0x78, 0xe3, 0x40, 0x26, 0x56, 0x56, 0x79, 0x9a, - 0x56, 0xc5, 0x56, 0x8f, 0x79, 0xeb, 0x79, 0x2f, - 0x41, 0x40, 0x7a, 0x4a, 0x7a, 0x4f, 0x7a, 0x7c, - 0x59, 0xa7, 0x5a, 0xa7, 0x5a, 0xee, 0x7a, 0x02, - 0x42, 0xab, 0x5b, 0xc6, 0x7b, 0xc9, 0x7b, 0x27, - 0x42, 0x80, 0x5c, 0xd2, 0x7c, 0xa0, 0x42, 0xe8, - 0x7c, 0xe3, 0x7c, 0x00, 0x7d, 0x86, 0x5f, 0x63, - 0x7d, 0x01, 0x43, 0xc7, 0x7d, 0x02, 0x7e, 0x45, - 0x7e, 0x34, 0x43, 0x28, 0x62, 0x47, 0x62, 0x59, - 0x43, 0xd9, 0x62, 0x7a, 0x7f, 0x3e, 0x63, 0x95, - 0x7f, 0xfa, 0x7f, 0x05, 0x80, 0xda, 0x64, 0x23, - 0x65, 0x60, 0x80, 0xa8, 0x65, 0x70, 0x80, 0x5f, - 0x33, 0xd5, 0x43, 0xb2, 0x80, 0x03, 0x81, 0x0b, - 0x44, 0x3e, 0x81, 0xb5, 0x5a, 0xa7, 0x67, 0xb5, - 0x67, 0x93, 0x33, 0x9c, 0x33, 0x01, 0x82, 0x04, - 0x82, 0x9e, 0x8f, 0x6b, 0x44, 0x91, 0x82, 0x8b, - 0x82, 0x9d, 0x82, 0xb3, 0x52, 0xb1, 0x82, 0xb3, - 0x82, 0xbd, 0x82, 0xe6, 0x82, 0x3c, 0x6b, 0xe5, - 0x82, 0x1d, 0x83, 0x63, 0x83, 0xad, 0x83, 0x23, - 0x83, 0xbd, 0x83, 0xe7, 0x83, 0x57, 0x84, 0x53, - 0x83, 0xca, 0x83, 0xcc, 0x83, 0xdc, 0x83, 0x36, - 0x6c, 0x6b, 0x6d, 0x02, 0x00, 0x00, 0x20, 0x22, - 0x2a, 0xa0, 0x0a, 0x00, 0x20, 0x80, 0x28, 0x00, - 0xa8, 0x20, 0x20, 0x00, 0x02, 0x80, 0x22, 0x02, - 0x8a, 0x08, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x28, 0xd5, 0x6c, 0x2b, 0x45, 0xf1, - 0x84, 0xf3, 0x84, 0x16, 0x85, 0xca, 0x73, 0x64, - 0x85, 0x2c, 0x6f, 0x5d, 0x45, 0x61, 0x45, 0xb1, - 0x6f, 0xd2, 0x70, 0x6b, 0x45, 0x50, 0x86, 0x5c, - 0x86, 0x67, 0x86, 0x69, 0x86, 0xa9, 0x86, 0x88, - 0x86, 0x0e, 0x87, 0xe2, 0x86, 0x79, 0x87, 0x28, - 0x87, 0x6b, 0x87, 0x86, 0x87, 0xd7, 0x45, 0xe1, - 0x87, 0x01, 0x88, 0xf9, 0x45, 0x60, 0x88, 0x63, - 0x88, 0x67, 0x76, 0xd7, 0x88, 0xde, 0x88, 0x35, - 0x46, 0xfa, 0x88, 0xbb, 0x34, 0xae, 0x78, 0x66, - 0x79, 0xbe, 0x46, 0xc7, 0x46, 0xa0, 0x8a, 0xed, - 0x8a, 0x8a, 0x8b, 0x55, 0x8c, 0xa8, 0x7c, 0xab, - 0x8c, 0xc1, 0x8c, 0x1b, 0x8d, 0x77, 0x8d, 0x2f, - 0x7f, 0x04, 0x08, 0xcb, 0x8d, 0xbc, 0x8d, 0xf0, - 0x8d, 0xde, 0x08, 0xd4, 0x8e, 0x38, 0x8f, 0xd2, - 0x85, 0xed, 0x85, 0x94, 0x90, 0xf1, 0x90, 0x11, - 0x91, 0x2e, 0x87, 0x1b, 0x91, 0x38, 0x92, 0xd7, - 0x92, 0xd8, 0x92, 0x7c, 0x92, 0xf9, 0x93, 0x15, - 0x94, 0xfa, 0x8b, 0x8b, 0x95, 0x95, 0x49, 0xb7, - 0x95, 0x77, 0x8d, 0xe6, 0x49, 0xc3, 0x96, 0xb2, - 0x5d, 0x23, 0x97, 0x45, 0x91, 0x1a, 0x92, 0x6e, - 0x4a, 0x76, 0x4a, 0xe0, 0x97, 0x0a, 0x94, 0xb2, - 0x4a, 0x96, 0x94, 0x0b, 0x98, 0x0b, 0x98, 0x29, - 0x98, 0xb6, 0x95, 0xe2, 0x98, 0x33, 0x4b, 0x29, - 0x99, 0xa7, 0x99, 0xc2, 0x99, 0xfe, 0x99, 0xce, - 0x4b, 0x30, 0x9b, 0x12, 0x9b, 0x40, 0x9c, 0xfd, - 0x9c, 0xce, 0x4c, 0xed, 0x4c, 0x67, 0x9d, 0xce, - 0xa0, 0xf8, 0x4c, 0x05, 0xa1, 0x0e, 0xa2, 0x91, - 0xa2, 0xbb, 0x9e, 0x56, 0x4d, 0xf9, 0x9e, 0xfe, - 0x9e, 0x05, 0x9f, 0x0f, 0x9f, 0x16, 0x9f, 0x3b, - 0x9f, 0x00, 0xa6, 0x02, 0x88, 0xa0, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x28, 0x00, 0x08, 0xa0, - 0x80, 0xa0, 0x80, 0x00, 0x80, 0x80, 0x00, 0x0a, - 0x88, 0x80, 0x00, 0x80, 0x00, 0x20, 0x2a, 0x00, - 0x80, -}; - -static const uint16_t unicode_comp_table[945] = { - 0x4a01, 0x49c0, 0x4a02, 0x0280, 0x0281, 0x0282, 0x0283, 0x02c0, - 0x02c2, 0x0a00, 0x0284, 0x2442, 0x0285, 0x07c0, 0x0980, 0x0982, - 0x2440, 0x2280, 0x02c4, 0x2282, 0x2284, 0x2286, 0x02c6, 0x02c8, - 0x02ca, 0x02cc, 0x0287, 0x228a, 0x02ce, 0x228c, 0x2290, 0x2292, - 0x228e, 0x0288, 0x0289, 0x028a, 0x2482, 0x0300, 0x0302, 0x0304, - 0x028b, 0x2480, 0x0308, 0x0984, 0x0986, 0x2458, 0x0a02, 0x0306, - 0x2298, 0x229a, 0x229e, 0x0900, 0x030a, 0x22a0, 0x030c, 0x030e, - 0x0840, 0x0310, 0x0312, 0x22a2, 0x22a6, 0x09c0, 0x22a4, 0x22a8, - 0x22aa, 0x028c, 0x028d, 0x028e, 0x0340, 0x0342, 0x0344, 0x0380, - 0x028f, 0x248e, 0x07c2, 0x0988, 0x098a, 0x2490, 0x0346, 0x22ac, - 0x0400, 0x22b0, 0x0842, 0x22b2, 0x0402, 0x22b4, 0x0440, 0x0444, - 0x22b6, 0x0442, 0x22c2, 0x22c0, 0x22c4, 0x22c6, 0x22c8, 0x0940, - 0x04c0, 0x0291, 0x22ca, 0x04c4, 0x22cc, 0x04c2, 0x22d0, 0x22ce, - 0x0292, 0x0293, 0x0294, 0x0295, 0x0540, 0x0542, 0x0a08, 0x0296, - 0x2494, 0x0544, 0x07c4, 0x098c, 0x098e, 0x06c0, 0x2492, 0x0844, - 0x2308, 0x230a, 0x0580, 0x230c, 0x0584, 0x0990, 0x0992, 0x230e, - 0x0582, 0x2312, 0x0586, 0x0588, 0x2314, 0x058c, 0x2316, 0x0998, - 0x058a, 0x231e, 0x0590, 0x2320, 0x099a, 0x058e, 0x2324, 0x2322, - 0x0299, 0x029a, 0x029b, 0x05c0, 0x05c2, 0x05c4, 0x029c, 0x24ac, - 0x05c6, 0x05c8, 0x07c6, 0x0994, 0x0996, 0x0700, 0x24aa, 0x2326, - 0x05ca, 0x232a, 0x2328, 0x2340, 0x2342, 0x2344, 0x2346, 0x05cc, - 0x234a, 0x2348, 0x234c, 0x234e, 0x2350, 0x24b8, 0x029d, 0x05ce, - 0x24be, 0x0a0c, 0x2352, 0x0600, 0x24bc, 0x24ba, 0x0640, 0x2354, - 0x0642, 0x0644, 0x2356, 0x2358, 0x02a0, 0x02a1, 0x02a2, 0x02a3, - 0x02c1, 0x02c3, 0x0a01, 0x02a4, 0x2443, 0x02a5, 0x07c1, 0x0981, - 0x0983, 0x2441, 0x2281, 0x02c5, 0x2283, 0x2285, 0x2287, 0x02c7, - 0x02c9, 0x02cb, 0x02cd, 0x02a7, 0x228b, 0x02cf, 0x228d, 0x2291, - 0x2293, 0x228f, 0x02a8, 0x02a9, 0x02aa, 0x2483, 0x0301, 0x0303, - 0x0305, 0x02ab, 0x2481, 0x0309, 0x0985, 0x0987, 0x2459, 0x0a03, - 0x0307, 0x2299, 0x229b, 0x229f, 0x0901, 0x030b, 0x22a1, 0x030d, - 0x030f, 0x0841, 0x0311, 0x0313, 0x22a3, 0x22a7, 0x09c1, 0x22a5, - 0x22a9, 0x22ab, 0x2380, 0x02ac, 0x02ad, 0x02ae, 0x0341, 0x0343, - 0x0345, 0x02af, 0x248f, 0x07c3, 0x0989, 0x098b, 0x2491, 0x0347, - 0x22ad, 0x0401, 0x0884, 0x22b1, 0x0843, 0x22b3, 0x0403, 0x22b5, - 0x0441, 0x0445, 0x22b7, 0x0443, 0x22c3, 0x22c1, 0x22c5, 0x22c7, - 0x22c9, 0x0941, 0x04c1, 0x02b1, 0x22cb, 0x04c5, 0x22cd, 0x04c3, - 0x22d1, 0x22cf, 0x02b2, 0x02b3, 0x02b4, 0x02b5, 0x0541, 0x0543, - 0x0a09, 0x02b6, 0x2495, 0x0545, 0x07c5, 0x098d, 0x098f, 0x06c1, - 0x2493, 0x0845, 0x2309, 0x230b, 0x0581, 0x230d, 0x0585, 0x0991, - 0x0993, 0x230f, 0x0583, 0x2313, 0x0587, 0x0589, 0x2315, 0x058d, - 0x2317, 0x0999, 0x058b, 0x231f, 0x2381, 0x0591, 0x2321, 0x099b, - 0x058f, 0x2325, 0x2323, 0x02b9, 0x02ba, 0x02bb, 0x05c1, 0x05c3, - 0x05c5, 0x02bc, 0x24ad, 0x05c7, 0x05c9, 0x07c7, 0x0995, 0x0997, - 0x0701, 0x24ab, 0x2327, 0x05cb, 0x232b, 0x2329, 0x2341, 0x2343, - 0x2345, 0x2347, 0x05cd, 0x234b, 0x2349, 0x2382, 0x234d, 0x234f, - 0x2351, 0x24b9, 0x02bd, 0x05cf, 0x24bf, 0x0a0d, 0x2353, 0x02bf, - 0x24bd, 0x2383, 0x24bb, 0x0641, 0x2355, 0x0643, 0x0645, 0x2357, - 0x2359, 0x3101, 0x0c80, 0x2e00, 0x2446, 0x2444, 0x244a, 0x2448, - 0x0800, 0x0942, 0x0944, 0x0804, 0x2288, 0x2486, 0x2484, 0x248a, - 0x2488, 0x22ae, 0x2498, 0x2496, 0x249c, 0x249a, 0x2300, 0x0a06, - 0x2302, 0x0a04, 0x0946, 0x07ce, 0x07ca, 0x07c8, 0x07cc, 0x2447, - 0x2445, 0x244b, 0x2449, 0x0801, 0x0943, 0x0945, 0x0805, 0x2289, - 0x2487, 0x2485, 0x248b, 0x2489, 0x22af, 0x2499, 0x2497, 0x249d, - 0x249b, 0x2301, 0x0a07, 0x2303, 0x0a05, 0x0947, 0x07cf, 0x07cb, - 0x07c9, 0x07cd, 0x2450, 0x244e, 0x2454, 0x2452, 0x2451, 0x244f, - 0x2455, 0x2453, 0x2294, 0x2296, 0x2295, 0x2297, 0x2304, 0x2306, - 0x2305, 0x2307, 0x2318, 0x2319, 0x231a, 0x231b, 0x232c, 0x232d, - 0x232e, 0x232f, 0x2400, 0x24a2, 0x24a0, 0x24a6, 0x24a4, 0x24a8, - 0x24a3, 0x24a1, 0x24a7, 0x24a5, 0x24a9, 0x24b0, 0x24ae, 0x24b4, - 0x24b2, 0x24b6, 0x24b1, 0x24af, 0x24b5, 0x24b3, 0x24b7, 0x0882, - 0x0880, 0x0881, 0x0802, 0x0803, 0x229c, 0x229d, 0x0a0a, 0x0a0b, - 0x0883, 0x0b40, 0x2c8a, 0x0c81, 0x2c89, 0x2c88, 0x2540, 0x2541, - 0x2d00, 0x2e07, 0x0d00, 0x2640, 0x2641, 0x2e80, 0x0d01, 0x26c8, - 0x26c9, 0x2f00, 0x2f84, 0x0d02, 0x2f83, 0x2f82, 0x0d40, 0x26d8, - 0x26d9, 0x3186, 0x0d04, 0x2740, 0x2741, 0x3100, 0x3086, 0x0d06, - 0x3085, 0x3084, 0x0d41, 0x2840, 0x3200, 0x0d07, 0x284f, 0x2850, - 0x3280, 0x2c84, 0x2e03, 0x2857, 0x0d42, 0x2c81, 0x2c80, 0x24c0, - 0x24c1, 0x2c86, 0x2c83, 0x28c0, 0x0d43, 0x25c0, 0x25c1, 0x2940, - 0x0d44, 0x26c0, 0x26c1, 0x2e05, 0x2e02, 0x29c0, 0x0d45, 0x2f05, - 0x2f04, 0x0d80, 0x26d0, 0x26d1, 0x2f80, 0x2a40, 0x0d82, 0x26e0, - 0x26e1, 0x3080, 0x3081, 0x2ac0, 0x0d83, 0x3004, 0x3003, 0x0d81, - 0x27c0, 0x27c1, 0x3082, 0x2b40, 0x0d84, 0x2847, 0x2848, 0x3184, - 0x3181, 0x2f06, 0x0d08, 0x2f81, 0x3005, 0x0d46, 0x3083, 0x3182, - 0x0e00, 0x0e01, 0x0f40, 0x1180, 0x1182, 0x0f03, 0x0f00, 0x11c0, - 0x0f01, 0x1140, 0x1202, 0x1204, 0x0f81, 0x1240, 0x0fc0, 0x1242, - 0x0f80, 0x1244, 0x1284, 0x0f82, 0x1286, 0x1288, 0x128a, 0x12c0, - 0x1282, 0x1181, 0x1183, 0x1043, 0x1040, 0x11c1, 0x1041, 0x1141, - 0x1203, 0x1205, 0x10c1, 0x1241, 0x1000, 0x1243, 0x10c0, 0x1245, - 0x1285, 0x10c2, 0x1287, 0x1289, 0x128b, 0x12c1, 0x1283, 0x1080, - 0x1100, 0x1101, 0x1200, 0x1201, 0x1280, 0x1281, 0x1340, 0x1341, - 0x1343, 0x1342, 0x1344, 0x13c2, 0x1400, 0x13c0, 0x1440, 0x1480, - 0x14c0, 0x1540, 0x1541, 0x1740, 0x1700, 0x1741, 0x17c0, 0x1800, - 0x1802, 0x1801, 0x1840, 0x1880, 0x1900, 0x18c0, 0x18c1, 0x1901, - 0x1940, 0x1942, 0x1941, 0x1980, 0x19c0, 0x19c2, 0x19c1, 0x1c80, - 0x1cc0, 0x1dc0, 0x1f80, 0x2000, 0x2002, 0x2004, 0x2006, 0x2008, - 0x2040, 0x2080, 0x2082, 0x20c0, 0x20c1, 0x2100, 0x22b8, 0x22b9, - 0x2310, 0x2311, 0x231c, 0x231d, 0x244c, 0x2456, 0x244d, 0x2457, - 0x248c, 0x248d, 0x249e, 0x249f, 0x2500, 0x2502, 0x2504, 0x2bc0, - 0x2501, 0x2503, 0x2505, 0x2bc1, 0x2bc2, 0x2bc3, 0x2bc4, 0x2bc5, - 0x2bc6, 0x2bc7, 0x2580, 0x2582, 0x2584, 0x2bc8, 0x2581, 0x2583, - 0x2585, 0x2bc9, 0x2bca, 0x2bcb, 0x2bcc, 0x2bcd, 0x2bce, 0x2bcf, - 0x2600, 0x2602, 0x2601, 0x2603, 0x2680, 0x2682, 0x2681, 0x2683, - 0x26c2, 0x26c4, 0x26c6, 0x2c00, 0x26c3, 0x26c5, 0x26c7, 0x2c01, - 0x2c02, 0x2c03, 0x2c04, 0x2c05, 0x2c06, 0x2c07, 0x26ca, 0x26cc, - 0x26ce, 0x2c08, 0x26cb, 0x26cd, 0x26cf, 0x2c09, 0x2c0a, 0x2c0b, - 0x2c0c, 0x2c0d, 0x2c0e, 0x2c0f, 0x26d2, 0x26d4, 0x26d6, 0x26d3, - 0x26d5, 0x26d7, 0x26da, 0x26dc, 0x26de, 0x26db, 0x26dd, 0x26df, - 0x2700, 0x2702, 0x2701, 0x2703, 0x2780, 0x2782, 0x2781, 0x2783, - 0x2800, 0x2802, 0x2804, 0x2801, 0x2803, 0x2805, 0x2842, 0x2844, - 0x2846, 0x2849, 0x284b, 0x284d, 0x2c40, 0x284a, 0x284c, 0x284e, - 0x2c41, 0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, 0x2851, - 0x2853, 0x2855, 0x2c48, 0x2852, 0x2854, 0x2856, 0x2c49, 0x2c4a, - 0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f, 0x2c82, 0x2e01, 0x3180, - 0x2c87, 0x2f01, 0x2f02, 0x2f03, 0x2e06, 0x3185, 0x3000, 0x3001, - 0x3002, 0x4640, 0x4641, 0x4680, 0x46c0, 0x46c2, 0x46c1, 0x4700, - 0x4740, 0x4780, 0x47c0, 0x47c2, 0x4900, 0x4940, 0x4980, 0x4982, - 0x4a00, 0x49c2, 0x4a03, 0x4a04, 0x4a40, 0x4a41, 0x4a80, 0x4a81, - 0x4ac0, 0x4ac1, 0x4bc0, 0x4bc1, 0x4b00, 0x4b01, 0x4b40, 0x4b41, - 0x4bc2, 0x4bc3, 0x4b80, 0x4b81, 0x4b82, 0x4b83, 0x4c00, 0x4c01, - 0x4c02, 0x4c03, 0x5600, 0x5440, 0x5442, 0x5444, 0x5446, 0x5448, - 0x544a, 0x544c, 0x544e, 0x5450, 0x5452, 0x5454, 0x5456, 0x5480, - 0x5482, 0x5484, 0x54c0, 0x54c1, 0x5500, 0x5501, 0x5540, 0x5541, - 0x5580, 0x5581, 0x55c0, 0x55c1, 0x5680, 0x58c0, 0x5700, 0x5702, - 0x5704, 0x5706, 0x5708, 0x570a, 0x570c, 0x570e, 0x5710, 0x5712, - 0x5714, 0x5716, 0x5740, 0x5742, 0x5744, 0x5780, 0x5781, 0x57c0, - 0x57c1, 0x5800, 0x5801, 0x5840, 0x5841, 0x5880, 0x5881, 0x5900, - 0x5901, 0x5902, 0x5903, 0x5940, 0x8f40, 0x8f42, 0x8f80, 0x8fc0, - 0x8fc1, 0x9000, 0x9001, 0x9041, 0x9040, 0x9043, 0x9080, 0x9081, - 0x90c0, -}; - -typedef enum { - UNICODE_GC_Cn, - UNICODE_GC_Lu, - UNICODE_GC_Ll, - UNICODE_GC_Lt, - UNICODE_GC_Lm, - UNICODE_GC_Lo, - UNICODE_GC_Mn, - UNICODE_GC_Mc, - UNICODE_GC_Me, - UNICODE_GC_Nd, - UNICODE_GC_Nl, - UNICODE_GC_No, - UNICODE_GC_Sm, - UNICODE_GC_Sc, - UNICODE_GC_Sk, - UNICODE_GC_So, - UNICODE_GC_Pc, - UNICODE_GC_Pd, - UNICODE_GC_Ps, - UNICODE_GC_Pe, - UNICODE_GC_Pi, - UNICODE_GC_Pf, - UNICODE_GC_Po, - UNICODE_GC_Zs, - UNICODE_GC_Zl, - UNICODE_GC_Zp, - UNICODE_GC_Cc, - UNICODE_GC_Cf, - UNICODE_GC_Cs, - UNICODE_GC_Co, - UNICODE_GC_LC, - UNICODE_GC_L, - UNICODE_GC_M, - UNICODE_GC_N, - UNICODE_GC_S, - UNICODE_GC_P, - UNICODE_GC_Z, - UNICODE_GC_C, - UNICODE_GC_COUNT, -} UnicodeGCEnum; - -static const char unicode_gc_name_table[] = - "Cn,Unassigned" "\0" - "Lu,Uppercase_Letter" "\0" - "Ll,Lowercase_Letter" "\0" - "Lt,Titlecase_Letter" "\0" - "Lm,Modifier_Letter" "\0" - "Lo,Other_Letter" "\0" - "Mn,Nonspacing_Mark" "\0" - "Mc,Spacing_Mark" "\0" - "Me,Enclosing_Mark" "\0" - "Nd,Decimal_Number,digit" "\0" - "Nl,Letter_Number" "\0" - "No,Other_Number" "\0" - "Sm,Math_Symbol" "\0" - "Sc,Currency_Symbol" "\0" - "Sk,Modifier_Symbol" "\0" - "So,Other_Symbol" "\0" - "Pc,Connector_Punctuation" "\0" - "Pd,Dash_Punctuation" "\0" - "Ps,Open_Punctuation" "\0" - "Pe,Close_Punctuation" "\0" - "Pi,Initial_Punctuation" "\0" - "Pf,Final_Punctuation" "\0" - "Po,Other_Punctuation" "\0" - "Zs,Space_Separator" "\0" - "Zl,Line_Separator" "\0" - "Zp,Paragraph_Separator" "\0" - "Cc,Control,cntrl" "\0" - "Cf,Format" "\0" - "Cs,Surrogate" "\0" - "Co,Private_Use" "\0" - "LC,Cased_Letter" "\0" - "L,Letter" "\0" - "M,Mark,Combining_Mark" "\0" - "N,Number" "\0" - "S,Symbol" "\0" - "P,Punctuation,punct" "\0" - "Z,Separator" "\0" - "C,Other" "\0" -; - -static const uint8_t unicode_gc_table[3948] = { - 0xfa, 0x18, 0x17, 0x56, 0x0d, 0x56, 0x12, 0x13, - 0x16, 0x0c, 0x16, 0x11, 0x36, 0xe9, 0x02, 0x36, - 0x4c, 0x36, 0xe1, 0x12, 0x12, 0x16, 0x13, 0x0e, - 0x10, 0x0e, 0xe2, 0x12, 0x12, 0x0c, 0x13, 0x0c, - 0xfa, 0x19, 0x17, 0x16, 0x6d, 0x0f, 0x16, 0x0e, - 0x0f, 0x05, 0x14, 0x0c, 0x1b, 0x0f, 0x0e, 0x0f, - 0x0c, 0x2b, 0x0e, 0x02, 0x36, 0x0e, 0x0b, 0x05, - 0x15, 0x4b, 0x16, 0xe1, 0x0f, 0x0c, 0xc1, 0xe2, - 0x10, 0x0c, 0xe2, 0x00, 0xff, 0x30, 0x02, 0xff, - 0x08, 0x02, 0xff, 0x27, 0xbf, 0x22, 0x21, 0x02, - 0x5f, 0x5f, 0x21, 0x22, 0x61, 0x02, 0x21, 0x02, - 0x41, 0x42, 0x21, 0x02, 0x21, 0x02, 0x9f, 0x7f, - 0x02, 0x5f, 0x5f, 0x21, 0x02, 0x5f, 0x3f, 0x02, - 0x05, 0x3f, 0x22, 0x65, 0x01, 0x03, 0x02, 0x01, - 0x03, 0x02, 0x01, 0x03, 0x02, 0xff, 0x08, 0x02, - 0xff, 0x0a, 0x02, 0x01, 0x03, 0x02, 0x5f, 0x21, - 0x02, 0xff, 0x32, 0xa2, 0x21, 0x02, 0x21, 0x22, - 0x5f, 0x41, 0x02, 0xff, 0x00, 0xe2, 0x3c, 0x05, - 0xe2, 0x13, 0xe4, 0x0a, 0x6e, 0xe4, 0x04, 0xee, - 0x06, 0x84, 0xce, 0x04, 0x0e, 0x04, 0xee, 0x09, - 0xe6, 0x68, 0x7f, 0x04, 0x0e, 0x3f, 0x20, 0x04, - 0x42, 0x16, 0x01, 0x60, 0x2e, 0x01, 0x16, 0x41, - 0x00, 0x01, 0x00, 0x21, 0x02, 0xe1, 0x09, 0x00, - 0xe1, 0x01, 0xe2, 0x1b, 0x3f, 0x02, 0x41, 0x42, - 0xff, 0x10, 0x62, 0x3f, 0x0c, 0x5f, 0x3f, 0x02, - 0xe1, 0x2b, 0xe2, 0x28, 0xff, 0x1a, 0x0f, 0x86, - 0x28, 0xff, 0x2f, 0xff, 0x06, 0x02, 0xff, 0x58, - 0x00, 0xe1, 0x1e, 0x20, 0x04, 0xb6, 0xe2, 0x21, - 0x16, 0x11, 0x20, 0x2f, 0x0d, 0x00, 0xe6, 0x25, - 0x11, 0x06, 0x16, 0x26, 0x16, 0x26, 0x16, 0x06, - 0xe0, 0x00, 0xe5, 0x13, 0x60, 0x65, 0x36, 0xe0, - 0x03, 0xbb, 0x4c, 0x36, 0x0d, 0x36, 0x2f, 0xe6, - 0x03, 0x16, 0x1b, 0x56, 0xe5, 0x18, 0x04, 0xe5, - 0x02, 0xe6, 0x0d, 0xe9, 0x02, 0x76, 0x25, 0x06, - 0xe5, 0x5b, 0x16, 0x05, 0xc6, 0x1b, 0x0f, 0xa6, - 0x24, 0x26, 0x0f, 0x66, 0x25, 0xe9, 0x02, 0x45, - 0x2f, 0x05, 0xf6, 0x06, 0x00, 0x1b, 0x05, 0x06, - 0xe5, 0x16, 0xe6, 0x13, 0x20, 0xe5, 0x51, 0xe6, - 0x03, 0x05, 0xe0, 0x06, 0xe9, 0x02, 0xe5, 0x19, - 0xe6, 0x01, 0x24, 0x0f, 0x56, 0x04, 0x20, 0x06, - 0x2d, 0xe5, 0x0e, 0x66, 0x04, 0xe6, 0x01, 0x04, - 0x46, 0x04, 0x86, 0x20, 0xf6, 0x07, 0x00, 0xe5, - 0x11, 0x46, 0x20, 0x16, 0x00, 0xe5, 0x03, 0x80, - 0xe5, 0x10, 0x0e, 0xa5, 0x00, 0x3b, 0xa0, 0xe6, - 0x00, 0xe5, 0x21, 0x04, 0xe6, 0x10, 0x1b, 0xe6, - 0x18, 0x07, 0xe5, 0x2e, 0x06, 0x07, 0x06, 0x05, - 0x47, 0xe6, 0x00, 0x67, 0x06, 0x27, 0x05, 0xc6, - 0xe5, 0x02, 0x26, 0x36, 0xe9, 0x02, 0x16, 0x04, - 0xe5, 0x07, 0x06, 0x27, 0x00, 0xe5, 0x00, 0x20, - 0x25, 0x20, 0xe5, 0x0e, 0x00, 0xc5, 0x00, 0x05, - 0x40, 0x65, 0x20, 0x06, 0x05, 0x47, 0x66, 0x20, - 0x27, 0x20, 0x27, 0x06, 0x05, 0xe0, 0x00, 0x07, - 0x60, 0x25, 0x00, 0x45, 0x26, 0x20, 0xe9, 0x02, - 0x25, 0x2d, 0xab, 0x0f, 0x0d, 0x05, 0x16, 0x06, - 0x20, 0x26, 0x07, 0x00, 0xa5, 0x60, 0x25, 0x20, - 0xe5, 0x0e, 0x00, 0xc5, 0x00, 0x25, 0x00, 0x25, - 0x00, 0x25, 0x20, 0x06, 0x00, 0x47, 0x26, 0x60, - 0x26, 0x20, 0x46, 0x40, 0x06, 0xc0, 0x65, 0x00, - 0x05, 0xc0, 0xe9, 0x02, 0x26, 0x45, 0x06, 0x16, - 0xe0, 0x02, 0x26, 0x07, 0x00, 0xe5, 0x01, 0x00, - 0x45, 0x00, 0xe5, 0x0e, 0x00, 0xc5, 0x00, 0x25, - 0x00, 0x85, 0x20, 0x06, 0x05, 0x47, 0x86, 0x00, - 0x26, 0x07, 0x00, 0x27, 0x06, 0x20, 0x05, 0xe0, - 0x07, 0x25, 0x26, 0x20, 0xe9, 0x02, 0x16, 0x0d, - 0xc0, 0x05, 0xa6, 0x00, 0x06, 0x27, 0x00, 0xe5, - 0x00, 0x20, 0x25, 0x20, 0xe5, 0x0e, 0x00, 0xc5, - 0x00, 0x25, 0x00, 0x85, 0x20, 0x06, 0x05, 0x07, - 0x06, 0x07, 0x66, 0x20, 0x27, 0x20, 0x27, 0x06, - 0xc0, 0x26, 0x07, 0x60, 0x25, 0x00, 0x45, 0x26, - 0x20, 0xe9, 0x02, 0x0f, 0x05, 0xab, 0xe0, 0x02, - 0x06, 0x05, 0x00, 0xa5, 0x40, 0x45, 0x00, 0x65, - 0x40, 0x25, 0x00, 0x05, 0x00, 0x25, 0x40, 0x25, - 0x40, 0x45, 0x40, 0xe5, 0x04, 0x60, 0x27, 0x06, - 0x27, 0x40, 0x47, 0x00, 0x47, 0x06, 0x20, 0x05, - 0xa0, 0x07, 0xe0, 0x06, 0xe9, 0x02, 0x4b, 0xaf, - 0x0d, 0x0f, 0x80, 0x06, 0x47, 0x06, 0xe5, 0x00, - 0x00, 0x45, 0x00, 0xe5, 0x0f, 0x00, 0xe5, 0x08, - 0x20, 0x06, 0x05, 0x46, 0x67, 0x00, 0x46, 0x00, - 0x66, 0xc0, 0x26, 0x00, 0x45, 0x20, 0x05, 0x20, - 0x25, 0x26, 0x20, 0xe9, 0x02, 0xc0, 0x16, 0xcb, - 0x0f, 0x05, 0x06, 0x27, 0x16, 0xe5, 0x00, 0x00, - 0x45, 0x00, 0xe5, 0x0f, 0x00, 0xe5, 0x02, 0x00, - 0x85, 0x20, 0x06, 0x05, 0x07, 0x06, 0x87, 0x00, - 0x06, 0x27, 0x00, 0x27, 0x26, 0xc0, 0x27, 0xa0, - 0x25, 0x00, 0x25, 0x26, 0x20, 0xe9, 0x02, 0x00, - 0x25, 0x07, 0xe0, 0x04, 0x26, 0x27, 0xe5, 0x01, - 0x00, 0x45, 0x00, 0xe5, 0x21, 0x26, 0x05, 0x47, - 0x66, 0x00, 0x47, 0x00, 0x47, 0x06, 0x05, 0x0f, - 0x60, 0x45, 0x07, 0xcb, 0x45, 0x26, 0x20, 0xe9, - 0x02, 0xeb, 0x01, 0x0f, 0xa5, 0x00, 0x06, 0x27, - 0x00, 0xe5, 0x0a, 0x40, 0xe5, 0x10, 0x00, 0xe5, - 0x01, 0x00, 0x05, 0x20, 0xc5, 0x40, 0x06, 0x60, - 0x47, 0x46, 0x00, 0x06, 0x00, 0xe7, 0x00, 0xa0, - 0xe9, 0x02, 0x20, 0x27, 0x16, 0xe0, 0x04, 0xe5, - 0x28, 0x06, 0x25, 0xc6, 0x60, 0x0d, 0xa5, 0x04, - 0xe6, 0x00, 0x16, 0xe9, 0x02, 0x36, 0xe0, 0x1d, - 0x25, 0x00, 0x05, 0x00, 0x85, 0x00, 0xe5, 0x10, - 0x00, 0x05, 0x00, 0xe5, 0x02, 0x06, 0x25, 0xe6, - 0x01, 0x05, 0x20, 0x85, 0x00, 0x04, 0x00, 0xc6, - 0x00, 0xe9, 0x02, 0x20, 0x65, 0xe0, 0x18, 0x05, - 0x4f, 0xf6, 0x07, 0x0f, 0x16, 0x4f, 0x26, 0xaf, - 0xe9, 0x02, 0xeb, 0x02, 0x0f, 0x06, 0x0f, 0x06, - 0x0f, 0x06, 0x12, 0x13, 0x12, 0x13, 0x27, 0xe5, - 0x00, 0x00, 0xe5, 0x1c, 0x60, 0xe6, 0x06, 0x07, - 0x86, 0x16, 0x26, 0x85, 0xe6, 0x03, 0x00, 0xe6, - 0x1c, 0x00, 0xef, 0x00, 0x06, 0xaf, 0x00, 0x2f, - 0x96, 0x6f, 0x36, 0xe0, 0x1d, 0xe5, 0x23, 0x27, - 0x66, 0x07, 0xa6, 0x07, 0x26, 0x27, 0x26, 0x05, - 0xe9, 0x02, 0xb6, 0xa5, 0x27, 0x26, 0x65, 0x46, - 0x05, 0x47, 0x25, 0xc7, 0x45, 0x66, 0xe5, 0x05, - 0x06, 0x27, 0x26, 0xa7, 0x06, 0x05, 0x07, 0xe9, - 0x02, 0x47, 0x06, 0x2f, 0xe1, 0x1e, 0x00, 0x01, - 0x80, 0x01, 0x20, 0xe2, 0x23, 0x16, 0x04, 0x42, - 0xe5, 0x80, 0xc1, 0x00, 0x65, 0x20, 0xc5, 0x00, - 0x05, 0x00, 0x65, 0x20, 0xe5, 0x21, 0x00, 0x65, - 0x20, 0xe5, 0x19, 0x00, 0x65, 0x20, 0xc5, 0x00, - 0x05, 0x00, 0x65, 0x20, 0xe5, 0x07, 0x00, 0xe5, - 0x31, 0x00, 0x65, 0x20, 0xe5, 0x3b, 0x20, 0x46, - 0xf6, 0x01, 0xeb, 0x0c, 0x40, 0xe5, 0x08, 0xef, - 0x02, 0xa0, 0xe1, 0x4e, 0x20, 0xa2, 0x20, 0x11, - 0xe5, 0x81, 0xe4, 0x0f, 0x16, 0xe5, 0x09, 0x17, - 0xe5, 0x12, 0x12, 0x13, 0x40, 0xe5, 0x43, 0x56, - 0x4a, 0xe5, 0x00, 0xc0, 0xe5, 0x0a, 0x46, 0x07, - 0xe0, 0x01, 0xe5, 0x0b, 0x26, 0x07, 0x36, 0xe0, - 0x01, 0xe5, 0x0a, 0x26, 0xe0, 0x04, 0xe5, 0x05, - 0x00, 0x45, 0x00, 0x26, 0xe0, 0x04, 0xe5, 0x2c, - 0x26, 0x07, 0xc6, 0xe7, 0x00, 0x06, 0x27, 0xe6, - 0x03, 0x56, 0x04, 0x56, 0x0d, 0x05, 0x06, 0x20, - 0xe9, 0x02, 0xa0, 0xeb, 0x02, 0xa0, 0xb6, 0x11, - 0x76, 0x46, 0x1b, 0x06, 0xe9, 0x02, 0xa0, 0xe5, - 0x1b, 0x04, 0xe5, 0x2d, 0xc0, 0x85, 0x26, 0xe5, - 0x1a, 0x06, 0x05, 0x80, 0xe5, 0x3e, 0xe0, 0x02, - 0xe5, 0x17, 0x00, 0x46, 0x67, 0x26, 0x47, 0x60, - 0x27, 0x06, 0xa7, 0x46, 0x60, 0x0f, 0x40, 0x36, - 0xe9, 0x02, 0xe5, 0x16, 0x20, 0x85, 0xe0, 0x03, - 0xe5, 0x24, 0x60, 0xe5, 0x12, 0xa0, 0xe9, 0x02, - 0x0b, 0x40, 0xef, 0x1a, 0xe5, 0x0f, 0x26, 0x27, - 0x06, 0x20, 0x36, 0xe5, 0x2d, 0x07, 0x06, 0x07, - 0xc6, 0x00, 0x06, 0x07, 0x06, 0x27, 0xe6, 0x00, - 0xa7, 0xe6, 0x02, 0x20, 0x06, 0xe9, 0x02, 0xa0, - 0xe9, 0x02, 0xa0, 0xd6, 0x04, 0xb6, 0x20, 0xe6, - 0x06, 0x08, 0xe6, 0x08, 0xe0, 0x29, 0x66, 0x07, - 0xe5, 0x27, 0x06, 0x07, 0x86, 0x07, 0x06, 0x87, - 0x06, 0x27, 0xe5, 0x00, 0x40, 0xe9, 0x02, 0xd6, - 0xef, 0x02, 0xe6, 0x01, 0xef, 0x01, 0x36, 0x00, - 0x26, 0x07, 0xe5, 0x16, 0x07, 0x66, 0x27, 0x26, - 0x07, 0x46, 0x25, 0xe9, 0x02, 0xe5, 0x24, 0x06, - 0x07, 0x26, 0x47, 0x06, 0x07, 0x46, 0x27, 0xe0, - 0x00, 0x76, 0xe5, 0x1c, 0xe7, 0x00, 0xe6, 0x00, - 0x27, 0x26, 0x40, 0x96, 0xe9, 0x02, 0x40, 0x45, - 0xe9, 0x02, 0xe5, 0x16, 0xa4, 0x36, 0xe2, 0x01, - 0xc0, 0xe1, 0x23, 0x20, 0x41, 0xf6, 0x00, 0xe0, - 0x00, 0x46, 0x16, 0xe6, 0x05, 0x07, 0xc6, 0x65, - 0x06, 0xa5, 0x06, 0x25, 0x07, 0x26, 0x05, 0x80, - 0xe2, 0x24, 0xe4, 0x37, 0xe2, 0x05, 0x04, 0xe2, - 0x1a, 0xe4, 0x1d, 0xe6, 0x38, 0xff, 0x80, 0x0e, - 0xe2, 0x00, 0xff, 0x5a, 0xe2, 0x00, 0xe1, 0x00, - 0xa2, 0x20, 0xa1, 0x20, 0xe2, 0x00, 0xe1, 0x00, - 0xe2, 0x00, 0xe1, 0x00, 0xa2, 0x20, 0xa1, 0x20, - 0xe2, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, - 0x00, 0x3f, 0xc2, 0xe1, 0x00, 0xe2, 0x06, 0x20, - 0xe2, 0x00, 0xe3, 0x00, 0xe2, 0x00, 0xe3, 0x00, - 0xe2, 0x00, 0xe3, 0x00, 0x82, 0x00, 0x22, 0x61, - 0x03, 0x0e, 0x02, 0x4e, 0x42, 0x00, 0x22, 0x61, - 0x03, 0x4e, 0x62, 0x20, 0x22, 0x61, 0x00, 0x4e, - 0xe2, 0x00, 0x81, 0x4e, 0x20, 0x42, 0x00, 0x22, - 0x61, 0x03, 0x2e, 0x00, 0xf7, 0x03, 0x9b, 0xb1, - 0x36, 0x14, 0x15, 0x12, 0x34, 0x15, 0x12, 0x14, - 0xf6, 0x00, 0x18, 0x19, 0x9b, 0x17, 0xf6, 0x01, - 0x14, 0x15, 0x76, 0x30, 0x56, 0x0c, 0x12, 0x13, - 0xf6, 0x03, 0x0c, 0x16, 0x10, 0xf6, 0x02, 0x17, - 0x9b, 0x00, 0xfb, 0x02, 0x0b, 0x04, 0x20, 0xab, - 0x4c, 0x12, 0x13, 0x04, 0xeb, 0x02, 0x4c, 0x12, - 0x13, 0x00, 0xe4, 0x05, 0x40, 0xed, 0x19, 0xe0, - 0x07, 0xe6, 0x05, 0x68, 0x06, 0x48, 0xe6, 0x04, - 0xe0, 0x07, 0x2f, 0x01, 0x6f, 0x01, 0x2f, 0x02, - 0x41, 0x22, 0x41, 0x02, 0x0f, 0x01, 0x2f, 0x0c, - 0x81, 0xaf, 0x01, 0x0f, 0x01, 0x0f, 0x01, 0x0f, - 0x61, 0x0f, 0x02, 0x61, 0x02, 0x65, 0x02, 0x2f, - 0x22, 0x21, 0x8c, 0x3f, 0x42, 0x0f, 0x0c, 0x2f, - 0x02, 0x0f, 0xeb, 0x08, 0xea, 0x1b, 0x3f, 0x6a, - 0x0b, 0x2f, 0x60, 0x8c, 0x8f, 0x2c, 0x6f, 0x0c, - 0x2f, 0x0c, 0x2f, 0x0c, 0xcf, 0x0c, 0xef, 0x17, - 0x2c, 0x2f, 0x0c, 0x0f, 0x0c, 0xef, 0x17, 0xec, - 0x80, 0x84, 0xef, 0x00, 0x12, 0x13, 0x12, 0x13, - 0xef, 0x0c, 0x2c, 0xcf, 0x12, 0x13, 0xef, 0x49, - 0x0c, 0xef, 0x16, 0xec, 0x11, 0xef, 0x20, 0xac, - 0xef, 0x3d, 0xe0, 0x11, 0xef, 0x03, 0xe0, 0x0d, - 0xeb, 0x34, 0xef, 0x46, 0xeb, 0x0e, 0xef, 0x80, - 0x2f, 0x0c, 0xef, 0x01, 0x0c, 0xef, 0x2e, 0xec, - 0x00, 0xef, 0x67, 0x0c, 0xef, 0x80, 0x70, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0xeb, 0x16, 0xef, - 0x24, 0x8c, 0x12, 0x13, 0xec, 0x17, 0x12, 0x13, - 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, - 0xec, 0x08, 0xef, 0x80, 0x78, 0xec, 0x7b, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0xec, 0x37, 0x12, - 0x13, 0x12, 0x13, 0xec, 0x18, 0x12, 0x13, 0xec, - 0x80, 0x7a, 0xef, 0x28, 0xec, 0x0d, 0x2f, 0xac, - 0xef, 0x1f, 0x20, 0xef, 0x18, 0x00, 0xef, 0x61, - 0xe1, 0x28, 0xe2, 0x28, 0x5f, 0x21, 0x22, 0xdf, - 0x41, 0x02, 0x3f, 0x02, 0x3f, 0x82, 0x24, 0x41, - 0x02, 0xff, 0x5a, 0x02, 0xaf, 0x7f, 0x46, 0x3f, - 0x80, 0x76, 0x0b, 0x36, 0xe2, 0x1e, 0x00, 0x02, - 0x80, 0x02, 0x20, 0xe5, 0x30, 0xc0, 0x04, 0x16, - 0xe0, 0x06, 0x06, 0xe5, 0x0f, 0xe0, 0x01, 0xc5, - 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc5, - 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xe6, - 0x18, 0x36, 0x14, 0x15, 0x14, 0x15, 0x56, 0x14, - 0x15, 0x16, 0x14, 0x15, 0xf6, 0x01, 0x11, 0x36, - 0x11, 0x16, 0x14, 0x15, 0x36, 0x14, 0x15, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x96, - 0x04, 0xf6, 0x02, 0x31, 0x76, 0x11, 0x16, 0x12, - 0xf6, 0x05, 0x2f, 0x56, 0x12, 0x13, 0x12, 0x13, - 0x12, 0x13, 0x12, 0x13, 0x11, 0xe0, 0x1a, 0xef, - 0x12, 0x00, 0xef, 0x51, 0xe0, 0x04, 0xef, 0x80, - 0x4e, 0xe0, 0x12, 0xef, 0x04, 0x60, 0x17, 0x56, - 0x0f, 0x04, 0x05, 0x0a, 0x12, 0x13, 0x12, 0x13, - 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x2f, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x11, - 0x12, 0x33, 0x0f, 0xea, 0x01, 0x66, 0x27, 0x11, - 0x84, 0x2f, 0x4a, 0x04, 0x05, 0x16, 0x2f, 0x00, - 0xe5, 0x4e, 0x20, 0x26, 0x2e, 0x24, 0x05, 0x11, - 0xe5, 0x52, 0x16, 0x44, 0x05, 0x80, 0xe5, 0x23, - 0x00, 0xe5, 0x56, 0x00, 0x2f, 0x6b, 0xef, 0x02, - 0xe5, 0x18, 0xef, 0x1c, 0xe0, 0x04, 0xe5, 0x08, - 0xef, 0x17, 0x00, 0xeb, 0x02, 0xef, 0x16, 0xeb, - 0x00, 0x0f, 0xeb, 0x07, 0xef, 0x18, 0xeb, 0x02, - 0xef, 0x1f, 0xeb, 0x07, 0xef, 0x80, 0xb8, 0xe5, - 0x99, 0x38, 0xef, 0x38, 0xe5, 0xc0, 0x11, 0x8d, - 0x04, 0xe5, 0x83, 0xef, 0x40, 0xef, 0x2f, 0xe0, - 0x01, 0xe5, 0x20, 0xa4, 0x36, 0xe5, 0x80, 0x84, - 0x04, 0x56, 0xe5, 0x08, 0xe9, 0x02, 0x25, 0xe0, - 0x0c, 0xff, 0x26, 0x05, 0x06, 0x48, 0x16, 0xe6, - 0x02, 0x16, 0x04, 0xff, 0x14, 0x24, 0x26, 0xe5, - 0x3e, 0xea, 0x02, 0x26, 0xb6, 0xe0, 0x00, 0xee, - 0x0f, 0xe4, 0x01, 0x2e, 0xff, 0x06, 0x22, 0xff, - 0x36, 0x04, 0xe2, 0x00, 0x9f, 0xff, 0x02, 0x04, - 0x2e, 0x7f, 0x05, 0x7f, 0x22, 0xff, 0x0d, 0x61, - 0x02, 0x81, 0x02, 0xff, 0x07, 0x41, 0x02, 0x3f, - 0x80, 0x3f, 0x00, 0x02, 0x00, 0x02, 0x7f, 0xe0, - 0x10, 0x44, 0x3f, 0x05, 0x24, 0x02, 0xc5, 0x06, - 0x45, 0x06, 0x65, 0x06, 0xe5, 0x0f, 0x27, 0x26, - 0x07, 0x6f, 0x06, 0x40, 0xab, 0x2f, 0x0d, 0x0f, - 0xa0, 0xe5, 0x2c, 0x76, 0xe0, 0x00, 0x27, 0xe5, - 0x2a, 0xe7, 0x08, 0x26, 0xe0, 0x00, 0x36, 0xe9, - 0x02, 0xa0, 0xe6, 0x0a, 0xa5, 0x56, 0x05, 0x16, - 0x25, 0x06, 0xe9, 0x02, 0xe5, 0x14, 0xe6, 0x00, - 0x36, 0xe5, 0x0f, 0xe6, 0x03, 0x27, 0xe0, 0x03, - 0x16, 0xe5, 0x15, 0x40, 0x46, 0x07, 0xe5, 0x27, - 0x06, 0x27, 0x66, 0x27, 0x26, 0x47, 0xf6, 0x05, - 0x00, 0x04, 0xe9, 0x02, 0x60, 0x36, 0x85, 0x06, - 0x04, 0xe5, 0x01, 0xe9, 0x02, 0x85, 0x00, 0xe5, - 0x21, 0xa6, 0x27, 0x26, 0x27, 0x26, 0xe0, 0x01, - 0x45, 0x06, 0xe5, 0x00, 0x06, 0x07, 0x20, 0xe9, - 0x02, 0x20, 0x76, 0xe5, 0x08, 0x04, 0xa5, 0x4f, - 0x05, 0x07, 0x06, 0x07, 0xe5, 0x2a, 0x06, 0x05, - 0x46, 0x25, 0x26, 0x85, 0x26, 0x05, 0x06, 0x05, - 0xe0, 0x10, 0x25, 0x04, 0x36, 0xe5, 0x03, 0x07, - 0x26, 0x27, 0x36, 0x05, 0x24, 0x07, 0x06, 0xe0, - 0x02, 0xa5, 0x20, 0xa5, 0x20, 0xa5, 0xe0, 0x01, - 0xc5, 0x00, 0xc5, 0x00, 0xe2, 0x23, 0x0e, 0x64, - 0xe2, 0x01, 0x04, 0x2e, 0x60, 0xe2, 0x48, 0xe5, - 0x1b, 0x27, 0x06, 0x27, 0x06, 0x27, 0x16, 0x07, - 0x06, 0x20, 0xe9, 0x02, 0xa0, 0xe5, 0xab, 0x1c, - 0xe0, 0x04, 0xe5, 0x0f, 0x60, 0xe5, 0x29, 0x60, - 0xfc, 0x87, 0x78, 0xfd, 0x98, 0x78, 0xe5, 0x80, - 0xe6, 0x20, 0xe5, 0x62, 0xe0, 0x1e, 0xc2, 0xe0, - 0x04, 0x82, 0x80, 0x05, 0x06, 0xe5, 0x02, 0x0c, - 0xe5, 0x05, 0x00, 0x85, 0x00, 0x05, 0x00, 0x25, - 0x00, 0x25, 0x00, 0xe5, 0x64, 0xee, 0x09, 0xe0, - 0x08, 0xe5, 0x80, 0xe3, 0x13, 0x12, 0xef, 0x08, - 0xe5, 0x38, 0x20, 0xe5, 0x2e, 0xc0, 0x0f, 0xe0, - 0x18, 0xe5, 0x04, 0x0d, 0x4f, 0xe6, 0x08, 0xd6, - 0x12, 0x13, 0x16, 0xa0, 0xe6, 0x08, 0x16, 0x31, - 0x30, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, - 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, - 0x13, 0x36, 0x12, 0x13, 0x76, 0x50, 0x56, 0x00, - 0x76, 0x11, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, - 0x56, 0x0c, 0x11, 0x4c, 0x00, 0x16, 0x0d, 0x36, - 0x60, 0x85, 0x00, 0xe5, 0x7f, 0x20, 0x1b, 0x00, - 0x56, 0x0d, 0x56, 0x12, 0x13, 0x16, 0x0c, 0x16, - 0x11, 0x36, 0xe9, 0x02, 0x36, 0x4c, 0x36, 0xe1, - 0x12, 0x12, 0x16, 0x13, 0x0e, 0x10, 0x0e, 0xe2, - 0x12, 0x12, 0x0c, 0x13, 0x0c, 0x12, 0x13, 0x16, - 0x12, 0x13, 0x36, 0xe5, 0x02, 0x04, 0xe5, 0x25, - 0x24, 0xe5, 0x17, 0x40, 0xa5, 0x20, 0xa5, 0x20, - 0xa5, 0x20, 0x45, 0x40, 0x2d, 0x0c, 0x0e, 0x0f, - 0x2d, 0x00, 0x0f, 0x6c, 0x2f, 0xe0, 0x02, 0x5b, - 0x2f, 0x20, 0xe5, 0x04, 0x00, 0xe5, 0x12, 0x00, - 0xe5, 0x0b, 0x00, 0x25, 0x00, 0xe5, 0x07, 0x20, - 0xe5, 0x06, 0xe0, 0x1a, 0xe5, 0x73, 0x80, 0x56, - 0x60, 0xeb, 0x25, 0x40, 0xef, 0x01, 0xea, 0x2d, - 0x6b, 0xef, 0x09, 0x2b, 0x4f, 0x00, 0xef, 0x05, - 0x40, 0x0f, 0xe0, 0x27, 0xef, 0x25, 0x06, 0xe0, - 0x7a, 0xe5, 0x15, 0x40, 0xe5, 0x29, 0xe0, 0x07, - 0x06, 0xeb, 0x13, 0x60, 0xe5, 0x18, 0x6b, 0xe0, - 0x01, 0xe5, 0x0c, 0x0a, 0xe5, 0x00, 0x0a, 0x80, - 0xe5, 0x1e, 0x86, 0x80, 0xe5, 0x16, 0x00, 0x16, - 0xe5, 0x1c, 0x60, 0xe5, 0x00, 0x16, 0x8a, 0xe0, - 0x22, 0xe1, 0x20, 0xe2, 0x20, 0xe5, 0x46, 0x20, - 0xe9, 0x02, 0xa0, 0xe1, 0x1c, 0x60, 0xe2, 0x1c, - 0x60, 0xe5, 0x20, 0xe0, 0x00, 0xe5, 0x2c, 0xe0, - 0x03, 0x16, 0xe1, 0x03, 0x00, 0xe1, 0x07, 0x00, - 0xc1, 0x00, 0x21, 0x00, 0xe2, 0x03, 0x00, 0xe2, - 0x07, 0x00, 0xc2, 0x00, 0x22, 0xe0, 0x3b, 0xe5, - 0x80, 0xaf, 0xe0, 0x01, 0xe5, 0x0e, 0xe0, 0x02, - 0xe5, 0x00, 0xe0, 0x10, 0xa4, 0x00, 0xe4, 0x22, - 0x00, 0xe4, 0x01, 0xe0, 0x3d, 0xa5, 0x20, 0x05, - 0x00, 0xe5, 0x24, 0x00, 0x25, 0x40, 0x05, 0x20, - 0xe5, 0x0f, 0x00, 0x16, 0xeb, 0x00, 0xe5, 0x0f, - 0x2f, 0xcb, 0xe5, 0x17, 0xe0, 0x00, 0xeb, 0x01, - 0xe0, 0x28, 0xe5, 0x0b, 0x00, 0x25, 0x80, 0x8b, - 0xe5, 0x0e, 0xab, 0x40, 0x16, 0xe5, 0x12, 0x80, - 0x16, 0xe0, 0x38, 0xe5, 0x30, 0x60, 0x2b, 0x25, - 0xeb, 0x08, 0x20, 0xeb, 0x26, 0x05, 0x46, 0x00, - 0x26, 0x80, 0x66, 0x65, 0x00, 0x45, 0x00, 0xe5, - 0x15, 0x20, 0x46, 0x60, 0x06, 0xeb, 0x01, 0xc0, - 0xf6, 0x01, 0xc0, 0xe5, 0x15, 0x2b, 0x16, 0xe5, - 0x15, 0x4b, 0xe0, 0x18, 0xe5, 0x00, 0x0f, 0xe5, - 0x14, 0x26, 0x60, 0x8b, 0xd6, 0xe0, 0x01, 0xe5, - 0x2e, 0x40, 0xd6, 0xe5, 0x0e, 0x20, 0xeb, 0x00, - 0xe5, 0x0b, 0x80, 0xeb, 0x00, 0xe5, 0x0a, 0xc0, - 0x76, 0xe0, 0x04, 0xcb, 0xe0, 0x48, 0xe5, 0x41, - 0xe0, 0x2f, 0xe1, 0x2b, 0xe0, 0x05, 0xe2, 0x2b, - 0xc0, 0xab, 0xe5, 0x1c, 0x66, 0xe0, 0x00, 0xe9, - 0x02, 0xe0, 0x80, 0x9e, 0xeb, 0x17, 0x00, 0xe5, - 0x22, 0x00, 0x26, 0x11, 0x20, 0x25, 0xe0, 0x43, - 0x46, 0xe5, 0x15, 0xeb, 0x02, 0x05, 0xe0, 0x00, - 0xe5, 0x0e, 0xe6, 0x03, 0x6b, 0x96, 0xe0, 0x0e, - 0xe5, 0x0a, 0x66, 0x76, 0xe0, 0x1e, 0xe5, 0x0d, - 0xcb, 0xe0, 0x0c, 0xe5, 0x0f, 0xe0, 0x01, 0x07, - 0x06, 0x07, 0xe5, 0x2d, 0xe6, 0x07, 0xd6, 0x60, - 0xeb, 0x0c, 0xe9, 0x02, 0x06, 0x25, 0x26, 0x05, - 0xe0, 0x01, 0x46, 0x07, 0xe5, 0x25, 0x47, 0x66, - 0x27, 0x26, 0x36, 0x1b, 0x76, 0x06, 0xe0, 0x02, - 0x1b, 0x20, 0xe5, 0x11, 0xc0, 0xe9, 0x02, 0xa0, - 0x46, 0xe5, 0x1c, 0x86, 0x07, 0xe6, 0x00, 0x00, - 0xe9, 0x02, 0x76, 0x05, 0x27, 0x05, 0xe0, 0x00, - 0xe5, 0x1b, 0x06, 0x36, 0x05, 0xe0, 0x01, 0x26, - 0x07, 0xe5, 0x28, 0x47, 0xe6, 0x01, 0x27, 0x65, - 0x76, 0x66, 0x16, 0x07, 0x06, 0xe9, 0x02, 0x05, - 0x16, 0x05, 0x56, 0x00, 0xeb, 0x0c, 0xe0, 0x03, - 0xe5, 0x0a, 0x00, 0xe5, 0x11, 0x47, 0x46, 0x27, - 0x06, 0x07, 0x26, 0xb6, 0x06, 0x25, 0x06, 0xe0, - 0x36, 0xc5, 0x00, 0x05, 0x00, 0x65, 0x00, 0xe5, - 0x07, 0x00, 0xe5, 0x02, 0x16, 0xa0, 0xe5, 0x27, - 0x06, 0x47, 0xe6, 0x00, 0x80, 0xe9, 0x02, 0xa0, - 0x26, 0x27, 0x00, 0xe5, 0x00, 0x20, 0x25, 0x20, - 0xe5, 0x0e, 0x00, 0xc5, 0x00, 0x25, 0x00, 0x85, - 0x00, 0x26, 0x05, 0x27, 0x06, 0x67, 0x20, 0x27, - 0x20, 0x47, 0x20, 0x05, 0xa0, 0x07, 0x80, 0x85, - 0x27, 0x20, 0xc6, 0x40, 0x86, 0xe0, 0x80, 0x03, - 0xe5, 0x2d, 0x47, 0xe6, 0x00, 0x27, 0x46, 0x07, - 0x06, 0x65, 0x96, 0xe9, 0x02, 0x36, 0x00, 0x16, - 0x06, 0x45, 0xe0, 0x16, 0xe5, 0x28, 0x47, 0xa6, - 0x07, 0x06, 0x67, 0x26, 0x07, 0x26, 0x25, 0x16, - 0x05, 0xe0, 0x00, 0xe9, 0x02, 0xe0, 0x80, 0x1e, - 0xe5, 0x27, 0x47, 0x66, 0x20, 0x67, 0x26, 0x07, - 0x26, 0xf6, 0x0f, 0x65, 0x26, 0xe0, 0x1a, 0xe5, - 0x28, 0x47, 0xe6, 0x00, 0x27, 0x06, 0x07, 0x26, - 0x56, 0x05, 0xe0, 0x03, 0xe9, 0x02, 0xa0, 0xf6, - 0x05, 0xe0, 0x0b, 0xe5, 0x23, 0x06, 0x07, 0x06, - 0x27, 0xa6, 0x07, 0x06, 0x05, 0x16, 0xa0, 0xe9, - 0x02, 0xe0, 0x2e, 0xe5, 0x13, 0x20, 0x46, 0x27, - 0x66, 0x07, 0x86, 0x60, 0xe9, 0x02, 0x2b, 0x56, - 0x0f, 0xc5, 0xe0, 0x80, 0x31, 0xe5, 0x24, 0x47, - 0xe6, 0x01, 0x07, 0x26, 0x16, 0xe0, 0x5c, 0xe1, - 0x18, 0xe2, 0x18, 0xe9, 0x02, 0xeb, 0x01, 0xe0, - 0x04, 0xe5, 0x00, 0x20, 0x05, 0x20, 0xe5, 0x00, - 0x00, 0x25, 0x00, 0xe5, 0x10, 0xa7, 0x00, 0x27, - 0x20, 0x26, 0x07, 0x06, 0x05, 0x07, 0x05, 0x07, - 0x06, 0x56, 0xe0, 0x01, 0xe9, 0x02, 0xe0, 0x3e, - 0xe5, 0x00, 0x20, 0xe5, 0x1f, 0x47, 0x66, 0x20, - 0x26, 0x67, 0x06, 0x05, 0x16, 0x05, 0x07, 0xe0, - 0x13, 0x05, 0xe6, 0x02, 0xe5, 0x20, 0xa6, 0x07, - 0x05, 0x66, 0xf6, 0x00, 0x06, 0xe0, 0x00, 0x05, - 0xa6, 0x27, 0x46, 0xe5, 0x26, 0xe6, 0x05, 0x07, - 0x26, 0x56, 0x05, 0x96, 0xe0, 0x05, 0xe5, 0x41, - 0xc0, 0xf6, 0x02, 0xe0, 0x80, 0x6e, 0xe5, 0x01, - 0x00, 0xe5, 0x1d, 0x07, 0xc6, 0x00, 0xa6, 0x07, - 0x06, 0x05, 0x96, 0xe0, 0x02, 0xe9, 0x02, 0xeb, - 0x0b, 0x40, 0x36, 0xe5, 0x16, 0x20, 0xe6, 0x0e, - 0x00, 0x07, 0xc6, 0x07, 0x26, 0x07, 0x26, 0xe0, - 0x41, 0xc5, 0x00, 0x25, 0x00, 0xe5, 0x1e, 0xa6, - 0x40, 0x06, 0x00, 0x26, 0x00, 0xc6, 0x05, 0x06, - 0xe0, 0x00, 0xe9, 0x02, 0xa0, 0xa5, 0x00, 0x25, - 0x00, 0xe5, 0x18, 0x87, 0x00, 0x26, 0x00, 0x27, - 0x06, 0x07, 0x06, 0x05, 0xc0, 0xe9, 0x02, 0xe0, - 0x80, 0xae, 0xe5, 0x0b, 0x26, 0x27, 0x36, 0xc0, - 0x26, 0x05, 0x07, 0xe5, 0x05, 0x00, 0xe5, 0x1a, - 0x27, 0x86, 0x40, 0x27, 0x06, 0x07, 0x06, 0xf6, - 0x05, 0xe9, 0x02, 0xe0, 0x4e, 0x05, 0xe0, 0x07, - 0xeb, 0x0d, 0xef, 0x00, 0x6d, 0xef, 0x09, 0xe0, - 0x05, 0x16, 0xe5, 0x83, 0x12, 0xe0, 0x5e, 0xea, - 0x67, 0x00, 0x96, 0xe0, 0x03, 0xe5, 0x80, 0x3c, - 0xe0, 0x89, 0xc4, 0xe5, 0x59, 0x36, 0xe0, 0x05, - 0xe5, 0x83, 0xa8, 0xfb, 0x08, 0x06, 0xa5, 0xe6, - 0x07, 0xe0, 0x8f, 0x22, 0xe5, 0x81, 0xbf, 0xe0, - 0xa1, 0x31, 0xe5, 0x81, 0xb1, 0xc0, 0xe5, 0x17, - 0x00, 0xe9, 0x02, 0x60, 0x36, 0xe5, 0x47, 0x00, - 0xe9, 0x02, 0xa0, 0xe5, 0x16, 0x20, 0x86, 0x16, - 0xe0, 0x02, 0xe5, 0x28, 0xc6, 0x96, 0x6f, 0x64, - 0x16, 0x0f, 0xe0, 0x02, 0xe9, 0x02, 0x00, 0xcb, - 0x00, 0xe5, 0x0d, 0x80, 0xe5, 0x0b, 0xe0, 0x82, - 0x28, 0xe1, 0x18, 0xe2, 0x18, 0xeb, 0x0f, 0x76, - 0xe0, 0x5d, 0xe5, 0x43, 0x60, 0x06, 0x05, 0xe7, - 0x2f, 0xc0, 0x66, 0xe4, 0x05, 0xe0, 0x38, 0x24, - 0x16, 0x04, 0x06, 0xe0, 0x03, 0x27, 0xe0, 0x06, - 0xe5, 0x97, 0x70, 0xe0, 0x00, 0xe5, 0x84, 0x4e, - 0xe0, 0x22, 0xe5, 0x01, 0xe0, 0xa2, 0x5f, 0x64, - 0x00, 0xc4, 0x00, 0x24, 0x00, 0xe5, 0x80, 0x9b, - 0xe0, 0x07, 0x05, 0xe0, 0x15, 0x45, 0x20, 0x05, - 0xe0, 0x06, 0x65, 0xe0, 0x00, 0xe5, 0x81, 0x04, - 0xe0, 0x88, 0x7c, 0xe5, 0x63, 0x80, 0xe5, 0x05, - 0x40, 0xe5, 0x01, 0xc0, 0xe5, 0x02, 0x20, 0x0f, - 0x26, 0x16, 0x7b, 0xe0, 0x91, 0xd4, 0xe6, 0x26, - 0x20, 0xe6, 0x0f, 0xe0, 0x01, 0xef, 0x6c, 0xe0, - 0x34, 0xef, 0x80, 0x6e, 0xe0, 0x02, 0xef, 0x1f, - 0x20, 0xef, 0x34, 0x27, 0x46, 0x4f, 0xa7, 0xfb, - 0x00, 0xe6, 0x00, 0x2f, 0xc6, 0xef, 0x16, 0x66, - 0xef, 0x35, 0xe0, 0x0d, 0xef, 0x3a, 0x46, 0x0f, - 0xe0, 0x72, 0xeb, 0x0c, 0xe0, 0x04, 0xeb, 0x0c, - 0xe0, 0x04, 0xef, 0x4f, 0xe0, 0x01, 0xeb, 0x11, - 0xe0, 0x7f, 0xe1, 0x12, 0xe2, 0x12, 0xe1, 0x12, - 0xc2, 0x00, 0xe2, 0x0a, 0xe1, 0x12, 0xe2, 0x12, - 0x01, 0x00, 0x21, 0x20, 0x01, 0x20, 0x21, 0x20, - 0x61, 0x00, 0xe1, 0x00, 0x62, 0x00, 0x02, 0x00, - 0xc2, 0x00, 0xe2, 0x03, 0xe1, 0x12, 0xe2, 0x12, - 0x21, 0x00, 0x61, 0x20, 0xe1, 0x00, 0x00, 0xc1, - 0x00, 0xe2, 0x12, 0x21, 0x00, 0x61, 0x00, 0x81, - 0x00, 0x01, 0x40, 0xc1, 0x00, 0xe2, 0x12, 0xe1, - 0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x12, 0xe1, - 0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x12, 0xe1, - 0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x14, 0x20, - 0xe1, 0x11, 0x0c, 0xe2, 0x11, 0x0c, 0xa2, 0xe1, - 0x11, 0x0c, 0xe2, 0x11, 0x0c, 0xa2, 0xe1, 0x11, - 0x0c, 0xe2, 0x11, 0x0c, 0xa2, 0xe1, 0x11, 0x0c, - 0xe2, 0x11, 0x0c, 0xa2, 0xe1, 0x11, 0x0c, 0xe2, - 0x11, 0x0c, 0xa2, 0x3f, 0x20, 0xe9, 0x2a, 0xef, - 0x81, 0x78, 0xe6, 0x2f, 0x6f, 0xe6, 0x2a, 0xef, - 0x00, 0x06, 0xef, 0x06, 0x06, 0x2f, 0x96, 0xe0, - 0x07, 0x86, 0x00, 0xe6, 0x07, 0xe0, 0x83, 0xc8, - 0xe2, 0x02, 0x05, 0xe2, 0x0c, 0xa0, 0xa2, 0xe0, - 0x80, 0x4d, 0xc6, 0x00, 0xe6, 0x09, 0x20, 0xc6, - 0x00, 0x26, 0x00, 0x86, 0x80, 0xe4, 0x36, 0xe0, - 0x19, 0x06, 0xe0, 0x68, 0xe5, 0x25, 0x40, 0xc6, - 0xc4, 0x20, 0xe9, 0x02, 0x60, 0x05, 0x0f, 0xe0, - 0x80, 0xb8, 0xe5, 0x16, 0x06, 0xe0, 0x09, 0xe5, - 0x24, 0x66, 0xe9, 0x02, 0x80, 0x0d, 0xe0, 0x81, - 0x48, 0xe5, 0x13, 0x04, 0x66, 0xe9, 0x02, 0xe0, - 0x82, 0x5e, 0xc5, 0x00, 0x65, 0x00, 0x25, 0x00, - 0xe5, 0x07, 0x00, 0xe5, 0x80, 0x3d, 0x20, 0xeb, - 0x01, 0xc6, 0xe0, 0x21, 0xe1, 0x1a, 0xe2, 0x1a, - 0xc6, 0x04, 0x60, 0xe9, 0x02, 0x60, 0x36, 0xe0, - 0x82, 0x89, 0xeb, 0x33, 0x0f, 0x4b, 0x0d, 0x6b, - 0xe0, 0x44, 0xeb, 0x25, 0x0f, 0xeb, 0x07, 0xe0, - 0x80, 0x3a, 0x65, 0x00, 0xe5, 0x13, 0x00, 0x25, - 0x00, 0x05, 0x20, 0x05, 0x00, 0xe5, 0x02, 0x00, - 0x65, 0x00, 0x05, 0x00, 0x05, 0xa0, 0x05, 0x60, - 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x45, 0x00, - 0x25, 0x00, 0x05, 0x20, 0x05, 0x00, 0x05, 0x00, - 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x25, 0x00, - 0x05, 0x20, 0x65, 0x00, 0xc5, 0x00, 0x65, 0x00, - 0x65, 0x00, 0x05, 0x00, 0xe5, 0x02, 0x00, 0xe5, - 0x09, 0x80, 0x45, 0x00, 0x85, 0x00, 0xe5, 0x09, - 0xe0, 0x2c, 0x2c, 0xe0, 0x80, 0x86, 0xef, 0x24, - 0x60, 0xef, 0x5c, 0xe0, 0x04, 0xef, 0x07, 0x20, - 0xef, 0x07, 0x00, 0xef, 0x07, 0x00, 0xef, 0x1d, - 0xe0, 0x02, 0xeb, 0x05, 0xef, 0x80, 0x19, 0xe0, - 0x30, 0xef, 0x15, 0xe0, 0x05, 0xef, 0x24, 0x60, - 0xef, 0x01, 0xc0, 0x2f, 0xe0, 0x06, 0xaf, 0xe0, - 0x80, 0x12, 0xef, 0x80, 0x73, 0x8e, 0xef, 0x82, - 0x50, 0x60, 0xef, 0x09, 0x40, 0xef, 0x05, 0x40, - 0xef, 0x6f, 0x60, 0xef, 0x57, 0xa0, 0xef, 0x04, - 0x60, 0x0f, 0xe0, 0x07, 0xef, 0x04, 0x60, 0xef, - 0x30, 0xe0, 0x00, 0xef, 0x02, 0xa0, 0xef, 0x20, - 0xe0, 0x00, 0xef, 0x16, 0x20, 0x2f, 0xe0, 0x46, - 0xef, 0x80, 0xcc, 0xe0, 0x04, 0xef, 0x06, 0x20, - 0xef, 0x05, 0x40, 0xef, 0x01, 0xc0, 0xef, 0x26, - 0x00, 0xcf, 0xe0, 0x00, 0xef, 0x06, 0x60, 0xef, - 0x01, 0xc0, 0xef, 0x01, 0xc0, 0xef, 0x80, 0x0b, - 0x00, 0xef, 0x2f, 0xe0, 0x1d, 0xe9, 0x02, 0xe0, - 0x83, 0x7e, 0xe5, 0xc0, 0x66, 0x58, 0xe0, 0x18, - 0xe5, 0x8f, 0xb2, 0xa0, 0xe5, 0x80, 0x56, 0x20, - 0xe5, 0x95, 0xfa, 0xe0, 0x06, 0xe5, 0x9c, 0xa9, - 0xe0, 0x8b, 0x97, 0xe5, 0x81, 0x96, 0xe0, 0x85, - 0x5a, 0xe5, 0x92, 0xc3, 0x80, 0xe5, 0x8f, 0xd8, - 0xe0, 0xca, 0x9b, 0xc9, 0x1b, 0xe0, 0x16, 0xfb, - 0x58, 0xe0, 0x78, 0xe6, 0x80, 0x68, 0xe0, 0xc0, - 0xbd, 0x88, 0xfd, 0xc0, 0xbf, 0x76, 0x20, 0xfd, - 0xc0, 0xbf, 0x76, 0x20, -}; - -typedef enum { - UNICODE_SCRIPT_Unknown, - UNICODE_SCRIPT_Adlam, - UNICODE_SCRIPT_Ahom, - UNICODE_SCRIPT_Anatolian_Hieroglyphs, - UNICODE_SCRIPT_Arabic, - UNICODE_SCRIPT_Armenian, - UNICODE_SCRIPT_Avestan, - UNICODE_SCRIPT_Balinese, - UNICODE_SCRIPT_Bamum, - UNICODE_SCRIPT_Bassa_Vah, - UNICODE_SCRIPT_Batak, - UNICODE_SCRIPT_Bengali, - UNICODE_SCRIPT_Bhaiksuki, - UNICODE_SCRIPT_Bopomofo, - UNICODE_SCRIPT_Brahmi, - UNICODE_SCRIPT_Braille, - UNICODE_SCRIPT_Buginese, - UNICODE_SCRIPT_Buhid, - UNICODE_SCRIPT_Canadian_Aboriginal, - UNICODE_SCRIPT_Carian, - UNICODE_SCRIPT_Caucasian_Albanian, - UNICODE_SCRIPT_Chakma, - UNICODE_SCRIPT_Cham, - UNICODE_SCRIPT_Cherokee, - UNICODE_SCRIPT_Chorasmian, - UNICODE_SCRIPT_Common, - UNICODE_SCRIPT_Coptic, - UNICODE_SCRIPT_Cuneiform, - UNICODE_SCRIPT_Cypriot, - UNICODE_SCRIPT_Cyrillic, - UNICODE_SCRIPT_Cypro_Minoan, - UNICODE_SCRIPT_Deseret, - UNICODE_SCRIPT_Devanagari, - UNICODE_SCRIPT_Dives_Akuru, - UNICODE_SCRIPT_Dogra, - UNICODE_SCRIPT_Duployan, - UNICODE_SCRIPT_Egyptian_Hieroglyphs, - UNICODE_SCRIPT_Elbasan, - UNICODE_SCRIPT_Elymaic, - UNICODE_SCRIPT_Ethiopic, - UNICODE_SCRIPT_Georgian, - UNICODE_SCRIPT_Glagolitic, - UNICODE_SCRIPT_Gothic, - UNICODE_SCRIPT_Grantha, - UNICODE_SCRIPT_Greek, - UNICODE_SCRIPT_Gujarati, - UNICODE_SCRIPT_Gunjala_Gondi, - UNICODE_SCRIPT_Gurmukhi, - UNICODE_SCRIPT_Han, - UNICODE_SCRIPT_Hangul, - UNICODE_SCRIPT_Hanifi_Rohingya, - UNICODE_SCRIPT_Hanunoo, - UNICODE_SCRIPT_Hatran, - UNICODE_SCRIPT_Hebrew, - UNICODE_SCRIPT_Hiragana, - UNICODE_SCRIPT_Imperial_Aramaic, - UNICODE_SCRIPT_Inherited, - UNICODE_SCRIPT_Inscriptional_Pahlavi, - UNICODE_SCRIPT_Inscriptional_Parthian, - UNICODE_SCRIPT_Javanese, - UNICODE_SCRIPT_Kaithi, - UNICODE_SCRIPT_Kannada, - UNICODE_SCRIPT_Katakana, - UNICODE_SCRIPT_Kawi, - UNICODE_SCRIPT_Kayah_Li, - UNICODE_SCRIPT_Kharoshthi, - UNICODE_SCRIPT_Khmer, - UNICODE_SCRIPT_Khojki, - UNICODE_SCRIPT_Khitan_Small_Script, - UNICODE_SCRIPT_Khudawadi, - UNICODE_SCRIPT_Lao, - UNICODE_SCRIPT_Latin, - UNICODE_SCRIPT_Lepcha, - UNICODE_SCRIPT_Limbu, - UNICODE_SCRIPT_Linear_A, - UNICODE_SCRIPT_Linear_B, - UNICODE_SCRIPT_Lisu, - UNICODE_SCRIPT_Lycian, - UNICODE_SCRIPT_Lydian, - UNICODE_SCRIPT_Makasar, - UNICODE_SCRIPT_Mahajani, - UNICODE_SCRIPT_Malayalam, - UNICODE_SCRIPT_Mandaic, - UNICODE_SCRIPT_Manichaean, - UNICODE_SCRIPT_Marchen, - UNICODE_SCRIPT_Masaram_Gondi, - UNICODE_SCRIPT_Medefaidrin, - UNICODE_SCRIPT_Meetei_Mayek, - UNICODE_SCRIPT_Mende_Kikakui, - UNICODE_SCRIPT_Meroitic_Cursive, - UNICODE_SCRIPT_Meroitic_Hieroglyphs, - UNICODE_SCRIPT_Miao, - UNICODE_SCRIPT_Modi, - UNICODE_SCRIPT_Mongolian, - UNICODE_SCRIPT_Mro, - UNICODE_SCRIPT_Multani, - UNICODE_SCRIPT_Myanmar, - UNICODE_SCRIPT_Nabataean, - UNICODE_SCRIPT_Nag_Mundari, - UNICODE_SCRIPT_Nandinagari, - UNICODE_SCRIPT_New_Tai_Lue, - UNICODE_SCRIPT_Newa, - UNICODE_SCRIPT_Nko, - UNICODE_SCRIPT_Nushu, - UNICODE_SCRIPT_Nyiakeng_Puachue_Hmong, - UNICODE_SCRIPT_Ogham, - UNICODE_SCRIPT_Ol_Chiki, - UNICODE_SCRIPT_Old_Hungarian, - UNICODE_SCRIPT_Old_Italic, - UNICODE_SCRIPT_Old_North_Arabian, - UNICODE_SCRIPT_Old_Permic, - UNICODE_SCRIPT_Old_Persian, - UNICODE_SCRIPT_Old_Sogdian, - UNICODE_SCRIPT_Old_South_Arabian, - UNICODE_SCRIPT_Old_Turkic, - UNICODE_SCRIPT_Old_Uyghur, - UNICODE_SCRIPT_Oriya, - UNICODE_SCRIPT_Osage, - UNICODE_SCRIPT_Osmanya, - UNICODE_SCRIPT_Pahawh_Hmong, - UNICODE_SCRIPT_Palmyrene, - UNICODE_SCRIPT_Pau_Cin_Hau, - UNICODE_SCRIPT_Phags_Pa, - UNICODE_SCRIPT_Phoenician, - UNICODE_SCRIPT_Psalter_Pahlavi, - UNICODE_SCRIPT_Rejang, - UNICODE_SCRIPT_Runic, - UNICODE_SCRIPT_Samaritan, - UNICODE_SCRIPT_Saurashtra, - UNICODE_SCRIPT_Sharada, - UNICODE_SCRIPT_Shavian, - UNICODE_SCRIPT_Siddham, - UNICODE_SCRIPT_SignWriting, - UNICODE_SCRIPT_Sinhala, - UNICODE_SCRIPT_Sogdian, - UNICODE_SCRIPT_Sora_Sompeng, - UNICODE_SCRIPT_Soyombo, - UNICODE_SCRIPT_Sundanese, - UNICODE_SCRIPT_Syloti_Nagri, - UNICODE_SCRIPT_Syriac, - UNICODE_SCRIPT_Tagalog, - UNICODE_SCRIPT_Tagbanwa, - UNICODE_SCRIPT_Tai_Le, - UNICODE_SCRIPT_Tai_Tham, - UNICODE_SCRIPT_Tai_Viet, - UNICODE_SCRIPT_Takri, - UNICODE_SCRIPT_Tamil, - UNICODE_SCRIPT_Tangut, - UNICODE_SCRIPT_Telugu, - UNICODE_SCRIPT_Thaana, - UNICODE_SCRIPT_Thai, - UNICODE_SCRIPT_Tibetan, - UNICODE_SCRIPT_Tifinagh, - UNICODE_SCRIPT_Tirhuta, - UNICODE_SCRIPT_Tangsa, - UNICODE_SCRIPT_Toto, - UNICODE_SCRIPT_Ugaritic, - UNICODE_SCRIPT_Vai, - UNICODE_SCRIPT_Vithkuqi, - UNICODE_SCRIPT_Wancho, - UNICODE_SCRIPT_Warang_Citi, - UNICODE_SCRIPT_Yezidi, - UNICODE_SCRIPT_Yi, - UNICODE_SCRIPT_Zanabazar_Square, - UNICODE_SCRIPT_COUNT, -} UnicodeScriptEnum; - -static const char unicode_script_name_table[] = - "Adlam,Adlm" "\0" - "Ahom,Ahom" "\0" - "Anatolian_Hieroglyphs,Hluw" "\0" - "Arabic,Arab" "\0" - "Armenian,Armn" "\0" - "Avestan,Avst" "\0" - "Balinese,Bali" "\0" - "Bamum,Bamu" "\0" - "Bassa_Vah,Bass" "\0" - "Batak,Batk" "\0" - "Bengali,Beng" "\0" - "Bhaiksuki,Bhks" "\0" - "Bopomofo,Bopo" "\0" - "Brahmi,Brah" "\0" - "Braille,Brai" "\0" - "Buginese,Bugi" "\0" - "Buhid,Buhd" "\0" - "Canadian_Aboriginal,Cans" "\0" - "Carian,Cari" "\0" - "Caucasian_Albanian,Aghb" "\0" - "Chakma,Cakm" "\0" - "Cham,Cham" "\0" - "Cherokee,Cher" "\0" - "Chorasmian,Chrs" "\0" - "Common,Zyyy" "\0" - "Coptic,Copt,Qaac" "\0" - "Cuneiform,Xsux" "\0" - "Cypriot,Cprt" "\0" - "Cyrillic,Cyrl" "\0" - "Cypro_Minoan,Cpmn" "\0" - "Deseret,Dsrt" "\0" - "Devanagari,Deva" "\0" - "Dives_Akuru,Diak" "\0" - "Dogra,Dogr" "\0" - "Duployan,Dupl" "\0" - "Egyptian_Hieroglyphs,Egyp" "\0" - "Elbasan,Elba" "\0" - "Elymaic,Elym" "\0" - "Ethiopic,Ethi" "\0" - "Georgian,Geor" "\0" - "Glagolitic,Glag" "\0" - "Gothic,Goth" "\0" - "Grantha,Gran" "\0" - "Greek,Grek" "\0" - "Gujarati,Gujr" "\0" - "Gunjala_Gondi,Gong" "\0" - "Gurmukhi,Guru" "\0" - "Han,Hani" "\0" - "Hangul,Hang" "\0" - "Hanifi_Rohingya,Rohg" "\0" - "Hanunoo,Hano" "\0" - "Hatran,Hatr" "\0" - "Hebrew,Hebr" "\0" - "Hiragana,Hira" "\0" - "Imperial_Aramaic,Armi" "\0" - "Inherited,Zinh,Qaai" "\0" - "Inscriptional_Pahlavi,Phli" "\0" - "Inscriptional_Parthian,Prti" "\0" - "Javanese,Java" "\0" - "Kaithi,Kthi" "\0" - "Kannada,Knda" "\0" - "Katakana,Kana" "\0" - "Kawi,Kawi" "\0" - "Kayah_Li,Kali" "\0" - "Kharoshthi,Khar" "\0" - "Khmer,Khmr" "\0" - "Khojki,Khoj" "\0" - "Khitan_Small_Script,Kits" "\0" - "Khudawadi,Sind" "\0" - "Lao,Laoo" "\0" - "Latin,Latn" "\0" - "Lepcha,Lepc" "\0" - "Limbu,Limb" "\0" - "Linear_A,Lina" "\0" - "Linear_B,Linb" "\0" - "Lisu,Lisu" "\0" - "Lycian,Lyci" "\0" - "Lydian,Lydi" "\0" - "Makasar,Maka" "\0" - "Mahajani,Mahj" "\0" - "Malayalam,Mlym" "\0" - "Mandaic,Mand" "\0" - "Manichaean,Mani" "\0" - "Marchen,Marc" "\0" - "Masaram_Gondi,Gonm" "\0" - "Medefaidrin,Medf" "\0" - "Meetei_Mayek,Mtei" "\0" - "Mende_Kikakui,Mend" "\0" - "Meroitic_Cursive,Merc" "\0" - "Meroitic_Hieroglyphs,Mero" "\0" - "Miao,Plrd" "\0" - "Modi,Modi" "\0" - "Mongolian,Mong" "\0" - "Mro,Mroo" "\0" - "Multani,Mult" "\0" - "Myanmar,Mymr" "\0" - "Nabataean,Nbat" "\0" - "Nag_Mundari,Nagm" "\0" - "Nandinagari,Nand" "\0" - "New_Tai_Lue,Talu" "\0" - "Newa,Newa" "\0" - "Nko,Nkoo" "\0" - "Nushu,Nshu" "\0" - "Nyiakeng_Puachue_Hmong,Hmnp" "\0" - "Ogham,Ogam" "\0" - "Ol_Chiki,Olck" "\0" - "Old_Hungarian,Hung" "\0" - "Old_Italic,Ital" "\0" - "Old_North_Arabian,Narb" "\0" - "Old_Permic,Perm" "\0" - "Old_Persian,Xpeo" "\0" - "Old_Sogdian,Sogo" "\0" - "Old_South_Arabian,Sarb" "\0" - "Old_Turkic,Orkh" "\0" - "Old_Uyghur,Ougr" "\0" - "Oriya,Orya" "\0" - "Osage,Osge" "\0" - "Osmanya,Osma" "\0" - "Pahawh_Hmong,Hmng" "\0" - "Palmyrene,Palm" "\0" - "Pau_Cin_Hau,Pauc" "\0" - "Phags_Pa,Phag" "\0" - "Phoenician,Phnx" "\0" - "Psalter_Pahlavi,Phlp" "\0" - "Rejang,Rjng" "\0" - "Runic,Runr" "\0" - "Samaritan,Samr" "\0" - "Saurashtra,Saur" "\0" - "Sharada,Shrd" "\0" - "Shavian,Shaw" "\0" - "Siddham,Sidd" "\0" - "SignWriting,Sgnw" "\0" - "Sinhala,Sinh" "\0" - "Sogdian,Sogd" "\0" - "Sora_Sompeng,Sora" "\0" - "Soyombo,Soyo" "\0" - "Sundanese,Sund" "\0" - "Syloti_Nagri,Sylo" "\0" - "Syriac,Syrc" "\0" - "Tagalog,Tglg" "\0" - "Tagbanwa,Tagb" "\0" - "Tai_Le,Tale" "\0" - "Tai_Tham,Lana" "\0" - "Tai_Viet,Tavt" "\0" - "Takri,Takr" "\0" - "Tamil,Taml" "\0" - "Tangut,Tang" "\0" - "Telugu,Telu" "\0" - "Thaana,Thaa" "\0" - "Thai,Thai" "\0" - "Tibetan,Tibt" "\0" - "Tifinagh,Tfng" "\0" - "Tirhuta,Tirh" "\0" - "Tangsa,Tnsa" "\0" - "Toto,Toto" "\0" - "Ugaritic,Ugar" "\0" - "Vai,Vaii" "\0" - "Vithkuqi,Vith" "\0" - "Wancho,Wcho" "\0" - "Warang_Citi,Wara" "\0" - "Yezidi,Yezi" "\0" - "Yi,Yiii" "\0" - "Zanabazar_Square,Zanb" "\0" -; - -static const uint8_t unicode_script_table[2720] = { - 0xc0, 0x19, 0x99, 0x47, 0x85, 0x19, 0x99, 0x47, - 0xae, 0x19, 0x80, 0x47, 0x8e, 0x19, 0x80, 0x47, - 0x84, 0x19, 0x96, 0x47, 0x80, 0x19, 0x9e, 0x47, - 0x80, 0x19, 0xe1, 0x60, 0x47, 0xa6, 0x19, 0x84, - 0x47, 0x84, 0x19, 0x81, 0x0d, 0x93, 0x19, 0xe0, - 0x0f, 0x38, 0x83, 0x2c, 0x80, 0x19, 0x82, 0x2c, - 0x01, 0x83, 0x2c, 0x80, 0x19, 0x80, 0x2c, 0x03, - 0x80, 0x2c, 0x80, 0x19, 0x80, 0x2c, 0x80, 0x19, - 0x82, 0x2c, 0x00, 0x80, 0x2c, 0x00, 0x93, 0x2c, - 0x00, 0xbe, 0x2c, 0x8d, 0x1a, 0x8f, 0x2c, 0xe0, - 0x24, 0x1d, 0x81, 0x38, 0xe0, 0x48, 0x1d, 0x00, - 0xa5, 0x05, 0x01, 0xb1, 0x05, 0x01, 0x82, 0x05, - 0x00, 0xb6, 0x35, 0x07, 0x9a, 0x35, 0x03, 0x85, - 0x35, 0x0a, 0x84, 0x04, 0x80, 0x19, 0x85, 0x04, - 0x80, 0x19, 0x8d, 0x04, 0x80, 0x19, 0x82, 0x04, - 0x80, 0x19, 0x9f, 0x04, 0x80, 0x19, 0x89, 0x04, - 0x8a, 0x38, 0x99, 0x04, 0x80, 0x38, 0xe0, 0x0b, - 0x04, 0x80, 0x19, 0xa1, 0x04, 0x8d, 0x8b, 0x00, - 0xbb, 0x8b, 0x01, 0x82, 0x8b, 0xaf, 0x04, 0xb1, - 0x95, 0x0d, 0xba, 0x66, 0x01, 0x82, 0x66, 0xad, - 0x7f, 0x01, 0x8e, 0x7f, 0x00, 0x9b, 0x52, 0x01, - 0x80, 0x52, 0x00, 0x8a, 0x8b, 0x04, 0x9e, 0x04, - 0x00, 0x81, 0x04, 0x05, 0xc9, 0x04, 0x80, 0x19, - 0x9c, 0x04, 0xd0, 0x20, 0x83, 0x38, 0x8e, 0x20, - 0x81, 0x19, 0x99, 0x20, 0x83, 0x0b, 0x00, 0x87, - 0x0b, 0x01, 0x81, 0x0b, 0x01, 0x95, 0x0b, 0x00, - 0x86, 0x0b, 0x00, 0x80, 0x0b, 0x02, 0x83, 0x0b, - 0x01, 0x88, 0x0b, 0x01, 0x81, 0x0b, 0x01, 0x83, - 0x0b, 0x07, 0x80, 0x0b, 0x03, 0x81, 0x0b, 0x00, - 0x84, 0x0b, 0x01, 0x98, 0x0b, 0x01, 0x82, 0x2f, - 0x00, 0x85, 0x2f, 0x03, 0x81, 0x2f, 0x01, 0x95, - 0x2f, 0x00, 0x86, 0x2f, 0x00, 0x81, 0x2f, 0x00, - 0x81, 0x2f, 0x00, 0x81, 0x2f, 0x01, 0x80, 0x2f, - 0x00, 0x84, 0x2f, 0x03, 0x81, 0x2f, 0x01, 0x82, - 0x2f, 0x02, 0x80, 0x2f, 0x06, 0x83, 0x2f, 0x00, - 0x80, 0x2f, 0x06, 0x90, 0x2f, 0x09, 0x82, 0x2d, - 0x00, 0x88, 0x2d, 0x00, 0x82, 0x2d, 0x00, 0x95, - 0x2d, 0x00, 0x86, 0x2d, 0x00, 0x81, 0x2d, 0x00, - 0x84, 0x2d, 0x01, 0x89, 0x2d, 0x00, 0x82, 0x2d, - 0x00, 0x82, 0x2d, 0x01, 0x80, 0x2d, 0x0e, 0x83, - 0x2d, 0x01, 0x8b, 0x2d, 0x06, 0x86, 0x2d, 0x00, - 0x82, 0x74, 0x00, 0x87, 0x74, 0x01, 0x81, 0x74, - 0x01, 0x95, 0x74, 0x00, 0x86, 0x74, 0x00, 0x81, - 0x74, 0x00, 0x84, 0x74, 0x01, 0x88, 0x74, 0x01, - 0x81, 0x74, 0x01, 0x82, 0x74, 0x06, 0x82, 0x74, - 0x03, 0x81, 0x74, 0x00, 0x84, 0x74, 0x01, 0x91, - 0x74, 0x09, 0x81, 0x92, 0x00, 0x85, 0x92, 0x02, - 0x82, 0x92, 0x00, 0x83, 0x92, 0x02, 0x81, 0x92, - 0x00, 0x80, 0x92, 0x00, 0x81, 0x92, 0x02, 0x81, - 0x92, 0x02, 0x82, 0x92, 0x02, 0x8b, 0x92, 0x03, - 0x84, 0x92, 0x02, 0x82, 0x92, 0x00, 0x83, 0x92, - 0x01, 0x80, 0x92, 0x05, 0x80, 0x92, 0x0d, 0x94, - 0x92, 0x04, 0x8c, 0x94, 0x00, 0x82, 0x94, 0x00, - 0x96, 0x94, 0x00, 0x8f, 0x94, 0x01, 0x88, 0x94, - 0x00, 0x82, 0x94, 0x00, 0x83, 0x94, 0x06, 0x81, - 0x94, 0x00, 0x82, 0x94, 0x01, 0x80, 0x94, 0x01, - 0x83, 0x94, 0x01, 0x89, 0x94, 0x06, 0x88, 0x94, - 0x8c, 0x3d, 0x00, 0x82, 0x3d, 0x00, 0x96, 0x3d, - 0x00, 0x89, 0x3d, 0x00, 0x84, 0x3d, 0x01, 0x88, - 0x3d, 0x00, 0x82, 0x3d, 0x00, 0x83, 0x3d, 0x06, - 0x81, 0x3d, 0x05, 0x81, 0x3d, 0x00, 0x83, 0x3d, - 0x01, 0x89, 0x3d, 0x00, 0x82, 0x3d, 0x0b, 0x8c, - 0x51, 0x00, 0x82, 0x51, 0x00, 0xb2, 0x51, 0x00, - 0x82, 0x51, 0x00, 0x85, 0x51, 0x03, 0x8f, 0x51, - 0x01, 0x99, 0x51, 0x00, 0x82, 0x85, 0x00, 0x91, - 0x85, 0x02, 0x97, 0x85, 0x00, 0x88, 0x85, 0x00, - 0x80, 0x85, 0x01, 0x86, 0x85, 0x02, 0x80, 0x85, - 0x03, 0x85, 0x85, 0x00, 0x80, 0x85, 0x00, 0x87, - 0x85, 0x05, 0x89, 0x85, 0x01, 0x82, 0x85, 0x0b, - 0xb9, 0x96, 0x03, 0x80, 0x19, 0x9b, 0x96, 0x24, - 0x81, 0x46, 0x00, 0x80, 0x46, 0x00, 0x84, 0x46, - 0x00, 0x97, 0x46, 0x00, 0x80, 0x46, 0x00, 0x96, - 0x46, 0x01, 0x84, 0x46, 0x00, 0x80, 0x46, 0x00, - 0x86, 0x46, 0x00, 0x89, 0x46, 0x01, 0x83, 0x46, - 0x1f, 0xc7, 0x97, 0x00, 0xa3, 0x97, 0x03, 0xa6, - 0x97, 0x00, 0xa3, 0x97, 0x00, 0x8e, 0x97, 0x00, - 0x86, 0x97, 0x83, 0x19, 0x81, 0x97, 0x24, 0xe0, - 0x3f, 0x60, 0xa5, 0x28, 0x00, 0x80, 0x28, 0x04, - 0x80, 0x28, 0x01, 0xaa, 0x28, 0x80, 0x19, 0x83, - 0x28, 0xe0, 0x9f, 0x31, 0xc8, 0x27, 0x00, 0x83, - 0x27, 0x01, 0x86, 0x27, 0x00, 0x80, 0x27, 0x00, - 0x83, 0x27, 0x01, 0xa8, 0x27, 0x00, 0x83, 0x27, - 0x01, 0xa0, 0x27, 0x00, 0x83, 0x27, 0x01, 0x86, - 0x27, 0x00, 0x80, 0x27, 0x00, 0x83, 0x27, 0x01, - 0x8e, 0x27, 0x00, 0xb8, 0x27, 0x00, 0x83, 0x27, - 0x01, 0xc2, 0x27, 0x01, 0x9f, 0x27, 0x02, 0x99, - 0x27, 0x05, 0xd5, 0x17, 0x01, 0x85, 0x17, 0x01, - 0xe2, 0x1f, 0x12, 0x9c, 0x69, 0x02, 0xca, 0x7e, - 0x82, 0x19, 0x8a, 0x7e, 0x06, 0x95, 0x8c, 0x08, - 0x80, 0x8c, 0x94, 0x33, 0x81, 0x19, 0x08, 0x93, - 0x11, 0x0b, 0x8c, 0x8d, 0x00, 0x82, 0x8d, 0x00, - 0x81, 0x8d, 0x0b, 0xdd, 0x42, 0x01, 0x89, 0x42, - 0x05, 0x89, 0x42, 0x05, 0x81, 0x5d, 0x81, 0x19, - 0x80, 0x5d, 0x80, 0x19, 0x93, 0x5d, 0x05, 0xd8, - 0x5d, 0x06, 0xaa, 0x5d, 0x04, 0xc5, 0x12, 0x09, - 0x9e, 0x49, 0x00, 0x8b, 0x49, 0x03, 0x8b, 0x49, - 0x03, 0x80, 0x49, 0x02, 0x8b, 0x49, 0x9d, 0x8e, - 0x01, 0x84, 0x8e, 0x0a, 0xab, 0x64, 0x03, 0x99, - 0x64, 0x05, 0x8a, 0x64, 0x02, 0x81, 0x64, 0x9f, - 0x42, 0x9b, 0x10, 0x01, 0x81, 0x10, 0xbe, 0x8f, - 0x00, 0x9c, 0x8f, 0x01, 0x8a, 0x8f, 0x05, 0x89, - 0x8f, 0x05, 0x8d, 0x8f, 0x01, 0x9e, 0x38, 0x30, - 0xcc, 0x07, 0x02, 0xae, 0x07, 0x00, 0xbf, 0x89, - 0xb3, 0x0a, 0x07, 0x83, 0x0a, 0xb7, 0x48, 0x02, - 0x8e, 0x48, 0x02, 0x82, 0x48, 0xaf, 0x6a, 0x88, - 0x1d, 0x06, 0xaa, 0x28, 0x01, 0x82, 0x28, 0x87, - 0x89, 0x07, 0x82, 0x38, 0x80, 0x19, 0x8c, 0x38, - 0x80, 0x19, 0x86, 0x38, 0x83, 0x19, 0x80, 0x38, - 0x85, 0x19, 0x80, 0x38, 0x82, 0x19, 0x81, 0x38, - 0x80, 0x19, 0x04, 0xa5, 0x47, 0x84, 0x2c, 0x80, - 0x1d, 0xb0, 0x47, 0x84, 0x2c, 0x83, 0x47, 0x84, - 0x2c, 0x8c, 0x47, 0x80, 0x1d, 0xc5, 0x47, 0x80, - 0x2c, 0xbf, 0x38, 0xe0, 0x9f, 0x47, 0x95, 0x2c, - 0x01, 0x85, 0x2c, 0x01, 0xa5, 0x2c, 0x01, 0x85, - 0x2c, 0x01, 0x87, 0x2c, 0x00, 0x80, 0x2c, 0x00, - 0x80, 0x2c, 0x00, 0x80, 0x2c, 0x00, 0x9e, 0x2c, - 0x01, 0xb4, 0x2c, 0x00, 0x8e, 0x2c, 0x00, 0x8d, - 0x2c, 0x01, 0x85, 0x2c, 0x00, 0x92, 0x2c, 0x01, - 0x82, 0x2c, 0x00, 0x88, 0x2c, 0x00, 0x8b, 0x19, - 0x81, 0x38, 0xd6, 0x19, 0x00, 0x8a, 0x19, 0x80, - 0x47, 0x01, 0x8a, 0x19, 0x80, 0x47, 0x8e, 0x19, - 0x00, 0x8c, 0x47, 0x02, 0xa0, 0x19, 0x0e, 0xa0, - 0x38, 0x0e, 0xa5, 0x19, 0x80, 0x2c, 0x82, 0x19, - 0x81, 0x47, 0x85, 0x19, 0x80, 0x47, 0x9a, 0x19, - 0x80, 0x47, 0x90, 0x19, 0xa8, 0x47, 0x82, 0x19, - 0x03, 0xe2, 0x36, 0x19, 0x18, 0x8a, 0x19, 0x14, - 0xe3, 0x3f, 0x19, 0xe0, 0x9f, 0x0f, 0xe2, 0x13, - 0x19, 0x01, 0x9f, 0x19, 0x00, 0xe0, 0x08, 0x19, - 0xdf, 0x29, 0x9f, 0x47, 0xe0, 0x13, 0x1a, 0x04, - 0x86, 0x1a, 0xa5, 0x28, 0x00, 0x80, 0x28, 0x04, - 0x80, 0x28, 0x01, 0xb7, 0x98, 0x06, 0x81, 0x98, - 0x0d, 0x80, 0x98, 0x96, 0x27, 0x08, 0x86, 0x27, - 0x00, 0x86, 0x27, 0x00, 0x86, 0x27, 0x00, 0x86, - 0x27, 0x00, 0x86, 0x27, 0x00, 0x86, 0x27, 0x00, - 0x86, 0x27, 0x00, 0x86, 0x27, 0x00, 0x9f, 0x1d, - 0xdd, 0x19, 0x21, 0x99, 0x30, 0x00, 0xd8, 0x30, - 0x0b, 0xe0, 0x75, 0x30, 0x19, 0x8b, 0x19, 0x03, - 0x84, 0x19, 0x80, 0x30, 0x80, 0x19, 0x80, 0x30, - 0x98, 0x19, 0x88, 0x30, 0x83, 0x38, 0x81, 0x31, - 0x87, 0x19, 0x83, 0x30, 0x83, 0x19, 0x00, 0xd5, - 0x36, 0x01, 0x81, 0x38, 0x81, 0x19, 0x82, 0x36, - 0x80, 0x19, 0xd9, 0x3e, 0x81, 0x19, 0x82, 0x3e, - 0x04, 0xaa, 0x0d, 0x00, 0xdd, 0x31, 0x00, 0x8f, - 0x19, 0x9f, 0x0d, 0xa3, 0x19, 0x0b, 0x8f, 0x3e, - 0x9e, 0x31, 0x00, 0xbf, 0x19, 0x9e, 0x31, 0xd0, - 0x19, 0xae, 0x3e, 0x80, 0x19, 0xd7, 0x3e, 0xe0, - 0x47, 0x19, 0xf0, 0x09, 0x5f, 0x30, 0xbf, 0x19, - 0xf0, 0x41, 0x9f, 0x30, 0xe4, 0x2c, 0xa2, 0x02, - 0xb6, 0xa2, 0x08, 0xaf, 0x4c, 0xe0, 0xcb, 0x9d, - 0x13, 0xdf, 0x1d, 0xd7, 0x08, 0x07, 0xa1, 0x19, - 0xe0, 0x05, 0x47, 0x82, 0x19, 0xbf, 0x47, 0x04, - 0x81, 0x47, 0x00, 0x80, 0x47, 0x00, 0x84, 0x47, - 0x17, 0x8d, 0x47, 0xac, 0x8a, 0x02, 0x89, 0x19, - 0x05, 0xb7, 0x7a, 0x07, 0xc5, 0x80, 0x07, 0x8b, - 0x80, 0x05, 0x9f, 0x20, 0xad, 0x40, 0x80, 0x19, - 0x80, 0x40, 0xa3, 0x7d, 0x0a, 0x80, 0x7d, 0x9c, - 0x31, 0x02, 0xcd, 0x3b, 0x00, 0x80, 0x19, 0x89, - 0x3b, 0x03, 0x81, 0x3b, 0x9e, 0x60, 0x00, 0xb6, - 0x16, 0x08, 0x8d, 0x16, 0x01, 0x89, 0x16, 0x01, - 0x83, 0x16, 0x9f, 0x60, 0xc2, 0x90, 0x17, 0x84, - 0x90, 0x96, 0x57, 0x09, 0x85, 0x27, 0x01, 0x85, - 0x27, 0x01, 0x85, 0x27, 0x08, 0x86, 0x27, 0x00, - 0x86, 0x27, 0x00, 0xaa, 0x47, 0x80, 0x19, 0x88, - 0x47, 0x80, 0x2c, 0x83, 0x47, 0x81, 0x19, 0x03, - 0xcf, 0x17, 0xad, 0x57, 0x01, 0x89, 0x57, 0x05, - 0xf0, 0x1b, 0x43, 0x31, 0x0b, 0x96, 0x31, 0x03, - 0xb0, 0x31, 0x70, 0x10, 0xa3, 0xe1, 0x0d, 0x30, - 0x01, 0xe0, 0x09, 0x30, 0x25, 0x86, 0x47, 0x0b, - 0x84, 0x05, 0x04, 0x99, 0x35, 0x00, 0x84, 0x35, - 0x00, 0x80, 0x35, 0x00, 0x81, 0x35, 0x00, 0x81, - 0x35, 0x00, 0x89, 0x35, 0xe0, 0x12, 0x04, 0x0f, - 0xe1, 0x0a, 0x04, 0x81, 0x19, 0xcf, 0x04, 0x01, - 0xb5, 0x04, 0x06, 0x80, 0x04, 0x1f, 0x8f, 0x04, - 0x8f, 0x38, 0x89, 0x19, 0x05, 0x8d, 0x38, 0x81, - 0x1d, 0xa2, 0x19, 0x00, 0x92, 0x19, 0x00, 0x83, - 0x19, 0x03, 0x84, 0x04, 0x00, 0xe0, 0x26, 0x04, - 0x01, 0x80, 0x19, 0x00, 0x9f, 0x19, 0x99, 0x47, - 0x85, 0x19, 0x99, 0x47, 0x8a, 0x19, 0x89, 0x3e, - 0x80, 0x19, 0xac, 0x3e, 0x81, 0x19, 0x9e, 0x31, - 0x02, 0x85, 0x31, 0x01, 0x85, 0x31, 0x01, 0x85, - 0x31, 0x01, 0x82, 0x31, 0x02, 0x86, 0x19, 0x00, - 0x86, 0x19, 0x09, 0x84, 0x19, 0x01, 0x8b, 0x4b, - 0x00, 0x99, 0x4b, 0x00, 0x92, 0x4b, 0x00, 0x81, - 0x4b, 0x00, 0x8e, 0x4b, 0x01, 0x8d, 0x4b, 0x21, - 0xe0, 0x1a, 0x4b, 0x04, 0x82, 0x19, 0x03, 0xac, - 0x19, 0x02, 0x88, 0x19, 0xce, 0x2c, 0x00, 0x8c, - 0x19, 0x02, 0x80, 0x2c, 0x2e, 0xac, 0x19, 0x80, - 0x38, 0x60, 0x21, 0x9c, 0x4d, 0x02, 0xb0, 0x13, - 0x0e, 0x80, 0x38, 0x9a, 0x19, 0x03, 0xa3, 0x6c, - 0x08, 0x82, 0x6c, 0x9a, 0x2a, 0x04, 0xaa, 0x6e, - 0x04, 0x9d, 0x9c, 0x00, 0x80, 0x9c, 0xa3, 0x6f, - 0x03, 0x8d, 0x6f, 0x29, 0xcf, 0x1f, 0xaf, 0x82, - 0x9d, 0x76, 0x01, 0x89, 0x76, 0x05, 0xa3, 0x75, - 0x03, 0xa3, 0x75, 0x03, 0xa7, 0x25, 0x07, 0xb3, - 0x14, 0x0a, 0x80, 0x14, 0x8a, 0x9e, 0x00, 0x8e, - 0x9e, 0x00, 0x86, 0x9e, 0x00, 0x81, 0x9e, 0x00, - 0x8a, 0x9e, 0x00, 0x8e, 0x9e, 0x00, 0x86, 0x9e, - 0x00, 0x81, 0x9e, 0x42, 0xe0, 0xd6, 0x4a, 0x08, - 0x95, 0x4a, 0x09, 0x87, 0x4a, 0x17, 0x85, 0x47, - 0x00, 0xa9, 0x47, 0x00, 0x88, 0x47, 0x44, 0x85, - 0x1c, 0x01, 0x80, 0x1c, 0x00, 0xab, 0x1c, 0x00, - 0x81, 0x1c, 0x02, 0x80, 0x1c, 0x01, 0x80, 0x1c, - 0x95, 0x37, 0x00, 0x88, 0x37, 0x9f, 0x78, 0x9e, - 0x61, 0x07, 0x88, 0x61, 0x2f, 0x92, 0x34, 0x00, - 0x81, 0x34, 0x04, 0x84, 0x34, 0x9b, 0x7b, 0x02, - 0x80, 0x7b, 0x99, 0x4e, 0x04, 0x80, 0x4e, 0x3f, - 0x9f, 0x5a, 0x97, 0x59, 0x03, 0x93, 0x59, 0x01, - 0xad, 0x59, 0x83, 0x41, 0x00, 0x81, 0x41, 0x04, - 0x87, 0x41, 0x00, 0x82, 0x41, 0x00, 0x9c, 0x41, - 0x01, 0x82, 0x41, 0x03, 0x89, 0x41, 0x06, 0x88, - 0x41, 0x06, 0x9f, 0x71, 0x9f, 0x6d, 0x1f, 0xa6, - 0x53, 0x03, 0x8b, 0x53, 0x08, 0xb5, 0x06, 0x02, - 0x86, 0x06, 0x95, 0x3a, 0x01, 0x87, 0x3a, 0x92, - 0x39, 0x04, 0x87, 0x39, 0x91, 0x7c, 0x06, 0x83, - 0x7c, 0x0b, 0x86, 0x7c, 0x4f, 0xc8, 0x72, 0x36, - 0xb2, 0x6b, 0x0c, 0xb2, 0x6b, 0x06, 0x85, 0x6b, - 0xa7, 0x32, 0x07, 0x89, 0x32, 0x60, 0xc5, 0x9e, - 0x04, 0x00, 0xa9, 0xa1, 0x00, 0x82, 0xa1, 0x01, - 0x81, 0xa1, 0x4a, 0x82, 0x04, 0xa7, 0x70, 0x07, - 0xa9, 0x86, 0x15, 0x99, 0x73, 0x25, 0x9b, 0x18, - 0x13, 0x96, 0x26, 0x08, 0xcd, 0x0e, 0x03, 0xa3, - 0x0e, 0x08, 0x80, 0x0e, 0xc2, 0x3c, 0x09, 0x80, - 0x3c, 0x01, 0x98, 0x87, 0x06, 0x89, 0x87, 0x05, - 0xb4, 0x15, 0x00, 0x91, 0x15, 0x07, 0xa6, 0x50, - 0x08, 0xdf, 0x81, 0x00, 0x93, 0x85, 0x0a, 0x91, - 0x43, 0x00, 0xae, 0x43, 0x3d, 0x86, 0x5f, 0x00, - 0x80, 0x5f, 0x00, 0x83, 0x5f, 0x00, 0x8e, 0x5f, - 0x00, 0x8a, 0x5f, 0x05, 0xba, 0x45, 0x04, 0x89, - 0x45, 0x05, 0x83, 0x2b, 0x00, 0x87, 0x2b, 0x01, - 0x81, 0x2b, 0x01, 0x95, 0x2b, 0x00, 0x86, 0x2b, - 0x00, 0x81, 0x2b, 0x00, 0x84, 0x2b, 0x00, 0x80, - 0x38, 0x88, 0x2b, 0x01, 0x81, 0x2b, 0x01, 0x82, - 0x2b, 0x01, 0x80, 0x2b, 0x05, 0x80, 0x2b, 0x04, - 0x86, 0x2b, 0x01, 0x86, 0x2b, 0x02, 0x84, 0x2b, - 0x60, 0x2a, 0xdb, 0x65, 0x00, 0x84, 0x65, 0x1d, - 0xc7, 0x99, 0x07, 0x89, 0x99, 0x60, 0x45, 0xb5, - 0x83, 0x01, 0xa5, 0x83, 0x21, 0xc4, 0x5c, 0x0a, - 0x89, 0x5c, 0x05, 0x8c, 0x5d, 0x12, 0xb9, 0x91, - 0x05, 0x89, 0x91, 0x35, 0x9a, 0x02, 0x01, 0x8e, - 0x02, 0x03, 0x96, 0x02, 0x60, 0x58, 0xbb, 0x22, - 0x60, 0x03, 0xd2, 0xa0, 0x0b, 0x80, 0xa0, 0x86, - 0x21, 0x01, 0x80, 0x21, 0x01, 0x87, 0x21, 0x00, - 0x81, 0x21, 0x00, 0x9d, 0x21, 0x00, 0x81, 0x21, - 0x01, 0x8b, 0x21, 0x08, 0x89, 0x21, 0x45, 0x87, - 0x63, 0x01, 0xad, 0x63, 0x01, 0x8a, 0x63, 0x1a, - 0xc7, 0xa3, 0x07, 0xd2, 0x88, 0x0c, 0x8f, 0x12, - 0xb8, 0x79, 0x06, 0x89, 0x20, 0x60, 0x95, 0x88, - 0x0c, 0x00, 0xac, 0x0c, 0x00, 0x8d, 0x0c, 0x09, - 0x9c, 0x0c, 0x02, 0x9f, 0x54, 0x01, 0x95, 0x54, - 0x00, 0x8d, 0x54, 0x48, 0x86, 0x55, 0x00, 0x81, - 0x55, 0x00, 0xab, 0x55, 0x02, 0x80, 0x55, 0x00, - 0x81, 0x55, 0x00, 0x88, 0x55, 0x07, 0x89, 0x55, - 0x05, 0x85, 0x2e, 0x00, 0x81, 0x2e, 0x00, 0xa4, - 0x2e, 0x00, 0x81, 0x2e, 0x00, 0x85, 0x2e, 0x06, - 0x89, 0x2e, 0x60, 0xd5, 0x98, 0x4f, 0x06, 0x90, - 0x3f, 0x00, 0xa8, 0x3f, 0x02, 0x9b, 0x3f, 0x55, - 0x80, 0x4c, 0x0e, 0xb1, 0x92, 0x0c, 0x80, 0x92, - 0xe3, 0x39, 0x1b, 0x60, 0x05, 0xe0, 0x0e, 0x1b, - 0x00, 0x84, 0x1b, 0x0a, 0xe0, 0x63, 0x1b, 0x69, - 0xeb, 0xe0, 0x02, 0x1e, 0x0c, 0xe3, 0xf5, 0x24, - 0x6f, 0x49, 0xe1, 0xe6, 0x03, 0x70, 0x11, 0x58, - 0xe1, 0xd8, 0x08, 0x06, 0x9e, 0x5e, 0x00, 0x89, - 0x5e, 0x03, 0x81, 0x5e, 0xce, 0x9a, 0x00, 0x89, - 0x9a, 0x05, 0x9d, 0x09, 0x01, 0x85, 0x09, 0x09, - 0xc5, 0x77, 0x09, 0x89, 0x77, 0x00, 0x86, 0x77, - 0x00, 0x94, 0x77, 0x04, 0x92, 0x77, 0x62, 0x4f, - 0xda, 0x56, 0x60, 0x04, 0xca, 0x5b, 0x03, 0xb8, - 0x5b, 0x06, 0x90, 0x5b, 0x3f, 0x80, 0x93, 0x80, - 0x67, 0x81, 0x30, 0x80, 0x44, 0x0a, 0x81, 0x30, - 0x0d, 0xf0, 0x07, 0x97, 0x93, 0x07, 0xe2, 0x9f, - 0x93, 0xe1, 0x75, 0x44, 0x29, 0x88, 0x93, 0x70, - 0x12, 0x86, 0x83, 0x3e, 0x00, 0x86, 0x3e, 0x00, - 0x81, 0x3e, 0x00, 0x80, 0x3e, 0xe0, 0xbe, 0x36, - 0x82, 0x3e, 0x0e, 0x80, 0x36, 0x1c, 0x82, 0x36, - 0x01, 0x80, 0x3e, 0x0d, 0x83, 0x3e, 0x07, 0xe1, - 0x2b, 0x67, 0x68, 0xa3, 0xe0, 0x0a, 0x23, 0x04, - 0x8c, 0x23, 0x02, 0x88, 0x23, 0x06, 0x89, 0x23, - 0x01, 0x83, 0x23, 0x83, 0x19, 0x70, 0x01, 0xfb, - 0xad, 0x38, 0x01, 0x96, 0x38, 0x08, 0xe0, 0x13, - 0x19, 0x3b, 0xe0, 0x95, 0x19, 0x09, 0xa6, 0x19, - 0x01, 0xbd, 0x19, 0x82, 0x38, 0x90, 0x19, 0x87, - 0x38, 0x81, 0x19, 0x86, 0x38, 0x9d, 0x19, 0x83, - 0x38, 0xbc, 0x19, 0x14, 0xc5, 0x2c, 0x60, 0x19, - 0x93, 0x19, 0x0b, 0x93, 0x19, 0x0b, 0xd6, 0x19, - 0x08, 0x98, 0x19, 0x60, 0x26, 0xd4, 0x19, 0x00, - 0xc6, 0x19, 0x00, 0x81, 0x19, 0x01, 0x80, 0x19, - 0x01, 0x81, 0x19, 0x01, 0x83, 0x19, 0x00, 0x8b, - 0x19, 0x00, 0x80, 0x19, 0x00, 0x86, 0x19, 0x00, - 0xc0, 0x19, 0x00, 0x83, 0x19, 0x01, 0x87, 0x19, - 0x00, 0x86, 0x19, 0x00, 0x9b, 0x19, 0x00, 0x83, - 0x19, 0x00, 0x84, 0x19, 0x00, 0x80, 0x19, 0x02, - 0x86, 0x19, 0x00, 0xe0, 0xf3, 0x19, 0x01, 0xe0, - 0xc3, 0x19, 0x01, 0xb1, 0x19, 0xe2, 0x2b, 0x84, - 0x0e, 0x84, 0x84, 0x00, 0x8e, 0x84, 0x63, 0xef, - 0x9e, 0x47, 0x05, 0x85, 0x47, 0x60, 0x74, 0x86, - 0x29, 0x00, 0x90, 0x29, 0x01, 0x86, 0x29, 0x00, - 0x81, 0x29, 0x00, 0x84, 0x29, 0x04, 0xbd, 0x1d, - 0x20, 0x80, 0x1d, 0x60, 0x0f, 0xac, 0x68, 0x02, - 0x8d, 0x68, 0x01, 0x89, 0x68, 0x03, 0x81, 0x68, - 0x60, 0xdf, 0x9e, 0x9b, 0x10, 0xb9, 0x9f, 0x04, - 0x80, 0x9f, 0x61, 0x6f, 0xa9, 0x62, 0x62, 0x85, - 0x86, 0x27, 0x00, 0x83, 0x27, 0x00, 0x81, 0x27, - 0x00, 0x8e, 0x27, 0x00, 0xe0, 0x64, 0x58, 0x01, - 0x8f, 0x58, 0x28, 0xcb, 0x01, 0x03, 0x89, 0x01, - 0x03, 0x81, 0x01, 0x62, 0xb0, 0xc3, 0x19, 0x4b, - 0xbc, 0x19, 0x60, 0x61, 0x83, 0x04, 0x00, 0x9a, - 0x04, 0x00, 0x81, 0x04, 0x00, 0x80, 0x04, 0x01, - 0x80, 0x04, 0x00, 0x89, 0x04, 0x00, 0x83, 0x04, - 0x00, 0x80, 0x04, 0x00, 0x80, 0x04, 0x05, 0x80, - 0x04, 0x03, 0x80, 0x04, 0x00, 0x80, 0x04, 0x00, - 0x80, 0x04, 0x00, 0x82, 0x04, 0x00, 0x81, 0x04, - 0x00, 0x80, 0x04, 0x01, 0x80, 0x04, 0x00, 0x80, - 0x04, 0x00, 0x80, 0x04, 0x00, 0x80, 0x04, 0x00, - 0x80, 0x04, 0x00, 0x81, 0x04, 0x00, 0x80, 0x04, - 0x01, 0x83, 0x04, 0x00, 0x86, 0x04, 0x00, 0x83, - 0x04, 0x00, 0x83, 0x04, 0x00, 0x80, 0x04, 0x00, - 0x89, 0x04, 0x00, 0x90, 0x04, 0x04, 0x82, 0x04, - 0x00, 0x84, 0x04, 0x00, 0x90, 0x04, 0x33, 0x81, - 0x04, 0x60, 0xad, 0xab, 0x19, 0x03, 0xe0, 0x03, - 0x19, 0x0b, 0x8e, 0x19, 0x01, 0x8e, 0x19, 0x00, - 0x8e, 0x19, 0x00, 0xa4, 0x19, 0x09, 0xe0, 0x4d, - 0x19, 0x37, 0x99, 0x19, 0x80, 0x36, 0x81, 0x19, - 0x0c, 0xab, 0x19, 0x03, 0x88, 0x19, 0x06, 0x81, - 0x19, 0x0d, 0x85, 0x19, 0x60, 0x39, 0xe3, 0x77, - 0x19, 0x03, 0x90, 0x19, 0x02, 0x8c, 0x19, 0x02, - 0xe0, 0x16, 0x19, 0x03, 0xde, 0x19, 0x05, 0x8b, - 0x19, 0x03, 0x80, 0x19, 0x0e, 0x8b, 0x19, 0x03, - 0xb7, 0x19, 0x07, 0x89, 0x19, 0x05, 0xa7, 0x19, - 0x07, 0x9d, 0x19, 0x01, 0x81, 0x19, 0x4d, 0xe0, - 0xf3, 0x19, 0x0b, 0x8d, 0x19, 0x01, 0x8c, 0x19, - 0x02, 0x88, 0x19, 0x06, 0xad, 0x19, 0x00, 0x86, - 0x19, 0x07, 0x8d, 0x19, 0x03, 0x88, 0x19, 0x06, - 0x88, 0x19, 0x06, 0xe0, 0x32, 0x19, 0x00, 0xb6, - 0x19, 0x24, 0x89, 0x19, 0x63, 0xa5, 0xf0, 0x96, - 0x7f, 0x30, 0x1f, 0xef, 0xd9, 0x30, 0x05, 0xe0, - 0x7d, 0x30, 0x01, 0xf0, 0x06, 0x21, 0x30, 0x0d, - 0xf0, 0x0c, 0xd0, 0x30, 0x6b, 0xbe, 0xe1, 0xbd, - 0x30, 0x65, 0x81, 0xf0, 0x02, 0xea, 0x30, 0x04, - 0xef, 0xff, 0x30, 0x7a, 0xcb, 0xf0, 0x80, 0x19, - 0x1d, 0xdf, 0x19, 0x60, 0x1f, 0xe0, 0x8f, 0x38, -}; - -static const uint8_t unicode_script_ext_table[828] = { - 0x82, 0xc1, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x00, - 0x00, 0x01, 0x2c, 0x1c, 0x00, 0x0c, 0x01, 0x47, - 0x80, 0x92, 0x00, 0x00, 0x02, 0x1d, 0x6e, 0x00, - 0x02, 0x1d, 0x29, 0x01, 0x02, 0x1d, 0x47, 0x00, - 0x02, 0x1d, 0x29, 0x81, 0x03, 0x00, 0x00, 0x06, - 0x04, 0x66, 0x32, 0x8b, 0x95, 0xa1, 0x0d, 0x00, - 0x00, 0x06, 0x04, 0x66, 0x32, 0x8b, 0x95, 0xa1, - 0x00, 0x03, 0x04, 0x8b, 0x95, 0x01, 0x00, 0x00, - 0x07, 0x01, 0x04, 0x66, 0x32, 0x8b, 0x95, 0xa1, - 0x1f, 0x00, 0x00, 0x09, 0x01, 0x04, 0x52, 0x53, - 0x73, 0x7c, 0x32, 0x86, 0x8b, 0x09, 0x00, 0x0a, - 0x02, 0x04, 0x8b, 0x09, 0x00, 0x09, 0x03, 0x04, - 0x95, 0xa1, 0x05, 0x00, 0x00, 0x02, 0x04, 0x8b, - 0x62, 0x00, 0x00, 0x02, 0x04, 0x32, 0x81, 0xfb, - 0x00, 0x00, 0x0d, 0x0b, 0x20, 0x2b, 0x2d, 0x2f, - 0x3d, 0x47, 0x51, 0x74, 0x81, 0x92, 0x94, 0x99, - 0x00, 0x0c, 0x0b, 0x20, 0x2b, 0x2d, 0x2f, 0x3d, - 0x47, 0x51, 0x74, 0x92, 0x94, 0x99, 0x10, 0x00, - 0x00, 0x14, 0x0b, 0x20, 0x22, 0x2e, 0x55, 0x2b, - 0x2d, 0x2f, 0x3d, 0x50, 0x51, 0x63, 0x74, 0x45, - 0x85, 0x8a, 0x91, 0x92, 0x94, 0x99, 0x00, 0x15, - 0x0b, 0x20, 0x22, 0x2e, 0x55, 0x2b, 0x2d, 0x2f, - 0x3d, 0x49, 0x50, 0x51, 0x63, 0x74, 0x45, 0x85, - 0x8a, 0x91, 0x92, 0x94, 0x99, 0x09, 0x04, 0x20, - 0x22, 0x3c, 0x50, 0x75, 0x00, 0x09, 0x03, 0x0b, - 0x15, 0x8a, 0x75, 0x00, 0x09, 0x02, 0x2f, 0x5f, - 0x75, 0x00, 0x09, 0x02, 0x2d, 0x43, 0x80, 0x75, - 0x00, 0x0d, 0x02, 0x2b, 0x92, 0x80, 0x71, 0x00, - 0x09, 0x02, 0x3d, 0x63, 0x82, 0xcf, 0x00, 0x09, - 0x03, 0x15, 0x60, 0x8e, 0x80, 0x30, 0x00, 0x00, - 0x02, 0x28, 0x47, 0x85, 0xb8, 0x00, 0x01, 0x04, - 0x11, 0x33, 0x8d, 0x8c, 0x80, 0x4a, 0x00, 0x01, - 0x02, 0x5d, 0x7a, 0x00, 0x00, 0x00, 0x02, 0x5d, - 0x7a, 0x84, 0x49, 0x00, 0x00, 0x04, 0x0b, 0x20, - 0x2b, 0x3d, 0x00, 0x01, 0x20, 0x00, 0x04, 0x0b, - 0x20, 0x2b, 0x3d, 0x00, 0x02, 0x20, 0x2b, 0x00, - 0x01, 0x20, 0x01, 0x02, 0x0b, 0x20, 0x00, 0x02, - 0x20, 0x81, 0x00, 0x02, 0x0b, 0x20, 0x00, 0x02, - 0x20, 0x81, 0x00, 0x06, 0x20, 0x3d, 0x51, 0x74, - 0x92, 0x94, 0x00, 0x01, 0x20, 0x01, 0x02, 0x20, - 0x81, 0x01, 0x01, 0x20, 0x00, 0x02, 0x20, 0x81, - 0x00, 0x02, 0x0b, 0x20, 0x06, 0x01, 0x20, 0x00, - 0x02, 0x20, 0x63, 0x00, 0x02, 0x0b, 0x20, 0x01, - 0x01, 0x20, 0x00, 0x02, 0x0b, 0x20, 0x03, 0x01, - 0x20, 0x00, 0x08, 0x0b, 0x20, 0x2b, 0x3d, 0x63, - 0x74, 0x94, 0x99, 0x00, 0x02, 0x20, 0x2b, 0x00, - 0x03, 0x20, 0x2b, 0x3d, 0x01, 0x02, 0x0b, 0x20, - 0x00, 0x01, 0x0b, 0x01, 0x02, 0x20, 0x2b, 0x00, - 0x01, 0x63, 0x80, 0x44, 0x00, 0x01, 0x01, 0x2c, - 0x35, 0x00, 0x00, 0x02, 0x1d, 0x8b, 0x00, 0x00, - 0x00, 0x01, 0x8b, 0x81, 0xb3, 0x00, 0x00, 0x02, - 0x47, 0x5d, 0x80, 0x3f, 0x00, 0x00, 0x03, 0x20, - 0x2b, 0x47, 0x8c, 0xd1, 0x00, 0x00, 0x02, 0x1d, - 0x29, 0x81, 0x3c, 0x00, 0x01, 0x06, 0x0d, 0x31, - 0x30, 0x36, 0x3e, 0xa2, 0x00, 0x05, 0x0d, 0x31, - 0x30, 0x36, 0x3e, 0x01, 0x00, 0x00, 0x01, 0x30, - 0x00, 0x00, 0x09, 0x06, 0x0d, 0x31, 0x30, 0x36, - 0x3e, 0xa2, 0x00, 0x00, 0x00, 0x05, 0x0d, 0x31, - 0x30, 0x36, 0x3e, 0x07, 0x06, 0x0d, 0x31, 0x30, - 0x36, 0x3e, 0xa2, 0x03, 0x05, 0x0d, 0x31, 0x30, - 0x36, 0x3e, 0x09, 0x00, 0x03, 0x02, 0x0d, 0x30, - 0x01, 0x00, 0x00, 0x05, 0x0d, 0x31, 0x30, 0x36, - 0x3e, 0x04, 0x02, 0x36, 0x3e, 0x00, 0x00, 0x00, - 0x05, 0x0d, 0x31, 0x30, 0x36, 0x3e, 0x03, 0x00, - 0x01, 0x03, 0x30, 0x36, 0x3e, 0x01, 0x01, 0x30, - 0x58, 0x00, 0x03, 0x02, 0x36, 0x3e, 0x02, 0x00, - 0x00, 0x02, 0x36, 0x3e, 0x59, 0x00, 0x00, 0x06, - 0x0d, 0x31, 0x30, 0x36, 0x3e, 0xa2, 0x00, 0x02, - 0x36, 0x3e, 0x80, 0x12, 0x00, 0x0f, 0x01, 0x30, - 0x1f, 0x00, 0x23, 0x01, 0x30, 0x3b, 0x00, 0x27, - 0x01, 0x30, 0x37, 0x00, 0x30, 0x01, 0x30, 0x0e, - 0x00, 0x0b, 0x01, 0x30, 0x32, 0x00, 0x00, 0x01, - 0x30, 0x57, 0x00, 0x18, 0x01, 0x30, 0x09, 0x00, - 0x04, 0x01, 0x30, 0x5f, 0x00, 0x1e, 0x01, 0x30, - 0xc0, 0x31, 0xef, 0x00, 0x00, 0x02, 0x1d, 0x29, - 0x80, 0x0f, 0x00, 0x07, 0x02, 0x30, 0x47, 0x80, - 0xa7, 0x00, 0x02, 0x0e, 0x20, 0x22, 0x2d, 0x2f, - 0x43, 0x3d, 0x3c, 0x50, 0x51, 0x5c, 0x63, 0x45, - 0x91, 0x99, 0x02, 0x0d, 0x20, 0x22, 0x2d, 0x2f, - 0x43, 0x3d, 0x3c, 0x50, 0x5c, 0x63, 0x45, 0x91, - 0x99, 0x03, 0x0b, 0x20, 0x22, 0x2d, 0x2f, 0x43, - 0x3c, 0x50, 0x5c, 0x45, 0x91, 0x99, 0x80, 0x36, - 0x00, 0x00, 0x02, 0x0b, 0x20, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x92, 0x39, 0x00, 0x00, 0x03, 0x40, - 0x47, 0x60, 0x80, 0x1f, 0x00, 0x00, 0x02, 0x10, - 0x3b, 0xc0, 0x12, 0xed, 0x00, 0x01, 0x02, 0x04, - 0x66, 0x80, 0x31, 0x00, 0x00, 0x02, 0x04, 0x95, - 0x09, 0x00, 0x00, 0x02, 0x04, 0x95, 0x46, 0x00, - 0x01, 0x05, 0x0d, 0x31, 0x30, 0x36, 0x3e, 0x80, - 0x99, 0x00, 0x04, 0x06, 0x0d, 0x31, 0x30, 0x36, - 0x3e, 0xa2, 0x09, 0x00, 0x00, 0x02, 0x36, 0x3e, - 0x2c, 0x00, 0x01, 0x02, 0x36, 0x3e, 0x80, 0xdf, - 0x00, 0x01, 0x03, 0x1e, 0x1c, 0x4b, 0x00, 0x02, - 0x1c, 0x4b, 0x03, 0x00, 0x2c, 0x03, 0x1c, 0x4a, - 0x4b, 0x02, 0x00, 0x08, 0x02, 0x1c, 0x4b, 0x81, - 0x1f, 0x00, 0x1b, 0x02, 0x04, 0x1a, 0x87, 0x75, - 0x00, 0x00, 0x02, 0x53, 0x73, 0x87, 0x8d, 0x00, - 0x00, 0x02, 0x2b, 0x92, 0x00, 0x00, 0x00, 0x02, - 0x2b, 0x92, 0x36, 0x00, 0x01, 0x02, 0x2b, 0x92, - 0x8c, 0x12, 0x00, 0x01, 0x02, 0x2b, 0x92, 0x00, - 0x00, 0x00, 0x02, 0x2b, 0x92, 0xc0, 0x5c, 0x4b, - 0x00, 0x03, 0x01, 0x23, 0x96, 0x3b, 0x00, 0x11, - 0x01, 0x30, 0x9e, 0x5d, 0x00, 0x01, 0x01, 0x30, - 0xce, 0xcd, 0x2d, 0x00, -}; - -static const uint8_t unicode_prop_Hyphen_table[28] = { - 0xac, 0x80, 0xfe, 0x80, 0x44, 0xdb, 0x80, 0x52, - 0x7a, 0x80, 0x48, 0x08, 0x81, 0x4e, 0x04, 0x80, - 0x42, 0xe2, 0x80, 0x60, 0xcd, 0x66, 0x80, 0x40, - 0xa8, 0x80, 0xd6, 0x80, -}; - -static const uint8_t unicode_prop_Other_Math_table[200] = { - 0xdd, 0x80, 0x43, 0x70, 0x11, 0x80, 0x99, 0x09, - 0x81, 0x5c, 0x1f, 0x80, 0x9a, 0x82, 0x8a, 0x80, - 0x9f, 0x83, 0x97, 0x81, 0x8d, 0x81, 0xc0, 0x8c, - 0x18, 0x11, 0x1c, 0x91, 0x03, 0x01, 0x89, 0x00, - 0x14, 0x28, 0x11, 0x09, 0x02, 0x05, 0x13, 0x24, - 0xca, 0x21, 0x18, 0x08, 0x08, 0x00, 0x21, 0x0b, - 0x0b, 0x91, 0x09, 0x00, 0x06, 0x00, 0x29, 0x41, - 0x21, 0x83, 0x40, 0xa7, 0x08, 0x80, 0x97, 0x80, - 0x90, 0x80, 0x41, 0xbc, 0x81, 0x8b, 0x88, 0x24, - 0x21, 0x09, 0x14, 0x8d, 0x00, 0x01, 0x85, 0x97, - 0x81, 0xb8, 0x00, 0x80, 0x9c, 0x83, 0x88, 0x81, - 0x41, 0x55, 0x81, 0x9e, 0x89, 0x41, 0x92, 0x95, - 0xbe, 0x83, 0x9f, 0x81, 0x60, 0xd4, 0x62, 0x00, - 0x03, 0x80, 0x40, 0xd2, 0x00, 0x80, 0x60, 0xd4, - 0xc0, 0xd4, 0x80, 0xc6, 0x01, 0x08, 0x09, 0x0b, - 0x80, 0x8b, 0x00, 0x06, 0x80, 0xc0, 0x03, 0x0f, - 0x06, 0x80, 0x9b, 0x03, 0x04, 0x00, 0x16, 0x80, - 0x41, 0x53, 0x81, 0x98, 0x80, 0x98, 0x80, 0x9e, - 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80, 0x9e, - 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x07, 0x81, - 0xb1, 0x55, 0xff, 0x18, 0x9a, 0x01, 0x00, 0x08, - 0x80, 0x89, 0x03, 0x00, 0x00, 0x28, 0x18, 0x00, - 0x00, 0x02, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x0b, 0x06, 0x03, 0x03, 0x00, - 0x80, 0x89, 0x80, 0x90, 0x22, 0x04, 0x80, 0x90, -}; - -static const uint8_t unicode_prop_Other_Alphabetic_table[428] = { - 0x43, 0x44, 0x80, 0x42, 0x69, 0x8d, 0x00, 0x01, - 0x01, 0x00, 0xc7, 0x8a, 0xaf, 0x8c, 0x06, 0x8f, - 0x80, 0xe4, 0x33, 0x19, 0x0b, 0x80, 0xa2, 0x80, - 0x9d, 0x8f, 0xe5, 0x8a, 0xe4, 0x0a, 0x88, 0x02, - 0x03, 0x40, 0xa6, 0x8b, 0x16, 0x85, 0x93, 0xb5, - 0x09, 0x8e, 0x01, 0x22, 0x89, 0x81, 0x9c, 0x82, - 0xb9, 0x31, 0x09, 0x81, 0x89, 0x80, 0x89, 0x81, - 0x9c, 0x82, 0xb9, 0x23, 0x09, 0x0b, 0x80, 0x9d, - 0x0a, 0x80, 0x8a, 0x82, 0xb9, 0x38, 0x10, 0x81, - 0x94, 0x81, 0x95, 0x13, 0x82, 0xb9, 0x31, 0x09, - 0x81, 0x88, 0x81, 0x89, 0x81, 0x9d, 0x80, 0xba, - 0x22, 0x10, 0x82, 0x89, 0x80, 0xa7, 0x84, 0xb8, - 0x30, 0x10, 0x17, 0x81, 0x8a, 0x81, 0x9c, 0x82, - 0xb9, 0x30, 0x10, 0x17, 0x81, 0x8a, 0x81, 0x8e, - 0x80, 0x8b, 0x83, 0xb9, 0x30, 0x10, 0x82, 0x89, - 0x80, 0x89, 0x81, 0x9c, 0x82, 0xca, 0x28, 0x00, - 0x87, 0x91, 0x81, 0xbc, 0x01, 0x86, 0x91, 0x80, - 0xe2, 0x01, 0x28, 0x81, 0x8f, 0x80, 0x40, 0xa2, - 0x92, 0x88, 0x8a, 0x80, 0xa3, 0xed, 0x8b, 0x00, - 0x0b, 0x96, 0x1b, 0x10, 0x11, 0x32, 0x83, 0x8c, - 0x8b, 0x00, 0x89, 0x83, 0x46, 0x73, 0x81, 0x9d, - 0x81, 0x9d, 0x81, 0x9d, 0x81, 0xc1, 0x92, 0x40, - 0xbb, 0x81, 0xa1, 0x80, 0xf5, 0x8b, 0x83, 0x88, - 0x40, 0xdd, 0x84, 0xb8, 0x89, 0x81, 0x93, 0xc9, - 0x81, 0x8a, 0x82, 0xb0, 0x84, 0xaf, 0x8e, 0xbb, - 0x82, 0x9d, 0x88, 0x09, 0xb8, 0x8a, 0xb1, 0x92, - 0x41, 0xaf, 0x8d, 0x46, 0xc0, 0xb3, 0x48, 0xf5, - 0x9f, 0x60, 0x78, 0x73, 0x87, 0xa1, 0x81, 0x41, - 0x61, 0x07, 0x80, 0x96, 0x84, 0xd7, 0x81, 0xb1, - 0x8f, 0x00, 0xb8, 0x80, 0xa5, 0x84, 0x9b, 0x8b, - 0xac, 0x83, 0xaf, 0x8b, 0xa4, 0x80, 0xc2, 0x8d, - 0x8b, 0x07, 0x81, 0xac, 0x82, 0xb1, 0x00, 0x11, - 0x0c, 0x80, 0xab, 0x24, 0x80, 0x40, 0xec, 0x87, - 0x60, 0x4f, 0x32, 0x80, 0x48, 0x56, 0x84, 0x46, - 0x85, 0x10, 0x0c, 0x83, 0x43, 0x13, 0x83, 0x41, - 0x82, 0x81, 0x41, 0x52, 0x82, 0xb4, 0x8d, 0xac, - 0x81, 0x8a, 0x82, 0xac, 0x88, 0x88, 0x80, 0xbc, - 0x82, 0xa3, 0x8b, 0x91, 0x81, 0xb8, 0x82, 0xaf, - 0x8c, 0x8d, 0x81, 0xdb, 0x88, 0x08, 0x28, 0x08, - 0x40, 0x9c, 0x89, 0x96, 0x83, 0xb9, 0x31, 0x09, - 0x81, 0x89, 0x80, 0x89, 0x81, 0x40, 0xd0, 0x8c, - 0x02, 0xe9, 0x91, 0x40, 0xec, 0x31, 0x86, 0x9c, - 0x81, 0xd1, 0x8e, 0x00, 0xe9, 0x8a, 0xe6, 0x8d, - 0x41, 0x00, 0x8c, 0x40, 0xf6, 0x28, 0x09, 0x0a, - 0x00, 0x80, 0x40, 0x8d, 0x31, 0x2b, 0x80, 0x9b, - 0x89, 0xa9, 0x20, 0x83, 0x91, 0x8a, 0xad, 0x8d, - 0x41, 0x96, 0x38, 0x86, 0xd2, 0x95, 0x80, 0x8d, - 0xf9, 0x2a, 0x00, 0x08, 0x10, 0x02, 0x80, 0xc1, - 0x20, 0x08, 0x83, 0x41, 0x5b, 0x83, 0x88, 0x08, - 0x80, 0xaf, 0x32, 0x82, 0x60, 0x50, 0x0d, 0x00, - 0xb6, 0x33, 0xdc, 0x81, 0x60, 0x4c, 0xab, 0x80, - 0x60, 0x23, 0x60, 0x30, 0x90, 0x0e, 0x01, 0x04, - 0xe3, 0x80, 0x48, 0xb6, 0x80, 0x47, 0xe7, 0x99, - 0x85, 0x99, 0x85, 0x99, -}; - -static const uint8_t unicode_prop_Other_Lowercase_table[69] = { - 0x40, 0xa9, 0x80, 0x8e, 0x80, 0x41, 0xf4, 0x88, - 0x31, 0x9d, 0x84, 0xdf, 0x80, 0xb3, 0x80, 0x4d, - 0x80, 0x80, 0x4c, 0x2e, 0xbe, 0x8c, 0x80, 0xa1, - 0xa4, 0x42, 0xb0, 0x80, 0x8c, 0x80, 0x8f, 0x8c, - 0x40, 0xd2, 0x8f, 0x43, 0x4f, 0x99, 0x47, 0x91, - 0x81, 0x60, 0x7a, 0x1d, 0x81, 0x40, 0xd1, 0x80, - 0x40, 0x80, 0x12, 0x81, 0x43, 0x61, 0x83, 0x88, - 0x80, 0x60, 0x5c, 0x15, 0x01, 0x10, 0xa9, 0x80, - 0x88, 0x60, 0xd8, 0x74, 0xbd, -}; - -static const uint8_t unicode_prop_Other_Uppercase_table[15] = { - 0x60, 0x21, 0x5f, 0x8f, 0x43, 0x45, 0x99, 0x61, - 0xcc, 0x5f, 0x99, 0x85, 0x99, 0x85, 0x99, -}; - -static const uint8_t unicode_prop_Other_Grapheme_Extend_table[65] = { - 0x49, 0xbd, 0x80, 0x97, 0x80, 0x41, 0x65, 0x80, - 0x97, 0x80, 0xe5, 0x80, 0x97, 0x80, 0x40, 0xe9, - 0x80, 0x91, 0x81, 0xe6, 0x80, 0x97, 0x80, 0xf6, - 0x80, 0x8e, 0x80, 0x4d, 0x54, 0x80, 0x44, 0xd5, - 0x80, 0x50, 0x20, 0x81, 0x60, 0xcf, 0x6d, 0x81, - 0x53, 0x9d, 0x80, 0x97, 0x80, 0x41, 0x57, 0x80, - 0x8b, 0x80, 0x40, 0xf0, 0x80, 0x43, 0x7f, 0x80, - 0x60, 0xb8, 0x33, 0x07, 0x84, 0x6c, 0x2e, 0xac, - 0xdf, -}; - -static const uint8_t unicode_prop_Other_Default_Ignorable_Code_Point_table[32] = { - 0x43, 0x4e, 0x80, 0x4e, 0x0e, 0x81, 0x46, 0x52, - 0x81, 0x48, 0xae, 0x80, 0x50, 0xfd, 0x80, 0x60, - 0xce, 0x3a, 0x80, 0xce, 0x88, 0x6d, 0x00, 0x06, - 0x00, 0x9d, 0xdf, 0xff, 0x40, 0xef, 0x4e, 0x0f, -}; - -static const uint8_t unicode_prop_Other_ID_Start_table[11] = { - 0x58, 0x84, 0x81, 0x48, 0x90, 0x80, 0x94, 0x80, - 0x4f, 0x6b, 0x81, -}; - -static const uint8_t unicode_prop_Other_ID_Continue_table[12] = { - 0x40, 0xb6, 0x80, 0x42, 0xce, 0x80, 0x4f, 0xe0, - 0x88, 0x46, 0x67, 0x80, -}; - -static const uint8_t unicode_prop_Prepended_Concatenation_Mark_table[19] = { - 0x45, 0xff, 0x85, 0x40, 0xd6, 0x80, 0xb0, 0x80, - 0x41, 0x7f, 0x81, 0xcf, 0x80, 0x61, 0x07, 0xd9, - 0x80, 0x8e, 0x80, -}; - -static const uint8_t unicode_prop_XID_Start1_table[31] = { - 0x43, 0x79, 0x80, 0x4a, 0xb7, 0x80, 0xfe, 0x80, - 0x60, 0x21, 0xe6, 0x81, 0x60, 0xcb, 0xc0, 0x85, - 0x41, 0x95, 0x81, 0xf3, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x41, 0x1e, 0x81, -}; - -static const uint8_t unicode_prop_XID_Continue1_table[23] = { - 0x43, 0x79, 0x80, 0x60, 0x2d, 0x1f, 0x81, 0x60, - 0xcb, 0xc0, 0x85, 0x41, 0x95, 0x81, 0xf3, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -}; - -static const uint8_t unicode_prop_Changes_When_Titlecased1_table[22] = { - 0x41, 0xc3, 0x08, 0x08, 0x81, 0xa4, 0x81, 0x4e, - 0xdc, 0xaa, 0x0a, 0x4e, 0x87, 0x3f, 0x3f, 0x87, - 0x8b, 0x80, 0x8e, 0x80, 0xae, 0x80, -}; - -static const uint8_t unicode_prop_Changes_When_Casefolded1_table[33] = { - 0x40, 0xde, 0x80, 0xcf, 0x80, 0x97, 0x80, 0x44, - 0x3c, 0x80, 0x59, 0x11, 0x80, 0x40, 0xe4, 0x3f, - 0x3f, 0x87, 0x89, 0x11, 0x05, 0x02, 0x11, 0x80, - 0xa9, 0x11, 0x80, 0x60, 0xdb, 0x07, 0x86, 0x8b, - 0x84, -}; - -static const uint8_t unicode_prop_Changes_When_NFKC_Casefolded1_table[451] = { - 0x40, 0x9f, 0x06, 0x00, 0x01, 0x00, 0x01, 0x12, - 0x10, 0x82, 0x9f, 0x80, 0xcf, 0x01, 0x80, 0x8b, - 0x07, 0x80, 0xfb, 0x01, 0x01, 0x80, 0xa5, 0x80, - 0x40, 0xbb, 0x88, 0x9e, 0x29, 0x84, 0xda, 0x08, - 0x81, 0x89, 0x80, 0xa3, 0x04, 0x02, 0x04, 0x08, - 0x80, 0xc9, 0x82, 0x9c, 0x80, 0x41, 0x93, 0x80, - 0x40, 0x93, 0x80, 0xd7, 0x83, 0x42, 0xde, 0x87, - 0xfb, 0x08, 0x80, 0xd2, 0x01, 0x80, 0xa1, 0x11, - 0x80, 0x40, 0xfc, 0x81, 0x42, 0xd4, 0x80, 0xfe, - 0x80, 0xa7, 0x81, 0xad, 0x80, 0xb5, 0x80, 0x88, - 0x03, 0x03, 0x03, 0x80, 0x8b, 0x80, 0x88, 0x00, - 0x26, 0x80, 0x90, 0x80, 0x88, 0x03, 0x03, 0x03, - 0x80, 0x8b, 0x80, 0x41, 0x41, 0x80, 0xe1, 0x81, - 0x46, 0x52, 0x81, 0xd4, 0x84, 0x45, 0x1b, 0x10, - 0x8a, 0x80, 0x91, 0x80, 0x9b, 0x8c, 0x80, 0xa1, - 0xa4, 0x40, 0xd9, 0x80, 0x40, 0xd5, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x3f, 0x3f, 0x87, - 0x89, 0x11, 0x04, 0x00, 0x29, 0x04, 0x12, 0x80, - 0x88, 0x12, 0x80, 0x88, 0x11, 0x11, 0x04, 0x08, - 0x8f, 0x00, 0x20, 0x8b, 0x12, 0x2a, 0x08, 0x0b, - 0x00, 0x07, 0x82, 0x8c, 0x06, 0x92, 0x81, 0x9a, - 0x80, 0x8c, 0x8a, 0x80, 0xd6, 0x18, 0x10, 0x8a, - 0x01, 0x0c, 0x0a, 0x00, 0x10, 0x11, 0x02, 0x06, - 0x05, 0x1c, 0x85, 0x8f, 0x8f, 0x8f, 0x88, 0x80, - 0x40, 0xa1, 0x08, 0x81, 0x40, 0xf7, 0x81, 0x41, - 0x34, 0xd5, 0x99, 0x9a, 0x45, 0x20, 0x80, 0xe6, - 0x82, 0xe4, 0x80, 0x41, 0x9e, 0x81, 0x40, 0xf0, - 0x80, 0x41, 0x2e, 0x80, 0xd2, 0x80, 0x8b, 0x40, - 0xd5, 0xa9, 0x80, 0xb4, 0x00, 0x82, 0xdf, 0x09, - 0x80, 0xde, 0x80, 0xb0, 0xdd, 0x82, 0x8d, 0xdf, - 0x9e, 0x80, 0xa7, 0x87, 0xae, 0x80, 0x41, 0x7f, - 0x60, 0x72, 0x9b, 0x81, 0x40, 0xd1, 0x80, 0x40, - 0x80, 0x12, 0x81, 0x43, 0x61, 0x83, 0x88, 0x80, - 0x60, 0x4d, 0x95, 0x41, 0x0d, 0x08, 0x00, 0x81, - 0x89, 0x00, 0x00, 0x09, 0x82, 0xc3, 0x81, 0xe9, - 0xa5, 0x86, 0x8b, 0x24, 0x00, 0x97, 0x04, 0x00, - 0x01, 0x01, 0x80, 0xeb, 0xa0, 0x41, 0x6a, 0x91, - 0xbf, 0x81, 0xb5, 0xa7, 0x8c, 0x82, 0x99, 0x95, - 0x94, 0x81, 0x8b, 0x80, 0x92, 0x03, 0x1a, 0x00, - 0x80, 0x40, 0x86, 0x08, 0x80, 0x9f, 0x99, 0x40, - 0x83, 0x15, 0x0d, 0x0d, 0x0a, 0x16, 0x06, 0x80, - 0x88, 0x47, 0x87, 0x20, 0xa9, 0x80, 0x88, 0x60, - 0xb4, 0xe4, 0x83, 0x54, 0xb9, 0x86, 0x8d, 0x87, - 0xbf, 0x85, 0x42, 0x3e, 0xd4, 0x80, 0xc6, 0x01, - 0x08, 0x09, 0x0b, 0x80, 0x8b, 0x00, 0x06, 0x80, - 0xc0, 0x03, 0x0f, 0x06, 0x80, 0x9b, 0x03, 0x04, - 0x00, 0x16, 0x80, 0x41, 0x53, 0x81, 0x41, 0x23, - 0x81, 0xb1, 0x48, 0x2f, 0xbd, 0x4d, 0x91, 0x18, - 0x9a, 0x01, 0x00, 0x08, 0x80, 0x89, 0x03, 0x00, - 0x00, 0x28, 0x18, 0x00, 0x00, 0x02, 0x01, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0b, - 0x06, 0x03, 0x03, 0x00, 0x80, 0x89, 0x80, 0x90, - 0x22, 0x04, 0x80, 0x90, 0x42, 0x43, 0x8a, 0x84, - 0x9e, 0x80, 0x9f, 0x99, 0x82, 0xa2, 0x80, 0xee, - 0x82, 0x8c, 0xab, 0x83, 0x88, 0x31, 0x49, 0x9d, - 0x89, 0x60, 0xfc, 0x05, 0x42, 0x1d, 0x6b, 0x05, - 0xe1, 0x4f, 0xff, -}; - -static const uint8_t unicode_prop_ASCII_Hex_Digit_table[5] = { - 0xaf, 0x89, 0x35, 0x99, 0x85, -}; - -static const uint8_t unicode_prop_Bidi_Control_table[10] = { - 0x46, 0x1b, 0x80, 0x59, 0xf0, 0x81, 0x99, 0x84, - 0xb6, 0x83, -}; - -static const uint8_t unicode_prop_Dash_table[55] = { - 0xac, 0x80, 0x45, 0x5b, 0x80, 0xb2, 0x80, 0x4e, - 0x40, 0x80, 0x44, 0x04, 0x80, 0x48, 0x08, 0x85, - 0xbc, 0x80, 0xa6, 0x80, 0x8e, 0x80, 0x41, 0x85, - 0x80, 0x4c, 0x03, 0x01, 0x80, 0x9e, 0x0b, 0x80, - 0x9b, 0x80, 0x41, 0xbd, 0x80, 0x92, 0x80, 0xee, - 0x80, 0x60, 0xcd, 0x8f, 0x81, 0xa4, 0x80, 0x89, - 0x80, 0x40, 0xa8, 0x80, 0x4f, 0x9e, 0x80, -}; - -static const uint8_t unicode_prop_Deprecated_table[23] = { - 0x41, 0x48, 0x80, 0x45, 0x28, 0x80, 0x49, 0x02, - 0x00, 0x80, 0x48, 0x28, 0x81, 0x48, 0xc4, 0x85, - 0x42, 0xb8, 0x81, 0x6d, 0xdc, 0xd5, 0x80, -}; - -static const uint8_t unicode_prop_Diacritic_table[399] = { - 0xdd, 0x00, 0x80, 0xc6, 0x05, 0x03, 0x01, 0x81, - 0x41, 0xf6, 0x40, 0x9e, 0x07, 0x25, 0x90, 0x0b, - 0x80, 0x88, 0x81, 0x40, 0xfc, 0x84, 0x40, 0xd0, - 0x80, 0xb6, 0x90, 0x80, 0x9a, 0x00, 0x01, 0x00, - 0x40, 0x85, 0x3b, 0x81, 0x40, 0x85, 0x0b, 0x0a, - 0x82, 0xc2, 0x9a, 0xda, 0x8a, 0xb9, 0x8a, 0xa1, - 0x81, 0xfd, 0x87, 0xa8, 0x89, 0x8f, 0x9b, 0xbc, - 0x80, 0x8f, 0x02, 0x83, 0x9b, 0x80, 0xc9, 0x80, - 0x8f, 0x80, 0xed, 0x80, 0x8f, 0x80, 0xed, 0x80, - 0x8f, 0x80, 0xae, 0x82, 0xbb, 0x80, 0x8f, 0x06, - 0x80, 0xf6, 0x80, 0xed, 0x80, 0x8f, 0x80, 0xed, - 0x80, 0x8f, 0x80, 0xec, 0x81, 0x8f, 0x80, 0xfb, - 0x80, 0xfb, 0x28, 0x80, 0xea, 0x80, 0x8c, 0x84, - 0xca, 0x81, 0x9a, 0x00, 0x00, 0x03, 0x81, 0xc1, - 0x10, 0x81, 0xbd, 0x80, 0xef, 0x00, 0x81, 0xa7, - 0x0b, 0x84, 0x98, 0x30, 0x80, 0x89, 0x81, 0x42, - 0xc0, 0x82, 0x43, 0xb3, 0x81, 0x40, 0xb2, 0x8a, - 0x88, 0x80, 0x41, 0x5a, 0x82, 0x41, 0x38, 0x39, - 0x80, 0xaf, 0x8e, 0x81, 0x8a, 0xe7, 0x80, 0x8e, - 0x80, 0xa5, 0x88, 0xb5, 0x81, 0x40, 0x89, 0x81, - 0xbf, 0x85, 0xd1, 0x98, 0x18, 0x28, 0x0a, 0xb1, - 0xbe, 0xd8, 0x8b, 0xa4, 0x8a, 0x41, 0xbc, 0x00, - 0x82, 0x8a, 0x82, 0x8c, 0x82, 0x8c, 0x82, 0x8c, - 0x81, 0x4c, 0xef, 0x82, 0x41, 0x3c, 0x80, 0x41, - 0xf9, 0x85, 0xe8, 0x83, 0xde, 0x80, 0x60, 0x75, - 0x71, 0x80, 0x8b, 0x08, 0x80, 0x9b, 0x81, 0xd1, - 0x81, 0x8d, 0xa1, 0xe5, 0x82, 0xec, 0x81, 0x40, - 0xc9, 0x80, 0x9a, 0x91, 0xb8, 0x83, 0xa3, 0x80, - 0xde, 0x80, 0x8b, 0x80, 0xa3, 0x80, 0x40, 0x94, - 0x82, 0xc0, 0x83, 0xb2, 0x80, 0xe3, 0x84, 0x88, - 0x82, 0xff, 0x81, 0x60, 0x4f, 0x2f, 0x80, 0x43, - 0x00, 0x8f, 0x41, 0x0d, 0x00, 0x80, 0xae, 0x80, - 0xac, 0x81, 0xc2, 0x80, 0x42, 0xfb, 0x80, 0x44, - 0x9e, 0x28, 0xa9, 0x80, 0x88, 0x43, 0x29, 0x81, - 0x42, 0x3a, 0x85, 0x41, 0xd4, 0x82, 0xc5, 0x8a, - 0xb0, 0x83, 0x40, 0xbf, 0x80, 0xa8, 0x80, 0xc7, - 0x81, 0xf7, 0x81, 0xbd, 0x80, 0xcb, 0x80, 0x88, - 0x82, 0xe7, 0x81, 0x40, 0xb1, 0x81, 0xd0, 0x80, - 0x8f, 0x80, 0x97, 0x32, 0x84, 0x40, 0xcc, 0x02, - 0x80, 0xfa, 0x81, 0x40, 0xfa, 0x81, 0xfd, 0x80, - 0xf5, 0x81, 0xf2, 0x80, 0x41, 0x0c, 0x81, 0x41, - 0x01, 0x0b, 0x80, 0x40, 0x9b, 0x80, 0xd2, 0x80, - 0x91, 0x80, 0xd0, 0x80, 0x41, 0xa4, 0x80, 0x41, - 0x01, 0x00, 0x81, 0xd0, 0x80, 0x56, 0xae, 0x8e, - 0x60, 0x36, 0x99, 0x84, 0xba, 0x86, 0x44, 0x57, - 0x90, 0xcf, 0x81, 0x60, 0x3f, 0xfd, 0x18, 0x30, - 0x81, 0x5f, 0x00, 0xad, 0x81, 0x96, 0x42, 0x1f, - 0x12, 0x2f, 0x39, 0x86, 0x9d, 0x83, 0x4e, 0x81, - 0xbd, 0x40, 0xc1, 0x86, 0x41, 0x76, 0x80, 0xbc, - 0x83, 0x45, 0xdf, 0x86, 0xec, 0x10, 0x82, -}; - -static const uint8_t unicode_prop_Extender_table[92] = { - 0x40, 0xb6, 0x80, 0x42, 0x17, 0x81, 0x43, 0x6d, - 0x80, 0x41, 0xb8, 0x80, 0x43, 0x59, 0x80, 0x42, - 0xef, 0x80, 0xfe, 0x80, 0x49, 0x42, 0x80, 0xb7, - 0x80, 0x42, 0x62, 0x80, 0x41, 0x8d, 0x80, 0xc3, - 0x80, 0x53, 0x88, 0x80, 0xaa, 0x84, 0xe6, 0x81, - 0xdc, 0x82, 0x60, 0x6f, 0x15, 0x80, 0x45, 0xf5, - 0x80, 0x43, 0xc1, 0x80, 0x95, 0x80, 0x40, 0x88, - 0x80, 0xeb, 0x80, 0x94, 0x81, 0x60, 0x54, 0x7a, - 0x80, 0x48, 0x0f, 0x81, 0x4b, 0xd9, 0x80, 0x42, - 0x67, 0x82, 0x44, 0xce, 0x80, 0x60, 0x50, 0xa8, - 0x81, 0x44, 0x9b, 0x08, 0x80, 0x60, 0x71, 0x57, - 0x81, 0x48, 0x05, 0x82, -}; - -static const uint8_t unicode_prop_Hex_Digit_table[12] = { - 0xaf, 0x89, 0x35, 0x99, 0x85, 0x60, 0xfe, 0xa8, - 0x89, 0x35, 0x99, 0x85, -}; - -static const uint8_t unicode_prop_IDS_Binary_Operator_table[5] = { - 0x60, 0x2f, 0xef, 0x09, 0x87, -}; - -static const uint8_t unicode_prop_IDS_Trinary_Operator_table[4] = { - 0x60, 0x2f, 0xf1, 0x81, -}; - -static const uint8_t unicode_prop_Ideographic_table[69] = { - 0x60, 0x30, 0x05, 0x81, 0x98, 0x88, 0x8d, 0x82, - 0x43, 0xc4, 0x59, 0xbf, 0xbf, 0x60, 0x51, 0xff, - 0x60, 0x58, 0xff, 0x41, 0x6d, 0x81, 0xe9, 0x60, - 0x75, 0x09, 0x80, 0x9a, 0x57, 0xf7, 0x87, 0x44, - 0xd5, 0xa9, 0x88, 0x60, 0x24, 0x66, 0x41, 0x8b, - 0x60, 0x4d, 0x03, 0x60, 0xa6, 0xdf, 0x9f, 0x50, - 0x39, 0x85, 0x40, 0xdd, 0x81, 0x56, 0x81, 0x8d, - 0x5d, 0x30, 0x4c, 0x1e, 0x42, 0x1d, 0x45, 0xe1, - 0x53, 0x4a, 0x84, 0x50, 0x5f, -}; - -static const uint8_t unicode_prop_Join_Control_table[4] = { - 0x60, 0x20, 0x0b, 0x81, -}; - -static const uint8_t unicode_prop_Logical_Order_Exception_table[15] = { - 0x4e, 0x3f, 0x84, 0xfa, 0x84, 0x4a, 0xef, 0x11, - 0x80, 0x60, 0x90, 0xf9, 0x09, 0x00, 0x81, -}; - -static const uint8_t unicode_prop_Noncharacter_Code_Point_table[71] = { - 0x60, 0xfd, 0xcf, 0x9f, 0x42, 0x0d, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, 0x60, - 0xff, 0xfd, 0x81, 0x60, 0xff, 0xfd, 0x81, -}; - -static const uint8_t unicode_prop_Pattern_Syntax_table[58] = { - 0xa0, 0x8e, 0x89, 0x86, 0x99, 0x18, 0x80, 0x99, - 0x83, 0xa1, 0x30, 0x00, 0x08, 0x00, 0x0b, 0x03, - 0x02, 0x80, 0x96, 0x80, 0x9e, 0x80, 0x5f, 0x17, - 0x97, 0x87, 0x8e, 0x81, 0x92, 0x80, 0x89, 0x41, - 0x30, 0x42, 0xcf, 0x40, 0x9f, 0x42, 0x75, 0x9d, - 0x44, 0x6b, 0x41, 0xff, 0xff, 0x41, 0x80, 0x13, - 0x98, 0x8e, 0x80, 0x60, 0xcd, 0x0c, 0x81, 0x41, - 0x04, 0x81, -}; - -static const uint8_t unicode_prop_Pattern_White_Space_table[11] = { - 0x88, 0x84, 0x91, 0x80, 0xe3, 0x80, 0x5f, 0x87, - 0x81, 0x97, 0x81, -}; - -static const uint8_t unicode_prop_Quotation_Mark_table[31] = { - 0xa1, 0x03, 0x80, 0x40, 0x82, 0x80, 0x8e, 0x80, - 0x5f, 0x5b, 0x87, 0x98, 0x81, 0x4e, 0x06, 0x80, - 0x41, 0xc8, 0x83, 0x8c, 0x82, 0x60, 0xce, 0x20, - 0x83, 0x40, 0xbc, 0x03, 0x80, 0xd9, 0x81, -}; - -static const uint8_t unicode_prop_Radical_table[9] = { - 0x60, 0x2e, 0x7f, 0x99, 0x80, 0xd8, 0x8b, 0x40, - 0xd5, -}; - -static const uint8_t unicode_prop_Regional_Indicator_table[4] = { - 0x61, 0xf1, 0xe5, 0x99, -}; - -static const uint8_t unicode_prop_Sentence_Terminal_table[196] = { - 0xa0, 0x80, 0x8b, 0x80, 0x8f, 0x80, 0x45, 0x48, - 0x80, 0x40, 0x92, 0x82, 0x40, 0xb3, 0x80, 0xaa, - 0x82, 0x40, 0xf5, 0x80, 0xbc, 0x00, 0x02, 0x81, - 0x41, 0x24, 0x81, 0x46, 0xe3, 0x81, 0x43, 0x15, - 0x03, 0x81, 0x43, 0x04, 0x80, 0x40, 0xc5, 0x81, - 0x40, 0xcb, 0x04, 0x80, 0x41, 0x39, 0x81, 0x41, - 0x61, 0x83, 0x40, 0xad, 0x09, 0x81, 0x9c, 0x81, - 0x40, 0xbb, 0x81, 0xc0, 0x81, 0x43, 0xbb, 0x81, - 0x88, 0x82, 0x4d, 0xe3, 0x80, 0x8c, 0x80, 0x95, - 0x81, 0x41, 0xac, 0x80, 0x60, 0x74, 0xfb, 0x80, - 0x41, 0x0d, 0x81, 0x40, 0xe2, 0x02, 0x80, 0x41, - 0x7d, 0x81, 0xd5, 0x81, 0xde, 0x80, 0x40, 0x97, - 0x81, 0x40, 0x92, 0x82, 0x40, 0x8f, 0x81, 0x40, - 0xf8, 0x80, 0x60, 0x52, 0x65, 0x02, 0x81, 0x40, - 0xa8, 0x80, 0x8b, 0x80, 0x8f, 0x80, 0xc0, 0x80, - 0x4a, 0xf3, 0x81, 0x44, 0xfc, 0x84, 0xab, 0x83, - 0x40, 0xbc, 0x81, 0xf4, 0x83, 0xfe, 0x82, 0x40, - 0x80, 0x0d, 0x80, 0x8f, 0x81, 0xd7, 0x08, 0x81, - 0xeb, 0x80, 0x41, 0xa0, 0x81, 0x41, 0x74, 0x0c, - 0x8e, 0xe8, 0x81, 0x40, 0xf8, 0x82, 0x42, 0x04, - 0x00, 0x80, 0x40, 0xfa, 0x81, 0xd6, 0x81, 0x41, - 0xa3, 0x81, 0x42, 0xb3, 0x81, 0xc9, 0x81, 0x60, - 0x4b, 0x28, 0x81, 0x40, 0x84, 0x80, 0xc0, 0x81, - 0x8a, 0x80, 0x43, 0x52, 0x80, 0x60, 0x4e, 0x05, - 0x80, 0x5d, 0xe7, 0x80, -}; - -static const uint8_t unicode_prop_Soft_Dotted_table[79] = { - 0xe8, 0x81, 0x40, 0xc3, 0x80, 0x41, 0x18, 0x80, - 0x9d, 0x80, 0xb3, 0x80, 0x93, 0x80, 0x41, 0x3f, - 0x80, 0xe1, 0x00, 0x80, 0x59, 0x08, 0x80, 0xb2, - 0x80, 0x8c, 0x02, 0x80, 0x40, 0x83, 0x80, 0x40, - 0x9c, 0x80, 0x41, 0xa4, 0x80, 0x40, 0xd5, 0x81, - 0x4b, 0x31, 0x80, 0x61, 0xa7, 0xa4, 0x81, 0xb1, - 0x81, 0xb1, 0x81, 0xb1, 0x81, 0xb1, 0x81, 0xb1, - 0x81, 0xb1, 0x81, 0xb1, 0x81, 0xb1, 0x81, 0xb1, - 0x81, 0xb1, 0x81, 0xb1, 0x81, 0xb1, 0x81, 0x48, - 0x85, 0x80, 0x41, 0x30, 0x81, 0x99, 0x80, -}; - -static const uint8_t unicode_prop_Terminal_Punctuation_table[248] = { - 0xa0, 0x80, 0x89, 0x00, 0x80, 0x8a, 0x0a, 0x80, - 0x43, 0x3d, 0x07, 0x80, 0x42, 0x00, 0x80, 0xb8, - 0x80, 0xc7, 0x80, 0x8d, 0x00, 0x82, 0x40, 0xb3, - 0x80, 0xaa, 0x8a, 0x00, 0x40, 0xea, 0x81, 0xb5, - 0x8e, 0x9e, 0x80, 0x41, 0x04, 0x81, 0x44, 0xf3, - 0x81, 0x40, 0xab, 0x03, 0x85, 0x41, 0x36, 0x81, - 0x43, 0x14, 0x87, 0x43, 0x04, 0x80, 0xfb, 0x82, - 0xc6, 0x81, 0x40, 0x9c, 0x12, 0x80, 0xa6, 0x19, - 0x81, 0x41, 0x39, 0x81, 0x41, 0x61, 0x83, 0x40, - 0xad, 0x08, 0x82, 0x9c, 0x81, 0x40, 0xbb, 0x84, - 0xbd, 0x81, 0x43, 0xbb, 0x81, 0x88, 0x82, 0x4d, - 0xe3, 0x80, 0x8c, 0x03, 0x80, 0x89, 0x00, 0x0a, - 0x81, 0x41, 0xab, 0x81, 0x60, 0x74, 0xfa, 0x81, - 0x41, 0x0c, 0x82, 0x40, 0xe2, 0x84, 0x41, 0x7d, - 0x81, 0xd5, 0x81, 0xde, 0x80, 0x40, 0x96, 0x82, - 0x40, 0x92, 0x82, 0xfe, 0x80, 0x8f, 0x81, 0x40, - 0xf8, 0x80, 0x60, 0x52, 0x63, 0x10, 0x83, 0x40, - 0xa8, 0x80, 0x89, 0x00, 0x80, 0x8a, 0x0a, 0x80, - 0xc0, 0x01, 0x80, 0x44, 0x39, 0x80, 0xaf, 0x80, - 0x44, 0x85, 0x80, 0x40, 0xc6, 0x80, 0x41, 0x35, - 0x81, 0x40, 0x97, 0x85, 0xc3, 0x85, 0xd8, 0x83, - 0x43, 0xb7, 0x84, 0xab, 0x83, 0x40, 0xbc, 0x86, - 0xef, 0x83, 0xfe, 0x82, 0x40, 0x80, 0x0d, 0x80, - 0x8f, 0x81, 0xd7, 0x84, 0xeb, 0x80, 0x41, 0xa0, - 0x82, 0x8b, 0x81, 0x41, 0x65, 0x1a, 0x8e, 0xe8, - 0x81, 0x40, 0xf8, 0x82, 0x42, 0x04, 0x00, 0x80, - 0x40, 0xfa, 0x81, 0xd6, 0x0b, 0x81, 0x41, 0x9d, - 0x82, 0xac, 0x80, 0x42, 0x84, 0x81, 0xc9, 0x81, - 0x45, 0x2a, 0x84, 0x60, 0x45, 0xf8, 0x81, 0x40, - 0x84, 0x80, 0xc0, 0x82, 0x89, 0x80, 0x43, 0x51, - 0x81, 0x60, 0x4e, 0x05, 0x80, 0x5d, 0xe6, 0x83, -}; - -static const uint8_t unicode_prop_Unified_Ideograph_table[45] = { - 0x60, 0x33, 0xff, 0x59, 0xbf, 0xbf, 0x60, 0x51, - 0xff, 0x60, 0x5a, 0x0d, 0x08, 0x00, 0x81, 0x89, - 0x00, 0x00, 0x09, 0x82, 0x61, 0x05, 0xd5, 0x60, - 0xa6, 0xdf, 0x9f, 0x50, 0x39, 0x85, 0x40, 0xdd, - 0x81, 0x56, 0x81, 0x8d, 0x5d, 0x30, 0x54, 0x1e, - 0x53, 0x4a, 0x84, 0x50, 0x5f, -}; - -static const uint8_t unicode_prop_Variation_Selector_table[13] = { - 0x58, 0x0a, 0x10, 0x80, 0x60, 0xe5, 0xef, 0x8f, - 0x6d, 0x02, 0xef, 0x40, 0xef, -}; - -static const uint8_t unicode_prop_White_Space_table[22] = { - 0x88, 0x84, 0x91, 0x80, 0xe3, 0x80, 0x99, 0x80, - 0x55, 0xde, 0x80, 0x49, 0x7e, 0x8a, 0x9c, 0x0c, - 0x80, 0xae, 0x80, 0x4f, 0x9f, 0x80, -}; - -static const uint8_t unicode_prop_Bidi_Mirrored_table[173] = { - 0xa7, 0x81, 0x91, 0x00, 0x80, 0x9b, 0x00, 0x80, - 0x9c, 0x00, 0x80, 0xac, 0x80, 0x8e, 0x80, 0x4e, - 0x7d, 0x83, 0x47, 0x5c, 0x81, 0x49, 0x9b, 0x81, - 0x89, 0x81, 0xb5, 0x81, 0x8d, 0x81, 0x40, 0xb0, - 0x80, 0x40, 0xbf, 0x1a, 0x2a, 0x02, 0x0a, 0x18, - 0x18, 0x00, 0x03, 0x88, 0x20, 0x80, 0x91, 0x23, - 0x88, 0x08, 0x00, 0x39, 0x9e, 0x0b, 0x20, 0x88, - 0x09, 0x92, 0x21, 0x88, 0x21, 0x0b, 0x97, 0x81, - 0x8f, 0x3b, 0x93, 0x0e, 0x81, 0x44, 0x3c, 0x8d, - 0xc9, 0x01, 0x18, 0x08, 0x14, 0x1c, 0x12, 0x8d, - 0x41, 0x92, 0x95, 0x0d, 0x80, 0x8d, 0x38, 0x35, - 0x10, 0x1c, 0x01, 0x0c, 0x18, 0x02, 0x09, 0x89, - 0x29, 0x81, 0x8b, 0x92, 0x03, 0x08, 0x00, 0x08, - 0x03, 0x21, 0x2a, 0x97, 0x81, 0x8a, 0x0b, 0x18, - 0x09, 0x0b, 0xaa, 0x0f, 0x80, 0xa7, 0x20, 0x00, - 0x14, 0x22, 0x18, 0x14, 0x00, 0x40, 0xff, 0x80, - 0x42, 0x02, 0x1a, 0x08, 0x81, 0x8d, 0x09, 0x89, - 0xaa, 0x87, 0x41, 0xaa, 0x89, 0x0f, 0x60, 0xce, - 0x3c, 0x2c, 0x81, 0x40, 0xa1, 0x81, 0x91, 0x00, - 0x80, 0x9b, 0x00, 0x80, 0x9c, 0x00, 0x00, 0x08, - 0x81, 0x60, 0xd7, 0x76, 0x80, 0xb8, 0x80, 0xb8, - 0x80, 0xb8, 0x80, 0xb8, 0x80, -}; - -static const uint8_t unicode_prop_Emoji_table[239] = { - 0xa2, 0x05, 0x04, 0x89, 0xee, 0x03, 0x80, 0x5f, - 0x8c, 0x80, 0x8b, 0x80, 0x40, 0xd7, 0x80, 0x95, - 0x80, 0xd9, 0x85, 0x8e, 0x81, 0x41, 0x6e, 0x81, - 0x8b, 0x80, 0x40, 0xa5, 0x80, 0x98, 0x8a, 0x1a, - 0x40, 0xc6, 0x80, 0x40, 0xe6, 0x81, 0x89, 0x80, - 0x88, 0x80, 0xb9, 0x18, 0x84, 0x88, 0x01, 0x01, - 0x09, 0x03, 0x01, 0x00, 0x09, 0x02, 0x02, 0x0f, - 0x14, 0x00, 0x04, 0x8b, 0x8a, 0x09, 0x00, 0x08, - 0x80, 0x91, 0x01, 0x81, 0x91, 0x28, 0x00, 0x0a, - 0x0c, 0x01, 0x0b, 0x81, 0x8a, 0x0c, 0x09, 0x04, - 0x08, 0x00, 0x81, 0x93, 0x0c, 0x28, 0x19, 0x03, - 0x01, 0x01, 0x28, 0x01, 0x00, 0x00, 0x05, 0x02, - 0x05, 0x80, 0x89, 0x81, 0x8e, 0x01, 0x03, 0x00, - 0x03, 0x10, 0x80, 0x8a, 0x81, 0xaf, 0x82, 0x88, - 0x80, 0x8d, 0x80, 0x8d, 0x80, 0x41, 0x73, 0x81, - 0x41, 0xce, 0x82, 0x92, 0x81, 0xb2, 0x03, 0x80, - 0x44, 0xd9, 0x80, 0x8b, 0x80, 0x42, 0x58, 0x00, - 0x80, 0x61, 0xbd, 0x69, 0x80, 0x40, 0xc9, 0x80, - 0x40, 0x9f, 0x81, 0x8b, 0x81, 0x8d, 0x01, 0x89, - 0xca, 0x99, 0x01, 0x96, 0x80, 0x93, 0x01, 0x88, - 0x94, 0x81, 0x40, 0xad, 0xa1, 0x81, 0xef, 0x09, - 0x02, 0x81, 0xd2, 0x0a, 0x80, 0x41, 0x06, 0x80, - 0xbe, 0x8a, 0x28, 0x97, 0x31, 0x0f, 0x8b, 0x01, - 0x19, 0x03, 0x81, 0x8c, 0x09, 0x07, 0x81, 0x88, - 0x04, 0x82, 0x8b, 0x17, 0x11, 0x00, 0x03, 0x05, - 0x02, 0x05, 0xd5, 0xaf, 0xc5, 0x27, 0x0a, 0x83, - 0x89, 0x10, 0x01, 0x10, 0x81, 0x89, 0x40, 0xe2, - 0x8b, 0x18, 0x41, 0x1a, 0xae, 0x80, 0x89, 0x80, - 0x40, 0xb8, 0xef, 0x8c, 0x82, 0x88, 0x86, 0xad, - 0x06, 0x87, 0x8d, 0x83, 0x88, 0x86, 0x88, -}; - -static const uint8_t unicode_prop_Emoji_Component_table[28] = { - 0xa2, 0x05, 0x04, 0x89, 0x5f, 0xd2, 0x80, 0x40, - 0xd4, 0x80, 0x60, 0xdd, 0x2a, 0x80, 0x60, 0xf3, - 0xd5, 0x99, 0x41, 0xfa, 0x84, 0x45, 0xaf, 0x83, - 0x6c, 0x06, 0x6b, 0xdf, -}; - -static const uint8_t unicode_prop_Emoji_Modifier_table[4] = { - 0x61, 0xf3, 0xfa, 0x84, -}; - -static const uint8_t unicode_prop_Emoji_Modifier_Base_table[71] = { - 0x60, 0x26, 0x1c, 0x80, 0x40, 0xda, 0x80, 0x8f, - 0x83, 0x61, 0xcc, 0x76, 0x80, 0xbb, 0x11, 0x01, - 0x82, 0xf4, 0x09, 0x8a, 0x94, 0x92, 0x10, 0x1a, - 0x02, 0x30, 0x00, 0x97, 0x80, 0x40, 0xc8, 0x0b, - 0x80, 0x94, 0x03, 0x81, 0x40, 0xad, 0x12, 0x84, - 0xd2, 0x80, 0x8f, 0x82, 0x88, 0x80, 0x8a, 0x80, - 0x42, 0x3e, 0x01, 0x07, 0x3d, 0x80, 0x88, 0x89, - 0x0a, 0xb7, 0x80, 0xbc, 0x08, 0x08, 0x80, 0x90, - 0x10, 0x8c, 0x40, 0xe4, 0x82, 0xa9, 0x88, -}; - -static const uint8_t unicode_prop_Emoji_Presentation_table[145] = { - 0x60, 0x23, 0x19, 0x81, 0x40, 0xcc, 0x1a, 0x01, - 0x80, 0x42, 0x08, 0x81, 0x94, 0x81, 0xb1, 0x8b, - 0xaa, 0x80, 0x92, 0x80, 0x8c, 0x07, 0x81, 0x90, - 0x0c, 0x0f, 0x04, 0x80, 0x94, 0x06, 0x08, 0x03, - 0x01, 0x06, 0x03, 0x81, 0x9b, 0x80, 0xa2, 0x00, - 0x03, 0x10, 0x80, 0xbc, 0x82, 0x97, 0x80, 0x8d, - 0x80, 0x43, 0x5a, 0x81, 0xb2, 0x03, 0x80, 0x61, - 0xc4, 0xad, 0x80, 0x40, 0xc9, 0x80, 0x40, 0xbd, - 0x01, 0x89, 0xca, 0x99, 0x00, 0x97, 0x80, 0x93, - 0x01, 0x20, 0x82, 0x94, 0x81, 0x40, 0xad, 0xa0, - 0x8b, 0x88, 0x80, 0xc5, 0x80, 0x95, 0x8b, 0xaa, - 0x1c, 0x8b, 0x90, 0x10, 0x82, 0xc6, 0x00, 0x80, - 0x40, 0xba, 0x81, 0xbe, 0x8c, 0x18, 0x97, 0x91, - 0x80, 0x99, 0x81, 0x8c, 0x80, 0xd5, 0xd4, 0xaf, - 0xc5, 0x28, 0x12, 0x0a, 0x1b, 0x8a, 0x0e, 0x88, - 0x40, 0xe2, 0x8b, 0x18, 0x41, 0x1a, 0xae, 0x80, - 0x89, 0x80, 0x40, 0xb8, 0xef, 0x8c, 0x82, 0x88, - 0x86, 0xad, 0x06, 0x87, 0x8d, 0x83, 0x88, 0x86, - 0x88, -}; - -static const uint8_t unicode_prop_Extended_Pictographic_table[156] = { - 0x40, 0xa8, 0x03, 0x80, 0x5f, 0x8c, 0x80, 0x8b, - 0x80, 0x40, 0xd7, 0x80, 0x95, 0x80, 0xd9, 0x85, - 0x8e, 0x81, 0x41, 0x6e, 0x81, 0x8b, 0x80, 0xde, - 0x80, 0xc5, 0x80, 0x98, 0x8a, 0x1a, 0x40, 0xc6, - 0x80, 0x40, 0xe6, 0x81, 0x89, 0x80, 0x88, 0x80, - 0xb9, 0x18, 0x28, 0x8b, 0x80, 0xf1, 0x89, 0xf5, - 0x81, 0x8a, 0x00, 0x00, 0x28, 0x10, 0x28, 0x89, - 0x81, 0x8e, 0x01, 0x03, 0x00, 0x03, 0x10, 0x80, - 0x8a, 0x84, 0xac, 0x82, 0x88, 0x80, 0x8d, 0x80, - 0x8d, 0x80, 0x41, 0x73, 0x81, 0x41, 0xce, 0x82, - 0x92, 0x81, 0xb2, 0x03, 0x80, 0x44, 0xd9, 0x80, - 0x8b, 0x80, 0x42, 0x58, 0x00, 0x80, 0x61, 0xbd, - 0x65, 0x40, 0xff, 0x8c, 0x82, 0x9e, 0x80, 0xbb, - 0x85, 0x8b, 0x81, 0x8d, 0x01, 0x89, 0x91, 0xb8, - 0x9a, 0x8e, 0x89, 0x80, 0x93, 0x01, 0x88, 0x03, - 0x88, 0x41, 0xb1, 0x84, 0x41, 0x3d, 0x87, 0x41, - 0x09, 0xaf, 0xff, 0xf3, 0x8b, 0xd4, 0xaa, 0x8b, - 0x83, 0xb7, 0x87, 0x89, 0x85, 0xa7, 0x87, 0x9d, - 0xd1, 0x8b, 0xae, 0x80, 0x89, 0x80, 0x41, 0xb8, - 0x40, 0xff, 0x43, 0xfd, -}; - -static const uint8_t unicode_prop_Default_Ignorable_Code_Point_table[51] = { - 0x40, 0xac, 0x80, 0x42, 0xa0, 0x80, 0x42, 0xcb, - 0x80, 0x4b, 0x41, 0x81, 0x46, 0x52, 0x81, 0xd4, - 0x84, 0x47, 0xfa, 0x84, 0x99, 0x84, 0xb0, 0x8f, - 0x50, 0xf3, 0x80, 0x60, 0xcc, 0x9a, 0x8f, 0x40, - 0xee, 0x80, 0x40, 0x9f, 0x80, 0xce, 0x88, 0x60, - 0xbc, 0xa6, 0x83, 0x54, 0xce, 0x87, 0x6c, 0x2e, - 0x84, 0x4f, 0xff, -}; - -typedef enum { - UNICODE_PROP_Hyphen, - UNICODE_PROP_Other_Math, - UNICODE_PROP_Other_Alphabetic, - UNICODE_PROP_Other_Lowercase, - UNICODE_PROP_Other_Uppercase, - UNICODE_PROP_Other_Grapheme_Extend, - UNICODE_PROP_Other_Default_Ignorable_Code_Point, - UNICODE_PROP_Other_ID_Start, - UNICODE_PROP_Other_ID_Continue, - UNICODE_PROP_Prepended_Concatenation_Mark, - UNICODE_PROP_ID_Continue1, - UNICODE_PROP_XID_Start1, - UNICODE_PROP_XID_Continue1, - UNICODE_PROP_Changes_When_Titlecased1, - UNICODE_PROP_Changes_When_Casefolded1, - UNICODE_PROP_Changes_When_NFKC_Casefolded1, - UNICODE_PROP_ASCII_Hex_Digit, - UNICODE_PROP_Bidi_Control, - UNICODE_PROP_Dash, - UNICODE_PROP_Deprecated, - UNICODE_PROP_Diacritic, - UNICODE_PROP_Extender, - UNICODE_PROP_Hex_Digit, - UNICODE_PROP_IDS_Binary_Operator, - UNICODE_PROP_IDS_Trinary_Operator, - UNICODE_PROP_Ideographic, - UNICODE_PROP_Join_Control, - UNICODE_PROP_Logical_Order_Exception, - UNICODE_PROP_Noncharacter_Code_Point, - UNICODE_PROP_Pattern_Syntax, - UNICODE_PROP_Pattern_White_Space, - UNICODE_PROP_Quotation_Mark, - UNICODE_PROP_Radical, - UNICODE_PROP_Regional_Indicator, - UNICODE_PROP_Sentence_Terminal, - UNICODE_PROP_Soft_Dotted, - UNICODE_PROP_Terminal_Punctuation, - UNICODE_PROP_Unified_Ideograph, - UNICODE_PROP_Variation_Selector, - UNICODE_PROP_White_Space, - UNICODE_PROP_Bidi_Mirrored, - UNICODE_PROP_Emoji, - UNICODE_PROP_Emoji_Component, - UNICODE_PROP_Emoji_Modifier, - UNICODE_PROP_Emoji_Modifier_Base, - UNICODE_PROP_Emoji_Presentation, - UNICODE_PROP_Extended_Pictographic, - UNICODE_PROP_Default_Ignorable_Code_Point, - UNICODE_PROP_ID_Start, - UNICODE_PROP_Case_Ignorable, - UNICODE_PROP_ASCII, - UNICODE_PROP_Alphabetic, - UNICODE_PROP_Any, - UNICODE_PROP_Assigned, - UNICODE_PROP_Cased, - UNICODE_PROP_Changes_When_Casefolded, - UNICODE_PROP_Changes_When_Casemapped, - UNICODE_PROP_Changes_When_Lowercased, - UNICODE_PROP_Changes_When_NFKC_Casefolded, - UNICODE_PROP_Changes_When_Titlecased, - UNICODE_PROP_Changes_When_Uppercased, - UNICODE_PROP_Grapheme_Base, - UNICODE_PROP_Grapheme_Extend, - UNICODE_PROP_ID_Continue, - UNICODE_PROP_Lowercase, - UNICODE_PROP_Math, - UNICODE_PROP_Uppercase, - UNICODE_PROP_XID_Continue, - UNICODE_PROP_XID_Start, - UNICODE_PROP_Cased1, - UNICODE_PROP_COUNT, -} UnicodePropertyEnum; - -static const char unicode_prop_name_table[] = - "ASCII_Hex_Digit,AHex" "\0" - "Bidi_Control,Bidi_C" "\0" - "Dash" "\0" - "Deprecated,Dep" "\0" - "Diacritic,Dia" "\0" - "Extender,Ext" "\0" - "Hex_Digit,Hex" "\0" - "IDS_Binary_Operator,IDSB" "\0" - "IDS_Trinary_Operator,IDST" "\0" - "Ideographic,Ideo" "\0" - "Join_Control,Join_C" "\0" - "Logical_Order_Exception,LOE" "\0" - "Noncharacter_Code_Point,NChar" "\0" - "Pattern_Syntax,Pat_Syn" "\0" - "Pattern_White_Space,Pat_WS" "\0" - "Quotation_Mark,QMark" "\0" - "Radical" "\0" - "Regional_Indicator,RI" "\0" - "Sentence_Terminal,STerm" "\0" - "Soft_Dotted,SD" "\0" - "Terminal_Punctuation,Term" "\0" - "Unified_Ideograph,UIdeo" "\0" - "Variation_Selector,VS" "\0" - "White_Space,space" "\0" - "Bidi_Mirrored,Bidi_M" "\0" - "Emoji" "\0" - "Emoji_Component,EComp" "\0" - "Emoji_Modifier,EMod" "\0" - "Emoji_Modifier_Base,EBase" "\0" - "Emoji_Presentation,EPres" "\0" - "Extended_Pictographic,ExtPict" "\0" - "Default_Ignorable_Code_Point,DI" "\0" - "ID_Start,IDS" "\0" - "Case_Ignorable,CI" "\0" - "ASCII" "\0" - "Alphabetic,Alpha" "\0" - "Any" "\0" - "Assigned" "\0" - "Cased" "\0" - "Changes_When_Casefolded,CWCF" "\0" - "Changes_When_Casemapped,CWCM" "\0" - "Changes_When_Lowercased,CWL" "\0" - "Changes_When_NFKC_Casefolded,CWKCF" "\0" - "Changes_When_Titlecased,CWT" "\0" - "Changes_When_Uppercased,CWU" "\0" - "Grapheme_Base,Gr_Base" "\0" - "Grapheme_Extend,Gr_Ext" "\0" - "ID_Continue,IDC" "\0" - "Lowercase,Lower" "\0" - "Math" "\0" - "Uppercase,Upper" "\0" - "XID_Continue,XIDC" "\0" - "XID_Start,XIDS" "\0" -; - -static const uint8_t * const unicode_prop_table[] = { - unicode_prop_Hyphen_table, - unicode_prop_Other_Math_table, - unicode_prop_Other_Alphabetic_table, - unicode_prop_Other_Lowercase_table, - unicode_prop_Other_Uppercase_table, - unicode_prop_Other_Grapheme_Extend_table, - unicode_prop_Other_Default_Ignorable_Code_Point_table, - unicode_prop_Other_ID_Start_table, - unicode_prop_Other_ID_Continue_table, - unicode_prop_Prepended_Concatenation_Mark_table, - unicode_prop_ID_Continue1_table, - unicode_prop_XID_Start1_table, - unicode_prop_XID_Continue1_table, - unicode_prop_Changes_When_Titlecased1_table, - unicode_prop_Changes_When_Casefolded1_table, - unicode_prop_Changes_When_NFKC_Casefolded1_table, - unicode_prop_ASCII_Hex_Digit_table, - unicode_prop_Bidi_Control_table, - unicode_prop_Dash_table, - unicode_prop_Deprecated_table, - unicode_prop_Diacritic_table, - unicode_prop_Extender_table, - unicode_prop_Hex_Digit_table, - unicode_prop_IDS_Binary_Operator_table, - unicode_prop_IDS_Trinary_Operator_table, - unicode_prop_Ideographic_table, - unicode_prop_Join_Control_table, - unicode_prop_Logical_Order_Exception_table, - unicode_prop_Noncharacter_Code_Point_table, - unicode_prop_Pattern_Syntax_table, - unicode_prop_Pattern_White_Space_table, - unicode_prop_Quotation_Mark_table, - unicode_prop_Radical_table, - unicode_prop_Regional_Indicator_table, - unicode_prop_Sentence_Terminal_table, - unicode_prop_Soft_Dotted_table, - unicode_prop_Terminal_Punctuation_table, - unicode_prop_Unified_Ideograph_table, - unicode_prop_Variation_Selector_table, - unicode_prop_White_Space_table, - unicode_prop_Bidi_Mirrored_table, - unicode_prop_Emoji_table, - unicode_prop_Emoji_Component_table, - unicode_prop_Emoji_Modifier_table, - unicode_prop_Emoji_Modifier_Base_table, - unicode_prop_Emoji_Presentation_table, - unicode_prop_Extended_Pictographic_table, - unicode_prop_Default_Ignorable_Code_Point_table, - unicode_prop_ID_Start_table, - unicode_prop_Case_Ignorable_table, -}; - -static const uint16_t unicode_prop_len_table[] = { - countof(unicode_prop_Hyphen_table), - countof(unicode_prop_Other_Math_table), - countof(unicode_prop_Other_Alphabetic_table), - countof(unicode_prop_Other_Lowercase_table), - countof(unicode_prop_Other_Uppercase_table), - countof(unicode_prop_Other_Grapheme_Extend_table), - countof(unicode_prop_Other_Default_Ignorable_Code_Point_table), - countof(unicode_prop_Other_ID_Start_table), - countof(unicode_prop_Other_ID_Continue_table), - countof(unicode_prop_Prepended_Concatenation_Mark_table), - countof(unicode_prop_ID_Continue1_table), - countof(unicode_prop_XID_Start1_table), - countof(unicode_prop_XID_Continue1_table), - countof(unicode_prop_Changes_When_Titlecased1_table), - countof(unicode_prop_Changes_When_Casefolded1_table), - countof(unicode_prop_Changes_When_NFKC_Casefolded1_table), - countof(unicode_prop_ASCII_Hex_Digit_table), - countof(unicode_prop_Bidi_Control_table), - countof(unicode_prop_Dash_table), - countof(unicode_prop_Deprecated_table), - countof(unicode_prop_Diacritic_table), - countof(unicode_prop_Extender_table), - countof(unicode_prop_Hex_Digit_table), - countof(unicode_prop_IDS_Binary_Operator_table), - countof(unicode_prop_IDS_Trinary_Operator_table), - countof(unicode_prop_Ideographic_table), - countof(unicode_prop_Join_Control_table), - countof(unicode_prop_Logical_Order_Exception_table), - countof(unicode_prop_Noncharacter_Code_Point_table), - countof(unicode_prop_Pattern_Syntax_table), - countof(unicode_prop_Pattern_White_Space_table), - countof(unicode_prop_Quotation_Mark_table), - countof(unicode_prop_Radical_table), - countof(unicode_prop_Regional_Indicator_table), - countof(unicode_prop_Sentence_Terminal_table), - countof(unicode_prop_Soft_Dotted_table), - countof(unicode_prop_Terminal_Punctuation_table), - countof(unicode_prop_Unified_Ideograph_table), - countof(unicode_prop_Variation_Selector_table), - countof(unicode_prop_White_Space_table), - countof(unicode_prop_Bidi_Mirrored_table), - countof(unicode_prop_Emoji_table), - countof(unicode_prop_Emoji_Component_table), - countof(unicode_prop_Emoji_Modifier_table), - countof(unicode_prop_Emoji_Modifier_Base_table), - countof(unicode_prop_Emoji_Presentation_table), - countof(unicode_prop_Extended_Pictographic_table), - countof(unicode_prop_Default_Ignorable_Code_Point_table), - countof(unicode_prop_ID_Start_table), - countof(unicode_prop_Case_Ignorable_table), -}; diff --git a/vendor/quickjs-ng/libunicode.c b/vendor/quickjs-ng/libunicode.c deleted file mode 100644 index f0b514691..000000000 --- a/vendor/quickjs-ng/libunicode.c +++ /dev/null @@ -1,1504 +0,0 @@ -/* - * Unicode utilities - * - * Copyright (c) 2017-2018 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include - -#include "cutils.h" -#include "libunicode.h" -#include "libunicode-table.h" - -enum { - RUN_TYPE_U, - RUN_TYPE_L, - RUN_TYPE_UF, - RUN_TYPE_LF, - RUN_TYPE_UL, - RUN_TYPE_LSU, - RUN_TYPE_U2L_399_EXT2, - RUN_TYPE_UF_D20, - RUN_TYPE_UF_D1_EXT, - RUN_TYPE_U_EXT, - RUN_TYPE_LF_EXT, - RUN_TYPE_U_EXT2, - RUN_TYPE_L_EXT2, - RUN_TYPE_U_EXT3, -}; - -/* conv_type: - 0 = to upper - 1 = to lower - 2 = case folding (= to lower with modifications) -*/ -int lre_case_conv(uint32_t *res, uint32_t c, int conv_type) -{ - if (c < 128) { - if (conv_type) { - if (c >= 'A' && c <= 'Z') { - c = c - 'A' + 'a'; - } - } else { - if (c >= 'a' && c <= 'z') { - c = c - 'a' + 'A'; - } - } - } else { - uint32_t v, code, data, type, len, a, is_lower; - int idx, idx_min, idx_max; - - is_lower = (conv_type != 0); - idx_min = 0; - idx_max = countof(case_conv_table1) - 1; - while (idx_min <= idx_max) { - idx = (unsigned)(idx_max + idx_min) / 2; - v = case_conv_table1[idx]; - code = v >> (32 - 17); - len = (v >> (32 - 17 - 7)) & 0x7f; - if (c < code) { - idx_max = idx - 1; - } else if (c >= code + len) { - idx_min = idx + 1; - } else { - type = (v >> (32 - 17 - 7 - 4)) & 0xf; - data = ((v & 0xf) << 8) | case_conv_table2[idx]; - switch(type) { - case RUN_TYPE_U: - case RUN_TYPE_L: - case RUN_TYPE_UF: - case RUN_TYPE_LF: - if (conv_type == (type & 1) || - (type >= RUN_TYPE_UF && conv_type == 2)) { - c = c - code + (case_conv_table1[data] >> (32 - 17)); - } - break; - case RUN_TYPE_UL: - a = c - code; - if ((a & 1) != (1 - is_lower)) - break; - c = (a ^ 1) + code; - break; - case RUN_TYPE_LSU: - a = c - code; - if (a == 1) { - c += 2 * is_lower - 1; - } else if (a == (1 - is_lower) * 2) { - c += (2 * is_lower - 1) * 2; - } - break; - case RUN_TYPE_U2L_399_EXT2: - if (!is_lower) { - res[0] = c - code + case_conv_ext[data >> 6]; - res[1] = 0x399; - return 2; - } else { - c = c - code + case_conv_ext[data & 0x3f]; - } - break; - case RUN_TYPE_UF_D20: - if (conv_type == 1) - break; - c = data + (conv_type == 2) * 0x20; - break; - case RUN_TYPE_UF_D1_EXT: - if (conv_type == 1) - break; - c = case_conv_ext[data] + (conv_type == 2); - break; - case RUN_TYPE_U_EXT: - case RUN_TYPE_LF_EXT: - if (is_lower != (type - RUN_TYPE_U_EXT)) - break; - c = case_conv_ext[data]; - break; - case RUN_TYPE_U_EXT2: - case RUN_TYPE_L_EXT2: - if (conv_type != (type - RUN_TYPE_U_EXT2)) - break; - res[0] = c - code + case_conv_ext[data >> 6]; - res[1] = case_conv_ext[data & 0x3f]; - return 2; - default: - case RUN_TYPE_U_EXT3: - if (conv_type != 0) - break; - res[0] = case_conv_ext[data >> 8]; - res[1] = case_conv_ext[(data >> 4) & 0xf]; - res[2] = case_conv_ext[data & 0xf]; - return 3; - } - break; - } - } - } - res[0] = c; - return 1; -} - -static uint32_t get_le24(const uint8_t *ptr) -{ - return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16); -} - -#define UNICODE_INDEX_BLOCK_LEN 32 - -/* return -1 if not in table, otherwise the offset in the block */ -static int get_index_pos(uint32_t *pcode, uint32_t c, - const uint8_t *index_table, int index_table_len) -{ - uint32_t code, v; - int idx_min, idx_max, idx; - - idx_min = 0; - v = get_le24(index_table); - code = v & ((1 << 21) - 1); - if (c < code) { - *pcode = 0; - return 0; - } - idx_max = index_table_len - 1; - code = get_le24(index_table + idx_max * 3); - if (c >= code) - return -1; - /* invariant: tab[idx_min] <= c < tab2[idx_max] */ - while ((idx_max - idx_min) > 1) { - idx = (idx_max + idx_min) / 2; - v = get_le24(index_table + idx * 3); - code = v & ((1 << 21) - 1); - if (c < code) { - idx_max = idx; - } else { - idx_min = idx; - } - } - v = get_le24(index_table + idx_min * 3); - *pcode = v & ((1 << 21) - 1); - return (idx_min + 1) * UNICODE_INDEX_BLOCK_LEN + (v >> 21); -} - -static BOOL lre_is_in_table(uint32_t c, const uint8_t *table, - const uint8_t *index_table, int index_table_len) -{ - uint32_t code, b, bit; - int pos; - const uint8_t *p; - - pos = get_index_pos(&code, c, index_table, index_table_len); - if (pos < 0) - return FALSE; /* outside the table */ - p = table + pos; - bit = 0; - for(;;) { - b = *p++; - if (b < 64) { - code += (b >> 3) + 1; - if (c < code) - return bit; - bit ^= 1; - code += (b & 7) + 1; - } else if (b >= 0x80) { - code += b - 0x80 + 1; - } else if (b < 0x60) { - code += (((b - 0x40) << 8) | p[0]) + 1; - p++; - } else { - code += (((b - 0x60) << 16) | (p[0] << 8) | p[1]) + 1; - p += 2; - } - if (c < code) - return bit; - bit ^= 1; - } -} - -BOOL lre_is_cased(uint32_t c) -{ - uint32_t v, code, len; - int idx, idx_min, idx_max; - - idx_min = 0; - idx_max = countof(case_conv_table1) - 1; - while (idx_min <= idx_max) { - idx = (unsigned)(idx_max + idx_min) / 2; - v = case_conv_table1[idx]; - code = v >> (32 - 17); - len = (v >> (32 - 17 - 7)) & 0x7f; - if (c < code) { - idx_max = idx - 1; - } else if (c >= code + len) { - idx_min = idx + 1; - } else { - return TRUE; - } - } - return lre_is_in_table(c, unicode_prop_Cased1_table, - unicode_prop_Cased1_index, - sizeof(unicode_prop_Cased1_index) / 3); -} - -BOOL lre_is_case_ignorable(uint32_t c) -{ - return lre_is_in_table(c, unicode_prop_Case_Ignorable_table, - unicode_prop_Case_Ignorable_index, - sizeof(unicode_prop_Case_Ignorable_index) / 3); -} - -/* character range */ - -static __maybe_unused void cr_dump(CharRange *cr) -{ - int i; - for(i = 0; i < cr->len; i++) - printf("%d: 0x%04x\n", i, cr->points[i]); -} - -static void *cr_default_realloc(void *opaque, void *ptr, size_t size) -{ - return realloc(ptr, size); -} - -void cr_init(CharRange *cr, void *mem_opaque, DynBufReallocFunc *realloc_func) -{ - cr->len = cr->size = 0; - cr->points = NULL; - cr->mem_opaque = mem_opaque; - cr->realloc_func = realloc_func ? realloc_func : cr_default_realloc; -} - -void cr_free(CharRange *cr) -{ - cr->realloc_func(cr->mem_opaque, cr->points, 0); -} - -int cr_realloc(CharRange *cr, int size) -{ - int new_size; - uint32_t *new_buf; - - if (size > cr->size) { - new_size = max_int(size, cr->size * 3 / 2); - new_buf = cr->realloc_func(cr->mem_opaque, cr->points, - new_size * sizeof(cr->points[0])); - if (!new_buf) - return -1; - cr->points = new_buf; - cr->size = new_size; - } - return 0; -} - -int cr_copy(CharRange *cr, const CharRange *cr1) -{ - if (cr_realloc(cr, cr1->len)) - return -1; - memcpy(cr->points, cr1->points, sizeof(cr->points[0]) * cr1->len); - cr->len = cr1->len; - return 0; -} - -/* merge consecutive intervals and remove empty intervals */ -static void cr_compress(CharRange *cr) -{ - int i, j, k, len; - uint32_t *pt; - - pt = cr->points; - len = cr->len; - i = 0; - j = 0; - k = 0; - while ((i + 1) < len) { - if (pt[i] == pt[i + 1]) { - /* empty interval */ - i += 2; - } else { - j = i; - while ((j + 3) < len && pt[j + 1] == pt[j + 2]) - j += 2; - /* just copy */ - pt[k] = pt[i]; - pt[k + 1] = pt[j + 1]; - k += 2; - i = j + 2; - } - } - cr->len = k; -} - -/* union or intersection */ -int cr_op(CharRange *cr, const uint32_t *a_pt, int a_len, - const uint32_t *b_pt, int b_len, int op) -{ - int a_idx, b_idx, is_in; - uint32_t v; - - a_idx = 0; - b_idx = 0; - for(;;) { - /* get one more point from a or b in increasing order */ - if (a_idx < a_len && b_idx < b_len) { - if (a_pt[a_idx] < b_pt[b_idx]) { - goto a_add; - } else if (a_pt[a_idx] == b_pt[b_idx]) { - v = a_pt[a_idx]; - a_idx++; - b_idx++; - } else { - goto b_add; - } - } else if (a_idx < a_len) { - a_add: - v = a_pt[a_idx++]; - } else if (b_idx < b_len) { - b_add: - v = b_pt[b_idx++]; - } else { - break; - } - /* add the point if the in/out status changes */ - switch(op) { - case CR_OP_UNION: - is_in = (a_idx & 1) | (b_idx & 1); - break; - case CR_OP_INTER: - is_in = (a_idx & 1) & (b_idx & 1); - break; - case CR_OP_XOR: - is_in = (a_idx & 1) ^ (b_idx & 1); - break; - default: - abort(); - } - if (is_in != (cr->len & 1)) { - if (cr_add_point(cr, v)) - return -1; - } - } - cr_compress(cr); - return 0; -} - -int cr_union1(CharRange *cr, const uint32_t *b_pt, int b_len) -{ - CharRange a = *cr; - int ret; - cr->len = 0; - cr->size = 0; - cr->points = NULL; - ret = cr_op(cr, a.points, a.len, b_pt, b_len, CR_OP_UNION); - cr_free(&a); - return ret; -} - -int cr_invert(CharRange *cr) -{ - int len; - len = cr->len; - if (cr_realloc(cr, len + 2)) - return -1; - memmove(cr->points + 1, cr->points, len * sizeof(cr->points[0])); - cr->points[0] = 0; - cr->points[len + 1] = UINT32_MAX; - cr->len = len + 2; - cr_compress(cr); - return 0; -} - -BOOL lre_is_id_start(uint32_t c) -{ - return lre_is_in_table(c, unicode_prop_ID_Start_table, - unicode_prop_ID_Start_index, - sizeof(unicode_prop_ID_Start_index) / 3); -} - -BOOL lre_is_id_continue(uint32_t c) -{ - return lre_is_id_start(c) || - lre_is_in_table(c, unicode_prop_ID_Continue1_table, - unicode_prop_ID_Continue1_index, - sizeof(unicode_prop_ID_Continue1_index) / 3); -} - -#define UNICODE_DECOMP_LEN_MAX 18 - -typedef enum { - DECOMP_TYPE_C1, /* 16 bit char */ - DECOMP_TYPE_L1, /* 16 bit char table */ - DECOMP_TYPE_L2, - DECOMP_TYPE_L3, - DECOMP_TYPE_L4, - DECOMP_TYPE_L5, /* XXX: not used */ - DECOMP_TYPE_L6, /* XXX: could remove */ - DECOMP_TYPE_L7, /* XXX: could remove */ - DECOMP_TYPE_LL1, /* 18 bit char table */ - DECOMP_TYPE_LL2, - DECOMP_TYPE_S1, /* 8 bit char table */ - DECOMP_TYPE_S2, - DECOMP_TYPE_S3, - DECOMP_TYPE_S4, - DECOMP_TYPE_S5, - DECOMP_TYPE_I1, /* increment 16 bit char value */ - DECOMP_TYPE_I2_0, - DECOMP_TYPE_I2_1, - DECOMP_TYPE_I3_1, - DECOMP_TYPE_I3_2, - DECOMP_TYPE_I4_1, - DECOMP_TYPE_I4_2, - DECOMP_TYPE_B1, /* 16 bit base + 8 bit offset */ - DECOMP_TYPE_B2, - DECOMP_TYPE_B3, - DECOMP_TYPE_B4, - DECOMP_TYPE_B5, - DECOMP_TYPE_B6, - DECOMP_TYPE_B7, - DECOMP_TYPE_B8, - DECOMP_TYPE_B18, - DECOMP_TYPE_LS2, - DECOMP_TYPE_PAT3, - DECOMP_TYPE_S2_UL, - DECOMP_TYPE_LS2_UL, -} DecompTypeEnum; - -static uint32_t unicode_get_short_code(uint32_t c) -{ - static const uint16_t unicode_short_table[2] = { 0x2044, 0x2215 }; - - if (c < 0x80) - return c; - else if (c < 0x80 + 0x50) - return c - 0x80 + 0x300; - else - return unicode_short_table[c - 0x80 - 0x50]; -} - -static uint32_t unicode_get_lower_simple(uint32_t c) -{ - if (c < 0x100 || (c >= 0x410 && c <= 0x42f)) - c += 0x20; - else - c++; - return c; -} - -static uint16_t unicode_get16(const uint8_t *p) -{ - return p[0] | (p[1] << 8); -} - -static int unicode_decomp_entry(uint32_t *res, uint32_t c, - int idx, uint32_t code, uint32_t len, - uint32_t type) -{ - uint32_t c1; - int l, i, p; - const uint8_t *d; - - if (type == DECOMP_TYPE_C1) { - res[0] = unicode_decomp_table2[idx]; - return 1; - } else { - d = unicode_decomp_data + unicode_decomp_table2[idx]; - switch(type) { - case DECOMP_TYPE_L1: - case DECOMP_TYPE_L2: - case DECOMP_TYPE_L3: - case DECOMP_TYPE_L4: - case DECOMP_TYPE_L5: - case DECOMP_TYPE_L6: - case DECOMP_TYPE_L7: - l = type - DECOMP_TYPE_L1 + 1; - d += (c - code) * l * 2; - for(i = 0; i < l; i++) { - if ((res[i] = unicode_get16(d + 2 * i)) == 0) - return 0; - } - return l; - case DECOMP_TYPE_LL1: - case DECOMP_TYPE_LL2: - { - uint32_t k, p; - l = type - DECOMP_TYPE_LL1 + 1; - k = (c - code) * l; - p = len * l * 2; - for(i = 0; i < l; i++) { - c1 = unicode_get16(d + 2 * k) | - (((d[p + (k / 4)] >> ((k % 4) * 2)) & 3) << 16); - if (!c1) - return 0; - res[i] = c1; - k++; - } - } - return l; - case DECOMP_TYPE_S1: - case DECOMP_TYPE_S2: - case DECOMP_TYPE_S3: - case DECOMP_TYPE_S4: - case DECOMP_TYPE_S5: - l = type - DECOMP_TYPE_S1 + 1; - d += (c - code) * l; - for(i = 0; i < l; i++) { - if ((res[i] = unicode_get_short_code(d[i])) == 0) - return 0; - } - return l; - case DECOMP_TYPE_I1: - l = 1; - p = 0; - goto decomp_type_i; - case DECOMP_TYPE_I2_0: - case DECOMP_TYPE_I2_1: - case DECOMP_TYPE_I3_1: - case DECOMP_TYPE_I3_2: - case DECOMP_TYPE_I4_1: - case DECOMP_TYPE_I4_2: - l = 2 + ((type - DECOMP_TYPE_I2_0) >> 1); - p = ((type - DECOMP_TYPE_I2_0) & 1) + (l > 2); - decomp_type_i: - for(i = 0; i < l; i++) { - c1 = unicode_get16(d + 2 * i); - if (i == p) - c1 += c - code; - res[i] = c1; - } - return l; - case DECOMP_TYPE_B18: - l = 18; - goto decomp_type_b; - case DECOMP_TYPE_B1: - case DECOMP_TYPE_B2: - case DECOMP_TYPE_B3: - case DECOMP_TYPE_B4: - case DECOMP_TYPE_B5: - case DECOMP_TYPE_B6: - case DECOMP_TYPE_B7: - case DECOMP_TYPE_B8: - l = type - DECOMP_TYPE_B1 + 1; - decomp_type_b: - { - uint32_t c_min; - c_min = unicode_get16(d); - d += 2 + (c - code) * l; - for(i = 0; i < l; i++) { - c1 = d[i]; - if (c1 == 0xff) - c1 = 0x20; - else - c1 += c_min; - res[i] = c1; - } - } - return l; - case DECOMP_TYPE_LS2: - d += (c - code) * 3; - if (!(res[0] = unicode_get16(d))) - return 0; - res[1] = unicode_get_short_code(d[2]); - return 2; - case DECOMP_TYPE_PAT3: - res[0] = unicode_get16(d); - res[2] = unicode_get16(d + 2); - d += 4 + (c - code) * 2; - res[1] = unicode_get16(d); - return 3; - case DECOMP_TYPE_S2_UL: - case DECOMP_TYPE_LS2_UL: - c1 = c - code; - if (type == DECOMP_TYPE_S2_UL) { - d += c1 & ~1; - c = unicode_get_short_code(*d); - d++; - } else { - d += (c1 >> 1) * 3; - c = unicode_get16(d); - d += 2; - } - if (c1 & 1) - c = unicode_get_lower_simple(c); - res[0] = c; - res[1] = unicode_get_short_code(*d); - return 2; - } - } - return 0; -} - - -/* return the length of the decomposition (length <= - UNICODE_DECOMP_LEN_MAX) or 0 if no decomposition */ -static int unicode_decomp_char(uint32_t *res, uint32_t c, BOOL is_compat1) -{ - uint32_t v, type, is_compat, code, len; - int idx_min, idx_max, idx; - - idx_min = 0; - idx_max = countof(unicode_decomp_table1) - 1; - while (idx_min <= idx_max) { - idx = (idx_max + idx_min) / 2; - v = unicode_decomp_table1[idx]; - code = v >> (32 - 18); - len = (v >> (32 - 18 - 7)) & 0x7f; - // printf("idx=%d code=%05x len=%d\n", idx, code, len); - if (c < code) { - idx_max = idx - 1; - } else if (c >= code + len) { - idx_min = idx + 1; - } else { - is_compat = v & 1; - if (is_compat1 < is_compat) - break; - type = (v >> (32 - 18 - 7 - 6)) & 0x3f; - return unicode_decomp_entry(res, c, idx, code, len, type); - } - } - return 0; -} - -/* return 0 if no pair found */ -static int unicode_compose_pair(uint32_t c0, uint32_t c1) -{ - uint32_t code, len, type, v, idx1, d_idx, d_offset, ch; - int idx_min, idx_max, idx, d; - uint32_t pair[2]; - - idx_min = 0; - idx_max = countof(unicode_comp_table) - 1; - while (idx_min <= idx_max) { - idx = (idx_max + idx_min) / 2; - idx1 = unicode_comp_table[idx]; - - /* idx1 represent an entry of the decomposition table */ - d_idx = idx1 >> 6; - d_offset = idx1 & 0x3f; - v = unicode_decomp_table1[d_idx]; - code = v >> (32 - 18); - len = (v >> (32 - 18 - 7)) & 0x7f; - type = (v >> (32 - 18 - 7 - 6)) & 0x3f; - ch = code + d_offset; - unicode_decomp_entry(pair, ch, d_idx, code, len, type); - d = c0 - pair[0]; - if (d == 0) - d = c1 - pair[1]; - if (d < 0) { - idx_max = idx - 1; - } else if (d > 0) { - idx_min = idx + 1; - } else { - return ch; - } - } - return 0; -} - -/* return the combining class of character c (between 0 and 255) */ -static int unicode_get_cc(uint32_t c) -{ - uint32_t code, n, type, cc, c1, b; - int pos; - const uint8_t *p; - - pos = get_index_pos(&code, c, - unicode_cc_index, sizeof(unicode_cc_index) / 3); - if (pos < 0) - return 0; - p = unicode_cc_table + pos; - for(;;) { - b = *p++; - type = b >> 6; - n = b & 0x3f; - if (n < 48) { - } else if (n < 56) { - n = (n - 48) << 8; - n |= *p++; - n += 48; - } else { - n = (n - 56) << 8; - n |= *p++ << 8; - n |= *p++; - n += 48 + (1 << 11); - } - if (type <= 1) - p++; - c1 = code + n + 1; - if (c < c1) { - switch(type) { - case 0: - cc = p[-1]; - break; - case 1: - cc = p[-1] + c - code; - break; - case 2: - cc = 0; - break; - default: - case 3: - cc = 230; - break; - } - return cc; - } - code = c1; - } -} - -static void sort_cc(int *buf, int len) -{ - int i, j, k, cc, cc1, start, ch1; - - for(i = 0; i < len; i++) { - cc = unicode_get_cc(buf[i]); - if (cc != 0) { - start = i; - j = i + 1; - while (j < len) { - ch1 = buf[j]; - cc1 = unicode_get_cc(ch1); - if (cc1 == 0) - break; - k = j - 1; - while (k >= start) { - if (unicode_get_cc(buf[k]) <= cc1) - break; - buf[k + 1] = buf[k]; - k--; - } - buf[k + 1] = ch1; - j++; - } - i = j; - } - } -} - -static void to_nfd_rec(DynBuf *dbuf, - const int *src, int src_len, int is_compat) -{ - uint32_t c, v; - int i, l; - uint32_t res[UNICODE_DECOMP_LEN_MAX]; - - for(i = 0; i < src_len; i++) { - c = src[i]; - if (c >= 0xac00 && c < 0xd7a4) { - /* Hangul decomposition */ - c -= 0xac00; - dbuf_put_u32(dbuf, 0x1100 + c / 588); - dbuf_put_u32(dbuf, 0x1161 + (c % 588) / 28); - v = c % 28; - if (v != 0) - dbuf_put_u32(dbuf, 0x11a7 + v); - } else { - l = unicode_decomp_char(res, c, is_compat); - if (l) { - to_nfd_rec(dbuf, (int *)res, l, is_compat); - } else { - dbuf_put_u32(dbuf, c); - } - } - } -} - -/* return 0 if not found */ -static int compose_pair(uint32_t c0, uint32_t c1) -{ - /* Hangul composition */ - if (c0 >= 0x1100 && c0 < 0x1100 + 19 && - c1 >= 0x1161 && c1 < 0x1161 + 21) { - return 0xac00 + (c0 - 0x1100) * 588 + (c1 - 0x1161) * 28; - } else if (c0 >= 0xac00 && c0 < 0xac00 + 11172 && - (c0 - 0xac00) % 28 == 0 && - c1 >= 0x11a7 && c1 < 0x11a7 + 28) { - return c0 + c1 - 0x11a7; - } else { - return unicode_compose_pair(c0, c1); - } -} - -int unicode_normalize(uint32_t **pdst, const uint32_t *src, int src_len, - UnicodeNormalizationEnum n_type, - void *opaque, DynBufReallocFunc *realloc_func) -{ - int *buf, buf_len, i, p, starter_pos, cc, last_cc, out_len; - BOOL is_compat; - DynBuf dbuf_s, *dbuf = &dbuf_s; - - is_compat = n_type >> 1; - - dbuf_init2(dbuf, opaque, realloc_func); - if (dbuf_realloc(dbuf, sizeof(int) * src_len)) - goto fail; - - /* common case: latin1 is unaffected by NFC */ - if (n_type == UNICODE_NFC) { - for(i = 0; i < src_len; i++) { - if (src[i] >= 0x100) - goto not_latin1; - } - buf = (int *)dbuf->buf; - memcpy(buf, src, src_len * sizeof(int)); - *pdst = (uint32_t *)buf; - return src_len; - not_latin1: ; - } - - to_nfd_rec(dbuf, (const int *)src, src_len, is_compat); - if (dbuf_error(dbuf)) { - fail: - *pdst = NULL; - return -1; - } - buf = (int *)dbuf->buf; - buf_len = dbuf->size / sizeof(int); - - sort_cc(buf, buf_len); - - if (buf_len <= 1 || (n_type & 1) != 0) { - /* NFD / NFKD */ - *pdst = (uint32_t *)buf; - return buf_len; - } - - i = 1; - out_len = 1; - while (i < buf_len) { - /* find the starter character and test if it is blocked from - the character at 'i' */ - last_cc = unicode_get_cc(buf[i]); - starter_pos = out_len - 1; - while (starter_pos >= 0) { - cc = unicode_get_cc(buf[starter_pos]); - if (cc == 0) - break; - if (cc >= last_cc) - goto next; - last_cc = 256; - starter_pos--; - } - if (starter_pos >= 0 && - (p = compose_pair(buf[starter_pos], buf[i])) != 0) { - buf[starter_pos] = p; - i++; - } else { - next: - buf[out_len++] = buf[i++]; - } - } - *pdst = (uint32_t *)buf; - return out_len; -} - -/* char ranges for various unicode properties */ - -static int unicode_find_name(const char *name_table, const char *name) -{ - const char *p, *r; - int pos; - size_t name_len, len; - - p = name_table; - pos = 0; - name_len = strlen(name); - while (*p) { - for(;;) { - r = strchr(p, ','); - if (!r) - len = strlen(p); - else - len = r - p; - if (len == name_len && !memcmp(p, name, name_len)) - return pos; - p += len + 1; - if (!r) - break; - } - pos++; - } - return -1; -} - -/* 'cr' must be initialized and empty. Return 0 if OK, -1 if error, -2 - if not found */ -int unicode_script(CharRange *cr, - const char *script_name, BOOL is_ext) -{ - int script_idx; - const uint8_t *p, *p_end; - uint32_t c, c1, b, n, v, v_len, i, type; - CharRange cr1_s = { 0 }, *cr1 = NULL; - CharRange cr2_s = { 0 }, *cr2 = &cr2_s; - BOOL is_common; - - script_idx = unicode_find_name(unicode_script_name_table, script_name); - if (script_idx < 0) - return -2; - /* Note: we remove the "Unknown" Script */ - script_idx += UNICODE_SCRIPT_Unknown + 1; - - is_common = (script_idx == UNICODE_SCRIPT_Common || - script_idx == UNICODE_SCRIPT_Inherited); - if (is_ext) { - cr1 = &cr1_s; - cr_init(cr1, cr->mem_opaque, cr->realloc_func); - cr_init(cr2, cr->mem_opaque, cr->realloc_func); - } else { - cr1 = cr; - } - - p = unicode_script_table; - p_end = unicode_script_table + countof(unicode_script_table); - c = 0; - while (p < p_end) { - b = *p++; - type = b >> 7; - n = b & 0x7f; - if (n < 96) { - } else if (n < 112) { - n = (n - 96) << 8; - n |= *p++; - n += 96; - } else { - n = (n - 112) << 16; - n |= *p++ << 8; - n |= *p++; - n += 96 + (1 << 12); - } - if (type == 0) - v = 0; - else - v = *p++; - c1 = c + n + 1; - if (v == script_idx) { - if (cr_add_interval(cr1, c, c1)) - goto fail; - } - c = c1; - } - - if (is_ext) { - /* add the script extensions */ - p = unicode_script_ext_table; - p_end = unicode_script_ext_table + countof(unicode_script_ext_table); - c = 0; - while (p < p_end) { - b = *p++; - if (b < 128) { - n = b; - } else if (b < 128 + 64) { - n = (b - 128) << 8; - n |= *p++; - n += 128; - } else { - n = (b - 128 - 64) << 16; - n |= *p++ << 8; - n |= *p++; - n += 128 + (1 << 14); - } - c1 = c + n + 1; - v_len = *p++; - if (is_common) { - if (v_len != 0) { - if (cr_add_interval(cr2, c, c1)) - goto fail; - } - } else { - for(i = 0; i < v_len; i++) { - if (p[i] == script_idx) { - if (cr_add_interval(cr2, c, c1)) - goto fail; - break; - } - } - } - p += v_len; - c = c1; - } - if (is_common) { - /* remove all the characters with script extensions */ - if (cr_invert(cr2)) - goto fail; - if (cr_op(cr, cr1->points, cr1->len, cr2->points, cr2->len, - CR_OP_INTER)) - goto fail; - } else { - if (cr_op(cr, cr1->points, cr1->len, cr2->points, cr2->len, - CR_OP_UNION)) - goto fail; - } - cr_free(cr1); - cr_free(cr2); - } - return 0; - fail: - if (is_ext) { - cr_free(cr1); - cr_free(cr2); - } - goto fail; -} - -#define M(id) (1U << UNICODE_GC_ ## id) - -static int unicode_general_category1(CharRange *cr, uint32_t gc_mask) -{ - const uint8_t *p, *p_end; - uint32_t c, c0, b, n, v; - - p = unicode_gc_table; - p_end = unicode_gc_table + countof(unicode_gc_table); - c = 0; - while (p < p_end) { - b = *p++; - n = b >> 5; - v = b & 0x1f; - if (n == 7) { - n = *p++; - if (n < 128) { - n += 7; - } else if (n < 128 + 64) { - n = (n - 128) << 8; - n |= *p++; - n += 7 + 128; - } else { - n = (n - 128 - 64) << 16; - n |= *p++ << 8; - n |= *p++; - n += 7 + 128 + (1 << 14); - } - } - c0 = c; - c += n + 1; - if (v == 31) { - /* run of Lu / Ll */ - b = gc_mask & (M(Lu) | M(Ll)); - if (b != 0) { - if (b == (M(Lu) | M(Ll))) { - goto add_range; - } else { - c0 += ((gc_mask & M(Ll)) != 0); - for(; c0 < c; c0 += 2) { - if (cr_add_interval(cr, c0, c0 + 1)) - return -1; - } - } - } - } else if ((gc_mask >> v) & 1) { - add_range: - if (cr_add_interval(cr, c0, c)) - return -1; - } - } - return 0; -} - -static int unicode_prop1(CharRange *cr, int prop_idx) -{ - const uint8_t *p, *p_end; - uint32_t c, c0, b, bit; - - p = unicode_prop_table[prop_idx]; - p_end = p + unicode_prop_len_table[prop_idx]; - c = 0; - bit = 0; - while (p < p_end) { - c0 = c; - b = *p++; - if (b < 64) { - c += (b >> 3) + 1; - if (bit) { - if (cr_add_interval(cr, c0, c)) - return -1; - } - bit ^= 1; - c0 = c; - c += (b & 7) + 1; - } else if (b >= 0x80) { - c += b - 0x80 + 1; - } else if (b < 0x60) { - c += (((b - 0x40) << 8) | p[0]) + 1; - p++; - } else { - c += (((b - 0x60) << 16) | (p[0] << 8) | p[1]) + 1; - p += 2; - } - if (bit) { - if (cr_add_interval(cr, c0, c)) - return -1; - } - bit ^= 1; - } - return 0; -} - -#define CASE_U (1 << 0) -#define CASE_L (1 << 1) -#define CASE_F (1 << 2) - -/* use the case conversion table to generate range of characters. - CASE_U: set char if modified by uppercasing, - CASE_L: set char if modified by lowercasing, - CASE_F: set char if modified by case folding, - */ -static int unicode_case1(CharRange *cr, int case_mask) -{ -#define MR(x) (1 << RUN_TYPE_ ## x) - const uint32_t tab_run_mask[3] = { - MR(U) | MR(UF) | MR(UL) | MR(LSU) | MR(U2L_399_EXT2) | MR(UF_D20) | - MR(UF_D1_EXT) | MR(U_EXT) | MR(U_EXT2) | MR(U_EXT3), - - MR(L) | MR(LF) | MR(UL) | MR(LSU) | MR(U2L_399_EXT2) | MR(LF_EXT) | MR(L_EXT2), - - MR(UF) | MR(LF) | MR(UL) | MR(LSU) | MR(U2L_399_EXT2) | MR(LF_EXT) | MR(UF_D20) | MR(UF_D1_EXT) | MR(LF_EXT), - }; -#undef MR - uint32_t mask, v, code, type, len, i, idx; - - if (case_mask == 0) - return 0; - mask = 0; - for(i = 0; i < 3; i++) { - if ((case_mask >> i) & 1) - mask |= tab_run_mask[i]; - } - for(idx = 0; idx < countof(case_conv_table1); idx++) { - v = case_conv_table1[idx]; - type = (v >> (32 - 17 - 7 - 4)) & 0xf; - code = v >> (32 - 17); - len = (v >> (32 - 17 - 7)) & 0x7f; - if ((mask >> type) & 1) { - // printf("%d: type=%d %04x %04x\n", idx, type, code, code + len - 1); - switch(type) { - case RUN_TYPE_UL: - if ((case_mask & CASE_U) && (case_mask & (CASE_L | CASE_F))) - goto def_case; - code += ((case_mask & CASE_U) != 0); - for(i = 0; i < len; i += 2) { - if (cr_add_interval(cr, code + i, code + i + 1)) - return -1; - } - break; - case RUN_TYPE_LSU: - if ((case_mask & CASE_U) && (case_mask & (CASE_L | CASE_F))) - goto def_case; - if (!(case_mask & CASE_U)) { - if (cr_add_interval(cr, code, code + 1)) - return -1; - } - if (cr_add_interval(cr, code + 1, code + 2)) - return -1; - if (case_mask & CASE_U) { - if (cr_add_interval(cr, code + 2, code + 3)) - return -1; - } - break; - default: - def_case: - if (cr_add_interval(cr, code, code + len)) - return -1; - break; - } - } - } - return 0; -} - -typedef enum { - POP_GC, - POP_PROP, - POP_CASE, - POP_UNION, - POP_INTER, - POP_XOR, - POP_INVERT, - POP_END, -} PropOPEnum; - -#define POP_STACK_LEN_MAX 4 - -static int unicode_prop_ops(CharRange *cr, ...) -{ - va_list ap; - CharRange stack[POP_STACK_LEN_MAX]; - int stack_len, op, ret, i; - uint32_t a; - - va_start(ap, cr); - stack_len = 0; - for(;;) { - op = va_arg(ap, int); - switch(op) { - case POP_GC: - assert(stack_len < POP_STACK_LEN_MAX); - a = va_arg(ap, int); - cr_init(&stack[stack_len++], cr->mem_opaque, cr->realloc_func); - if (unicode_general_category1(&stack[stack_len - 1], a)) - goto fail; - break; - case POP_PROP: - assert(stack_len < POP_STACK_LEN_MAX); - a = va_arg(ap, int); - cr_init(&stack[stack_len++], cr->mem_opaque, cr->realloc_func); - if (unicode_prop1(&stack[stack_len - 1], a)) - goto fail; - break; - case POP_CASE: - assert(stack_len < POP_STACK_LEN_MAX); - a = va_arg(ap, int); - cr_init(&stack[stack_len++], cr->mem_opaque, cr->realloc_func); - if (unicode_case1(&stack[stack_len - 1], a)) - goto fail; - break; - case POP_UNION: - case POP_INTER: - case POP_XOR: - { - CharRange *cr1, *cr2, *cr3; - assert(stack_len >= 2); - assert(stack_len < POP_STACK_LEN_MAX); - cr1 = &stack[stack_len - 2]; - cr2 = &stack[stack_len - 1]; - cr3 = &stack[stack_len++]; - cr_init(cr3, cr->mem_opaque, cr->realloc_func); - if (cr_op(cr3, cr1->points, cr1->len, - cr2->points, cr2->len, op - POP_UNION + CR_OP_UNION)) - goto fail; - cr_free(cr1); - cr_free(cr2); - *cr1 = *cr3; - stack_len -= 2; - } - break; - case POP_INVERT: - assert(stack_len >= 1); - if (cr_invert(&stack[stack_len - 1])) - goto fail; - break; - case POP_END: - goto done; - default: - abort(); - } - } - done: - assert(stack_len == 1); - ret = cr_copy(cr, &stack[0]); - cr_free(&stack[0]); - return ret; - fail: - for(i = 0; i < stack_len; i++) - cr_free(&stack[i]); - return -1; -} - -static const uint32_t unicode_gc_mask_table[] = { - M(Lu) | M(Ll) | M(Lt), /* LC */ - M(Lu) | M(Ll) | M(Lt) | M(Lm) | M(Lo), /* L */ - M(Mn) | M(Mc) | M(Me), /* M */ - M(Nd) | M(Nl) | M(No), /* N */ - M(Sm) | M(Sc) | M(Sk) | M(So), /* S */ - M(Pc) | M(Pd) | M(Ps) | M(Pe) | M(Pi) | M(Pf) | M(Po), /* P */ - M(Zs) | M(Zl) | M(Zp), /* Z */ - M(Cc) | M(Cf) | M(Cs) | M(Co) | M(Cn), /* C */ -}; - -/* 'cr' must be initialized and empty. Return 0 if OK, -1 if error, -2 - if not found */ -int unicode_general_category(CharRange *cr, const char *gc_name) -{ - int gc_idx; - uint32_t gc_mask; - - gc_idx = unicode_find_name(unicode_gc_name_table, gc_name); - if (gc_idx < 0) - return -2; - if (gc_idx <= UNICODE_GC_Co) { - gc_mask = (uint64_t)1 << gc_idx; - } else { - gc_mask = unicode_gc_mask_table[gc_idx - UNICODE_GC_LC]; - } - return unicode_general_category1(cr, gc_mask); -} - - -/* 'cr' must be initialized and empty. Return 0 if OK, -1 if error, -2 - if not found */ -int unicode_prop(CharRange *cr, const char *prop_name) -{ - int prop_idx, ret; - - prop_idx = unicode_find_name(unicode_prop_name_table, prop_name); - if (prop_idx < 0) - return -2; - prop_idx += UNICODE_PROP_ASCII_Hex_Digit; - - ret = 0; - switch(prop_idx) { - case UNICODE_PROP_ASCII: - if (cr_add_interval(cr, 0x00, 0x7f + 1)) - return -1; - break; - case UNICODE_PROP_Any: - if (cr_add_interval(cr, 0x00000, 0x10ffff + 1)) - return -1; - break; - case UNICODE_PROP_Assigned: - ret = unicode_prop_ops(cr, - POP_GC, M(Cn), - POP_INVERT, - POP_END); - break; - case UNICODE_PROP_Math: - ret = unicode_prop_ops(cr, - POP_GC, M(Sm), - POP_PROP, UNICODE_PROP_Other_Math, - POP_UNION, - POP_END); - break; - case UNICODE_PROP_Lowercase: - ret = unicode_prop_ops(cr, - POP_GC, M(Ll), - POP_PROP, UNICODE_PROP_Other_Lowercase, - POP_UNION, - POP_END); - break; - case UNICODE_PROP_Uppercase: - ret = unicode_prop_ops(cr, - POP_GC, M(Lu), - POP_PROP, UNICODE_PROP_Other_Uppercase, - POP_UNION, - POP_END); - break; - case UNICODE_PROP_Cased: - ret = unicode_prop_ops(cr, - POP_GC, M(Lu) | M(Ll) | M(Lt), - POP_PROP, UNICODE_PROP_Other_Uppercase, - POP_UNION, - POP_PROP, UNICODE_PROP_Other_Lowercase, - POP_UNION, - POP_END); - break; - case UNICODE_PROP_Alphabetic: - ret = unicode_prop_ops(cr, - POP_GC, M(Lu) | M(Ll) | M(Lt) | M(Lm) | M(Lo) | M(Nl), - POP_PROP, UNICODE_PROP_Other_Uppercase, - POP_UNION, - POP_PROP, UNICODE_PROP_Other_Lowercase, - POP_UNION, - POP_PROP, UNICODE_PROP_Other_Alphabetic, - POP_UNION, - POP_END); - break; - case UNICODE_PROP_Grapheme_Base: - ret = unicode_prop_ops(cr, - POP_GC, M(Cc) | M(Cf) | M(Cs) | M(Co) | M(Cn) | M(Zl) | M(Zp) | M(Me) | M(Mn), - POP_PROP, UNICODE_PROP_Other_Grapheme_Extend, - POP_UNION, - POP_INVERT, - POP_END); - break; - case UNICODE_PROP_Grapheme_Extend: - ret = unicode_prop_ops(cr, - POP_GC, M(Me) | M(Mn), - POP_PROP, UNICODE_PROP_Other_Grapheme_Extend, - POP_UNION, - POP_END); - break; - case UNICODE_PROP_XID_Start: - ret = unicode_prop_ops(cr, - POP_GC, M(Lu) | M(Ll) | M(Lt) | M(Lm) | M(Lo) | M(Nl), - POP_PROP, UNICODE_PROP_Other_ID_Start, - POP_UNION, - POP_PROP, UNICODE_PROP_Pattern_Syntax, - POP_PROP, UNICODE_PROP_Pattern_White_Space, - POP_UNION, - POP_PROP, UNICODE_PROP_XID_Start1, - POP_UNION, - POP_INVERT, - POP_INTER, - POP_END); - break; - case UNICODE_PROP_XID_Continue: - ret = unicode_prop_ops(cr, - POP_GC, M(Lu) | M(Ll) | M(Lt) | M(Lm) | M(Lo) | M(Nl) | - M(Mn) | M(Mc) | M(Nd) | M(Pc), - POP_PROP, UNICODE_PROP_Other_ID_Start, - POP_UNION, - POP_PROP, UNICODE_PROP_Other_ID_Continue, - POP_UNION, - POP_PROP, UNICODE_PROP_Pattern_Syntax, - POP_PROP, UNICODE_PROP_Pattern_White_Space, - POP_UNION, - POP_PROP, UNICODE_PROP_XID_Continue1, - POP_UNION, - POP_INVERT, - POP_INTER, - POP_END); - break; - case UNICODE_PROP_Changes_When_Uppercased: - ret = unicode_case1(cr, CASE_U); - break; - case UNICODE_PROP_Changes_When_Lowercased: - ret = unicode_case1(cr, CASE_L); - break; - case UNICODE_PROP_Changes_When_Casemapped: - ret = unicode_case1(cr, CASE_U | CASE_L | CASE_F); - break; - case UNICODE_PROP_Changes_When_Titlecased: - ret = unicode_prop_ops(cr, - POP_CASE, CASE_U, - POP_PROP, UNICODE_PROP_Changes_When_Titlecased1, - POP_XOR, - POP_END); - break; - case UNICODE_PROP_Changes_When_Casefolded: - ret = unicode_prop_ops(cr, - POP_CASE, CASE_F, - POP_PROP, UNICODE_PROP_Changes_When_Casefolded1, - POP_XOR, - POP_END); - break; - case UNICODE_PROP_Changes_When_NFKC_Casefolded: - ret = unicode_prop_ops(cr, - POP_CASE, CASE_F, - POP_PROP, UNICODE_PROP_Changes_When_NFKC_Casefolded1, - POP_XOR, - POP_END); - break; - /* we use the existing tables */ - case UNICODE_PROP_ID_Continue: - ret = unicode_prop_ops(cr, - POP_PROP, UNICODE_PROP_ID_Start, - POP_PROP, UNICODE_PROP_ID_Continue1, - POP_XOR, - POP_END); - break; - default: - if (prop_idx >= countof(unicode_prop_table)) - return -2; - ret = unicode_prop1(cr, prop_idx); - break; - } - return ret; -} diff --git a/vendor/quickjs-ng/libunicode.h b/vendor/quickjs-ng/libunicode.h deleted file mode 100644 index d815b4b71..000000000 --- a/vendor/quickjs-ng/libunicode.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Unicode utilities - * - * Copyright (c) 2017-2018 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef LIBUNICODE_H -#define LIBUNICODE_H - -#include - -#define LRE_BOOL int /* for documentation purposes */ - -#define LRE_CC_RES_LEN_MAX 3 - -typedef enum { - UNICODE_NFC, - UNICODE_NFD, - UNICODE_NFKC, - UNICODE_NFKD, -} UnicodeNormalizationEnum; - -int lre_case_conv(uint32_t *res, uint32_t c, int conv_type); -LRE_BOOL lre_is_cased(uint32_t c); -LRE_BOOL lre_is_case_ignorable(uint32_t c); - -/* char ranges */ - -typedef struct { - int len; /* in points, always even */ - int size; - uint32_t *points; /* points sorted by increasing value */ - void *mem_opaque; - void *(*realloc_func)(void *opaque, void *ptr, size_t size); -} CharRange; - -typedef enum { - CR_OP_UNION, - CR_OP_INTER, - CR_OP_XOR, -} CharRangeOpEnum; - -void cr_init(CharRange *cr, void *mem_opaque, void *(*realloc_func)(void *opaque, void *ptr, size_t size)); -void cr_free(CharRange *cr); -int cr_realloc(CharRange *cr, int size); -int cr_copy(CharRange *cr, const CharRange *cr1); - -static inline int cr_add_point(CharRange *cr, uint32_t v) -{ - if (cr->len >= cr->size) { - if (cr_realloc(cr, cr->len + 1)) - return -1; - } - cr->points[cr->len++] = v; - return 0; -} - -static inline int cr_add_interval(CharRange *cr, uint32_t c1, uint32_t c2) -{ - if ((cr->len + 2) > cr->size) { - if (cr_realloc(cr, cr->len + 2)) - return -1; - } - cr->points[cr->len++] = c1; - cr->points[cr->len++] = c2; - return 0; -} - -int cr_union1(CharRange *cr, const uint32_t *b_pt, int b_len); - -static inline int cr_union_interval(CharRange *cr, uint32_t c1, uint32_t c2) -{ - uint32_t b_pt[2]; - b_pt[0] = c1; - b_pt[1] = c2 + 1; - return cr_union1(cr, b_pt, 2); -} - -int cr_op(CharRange *cr, const uint32_t *a_pt, int a_len, - const uint32_t *b_pt, int b_len, int op); - -int cr_invert(CharRange *cr); - -LRE_BOOL lre_is_id_start(uint32_t c); -LRE_BOOL lre_is_id_continue(uint32_t c); - -int unicode_normalize(uint32_t **pdst, const uint32_t *src, int src_len, - UnicodeNormalizationEnum n_type, - void *opaque, void *(*realloc_func)(void *opaque, void *ptr, size_t size)); - -/* Unicode character range functions */ - -int unicode_script(CharRange *cr, - const char *script_name, LRE_BOOL is_ext); -int unicode_general_category(CharRange *cr, const char *gc_name); -int unicode_prop(CharRange *cr, const char *prop_name); - -#undef LRE_BOOL - -#endif /* LIBUNICODE_H */ diff --git a/vendor/quickjs-ng/qjs.c b/vendor/quickjs-ng/qjs.c deleted file mode 100644 index 8b566c445..000000000 --- a/vendor/quickjs-ng/qjs.c +++ /dev/null @@ -1,516 +0,0 @@ -/* - * QuickJS stand alone interpreter - * - * Copyright (c) 2017-2021 Fabrice Bellard - * Copyright (c) 2017-2021 Charlie Gordon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#if !defined(_MSC_VER) -#include -#endif -#include -#include -#include - -#include "cutils.h" -#include "quickjs-libc.h" - -extern const uint8_t qjsc_repl[]; -extern const uint32_t qjsc_repl_size; - -static JSCFunctionListEntry argv0; - -static int eval_buf(JSContext *ctx, const void *buf, int buf_len, - const char *filename, int eval_flags) -{ - JSValue val; - int ret; - - if ((eval_flags & JS_EVAL_TYPE_MASK) == JS_EVAL_TYPE_MODULE) { - /* for the modules, we compile then run to be able to set - import.meta */ - val = JS_Eval(ctx, buf, buf_len, filename, - eval_flags | JS_EVAL_FLAG_COMPILE_ONLY); - if (!JS_IsException(val)) { - js_module_set_import_meta(ctx, val, TRUE, TRUE); - val = JS_EvalFunction(ctx, val); - } - } else { - val = JS_Eval(ctx, buf, buf_len, filename, eval_flags); - } - if (JS_IsException(val)) { - js_std_dump_error(ctx); - ret = -1; - } else { - ret = 0; - } - JS_FreeValue(ctx, val); - return ret; -} - -static int eval_file(JSContext *ctx, const char *filename, int module) -{ - uint8_t *buf; - int ret, eval_flags; - size_t buf_len; - - buf = js_load_file(ctx, &buf_len, filename); - if (!buf) { - perror(filename); - exit(1); - } - - if (module < 0) { - module = (has_suffix(filename, ".mjs") || - JS_DetectModule((const char *)buf, buf_len)); - } - if (module) - eval_flags = JS_EVAL_TYPE_MODULE; - else - eval_flags = JS_EVAL_TYPE_GLOBAL; - ret = eval_buf(ctx, buf, buf_len, filename, eval_flags); - js_free(ctx, buf); - return ret; -} - -static JSValue js_gc(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JS_RunGC(JS_GetRuntime(ctx)); - return JS_UNDEFINED; -} - -static const JSCFunctionListEntry navigator_obj[] = { - JS_PROP_STRING_DEF("userAgent", "quickjs-ng", JS_PROP_ENUMERABLE), -}; - -static const JSCFunctionListEntry global_obj[] = { - JS_CFUNC_DEF("gc", 0, js_gc), - JS_OBJECT_DEF("navigator", navigator_obj, countof(navigator_obj), JS_PROP_C_W_E), -}; - -/* also used to initialize the worker context */ -static JSContext *JS_NewCustomContext(JSRuntime *rt) -{ - JSContext *ctx; - ctx = JS_NewContext(rt); - if (!ctx) - return NULL; - /* system modules */ - js_init_module_std(ctx, "std"); - js_init_module_os(ctx, "os"); - - JSValue global = JS_GetGlobalObject(ctx); - JS_SetPropertyFunctionList(ctx, global, global_obj, countof(global_obj)); - JS_SetPropertyFunctionList(ctx, global, &argv0, 1); - JS_FreeValue(ctx, global); - - return ctx; -} - -#if defined(__APPLE__) -#define MALLOC_OVERHEAD 0 -#else -#define MALLOC_OVERHEAD 8 -#endif - -struct trace_malloc_data { - uint8_t *base; -}; - -static inline unsigned long long js_trace_malloc_ptr_offset(uint8_t *ptr, - struct trace_malloc_data *dp) -{ - return ptr - dp->base; -} - -static void -#if defined(_WIN32) && !defined(__clang__) -/* mingw printf is used */ -__attribute__((format(gnu_printf, 2, 3))) -#else -__attribute__((format(printf, 2, 3))) -#endif - js_trace_malloc_printf(JSMallocState *s, const char *fmt, ...) -{ - va_list ap; - int c; - - va_start(ap, fmt); - while ((c = *fmt++) != '\0') { - if (c == '%') { - /* only handle %p and %zd */ - if (*fmt == 'p') { - uint8_t *ptr = va_arg(ap, void *); - if (ptr == NULL) { - printf("NULL"); - } else { - printf("H%+06lld.%zd", - js_trace_malloc_ptr_offset(ptr, s->opaque), - js__malloc_usable_size(ptr)); - } - fmt++; - continue; - } - if (fmt[0] == 'z' && fmt[1] == 'd') { - size_t sz = va_arg(ap, size_t); - printf("%zd", sz); - fmt += 2; - continue; - } - } - putc(c, stdout); - } - va_end(ap); -} - -static void js_trace_malloc_init(struct trace_malloc_data *s) -{ - free(s->base = malloc(8)); -} - -static void *js_trace_malloc(JSMallocState *s, size_t size) -{ - void *ptr; - - /* Do not allocate zero bytes: behavior is platform dependent */ - assert(size != 0); - - if (unlikely(s->malloc_size + size > s->malloc_limit)) - return NULL; - ptr = malloc(size); - js_trace_malloc_printf(s, "A %zd -> %p\n", size, ptr); - if (ptr) { - s->malloc_count++; - s->malloc_size += js__malloc_usable_size(ptr) + MALLOC_OVERHEAD; - } - return ptr; -} - -static void js_trace_free(JSMallocState *s, void *ptr) -{ - if (!ptr) - return; - - js_trace_malloc_printf(s, "F %p\n", ptr); - s->malloc_count--; - s->malloc_size -= js__malloc_usable_size(ptr) + MALLOC_OVERHEAD; - free(ptr); -} - -static void *js_trace_realloc(JSMallocState *s, void *ptr, size_t size) -{ - size_t old_size; - - if (!ptr) { - if (size == 0) - return NULL; - return js_trace_malloc(s, size); - } - old_size = js__malloc_usable_size(ptr); - if (size == 0) { - js_trace_malloc_printf(s, "R %zd %p\n", size, ptr); - s->malloc_count--; - s->malloc_size -= old_size + MALLOC_OVERHEAD; - free(ptr); - return NULL; - } - if (s->malloc_size + size - old_size > s->malloc_limit) - return NULL; - - js_trace_malloc_printf(s, "R %zd %p", size, ptr); - - ptr = realloc(ptr, size); - js_trace_malloc_printf(s, " -> %p\n", ptr); - if (ptr) { - s->malloc_size += js__malloc_usable_size(ptr) - old_size; - } - return ptr; -} - -static const JSMallocFunctions trace_mf = { - js_trace_malloc, - js_trace_free, - js_trace_realloc, - js__malloc_usable_size -}; - -#define PROG_NAME "qjs" - -void help(void) -{ - printf("QuickJS-ng version %s\n" - "usage: " PROG_NAME " [options] [file [args]]\n" - "-h --help list options\n" - "-e --eval EXPR evaluate EXPR\n" - "-i --interactive go to interactive mode\n" - "-m --module load as ES6 module (default=autodetect)\n" - " --script load as ES6 script (default=autodetect)\n" - "-I --include file include an additional file\n" - " --std make 'std' and 'os' available to the loaded script\n" - "-T --trace trace memory allocation\n" - "-d --dump dump the memory usage stats\n" - " --memory-limit n limit the memory usage to 'n' bytes\n" - " --stack-size n limit the stack size to 'n' bytes\n" - " --unhandled-rejection dump unhandled promise rejections\n" - "-q --quit just instantiate the interpreter and quit\n", JS_GetVersion()); - exit(1); -} - -int main(int argc, char **argv) -{ - JSRuntime *rt; - JSContext *ctx; - struct trace_malloc_data trace_data = { NULL }; - int optind; - char *expr = NULL; - int interactive = 0; - int dump_memory = 0; - int trace_memory = 0; - int empty_run = 0; - int module = -1; - int load_std = 0; - int dump_unhandled_promise_rejection = 0; - size_t memory_limit = 0; - char *include_list[32]; - int i, include_count = 0; - size_t stack_size = 0; - - argv0 = (JSCFunctionListEntry)JS_PROP_STRING_DEF("argv0", argv[0], - JS_PROP_C_W_E); - - /* cannot use getopt because we want to pass the command line to - the script */ - optind = 1; - while (optind < argc && *argv[optind] == '-') { - char *arg = argv[optind] + 1; - const char *longopt = ""; - /* a single - is not an option, it also stops argument scanning */ - if (!*arg) - break; - optind++; - if (*arg == '-') { - longopt = arg + 1; - arg += strlen(arg); - /* -- stops argument scanning */ - if (!*longopt) - break; - } - for (; *arg || *longopt; longopt = "") { - char opt = *arg; - if (opt) - arg++; - if (opt == 'h' || opt == '?' || !strcmp(longopt, "help")) { - help(); - continue; - } - if (opt == 'e' || !strcmp(longopt, "eval")) { - if (*arg) { - expr = arg; - break; - } - if (optind < argc) { - expr = argv[optind++]; - break; - } - fprintf(stderr, "qjs: missing expression for -e\n"); - exit(2); - } - if (opt == 'I' || !strcmp(longopt, "include")) { - if (optind >= argc) { - fprintf(stderr, "expecting filename"); - exit(1); - } - if (include_count >= countof(include_list)) { - fprintf(stderr, "too many included files"); - exit(1); - } - include_list[include_count++] = argv[optind++]; - continue; - } - if (opt == 'i' || !strcmp(longopt, "interactive")) { - interactive++; - continue; - } - if (opt == 'm' || !strcmp(longopt, "module")) { - module = 1; - continue; - } - if (!strcmp(longopt, "script")) { - module = 0; - continue; - } - if (opt == 'd' || !strcmp(longopt, "dump")) { - dump_memory++; - continue; - } - if (opt == 'T' || !strcmp(longopt, "trace")) { - trace_memory++; - continue; - } - if (!strcmp(longopt, "std")) { - load_std = 1; - continue; - } - if (!strcmp(longopt, "unhandled-rejection")) { - dump_unhandled_promise_rejection = 1; - continue; - } - if (opt == 'q' || !strcmp(longopt, "quit")) { - empty_run++; - continue; - } - if (!strcmp(longopt, "memory-limit")) { - if (optind >= argc) { - fprintf(stderr, "expecting memory limit"); - exit(1); - } - memory_limit = (size_t)strtod(argv[optind++], NULL); - continue; - } - if (!strcmp(longopt, "stack-size")) { - if (optind >= argc) { - fprintf(stderr, "expecting stack size"); - exit(1); - } - stack_size = (size_t)strtod(argv[optind++], NULL); - continue; - } - if (opt) { - fprintf(stderr, "qjs: unknown option '-%c'\n", opt); - } else { - fprintf(stderr, "qjs: unknown option '--%s'\n", longopt); - } - help(); - } - } - - if (trace_memory) { - js_trace_malloc_init(&trace_data); - rt = JS_NewRuntime2(&trace_mf, &trace_data); - } else { - rt = JS_NewRuntime(); - } - if (!rt) { - fprintf(stderr, "qjs: cannot allocate JS runtime\n"); - exit(2); - } - if (memory_limit != 0) - JS_SetMemoryLimit(rt, memory_limit); - if (stack_size != 0) - JS_SetMaxStackSize(rt, stack_size); - js_std_set_worker_new_context_func(JS_NewCustomContext); - js_std_init_handlers(rt); - ctx = JS_NewCustomContext(rt); - if (!ctx) { - fprintf(stderr, "qjs: cannot allocate JS context\n"); - exit(2); - } - - /* loader for ES6 modules */ - JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL); - - if (dump_unhandled_promise_rejection) { - JS_SetHostPromiseRejectionTracker(rt, js_std_promise_rejection_tracker, - NULL); - } - - if (!empty_run) { - js_std_add_helpers(ctx, argc - optind, argv + optind); - - /* make 'std' and 'os' visible to non module code */ - if (load_std) { - const char *str = "import * as std from 'std';\n" - "import * as os from 'os';\n" - "globalThis.std = std;\n" - "globalThis.os = os;\n"; - eval_buf(ctx, str, strlen(str), "", JS_EVAL_TYPE_MODULE); - } - - for(i = 0; i < include_count; i++) { - if (eval_file(ctx, include_list[i], module)) - goto fail; - } - - if (expr) { - if (eval_buf(ctx, expr, strlen(expr), "", 0)) - goto fail; - } else - if (optind >= argc) { - /* interactive mode */ - interactive = 1; - } else { - const char *filename; - filename = argv[optind]; - if (eval_file(ctx, filename, module)) - goto fail; - } - if (interactive) { - js_std_eval_binary(ctx, qjsc_repl, qjsc_repl_size, 0); - } - js_std_loop(ctx); - } - - if (dump_memory) { - JSMemoryUsage stats; - JS_ComputeMemoryUsage(rt, &stats); - JS_DumpMemoryUsage(stdout, &stats, rt); - } - js_std_free_handlers(rt); - JS_FreeContext(ctx); - JS_FreeRuntime(rt); - - if (empty_run && dump_memory) { - clock_t t[5]; - double best[5] = {0}; - int i, j; - for (i = 0; i < 100; i++) { - t[0] = clock(); - rt = JS_NewRuntime(); - t[1] = clock(); - ctx = JS_NewContext(rt); - t[2] = clock(); - JS_FreeContext(ctx); - t[3] = clock(); - JS_FreeRuntime(rt); - t[4] = clock(); - for (j = 4; j > 0; j--) { - double ms = 1000.0 * (t[j] - t[j - 1]) / CLOCKS_PER_SEC; - if (i == 0 || best[j] > ms) - best[j] = ms; - } - } - printf("\nInstantiation times (ms): %.3f = %.3f+%.3f+%.3f+%.3f\n", - best[1] + best[2] + best[3] + best[4], - best[1], best[2], best[3], best[4]); - } - return 0; - fail: - js_std_free_handlers(rt); - JS_FreeContext(ctx); - JS_FreeRuntime(rt); - return 1; -} diff --git a/vendor/quickjs-ng/qjsc.c b/vendor/quickjs-ng/qjsc.c deleted file mode 100644 index 98a4d2b30..000000000 --- a/vendor/quickjs-ng/qjsc.c +++ /dev/null @@ -1,529 +0,0 @@ -/* - * QuickJS command line compiler - * - * Copyright (c) 2018-2021 Fabrice Bellard - * Copyright (c) 2023 Ben Noordhuis - * Copyright (c) 2023 Saúl Ibarra Corretgé - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#if defined(_MSC_VER) -#include "getopt_compat.h" -#else -#include -#endif -#include - -#include "cutils.h" -#include "quickjs-libc.h" - -typedef struct { - char *name; - char *short_name; - int flags; -} namelist_entry_t; - -typedef struct namelist_t { - namelist_entry_t *array; - int count; - int size; -} namelist_t; - -static namelist_t cname_list; -static namelist_t cmodule_list; -static namelist_t init_module_list; -static FILE *outfile; -static const char *c_ident_prefix = "qjsc_"; - - -void namelist_add(namelist_t *lp, const char *name, const char *short_name, - int flags) -{ - namelist_entry_t *e; - if (lp->count == lp->size) { - size_t newsize = lp->size + (lp->size >> 1) + 4; - namelist_entry_t *a = - realloc(lp->array, sizeof(lp->array[0]) * newsize); - /* XXX: check for realloc failure */ - lp->array = a; - lp->size = newsize; - } - e = &lp->array[lp->count++]; - e->name = strdup(name); - if (short_name) - e->short_name = strdup(short_name); - else - e->short_name = NULL; - e->flags = flags; -} - -void namelist_free(namelist_t *lp) -{ - while (lp->count > 0) { - namelist_entry_t *e = &lp->array[--lp->count]; - free(e->name); - free(e->short_name); - } - free(lp->array); - lp->array = NULL; - lp->size = 0; -} - -namelist_entry_t *namelist_find(namelist_t *lp, const char *name) -{ - int i; - for(i = 0; i < lp->count; i++) { - namelist_entry_t *e = &lp->array[i]; - if (!strcmp(e->name, name)) - return e; - } - return NULL; -} - -static void get_c_name(char *buf, size_t buf_size, const char *file) -{ - const char *p, *r; - size_t len, i; - int c; - char *q; - - p = strrchr(file, '/'); - if (!p) - p = file; - else - p++; - r = strrchr(p, '.'); - if (!r) - len = strlen(p); - else - len = r - p; - pstrcpy(buf, buf_size, c_ident_prefix); - q = buf + strlen(buf); - for(i = 0; i < len; i++) { - c = p[i]; - if (!((c >= '0' && c <= '9') || - (c >= 'A' && c <= 'Z') || - (c >= 'a' && c <= 'z'))) { - c = '_'; - } - if ((q - buf) < buf_size - 1) - *q++ = c; - } - *q = '\0'; -} - -static void dump_hex(FILE *f, const uint8_t *buf, size_t len) -{ - size_t i, col; - col = 0; - for(i = 0; i < len; i++) { - fprintf(f, " 0x%02x,", buf[i]); - if (++col == 8) { - fprintf(f, "\n"); - col = 0; - } - } - if (col != 0) - fprintf(f, "\n"); -} - -static void output_object_code(JSContext *ctx, - FILE *fo, JSValue obj, const char *c_name, - BOOL load_only) -{ - uint8_t *out_buf; - size_t out_buf_len; - - out_buf = JS_WriteObject(ctx, &out_buf_len, obj, JS_WRITE_OBJ_BYTECODE); - if (!out_buf) { - js_std_dump_error(ctx); - exit(1); - } - - namelist_add(&cname_list, c_name, NULL, load_only); - - fprintf(fo, "const uint32_t %s_size = %u;\n\n", - c_name, (unsigned int)out_buf_len); - fprintf(fo, "const uint8_t %s[%u] = {\n", - c_name, (unsigned int)out_buf_len); - dump_hex(fo, out_buf, out_buf_len); - fprintf(fo, "};\n\n"); - - js_free(ctx, out_buf); -} - -static int js_module_dummy_init(JSContext *ctx, JSModuleDef *m) -{ - /* should never be called when compiling JS code */ - abort(); - return -1; // pacify compiler -} - -static void find_unique_cname(char *cname, size_t cname_size) -{ - char cname1[1024]; - int suffix_num; - size_t len, max_len; - assert(cname_size >= 32); - /* find a C name not matching an existing module C name by - adding a numeric suffix */ - len = strlen(cname); - max_len = cname_size - 16; - if (len > max_len) - cname[max_len] = '\0'; - suffix_num = 1; - for(;;) { - snprintf(cname1, sizeof(cname1), "%s_%d", cname, suffix_num); - if (!namelist_find(&cname_list, cname1)) - break; - suffix_num++; - } - pstrcpy(cname, cname_size, cname1); -} - -JSModuleDef *jsc_module_loader(JSContext *ctx, - const char *module_name, void *opaque) -{ - JSModuleDef *m; - namelist_entry_t *e; - - /* check if it is a declared C or system module */ - e = namelist_find(&cmodule_list, module_name); - if (e) { - /* add in the static init module list */ - namelist_add(&init_module_list, e->name, e->short_name, 0); - /* create a dummy module */ - m = JS_NewCModule(ctx, module_name, js_module_dummy_init); - } else if (has_suffix(module_name, ".so")) { - JS_ThrowReferenceError(ctx, "%s: dynamically linking to shared libraries not supported", - module_name); - return NULL; - } else { - size_t buf_len; - uint8_t *buf; - JSValue func_val; - char cname[1024]; - - buf = js_load_file(ctx, &buf_len, module_name); - if (!buf) { - JS_ThrowReferenceError(ctx, "could not load module filename '%s'", - module_name); - return NULL; - } - - /* compile the module */ - func_val = JS_Eval(ctx, (char *)buf, buf_len, module_name, - JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); - js_free(ctx, buf); - if (JS_IsException(func_val)) - return NULL; - get_c_name(cname, sizeof(cname), module_name); - if (namelist_find(&cname_list, cname)) { - find_unique_cname(cname, sizeof(cname)); - } - output_object_code(ctx, outfile, func_val, cname, TRUE); - - /* the module is already referenced, so we must free it */ - m = JS_VALUE_GET_PTR(func_val); - JS_FreeValue(ctx, func_val); - } - return m; -} - -static void compile_file(JSContext *ctx, FILE *fo, - const char *filename, - const char *c_name1, - int module) -{ - uint8_t *buf; - char c_name[1024]; - int eval_flags; - JSValue obj; - size_t buf_len; - - buf = js_load_file(ctx, &buf_len, filename); - if (!buf) { - fprintf(stderr, "Could not load '%s'\n", filename); - exit(1); - } - eval_flags = JS_EVAL_FLAG_COMPILE_ONLY; - if (module < 0) { - module = (has_suffix(filename, ".mjs") || - JS_DetectModule((const char *)buf, buf_len)); - } - if (module) - eval_flags |= JS_EVAL_TYPE_MODULE; - else - eval_flags |= JS_EVAL_TYPE_GLOBAL; - obj = JS_Eval(ctx, (const char *)buf, buf_len, filename, eval_flags); - if (JS_IsException(obj)) { - js_std_dump_error(ctx); - exit(1); - } - js_free(ctx, buf); - if (c_name1) { - pstrcpy(c_name, sizeof(c_name), c_name1); - } else { - get_c_name(c_name, sizeof(c_name), filename); - } - output_object_code(ctx, fo, obj, c_name, FALSE); - JS_FreeValue(ctx, obj); -} - -static const char main_c_template1[] = - "int main(int argc, char **argv)\n" - "{\n" - " JSRuntime *rt;\n" - " JSContext *ctx;\n" - " rt = JS_NewRuntime();\n" - " js_std_set_worker_new_context_func(JS_NewCustomContext);\n" - " js_std_init_handlers(rt);\n" - ; - -static const char main_c_template2[] = - " js_std_loop(ctx);\n" - " JS_FreeContext(ctx);\n" - " js_std_free_handlers(rt);\n" - " JS_FreeRuntime(rt);\n" - " return 0;\n" - "}\n"; - -#define PROG_NAME "qjsc" - -void help(void) -{ - printf("QuickJS-ng Compiler version %s\n" - "usage: " PROG_NAME " [options] [files]\n" - "\n" - "options are:\n" - "-e output main() and bytecode in a C file\n" - "-o output set the output filename\n" - "-N cname set the C name of the generated data\n" - "-m compile as Javascript module (default=autodetect)\n" - "-D module_name compile a dynamically loaded module or worker\n" - "-M module_name[,cname] add initialization code for an external C module\n" - "-p prefix set the prefix of the generated C names\n" - "-S n set the maximum stack size to 'n' bytes (default=%d)\n", - JS_GetVersion(), - JS_DEFAULT_STACK_SIZE); - exit(1); -} - -typedef enum { - OUTPUT_C, - OUTPUT_C_MAIN, -} OutputTypeEnum; - -int main(int argc, char **argv) -{ - int c, i, verbose; - const char *out_filename, *cname; - char cfilename[1024]; - FILE *fo; - JSRuntime *rt; - JSContext *ctx; - int module; - OutputTypeEnum output_type; - size_t stack_size; - namelist_t dynamic_module_list; - - out_filename = NULL; - output_type = OUTPUT_C; - cname = NULL; - module = -1; - verbose = 0; - stack_size = 0; - memset(&dynamic_module_list, 0, sizeof(dynamic_module_list)); - - /* add system modules */ - namelist_add(&cmodule_list, "std", "std", 0); - namelist_add(&cmodule_list, "os", "os", 0); - - for(;;) { - c = getopt(argc, argv, "ho:N:mxevM:p:S:D:"); - if (c == -1) - break; - switch(c) { - case 'h': - help(); - case 'o': - out_filename = optarg; - break; - case 'e': - output_type = OUTPUT_C_MAIN; - break; - case 'N': - cname = optarg; - break; - case 'm': - module = 1; - break; - case 'M': - { - char *p; - char path[1024]; - char cname[1024]; - pstrcpy(path, sizeof(path), optarg); - p = strchr(path, ','); - if (p) { - *p = '\0'; - pstrcpy(cname, sizeof(cname), p + 1); - } else { - get_c_name(cname, sizeof(cname), path); - } - namelist_add(&cmodule_list, path, cname, 0); - } - break; - case 'D': - namelist_add(&dynamic_module_list, optarg, NULL, 0); - break; - case 'v': - verbose++; - break; - case 'p': - c_ident_prefix = optarg; - break; - case 'S': - stack_size = (size_t)strtod(optarg, NULL); - break; - default: - break; - } - } - - if (optind >= argc) - help(); - - if (!out_filename) - out_filename = "out.c"; - - pstrcpy(cfilename, sizeof(cfilename), out_filename); - - fo = fopen(cfilename, "w"); - if (!fo) { - perror(cfilename); - exit(1); - } - outfile = fo; - - rt = JS_NewRuntime(); - ctx = JS_NewContext(rt); - - /* loader for ES6 modules */ - JS_SetModuleLoaderFunc(rt, NULL, jsc_module_loader, NULL); - - fprintf(fo, "/* File generated automatically by the QuickJS-ng compiler. */\n" - "\n" - ); - - if (output_type != OUTPUT_C) { - fprintf(fo, "#include \"quickjs-libc.h\"\n" - "\n" - ); - } else { - fprintf(fo, "#include \n" - "\n" - ); - } - - for(i = optind; i < argc; i++) { - const char *filename = argv[i]; - compile_file(ctx, fo, filename, cname, module); - cname = NULL; - } - - for(i = 0; i < dynamic_module_list.count; i++) { - if (!jsc_module_loader(ctx, dynamic_module_list.array[i].name, NULL)) { - fprintf(stderr, "Could not load dynamic module '%s'\n", - dynamic_module_list.array[i].name); - exit(1); - } - } - - if (output_type != OUTPUT_C) { - fprintf(fo, - "static JSContext *JS_NewCustomContext(JSRuntime *rt)\n" - "{\n" - " JSContext *ctx = JS_NewContext(rt);\n" - " if (!ctx)\n" - " return NULL;\n"); - /* add the precompiled modules (XXX: could modify the module - loader instead) */ - for(i = 0; i < init_module_list.count; i++) { - namelist_entry_t *e = &init_module_list.array[i]; - /* initialize the static C modules */ - - fprintf(fo, - " {\n" - " extern JSModuleDef *js_init_module_%s(JSContext *ctx, const char *name);\n" - " js_init_module_%s(ctx, \"%s\");\n" - " }\n", - e->short_name, e->short_name, e->name); - } - for(i = 0; i < cname_list.count; i++) { - namelist_entry_t *e = &cname_list.array[i]; - if (e->flags) { - fprintf(fo, " js_std_eval_binary(ctx, %s, %s_size, 1);\n", - e->name, e->name); - } - } - fprintf(fo, - " return ctx;\n" - "}\n\n"); - - fputs(main_c_template1, fo); - - if (stack_size != 0) { - fprintf(fo, " JS_SetMaxStackSize(rt, %u);\n", - (unsigned int)stack_size); - } - - /* add the module loader */ - fprintf(fo, " JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL);\n"); - - fprintf(fo, - " ctx = JS_NewCustomContext(rt);\n" - " js_std_add_helpers(ctx, argc, argv);\n"); - - for(i = 0; i < cname_list.count; i++) { - namelist_entry_t *e = &cname_list.array[i]; - if (!e->flags) { - fprintf(fo, " js_std_eval_binary(ctx, %s, %s_size, 0);\n", - e->name, e->name); - } - } - fputs(main_c_template2, fo); - } - - JS_FreeContext(ctx); - JS_FreeRuntime(rt); - - fclose(fo); - - namelist_free(&cname_list); - namelist_free(&cmodule_list); - namelist_free(&init_module_list); - return 0; -} diff --git a/vendor/quickjs-ng/quickjs-atom.h b/vendor/quickjs-ng/quickjs-atom.h deleted file mode 100644 index c00b23d02..000000000 --- a/vendor/quickjs-ng/quickjs-atom.h +++ /dev/null @@ -1,257 +0,0 @@ -/* - * QuickJS atom definitions - * - * Copyright (c) 2017-2018 Fabrice Bellard - * Copyright (c) 2017-2018 Charlie Gordon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifdef DEF - -/* Note: first atoms are considered as keywords in the parser */ -DEF(null, "null") /* must be first */ -DEF(false, "false") -DEF(true, "true") -DEF(if, "if") -DEF(else, "else") -DEF(return, "return") -DEF(var, "var") -DEF(this, "this") -DEF(delete, "delete") -DEF(void, "void") -DEF(typeof, "typeof") -DEF(new, "new") -DEF(in, "in") -DEF(instanceof, "instanceof") -DEF(do, "do") -DEF(while, "while") -DEF(for, "for") -DEF(break, "break") -DEF(continue, "continue") -DEF(switch, "switch") -DEF(case, "case") -DEF(default, "default") -DEF(throw, "throw") -DEF(try, "try") -DEF(catch, "catch") -DEF(finally, "finally") -DEF(function, "function") -DEF(debugger, "debugger") -DEF(with, "with") -/* FutureReservedWord */ -DEF(class, "class") -DEF(const, "const") -DEF(enum, "enum") -DEF(export, "export") -DEF(extends, "extends") -DEF(import, "import") -DEF(super, "super") -/* FutureReservedWords when parsing strict mode code */ -DEF(implements, "implements") -DEF(interface, "interface") -DEF(let, "let") -DEF(package, "package") -DEF(private, "private") -DEF(protected, "protected") -DEF(public, "public") -DEF(static, "static") -DEF(yield, "yield") -DEF(await, "await") - -/* empty string */ -DEF(empty_string, "") -/* identifiers */ -DEF(length, "length") -DEF(message, "message") -DEF(cause, "cause") -DEF(errors, "errors") -DEF(stack, "stack") -DEF(name, "name") -DEF(toString, "toString") -DEF(toLocaleString, "toLocaleString") -DEF(valueOf, "valueOf") -DEF(eval, "eval") -DEF(prototype, "prototype") -DEF(constructor, "constructor") -DEF(configurable, "configurable") -DEF(writable, "writable") -DEF(enumerable, "enumerable") -DEF(value, "value") -DEF(get, "get") -DEF(set, "set") -DEF(of, "of") -DEF(__proto__, "__proto__") -DEF(undefined, "undefined") -DEF(number, "number") -DEF(boolean, "boolean") -DEF(string, "string") -DEF(object, "object") -DEF(symbol, "symbol") -DEF(integer, "integer") -DEF(unknown, "unknown") -DEF(arguments, "arguments") -DEF(callee, "callee") -DEF(caller, "caller") -DEF(_eval_, "") -DEF(_ret_, "") -DEF(_var_, "") -DEF(_arg_var_, "") -DEF(_with_, "") -DEF(lastIndex, "lastIndex") -DEF(target, "target") -DEF(index, "index") -DEF(input, "input") -DEF(defineProperties, "defineProperties") -DEF(apply, "apply") -DEF(join, "join") -DEF(concat, "concat") -DEF(split, "split") -DEF(construct, "construct") -DEF(getPrototypeOf, "getPrototypeOf") -DEF(setPrototypeOf, "setPrototypeOf") -DEF(isExtensible, "isExtensible") -DEF(preventExtensions, "preventExtensions") -DEF(has, "has") -DEF(deleteProperty, "deleteProperty") -DEF(defineProperty, "defineProperty") -DEF(getOwnPropertyDescriptor, "getOwnPropertyDescriptor") -DEF(ownKeys, "ownKeys") -DEF(add, "add") -DEF(done, "done") -DEF(next, "next") -DEF(values, "values") -DEF(source, "source") -DEF(flags, "flags") -DEF(global, "global") -DEF(unicode, "unicode") -DEF(raw, "raw") -DEF(new_target, "new.target") -DEF(this_active_func, "this.active_func") -DEF(home_object, "") -DEF(computed_field, "") -DEF(static_computed_field, "") /* must come after computed_fields */ -DEF(class_fields_init, "") -DEF(brand, "") -DEF(hash_constructor, "#constructor") -DEF(as, "as") -DEF(from, "from") -DEF(meta, "meta") -DEF(_default_, "*default*") -DEF(_star_, "*") -DEF(Module, "Module") -DEF(then, "then") -DEF(resolve, "resolve") -DEF(reject, "reject") -DEF(promise, "promise") -DEF(proxy, "proxy") -DEF(revoke, "revoke") -DEF(async, "async") -DEF(exec, "exec") -DEF(groups, "groups") -DEF(indices, "indices") -DEF(status, "status") -DEF(reason, "reason") -DEF(globalThis, "globalThis") -DEF(bigint, "bigint") -#ifdef CONFIG_ATOMICS -DEF(not_equal, "not-equal") -DEF(timed_out, "timed-out") -DEF(ok, "ok") -#endif -DEF(toJSON, "toJSON") -/* class names */ -DEF(Object, "Object") -DEF(Array, "Array") -DEF(Error, "Error") -DEF(Number, "Number") -DEF(String, "String") -DEF(Boolean, "Boolean") -DEF(Symbol, "Symbol") -DEF(Arguments, "Arguments") -DEF(Math, "Math") -DEF(JSON, "JSON") -DEF(Date, "Date") -DEF(Function, "Function") -DEF(GeneratorFunction, "GeneratorFunction") -DEF(ForInIterator, "ForInIterator") -DEF(RegExp, "RegExp") -DEF(ArrayBuffer, "ArrayBuffer") -DEF(SharedArrayBuffer, "SharedArrayBuffer") -/* must keep same order as class IDs for typed arrays */ -DEF(Uint8ClampedArray, "Uint8ClampedArray") -DEF(Int8Array, "Int8Array") -DEF(Uint8Array, "Uint8Array") -DEF(Int16Array, "Int16Array") -DEF(Uint16Array, "Uint16Array") -DEF(Int32Array, "Int32Array") -DEF(Uint32Array, "Uint32Array") -DEF(BigInt64Array, "BigInt64Array") -DEF(BigUint64Array, "BigUint64Array") -DEF(Float32Array, "Float32Array") -DEF(Float64Array, "Float64Array") -DEF(DataView, "DataView") -DEF(BigInt, "BigInt") -DEF(WeakRef, "WeakRef") -DEF(FinalizationRegistry, "FinalizationRegistry") -DEF(Map, "Map") -DEF(Set, "Set") /* Map + 1 */ -DEF(WeakMap, "WeakMap") /* Map + 2 */ -DEF(WeakSet, "WeakSet") /* Map + 3 */ -DEF(Map_Iterator, "Map Iterator") -DEF(Set_Iterator, "Set Iterator") -DEF(Array_Iterator, "Array Iterator") -DEF(String_Iterator, "String Iterator") -DEF(RegExp_String_Iterator, "RegExp String Iterator") -DEF(Generator, "Generator") -DEF(Proxy, "Proxy") -DEF(Promise, "Promise") -DEF(PromiseResolveFunction, "PromiseResolveFunction") -DEF(PromiseRejectFunction, "PromiseRejectFunction") -DEF(AsyncFunction, "AsyncFunction") -DEF(AsyncFunctionResolve, "AsyncFunctionResolve") -DEF(AsyncFunctionReject, "AsyncFunctionReject") -DEF(AsyncGeneratorFunction, "AsyncGeneratorFunction") -DEF(AsyncGenerator, "AsyncGenerator") -DEF(EvalError, "EvalError") -DEF(RangeError, "RangeError") -DEF(ReferenceError, "ReferenceError") -DEF(SyntaxError, "SyntaxError") -DEF(TypeError, "TypeError") -DEF(URIError, "URIError") -DEF(InternalError, "InternalError") -DEF(CallSite, "CallSite") -/* private symbols */ -DEF(Private_brand, "") -/* symbols */ -DEF(Symbol_toPrimitive, "Symbol.toPrimitive") -DEF(Symbol_iterator, "Symbol.iterator") -DEF(Symbol_match, "Symbol.match") -DEF(Symbol_matchAll, "Symbol.matchAll") -DEF(Symbol_replace, "Symbol.replace") -DEF(Symbol_search, "Symbol.search") -DEF(Symbol_split, "Symbol.split") -DEF(Symbol_toStringTag, "Symbol.toStringTag") -DEF(Symbol_isConcatSpreadable, "Symbol.isConcatSpreadable") -DEF(Symbol_hasInstance, "Symbol.hasInstance") -DEF(Symbol_species, "Symbol.species") -DEF(Symbol_unscopables, "Symbol.unscopables") -DEF(Symbol_asyncIterator, "Symbol.asyncIterator") - -#endif /* DEF */ diff --git a/vendor/quickjs-ng/quickjs-c-atomics.h b/vendor/quickjs-ng/quickjs-c-atomics.h deleted file mode 100644 index 8fc6b7203..000000000 --- a/vendor/quickjs-ng/quickjs-c-atomics.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * QuickJS C atomics definitions - * - * Copyright (c) 2023 Marcin Kolny - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#if (defined(__GNUC__) || defined(__GNUG__)) && !defined(__clang__) - // Use GCC builtins for version < 4.9 -# if((__GNUC__ << 16) + __GNUC_MINOR__ < ((4) << 16) + 9) -# define GCC_BUILTIN_ATOMICS -# endif -#endif - -#ifdef GCC_BUILTIN_ATOMICS -#define atomic_fetch_add(obj, arg) \ - __atomic_fetch_add(obj, arg, __ATOMIC_SEQ_CST) -#define atomic_compare_exchange_strong(obj, expected, desired) \ - __atomic_compare_exchange_n(obj, expected, desired, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) -#define atomic_exchange(obj, desired) \ - __atomic_exchange_n (obj, desired, __ATOMIC_SEQ_CST) -#define atomic_load(obj) \ - __atomic_load_n(obj, __ATOMIC_SEQ_CST) -#define atomic_store(obj, desired) \ - __atomic_store_n(obj, desired, __ATOMIC_SEQ_CST) -#define atomic_fetch_or(obj, arg) \ - __atomic_fetch_or(obj, arg, __ATOMIC_SEQ_CST) -#define atomic_fetch_xor(obj, arg) \ - __atomic_fetch_xor(obj, arg, __ATOMIC_SEQ_CST) -#define atomic_fetch_and(obj, arg) \ - __atomic_fetch_and(obj, arg, __ATOMIC_SEQ_CST) -#define atomic_fetch_sub(obj, arg) \ - __atomic_fetch_sub(obj, arg, __ATOMIC_SEQ_CST) -#define _Atomic -#else -#include -#endif diff --git a/vendor/quickjs-ng/quickjs-libc.c b/vendor/quickjs-ng/quickjs-libc.c deleted file mode 100644 index 99b4c5f4d..000000000 --- a/vendor/quickjs-ng/quickjs-libc.c +++ /dev/null @@ -1,3952 +0,0 @@ -/* - * QuickJS C library - * - * Copyright (c) 2017-2021 Fabrice Bellard - * Copyright (c) 2017-2021 Charlie Gordon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#if !defined(_MSC_VER) -#include -#endif -#include -#include -#if !defined(_MSC_VER) -#include -#endif -#include -#include -#include -#include -#if defined(_MSC_VER) -#include "dirent_compat.h" -#else -#include -#endif -#if defined(_WIN32) -#include -#include -#include -#include -#include -#include -#include -#define popen _popen -#define pclose _pclose -#define rmdir _rmdir -#define getcwd _getcwd -#define chdir _chdir -#else -#include -#include -#include -#include -#include - -#if defined(__APPLE__) -typedef sig_t sighandler_t; -#include -#define environ (*_NSGetEnviron()) -#endif - -#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) -typedef sig_t sighandler_t; -extern char **environ; -#endif - -/* enable the os.Worker API. IT relies on POSIX threads */ -#define USE_WORKER - -#endif /* _WIN32 */ - -#ifdef USE_WORKER -#include -#include "quickjs-c-atomics.h" -#endif - -#include "cutils.h" -#include "list.h" -#include "quickjs-libc.h" - -/* TODO: - - add socket calls -*/ - -typedef struct { - struct list_head link; - int fd; - JSValue rw_func[2]; -} JSOSRWHandler; - -typedef struct { - struct list_head link; - int sig_num; - JSValue func; -} JSOSSignalHandler; - -typedef struct { - struct list_head link; - BOOL has_object; - int64_t timeout; - JSValue func; -} JSOSTimer; - -typedef struct { - struct list_head link; - uint8_t *data; - size_t data_len; - /* list of SharedArrayBuffers, necessary to free the message */ - uint8_t **sab_tab; - size_t sab_tab_len; -} JSWorkerMessage; - -typedef struct { - int ref_count; -#ifdef USE_WORKER - pthread_mutex_t mutex; -#endif - struct list_head msg_queue; /* list of JSWorkerMessage.link */ - int read_fd; - int write_fd; -} JSWorkerMessagePipe; - -typedef struct { - struct list_head link; - JSWorkerMessagePipe *recv_pipe; - JSValue on_message_func; -} JSWorkerMessageHandler; - -typedef struct JSThreadState { - struct list_head os_rw_handlers; /* list of JSOSRWHandler.link */ - struct list_head os_signal_handlers; /* list JSOSSignalHandler.link */ - struct list_head os_timers; /* list of JSOSTimer.link */ - struct list_head port_list; /* list of JSWorkerMessageHandler.link */ - int eval_script_recurse; /* only used in the main thread */ - /* not used in the main thread */ - JSWorkerMessagePipe *recv_pipe, *send_pipe; -} JSThreadState; - -static uint64_t os_pending_signals; -static int (*os_poll_func)(JSContext *ctx); - -static void js_std_dbuf_init(JSContext *ctx, DynBuf *s) -{ - dbuf_init2(s, JS_GetRuntime(ctx), (DynBufReallocFunc *)js_realloc_rt); -} - -static BOOL my_isdigit(int c) -{ - return (c >= '0' && c <= '9'); -} - -static JSValue js_printf_internal(JSContext *ctx, - int argc, JSValue *argv, FILE *fp) -{ - char fmtbuf[32]; - uint8_t cbuf[UTF8_CHAR_LEN_MAX+1]; - JSValue res; - DynBuf dbuf; - const char *fmt_str; - const uint8_t *fmt, *fmt_end; - const uint8_t *p; - char *q; - int i, c, len, mod; - size_t fmt_len; - int32_t int32_arg; - int64_t int64_arg; - double double_arg; - const char *string_arg; - /* Use indirect call to dbuf_printf to prevent gcc warning */ - int (*dbuf_printf_fun)(DynBuf *s, const char *fmt, ...) = (void*)dbuf_printf; - - js_std_dbuf_init(ctx, &dbuf); - - if (argc > 0) { - fmt_str = JS_ToCStringLen(ctx, &fmt_len, argv[0]); - if (!fmt_str) - goto fail; - - i = 1; - fmt = (const uint8_t *)fmt_str; - fmt_end = fmt + fmt_len; - while (fmt < fmt_end) { - for (p = fmt; fmt < fmt_end && *fmt != '%'; fmt++) - continue; - dbuf_put(&dbuf, p, fmt - p); - if (fmt >= fmt_end) - break; - q = fmtbuf; - *q++ = *fmt++; /* copy '%' */ - - /* flags */ - for(;;) { - c = *fmt; - if (c == '0' || c == '#' || c == '+' || c == '-' || c == ' ' || - c == '\'') { - if (q >= fmtbuf + sizeof(fmtbuf) - 1) - goto invalid; - *q++ = c; - fmt++; - } else { - break; - } - } - /* width */ - if (*fmt == '*') { - if (i >= argc) - goto missing; - if (JS_ToInt32(ctx, &int32_arg, argv[i++])) - goto fail; - q += snprintf(q, fmtbuf + sizeof(fmtbuf) - q, "%d", int32_arg); - fmt++; - } else { - while (my_isdigit(*fmt)) { - if (q >= fmtbuf + sizeof(fmtbuf) - 1) - goto invalid; - *q++ = *fmt++; - } - } - if (*fmt == '.') { - if (q >= fmtbuf + sizeof(fmtbuf) - 1) - goto invalid; - *q++ = *fmt++; - if (*fmt == '*') { - if (i >= argc) - goto missing; - if (JS_ToInt32(ctx, &int32_arg, argv[i++])) - goto fail; - q += snprintf(q, fmtbuf + sizeof(fmtbuf) - q, "%d", int32_arg); - fmt++; - } else { - while (my_isdigit(*fmt)) { - if (q >= fmtbuf + sizeof(fmtbuf) - 1) - goto invalid; - *q++ = *fmt++; - } - } - } - - /* we only support the "l" modifier for 64 bit numbers */ - mod = ' '; - if (*fmt == 'l') { - mod = *fmt++; - } - - /* type */ - c = *fmt++; - if (q >= fmtbuf + sizeof(fmtbuf) - 1) - goto invalid; - *q++ = c; - *q = '\0'; - - switch (c) { - case 'c': - if (i >= argc) - goto missing; - if (JS_IsString(argv[i])) { - string_arg = JS_ToCString(ctx, argv[i++]); - if (!string_arg) - goto fail; - int32_arg = unicode_from_utf8((uint8_t *)string_arg, UTF8_CHAR_LEN_MAX, &p); - JS_FreeCString(ctx, string_arg); - } else { - if (JS_ToInt32(ctx, &int32_arg, argv[i++])) - goto fail; - } - /* handle utf-8 encoding explicitly */ - if ((unsigned)int32_arg > 0x10FFFF) - int32_arg = 0xFFFD; - /* ignore conversion flags, width and precision */ - len = unicode_to_utf8(cbuf, int32_arg); - dbuf_put(&dbuf, cbuf, len); - break; - - case 'd': - case 'i': - case 'o': - case 'u': - case 'x': - case 'X': - if (i >= argc) - goto missing; - if (JS_ToInt64Ext(ctx, &int64_arg, argv[i++])) - goto fail; - if (mod == 'l') { - /* 64 bit number */ -#if defined(_WIN32) - if (q >= fmtbuf + sizeof(fmtbuf) - 3) - goto invalid; - q[2] = q[-1]; - q[-1] = 'I'; - q[0] = '6'; - q[1] = '4'; - q[3] = '\0'; - dbuf_printf_fun(&dbuf, fmtbuf, (int64_t)int64_arg); -#else - if (q >= fmtbuf + sizeof(fmtbuf) - 2) - goto invalid; - q[1] = q[-1]; - q[-1] = q[0] = 'l'; - q[2] = '\0'; - dbuf_printf_fun(&dbuf, fmtbuf, (long long)int64_arg); -#endif - } else { - dbuf_printf_fun(&dbuf, fmtbuf, (int)int64_arg); - } - break; - - case 's': - if (i >= argc) - goto missing; - /* XXX: handle strings containing null characters */ - string_arg = JS_ToCString(ctx, argv[i++]); - if (!string_arg) - goto fail; - dbuf_printf_fun(&dbuf, fmtbuf, string_arg); - JS_FreeCString(ctx, string_arg); - break; - - case 'e': - case 'f': - case 'g': - case 'a': - case 'E': - case 'F': - case 'G': - case 'A': - if (i >= argc) - goto missing; - if (JS_ToFloat64(ctx, &double_arg, argv[i++])) - goto fail; - dbuf_printf_fun(&dbuf, fmtbuf, double_arg); - break; - - case '%': - dbuf_putc(&dbuf, '%'); - break; - - default: - /* XXX: should support an extension mechanism */ - invalid: - JS_ThrowTypeError(ctx, "invalid conversion specifier in format string"); - goto fail; - missing: - JS_ThrowReferenceError(ctx, "missing argument for conversion specifier"); - goto fail; - } - } - JS_FreeCString(ctx, fmt_str); - } - if (dbuf.error) { - res = JS_ThrowOutOfMemory(ctx); - } else { - if (fp) { - len = fwrite(dbuf.buf, 1, dbuf.size, fp); - res = JS_NewInt32(ctx, len); - } else { - res = JS_NewStringLen(ctx, (char *)dbuf.buf, dbuf.size); - } - } - dbuf_free(&dbuf); - return res; - -fail: - dbuf_free(&dbuf); - return JS_EXCEPTION; -} - -uint8_t *js_load_file(JSContext *ctx, size_t *pbuf_len, const char *filename) -{ - FILE *f; - uint8_t *buf; - size_t buf_len; - long lret; - - f = fopen(filename, "rb"); - if (!f) - return NULL; - if (fseek(f, 0, SEEK_END) < 0) - goto fail; - lret = ftell(f); - if (lret < 0) - goto fail; - /* XXX: on Linux, ftell() return LONG_MAX for directories */ - if (lret == LONG_MAX) { - errno = EISDIR; - goto fail; - } - buf_len = lret; - if (fseek(f, 0, SEEK_SET) < 0) - goto fail; - if (ctx) - buf = js_malloc(ctx, buf_len + 1); - else - buf = malloc(buf_len + 1); - if (!buf) - goto fail; - if (fread(buf, 1, buf_len, f) != buf_len) { - errno = EIO; - if (ctx) - js_free(ctx, buf); - else - free(buf); - fail: - fclose(f); - return NULL; - } - buf[buf_len] = '\0'; - fclose(f); - *pbuf_len = buf_len; - return buf; -} - -/* load and evaluate a file */ -static JSValue js_loadScript(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - uint8_t *buf; - const char *filename; - JSValue ret; - size_t buf_len; - - filename = JS_ToCString(ctx, argv[0]); - if (!filename) - return JS_EXCEPTION; - buf = js_load_file(ctx, &buf_len, filename); - if (!buf) { - JS_ThrowReferenceError(ctx, "could not load '%s'", filename); - JS_FreeCString(ctx, filename); - return JS_EXCEPTION; - } - ret = JS_Eval(ctx, (char *)buf, buf_len, filename, - JS_EVAL_TYPE_GLOBAL); - js_free(ctx, buf); - JS_FreeCString(ctx, filename); - return ret; -} - -/* load a file as a UTF-8 encoded string */ -static JSValue js_std_loadFile(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - uint8_t *buf; - const char *filename; - JSValue ret; - size_t buf_len; - - filename = JS_ToCString(ctx, argv[0]); - if (!filename) - return JS_EXCEPTION; - buf = js_load_file(ctx, &buf_len, filename); - JS_FreeCString(ctx, filename); - if (!buf) - return JS_NULL; - ret = JS_NewStringLen(ctx, (char *)buf, buf_len); - js_free(ctx, buf); - return ret; -} - -typedef JSModuleDef *(JSInitModuleFunc)(JSContext *ctx, - const char *module_name); - - -#if defined(_WIN32) -static JSModuleDef *js_module_loader_so(JSContext *ctx, - const char *module_name) -{ - JS_ThrowReferenceError(ctx, "shared library modules are not supported yet"); - return NULL; -} -#else -static JSModuleDef *js_module_loader_so(JSContext *ctx, - const char *module_name) -{ - JSModuleDef *m; - void *hd; - JSInitModuleFunc *init; - char *filename; - - if (!strchr(module_name, '/')) { - /* must add a '/' so that the DLL is not searched in the - system library paths */ - filename = js_malloc(ctx, strlen(module_name) + 2 + 1); - if (!filename) - return NULL; - strcpy(filename, "./"); - strcpy(filename + 2, module_name); - } else { - filename = (char *)module_name; - } - - /* C module */ - hd = dlopen(filename, RTLD_NOW | RTLD_LOCAL); - if (filename != module_name) - js_free(ctx, filename); - if (!hd) { - JS_ThrowReferenceError(ctx, "could not load module filename '%s' as shared library: %s", - module_name, dlerror()); - goto fail; - } - - init = dlsym(hd, "js_init_module"); - if (!init) { - JS_ThrowReferenceError(ctx, "could not load module filename '%s': js_init_module not found", - module_name); - goto fail; - } - - m = init(ctx, module_name); - if (!m) { - JS_ThrowReferenceError(ctx, "could not load module filename '%s': initialization error", - module_name); - fail: - if (hd) - dlclose(hd); - return NULL; - } - return m; -} -#endif /* !_WIN32 */ - -int js_module_set_import_meta(JSContext *ctx, JSValue func_val, - JS_BOOL use_realpath, JS_BOOL is_main) -{ - JSModuleDef *m; - char buf[PATH_MAX + 16]; - JSValue meta_obj; - JSAtom module_name_atom; - const char *module_name; - - assert(JS_VALUE_GET_TAG(func_val) == JS_TAG_MODULE); - m = JS_VALUE_GET_PTR(func_val); - - module_name_atom = JS_GetModuleName(ctx, m); - module_name = JS_AtomToCString(ctx, module_name_atom); - JS_FreeAtom(ctx, module_name_atom); - if (!module_name) - return -1; - if (!strchr(module_name, ':')) { - strcpy(buf, "file://"); -#if !defined(_WIN32) - /* realpath() cannot be used with modules compiled with qjsc - because the corresponding module source code is not - necessarily present */ - if (use_realpath) { - char *res = realpath(module_name, buf + strlen(buf)); - if (!res) { - JS_ThrowTypeError(ctx, "realpath failure"); - JS_FreeCString(ctx, module_name); - return -1; - } - } else -#endif - { - pstrcat(buf, sizeof(buf), module_name); - } - } else { - pstrcpy(buf, sizeof(buf), module_name); - } - JS_FreeCString(ctx, module_name); - - meta_obj = JS_GetImportMeta(ctx, m); - if (JS_IsException(meta_obj)) - return -1; - JS_DefinePropertyValueStr(ctx, meta_obj, "url", - JS_NewString(ctx, buf), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, meta_obj, "main", - JS_NewBool(ctx, is_main), - JS_PROP_C_W_E); - JS_FreeValue(ctx, meta_obj); - return 0; -} - -JSModuleDef *js_module_loader(JSContext *ctx, - const char *module_name, void *opaque) -{ - JSModuleDef *m; - - if (has_suffix(module_name, ".so")) { - m = js_module_loader_so(ctx, module_name); - } else { - size_t buf_len; - uint8_t *buf; - JSValue func_val; - - buf = js_load_file(ctx, &buf_len, module_name); - if (!buf) { - JS_ThrowReferenceError(ctx, "could not load module filename '%s'", - module_name); - return NULL; - } - - /* compile the module */ - func_val = JS_Eval(ctx, (char *)buf, buf_len, module_name, - JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY); - js_free(ctx, buf); - if (JS_IsException(func_val)) - return NULL; - /* XXX: could propagate the exception */ - js_module_set_import_meta(ctx, func_val, TRUE, FALSE); - /* the module is already referenced, so we must free it */ - m = JS_VALUE_GET_PTR(func_val); - JS_FreeValue(ctx, func_val); - } - return m; -} - -static JSValue js_std_exit(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int status; - if (JS_ToInt32(ctx, &status, argv[0])) - status = -1; - exit(status); - return JS_UNDEFINED; -} - -static JSValue js_std_getenv(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *name, *str; - name = JS_ToCString(ctx, argv[0]); - if (!name) - return JS_EXCEPTION; - str = getenv(name); - JS_FreeCString(ctx, name); - if (!str) - return JS_UNDEFINED; - else - return JS_NewString(ctx, str); -} - -#if defined(_WIN32) -static void setenv(const char *name, const char *value, int overwrite) -{ - char *str; - size_t name_len, value_len; - name_len = strlen(name); - value_len = strlen(value); - str = malloc(name_len + 1 + value_len + 1); - memcpy(str, name, name_len); - str[name_len] = '='; - memcpy(str + name_len + 1, value, value_len); - str[name_len + 1 + value_len] = '\0'; - _putenv(str); - free(str); -} - -static void unsetenv(const char *name) -{ - setenv(name, "", TRUE); -} -#endif /* _WIN32 */ - -static JSValue js_std_setenv(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *name, *value; - name = JS_ToCString(ctx, argv[0]); - if (!name) - return JS_EXCEPTION; - value = JS_ToCString(ctx, argv[1]); - if (!value) { - JS_FreeCString(ctx, name); - return JS_EXCEPTION; - } - setenv(name, value, TRUE); - JS_FreeCString(ctx, name); - JS_FreeCString(ctx, value); - return JS_UNDEFINED; -} - -static JSValue js_std_unsetenv(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *name; - name = JS_ToCString(ctx, argv[0]); - if (!name) - return JS_EXCEPTION; - unsetenv(name); - JS_FreeCString(ctx, name); - return JS_UNDEFINED; -} - -/* return an object containing the list of the available environment - variables. */ -static JSValue js_std_getenviron(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - char **envp; - const char *name, *p, *value; - JSValue obj; - uint32_t idx; - size_t name_len; - JSAtom atom; - int ret; - - obj = JS_NewObject(ctx); - if (JS_IsException(obj)) - return JS_EXCEPTION; - envp = environ; - for(idx = 0; envp[idx] != NULL; idx++) { - name = envp[idx]; - p = strchr(name, '='); - name_len = p - name; - if (!p) - continue; - value = p + 1; - atom = JS_NewAtomLen(ctx, name, name_len); - if (atom == JS_ATOM_NULL) - goto fail; - ret = JS_DefinePropertyValue(ctx, obj, atom, JS_NewString(ctx, value), - JS_PROP_C_W_E); - JS_FreeAtom(ctx, atom); - if (ret < 0) - goto fail; - } - return obj; - fail: - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; -} - -static JSValue js_std_gc(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JS_RunGC(JS_GetRuntime(ctx)); - return JS_UNDEFINED; -} - -static int interrupt_handler(JSRuntime *rt, void *opaque) -{ - return (os_pending_signals >> SIGINT) & 1; -} - -static int get_bool_option(JSContext *ctx, BOOL *pbool, - JSValue obj, - const char *option) -{ - JSValue val; - val = JS_GetPropertyStr(ctx, obj, option); - if (JS_IsException(val)) - return -1; - if (!JS_IsUndefined(val)) { - *pbool = JS_ToBool(ctx, val); - } - JS_FreeValue(ctx, val); - return 0; -} - -static JSValue js_evalScript(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - const char *str; - size_t len; - JSValue ret; - JSValue options_obj; - BOOL backtrace_barrier = FALSE; - int flags; - - if (argc >= 2) { - options_obj = argv[1]; - if (get_bool_option(ctx, &backtrace_barrier, options_obj, - "backtrace_barrier")) - return JS_EXCEPTION; - } - - str = JS_ToCStringLen(ctx, &len, argv[0]); - if (!str) - return JS_EXCEPTION; - if (!ts->recv_pipe && ++ts->eval_script_recurse == 1) { - /* install the interrupt handler */ - JS_SetInterruptHandler(JS_GetRuntime(ctx), interrupt_handler, NULL); - } - flags = JS_EVAL_TYPE_GLOBAL; - if (backtrace_barrier) - flags |= JS_EVAL_FLAG_BACKTRACE_BARRIER; - ret = JS_Eval(ctx, str, len, "", flags); - JS_FreeCString(ctx, str); - if (!ts->recv_pipe && --ts->eval_script_recurse == 0) { - /* remove the interrupt handler */ - JS_SetInterruptHandler(JS_GetRuntime(ctx), NULL, NULL); - os_pending_signals &= ~((uint64_t)1 << SIGINT); - /* convert the uncatchable "interrupted" error into a normal error - so that it can be caught by the REPL */ - if (JS_IsException(ret)) - JS_ResetUncatchableError(ctx); - } - return ret; -} - -static JSClassID js_std_file_class_id; - -typedef struct { - FILE *f; - BOOL close_in_finalizer; - BOOL is_popen; -} JSSTDFile; - -static void js_std_file_finalizer(JSRuntime *rt, JSValue val) -{ - JSSTDFile *s = JS_GetOpaque(val, js_std_file_class_id); - if (s) { - if (s->f && s->close_in_finalizer) { - if (s->is_popen) - pclose(s->f); - else - fclose(s->f); - } - js_free_rt(rt, s); - } -} - -static ssize_t js_get_errno(ssize_t ret) -{ - if (ret == -1) - ret = -errno; - return ret; -} - -static JSValue js_std_strerror(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int err; - if (JS_ToInt32(ctx, &err, argv[0])) - return JS_EXCEPTION; - return JS_NewString(ctx, strerror(err)); -} - -static JSValue js_new_std_file(JSContext *ctx, FILE *f, - BOOL close_in_finalizer, - BOOL is_popen) -{ - JSSTDFile *s; - JSValue obj; - obj = JS_NewObjectClass(ctx, js_std_file_class_id); - if (JS_IsException(obj)) - return obj; - s = js_mallocz(ctx, sizeof(*s)); - if (!s) { - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } - s->close_in_finalizer = close_in_finalizer; - s->is_popen = is_popen; - s->f = f; - JS_SetOpaque(obj, s); - return obj; -} - -static void js_set_error_object(JSContext *ctx, JSValue obj, int err) -{ - if (!JS_IsUndefined(obj)) { - JS_SetPropertyStr(ctx, obj, "errno", JS_NewInt32(ctx, err)); - } -} - -static JSValue js_std_open(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *filename, *mode = NULL; - FILE *f; - int err; - - filename = JS_ToCString(ctx, argv[0]); - if (!filename) - goto fail; - mode = JS_ToCString(ctx, argv[1]); - if (!mode) - goto fail; - if (mode[strspn(mode, "rwa+b")] != '\0') { - JS_ThrowTypeError(ctx, "invalid file mode"); - goto fail; - } - - f = fopen(filename, mode); - if (!f) - err = errno; - else - err = 0; - if (argc >= 3) - js_set_error_object(ctx, argv[2], err); - JS_FreeCString(ctx, filename); - JS_FreeCString(ctx, mode); - if (!f) - return JS_NULL; - return js_new_std_file(ctx, f, TRUE, FALSE); - fail: - JS_FreeCString(ctx, filename); - JS_FreeCString(ctx, mode); - return JS_EXCEPTION; -} - -static JSValue js_std_popen(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *filename, *mode = NULL; - FILE *f; - int err; - - filename = JS_ToCString(ctx, argv[0]); - if (!filename) - goto fail; - mode = JS_ToCString(ctx, argv[1]); - if (!mode) - goto fail; - if (mode[strspn(mode, "rw")] != '\0') { - JS_ThrowTypeError(ctx, "invalid file mode"); - goto fail; - } - - f = popen(filename, mode); - if (!f) - err = errno; - else - err = 0; - if (argc >= 3) - js_set_error_object(ctx, argv[2], err); - JS_FreeCString(ctx, filename); - JS_FreeCString(ctx, mode); - if (!f) - return JS_NULL; - return js_new_std_file(ctx, f, TRUE, TRUE); - fail: - JS_FreeCString(ctx, filename); - JS_FreeCString(ctx, mode); - return JS_EXCEPTION; -} - -static JSValue js_std_fdopen(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *mode; - FILE *f; - int fd, err; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - mode = JS_ToCString(ctx, argv[1]); - if (!mode) - goto fail; - if (mode[strspn(mode, "rwa+")] != '\0') { - JS_ThrowTypeError(ctx, "invalid file mode"); - goto fail; - } - - f = fdopen(fd, mode); - if (!f) - err = errno; - else - err = 0; - if (argc >= 3) - js_set_error_object(ctx, argv[2], err); - JS_FreeCString(ctx, mode); - if (!f) - return JS_NULL; - return js_new_std_file(ctx, f, TRUE, FALSE); - fail: - JS_FreeCString(ctx, mode); - return JS_EXCEPTION; -} - -static JSValue js_std_tmpfile(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f; - f = tmpfile(); - if (argc >= 1) - js_set_error_object(ctx, argv[0], f ? 0 : errno); - if (!f) - return JS_NULL; - return js_new_std_file(ctx, f, TRUE, FALSE); -} - -static JSValue js_std_sprintf(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - return js_printf_internal(ctx, argc, argv, NULL); -} - -static JSValue js_std_printf(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - return js_printf_internal(ctx, argc, argv, stdout); -} - -static FILE *js_std_file_get(JSContext *ctx, JSValue obj) -{ - JSSTDFile *s = JS_GetOpaque2(ctx, obj, js_std_file_class_id); - if (!s) - return NULL; - if (!s->f) { - JS_ThrowTypeError(ctx, "invalid file handle"); - return NULL; - } - return s->f; -} - -static JSValue js_std_file_puts(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic) -{ - FILE *f; - int i; - const char *str; - size_t len; - - if (magic == 0) { - f = stdout; - } else { - f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - } - - for(i = 0; i < argc; i++) { - str = JS_ToCStringLen(ctx, &len, argv[i]); - if (!str) - return JS_EXCEPTION; - fwrite(str, 1, len, f); - JS_FreeCString(ctx, str); - } - return JS_UNDEFINED; -} - -static JSValue js_std_file_close(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSSTDFile *s = JS_GetOpaque2(ctx, this_val, js_std_file_class_id); - int err; - if (!s) - return JS_EXCEPTION; - if (!s->f) - return JS_ThrowTypeError(ctx, "invalid file handle"); - if (s->is_popen) - err = js_get_errno(pclose(s->f)); - else - err = js_get_errno(fclose(s->f)); - s->f = NULL; - return JS_NewInt32(ctx, err); -} - -static JSValue js_std_file_printf(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - return js_printf_internal(ctx, argc, argv, f); -} - -static JSValue js_std_file_flush(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - fflush(f); - return JS_UNDEFINED; -} - -static JSValue js_std_file_tell(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int is_bigint) -{ - FILE *f = js_std_file_get(ctx, this_val); - int64_t pos; - if (!f) - return JS_EXCEPTION; -#if defined(__linux__) - pos = ftello(f); -#else - pos = ftell(f); -#endif - if (is_bigint) - return JS_NewBigInt64(ctx, pos); - else - return JS_NewInt64(ctx, pos); -} - -static JSValue js_std_file_seek(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - int64_t pos; - int whence, ret; - if (!f) - return JS_EXCEPTION; - if (JS_ToInt64Ext(ctx, &pos, argv[0])) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &whence, argv[1])) - return JS_EXCEPTION; -#if defined(__linux__) - ret = fseeko(f, pos, whence); -#else - ret = fseek(f, pos, whence); -#endif - if (ret < 0) - ret = -errno; - return JS_NewInt32(ctx, ret); -} - -static JSValue js_std_file_eof(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - return JS_NewBool(ctx, feof(f)); -} - -static JSValue js_std_file_error(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - return JS_NewBool(ctx, ferror(f)); -} - -static JSValue js_std_file_clearerr(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - clearerr(f); - return JS_UNDEFINED; -} - -static JSValue js_std_file_fileno(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - return JS_NewInt32(ctx, fileno(f)); -} - -static JSValue js_std_file_read_write(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic) -{ - FILE *f = js_std_file_get(ctx, this_val); - uint64_t pos, len; - size_t size, ret; - uint8_t *buf; - - if (!f) - return JS_EXCEPTION; - if (JS_ToIndex(ctx, &pos, argv[1])) - return JS_EXCEPTION; - if (JS_ToIndex(ctx, &len, argv[2])) - return JS_EXCEPTION; - buf = JS_GetArrayBuffer(ctx, &size, argv[0]); - if (!buf) - return JS_EXCEPTION; - if (pos + len > size) - return JS_ThrowRangeError(ctx, "read/write array buffer overflow"); - if (magic) - ret = fwrite(buf + pos, 1, len, f); - else - ret = fread(buf + pos, 1, len, f); - return JS_NewInt64(ctx, ret); -} - -/* XXX: could use less memory and go faster */ -static JSValue js_std_file_getline(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - int c; - DynBuf dbuf; - JSValue obj; - - if (!f) - return JS_EXCEPTION; - - js_std_dbuf_init(ctx, &dbuf); - for(;;) { - c = fgetc(f); - if (c == EOF) { - if (dbuf.size == 0) { - /* EOF */ - dbuf_free(&dbuf); - return JS_NULL; - } else { - break; - } - } - if (c == '\n') - break; - if (dbuf_putc(&dbuf, c)) { - dbuf_free(&dbuf); - return JS_ThrowOutOfMemory(ctx); - } - } - obj = JS_NewStringLen(ctx, (const char *)dbuf.buf, dbuf.size); - dbuf_free(&dbuf); - return obj; -} - -/* XXX: could use less memory and go faster */ -static JSValue js_std_file_readAsString(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - int c; - DynBuf dbuf; - JSValue obj; - uint64_t max_size64; - size_t max_size; - JSValue max_size_val; - - if (!f) - return JS_EXCEPTION; - - if (argc >= 1) - max_size_val = argv[0]; - else - max_size_val = JS_UNDEFINED; - max_size = (size_t)-1; - if (!JS_IsUndefined(max_size_val)) { - if (JS_ToIndex(ctx, &max_size64, max_size_val)) - return JS_EXCEPTION; - if (max_size64 < max_size) - max_size = max_size64; - } - - js_std_dbuf_init(ctx, &dbuf); - while (max_size != 0) { - c = fgetc(f); - if (c == EOF) - break; - if (dbuf_putc(&dbuf, c)) { - dbuf_free(&dbuf); - return JS_EXCEPTION; - } - max_size--; - } - obj = JS_NewStringLen(ctx, (const char *)dbuf.buf, dbuf.size); - dbuf_free(&dbuf); - return obj; -} - -static JSValue js_std_file_getByte(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - if (!f) - return JS_EXCEPTION; - return JS_NewInt32(ctx, fgetc(f)); -} - -static JSValue js_std_file_putByte(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - FILE *f = js_std_file_get(ctx, this_val); - int c; - if (!f) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &c, argv[0])) - return JS_EXCEPTION; - c = fputc(c, f); - return JS_NewInt32(ctx, c); -} - -/* urlGet */ - -#define URL_GET_PROGRAM "curl -s -i" -#define URL_GET_BUF_SIZE 4096 - -static int http_get_header_line(FILE *f, char *buf, size_t buf_size, - DynBuf *dbuf) -{ - int c; - char *p; - - p = buf; - for(;;) { - c = fgetc(f); - if (c < 0) - return -1; - if ((p - buf) < buf_size - 1) - *p++ = c; - if (dbuf) - dbuf_putc(dbuf, c); - if (c == '\n') - break; - } - *p = '\0'; - return 0; -} - -static int http_get_status(const char *buf) -{ - const char *p = buf; - while (*p != ' ' && *p != '\0') - p++; - if (*p != ' ') - return 0; - while (*p == ' ') - p++; - return atoi(p); -} - -static JSValue js_std_urlGet(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *url; - DynBuf cmd_buf; - DynBuf data_buf_s, *data_buf = &data_buf_s; - DynBuf header_buf_s, *header_buf = &header_buf_s; - char *buf; - size_t i, len; - int c, status; - JSValue response = JS_UNDEFINED, ret_obj; - JSValue options_obj; - FILE *f; - BOOL binary_flag, full_flag; - - url = JS_ToCString(ctx, argv[0]); - if (!url) - return JS_EXCEPTION; - - binary_flag = FALSE; - full_flag = FALSE; - - if (argc >= 2) { - options_obj = argv[1]; - - if (get_bool_option(ctx, &binary_flag, options_obj, "binary")) - goto fail_obj; - - if (get_bool_option(ctx, &full_flag, options_obj, "full")) { - fail_obj: - JS_FreeCString(ctx, url); - return JS_EXCEPTION; - } - } - - js_std_dbuf_init(ctx, &cmd_buf); - dbuf_printf(&cmd_buf, "%s ''", URL_GET_PROGRAM); - len = strlen(url); - for(i = 0; i < len; i++) { - c = url[i]; - if (c == '\'' || c == '\\') - dbuf_putc(&cmd_buf, '\\'); - dbuf_putc(&cmd_buf, c); - } - JS_FreeCString(ctx, url); - dbuf_putstr(&cmd_buf, "''"); - dbuf_putc(&cmd_buf, '\0'); - if (dbuf_error(&cmd_buf)) { - dbuf_free(&cmd_buf); - return JS_EXCEPTION; - } - // printf("%s\n", (char *)cmd_buf.buf); - f = popen((char *)cmd_buf.buf, "r"); - dbuf_free(&cmd_buf); - if (!f) { - return JS_ThrowTypeError(ctx, "could not start curl"); - } - - js_std_dbuf_init(ctx, data_buf); - js_std_dbuf_init(ctx, header_buf); - - buf = js_malloc(ctx, URL_GET_BUF_SIZE); - if (!buf) - goto fail; - - /* get the HTTP status */ - if (http_get_header_line(f, buf, URL_GET_BUF_SIZE, NULL) < 0) { - status = 0; - goto bad_header; - } - status = http_get_status(buf); - if (!full_flag && !(status >= 200 && status <= 299)) { - goto bad_header; - } - - /* wait until there is an empty line */ - for(;;) { - if (http_get_header_line(f, buf, URL_GET_BUF_SIZE, header_buf) < 0) { - bad_header: - response = JS_NULL; - goto done; - } - if (!strcmp(buf, "\r\n")) - break; - } - if (dbuf_error(header_buf)) - goto fail; - header_buf->size -= 2; /* remove the trailing CRLF */ - - /* download the data */ - for(;;) { - len = fread(buf, 1, URL_GET_BUF_SIZE, f); - if (len == 0) - break; - dbuf_put(data_buf, (uint8_t *)buf, len); - } - if (dbuf_error(data_buf)) - goto fail; - if (binary_flag) { - response = JS_NewArrayBufferCopy(ctx, - data_buf->buf, data_buf->size); - } else { - response = JS_NewStringLen(ctx, (char *)data_buf->buf, data_buf->size); - } - if (JS_IsException(response)) - goto fail; - done: - js_free(ctx, buf); - buf = NULL; - pclose(f); - f = NULL; - dbuf_free(data_buf); - data_buf = NULL; - - if (full_flag) { - ret_obj = JS_NewObject(ctx); - if (JS_IsException(ret_obj)) - goto fail; - JS_DefinePropertyValueStr(ctx, ret_obj, "response", - response, - JS_PROP_C_W_E); - if (!JS_IsNull(response)) { - JS_DefinePropertyValueStr(ctx, ret_obj, "responseHeaders", - JS_NewStringLen(ctx, (char *)header_buf->buf, - header_buf->size), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, ret_obj, "status", - JS_NewInt32(ctx, status), - JS_PROP_C_W_E); - } - } else { - ret_obj = response; - } - dbuf_free(header_buf); - return ret_obj; - fail: - if (f) - pclose(f); - js_free(ctx, buf); - if (data_buf) - dbuf_free(data_buf); - if (header_buf) - dbuf_free(header_buf); - JS_FreeValue(ctx, response); - return JS_EXCEPTION; -} - -static JSClassDef js_std_file_class = { - "FILE", - .finalizer = js_std_file_finalizer, -}; - -static const JSCFunctionListEntry js_std_error_props[] = { - /* various errno values */ -#define DEF(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE ) - DEF(EINVAL), - DEF(EIO), - DEF(EACCES), - DEF(EEXIST), - DEF(ENOSPC), - DEF(ENOSYS), - DEF(EBUSY), - DEF(ENOENT), - DEF(EPERM), - DEF(EPIPE), - DEF(EBADF), -#undef DEF -}; - -static const JSCFunctionListEntry js_std_funcs[] = { - JS_CFUNC_DEF("exit", 1, js_std_exit ), - JS_CFUNC_DEF("gc", 0, js_std_gc ), - JS_CFUNC_DEF("evalScript", 1, js_evalScript ), - JS_CFUNC_DEF("loadScript", 1, js_loadScript ), - JS_CFUNC_DEF("getenv", 1, js_std_getenv ), - JS_CFUNC_DEF("setenv", 1, js_std_setenv ), - JS_CFUNC_DEF("unsetenv", 1, js_std_unsetenv ), - JS_CFUNC_DEF("getenviron", 1, js_std_getenviron ), - JS_CFUNC_DEF("urlGet", 1, js_std_urlGet ), - JS_CFUNC_DEF("loadFile", 1, js_std_loadFile ), - JS_CFUNC_DEF("strerror", 1, js_std_strerror ), - - /* FILE I/O */ - JS_CFUNC_DEF("open", 2, js_std_open ), - JS_CFUNC_DEF("popen", 2, js_std_popen ), - JS_CFUNC_DEF("fdopen", 2, js_std_fdopen ), - JS_CFUNC_DEF("tmpfile", 0, js_std_tmpfile ), - JS_CFUNC_MAGIC_DEF("puts", 1, js_std_file_puts, 0 ), - JS_CFUNC_DEF("printf", 1, js_std_printf ), - JS_CFUNC_DEF("sprintf", 1, js_std_sprintf ), - JS_PROP_INT32_DEF("SEEK_SET", SEEK_SET, JS_PROP_CONFIGURABLE ), - JS_PROP_INT32_DEF("SEEK_CUR", SEEK_CUR, JS_PROP_CONFIGURABLE ), - JS_PROP_INT32_DEF("SEEK_END", SEEK_END, JS_PROP_CONFIGURABLE ), - JS_OBJECT_DEF("Error", js_std_error_props, countof(js_std_error_props), JS_PROP_CONFIGURABLE), -}; - -static const JSCFunctionListEntry js_std_file_proto_funcs[] = { - JS_CFUNC_DEF("close", 0, js_std_file_close ), - JS_CFUNC_MAGIC_DEF("puts", 1, js_std_file_puts, 1 ), - JS_CFUNC_DEF("printf", 1, js_std_file_printf ), - JS_CFUNC_DEF("flush", 0, js_std_file_flush ), - JS_CFUNC_MAGIC_DEF("tell", 0, js_std_file_tell, 0 ), - JS_CFUNC_MAGIC_DEF("tello", 0, js_std_file_tell, 1 ), - JS_CFUNC_DEF("seek", 2, js_std_file_seek ), - JS_CFUNC_DEF("eof", 0, js_std_file_eof ), - JS_CFUNC_DEF("fileno", 0, js_std_file_fileno ), - JS_CFUNC_DEF("error", 0, js_std_file_error ), - JS_CFUNC_DEF("clearerr", 0, js_std_file_clearerr ), - JS_CFUNC_MAGIC_DEF("read", 3, js_std_file_read_write, 0 ), - JS_CFUNC_MAGIC_DEF("write", 3, js_std_file_read_write, 1 ), - JS_CFUNC_DEF("getline", 0, js_std_file_getline ), - JS_CFUNC_DEF("readAsString", 0, js_std_file_readAsString ), - JS_CFUNC_DEF("getByte", 0, js_std_file_getByte ), - JS_CFUNC_DEF("putByte", 1, js_std_file_putByte ), - /* setvbuf, ... */ -}; - -static int js_std_init(JSContext *ctx, JSModuleDef *m) -{ - JSValue proto; - JSRuntime *rt = JS_GetRuntime(ctx); - - /* FILE class */ - /* the class ID is created once */ - JS_NewClassID(rt, &js_std_file_class_id); - /* the class is created once per runtime */ - JS_NewClass(rt, js_std_file_class_id, &js_std_file_class); - proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_std_file_proto_funcs, - countof(js_std_file_proto_funcs)); - JS_SetClassProto(ctx, js_std_file_class_id, proto); - - JS_SetModuleExportList(ctx, m, js_std_funcs, - countof(js_std_funcs)); - JS_SetModuleExport(ctx, m, "in", js_new_std_file(ctx, stdin, FALSE, FALSE)); - JS_SetModuleExport(ctx, m, "out", js_new_std_file(ctx, stdout, FALSE, FALSE)); - JS_SetModuleExport(ctx, m, "err", js_new_std_file(ctx, stderr, FALSE, FALSE)); - return 0; -} - -JSModuleDef *js_init_module_std(JSContext *ctx, const char *module_name) -{ - JSModuleDef *m; - m = JS_NewCModule(ctx, module_name, js_std_init); - if (!m) - return NULL; - JS_AddModuleExportList(ctx, m, js_std_funcs, countof(js_std_funcs)); - JS_AddModuleExport(ctx, m, "in"); - JS_AddModuleExport(ctx, m, "out"); - JS_AddModuleExport(ctx, m, "err"); - return m; -} - -/**********************************************************/ -/* 'os' object */ - -static JSValue js_os_open(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *filename; - int flags, mode, ret; - - filename = JS_ToCString(ctx, argv[0]); - if (!filename) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &flags, argv[1])) - goto fail; - if (argc >= 3 && !JS_IsUndefined(argv[2])) { - if (JS_ToInt32(ctx, &mode, argv[2])) { - fail: - JS_FreeCString(ctx, filename); - return JS_EXCEPTION; - } - } else { - mode = 0666; - } -#if defined(_WIN32) - /* force binary mode by default */ - if (!(flags & O_TEXT)) - flags |= O_BINARY; -#endif - ret = js_get_errno(open(filename, flags, mode)); - JS_FreeCString(ctx, filename); - return JS_NewInt32(ctx, ret); -} - -static JSValue js_os_close(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd, ret; - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - ret = js_get_errno(close(fd)); - return JS_NewInt32(ctx, ret); -} - -static JSValue js_os_seek(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd, whence; - int64_t pos, ret; - BOOL is_bigint; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - is_bigint = JS_IsBigInt(ctx, argv[1]); - if (JS_ToInt64Ext(ctx, &pos, argv[1])) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &whence, argv[2])) - return JS_EXCEPTION; - ret = lseek(fd, pos, whence); - if (ret == -1) - ret = -errno; - if (is_bigint) - return JS_NewBigInt64(ctx, ret); - else - return JS_NewInt64(ctx, ret); -} - -static JSValue js_os_read_write(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic) -{ - int fd; - uint64_t pos, len; - size_t size; - ssize_t ret; - uint8_t *buf; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - if (JS_ToIndex(ctx, &pos, argv[2])) - return JS_EXCEPTION; - if (JS_ToIndex(ctx, &len, argv[3])) - return JS_EXCEPTION; - buf = JS_GetArrayBuffer(ctx, &size, argv[1]); - if (!buf) - return JS_EXCEPTION; - if (pos + len > size) - return JS_ThrowRangeError(ctx, "read/write array buffer overflow"); - if (magic) - ret = js_get_errno(write(fd, buf + pos, len)); - else - ret = js_get_errno(read(fd, buf + pos, len)); - return JS_NewInt64(ctx, ret); -} - -static JSValue js_os_isatty(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd; - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - return JS_NewBool(ctx, (isatty(fd) != 0)); -} - -#if defined(_WIN32) -static JSValue js_os_ttyGetWinSize(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd; - HANDLE handle; - CONSOLE_SCREEN_BUFFER_INFO info; - JSValue obj; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - handle = (HANDLE)_get_osfhandle(fd); - - if (!GetConsoleScreenBufferInfo(handle, &info)) - return JS_NULL; - obj = JS_NewArray(ctx); - if (JS_IsException(obj)) - return obj; - JS_DefinePropertyValueUint32(ctx, obj, 0, JS_NewInt32(ctx, info.dwSize.X), JS_PROP_C_W_E); - JS_DefinePropertyValueUint32(ctx, obj, 1, JS_NewInt32(ctx, info.dwSize.Y), JS_PROP_C_W_E); - return obj; -} - -/* Windows 10 built-in VT100 emulation */ -#define __ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 -#define __ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 - -static JSValue js_os_ttySetRaw(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd; - HANDLE handle; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - handle = (HANDLE)_get_osfhandle(fd); - SetConsoleMode(handle, ENABLE_WINDOW_INPUT | __ENABLE_VIRTUAL_TERMINAL_INPUT); - _setmode(fd, _O_BINARY); - if (fd == 0) { - handle = (HANDLE)_get_osfhandle(1); /* corresponding output */ - SetConsoleMode(handle, ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT | __ENABLE_VIRTUAL_TERMINAL_PROCESSING); - } - return JS_UNDEFINED; -} -#else -static JSValue js_os_ttyGetWinSize(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd; - struct winsize ws; - JSValue obj; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - if (ioctl(fd, TIOCGWINSZ, &ws) == 0 && - ws.ws_col >= 4 && ws.ws_row >= 4) { - obj = JS_NewArray(ctx); - if (JS_IsException(obj)) - return obj; - JS_DefinePropertyValueUint32(ctx, obj, 0, JS_NewInt32(ctx, ws.ws_col), JS_PROP_C_W_E); - JS_DefinePropertyValueUint32(ctx, obj, 1, JS_NewInt32(ctx, ws.ws_row), JS_PROP_C_W_E); - return obj; - } else { - return JS_NULL; - } -} - -static struct termios oldtty; - -static void term_exit(void) -{ - tcsetattr(0, TCSANOW, &oldtty); -} - -/* XXX: should add a way to go back to normal mode */ -static JSValue js_os_ttySetRaw(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - struct termios tty; - int fd; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - - memset(&tty, 0, sizeof(tty)); - tcgetattr(fd, &tty); - oldtty = tty; - - tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP - |INLCR|IGNCR|ICRNL|IXON); - tty.c_oflag |= OPOST; - tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN); - tty.c_cflag &= ~(CSIZE|PARENB); - tty.c_cflag |= CS8; - tty.c_cc[VMIN] = 1; - tty.c_cc[VTIME] = 0; - - tcsetattr(fd, TCSANOW, &tty); - - atexit(term_exit); - return JS_UNDEFINED; -} - -#endif /* !_WIN32 */ - -static JSValue js_os_remove(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *filename; - int ret; - - filename = JS_ToCString(ctx, argv[0]); - if (!filename) - return JS_EXCEPTION; -#if defined(_WIN32) - { - struct stat st; - if (stat(filename, &st) == 0 && S_ISDIR(st.st_mode)) { - ret = rmdir(filename); - } else { - ret = unlink(filename); - } - } -#else - ret = remove(filename); -#endif - ret = js_get_errno(ret); - JS_FreeCString(ctx, filename); - return JS_NewInt32(ctx, ret); -} - -static JSValue js_os_rename(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *oldpath, *newpath; - int ret; - - oldpath = JS_ToCString(ctx, argv[0]); - if (!oldpath) - return JS_EXCEPTION; - newpath = JS_ToCString(ctx, argv[1]); - if (!newpath) { - JS_FreeCString(ctx, oldpath); - return JS_EXCEPTION; - } - ret = js_get_errno(rename(oldpath, newpath)); - JS_FreeCString(ctx, oldpath); - JS_FreeCString(ctx, newpath); - return JS_NewInt32(ctx, ret); -} - -static BOOL is_main_thread(JSRuntime *rt) -{ - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - return !ts->recv_pipe; -} - -static JSOSRWHandler *find_rh(JSThreadState *ts, int fd) -{ - JSOSRWHandler *rh; - struct list_head *el; - - list_for_each(el, &ts->os_rw_handlers) { - rh = list_entry(el, JSOSRWHandler, link); - if (rh->fd == fd) - return rh; - } - return NULL; -} - -static void free_rw_handler(JSRuntime *rt, JSOSRWHandler *rh) -{ - int i; - list_del(&rh->link); - for(i = 0; i < 2; i++) { - JS_FreeValueRT(rt, rh->rw_func[i]); - } - js_free_rt(rt, rh); -} - -static JSValue js_os_setReadHandler(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - JSOSRWHandler *rh; - int fd; - JSValue func; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - func = argv[1]; - if (JS_IsNull(func)) { - rh = find_rh(ts, fd); - if (rh) { - JS_FreeValue(ctx, rh->rw_func[magic]); - rh->rw_func[magic] = JS_NULL; - if (JS_IsNull(rh->rw_func[0]) && - JS_IsNull(rh->rw_func[1])) { - /* remove the entry */ - free_rw_handler(JS_GetRuntime(ctx), rh); - } - } - } else { - if (!JS_IsFunction(ctx, func)) - return JS_ThrowTypeError(ctx, "not a function"); - rh = find_rh(ts, fd); - if (!rh) { - rh = js_mallocz(ctx, sizeof(*rh)); - if (!rh) - return JS_EXCEPTION; - rh->fd = fd; - rh->rw_func[0] = JS_NULL; - rh->rw_func[1] = JS_NULL; - list_add_tail(&rh->link, &ts->os_rw_handlers); - } - JS_FreeValue(ctx, rh->rw_func[magic]); - rh->rw_func[magic] = JS_DupValue(ctx, func); - } - return JS_UNDEFINED; -} - -static JSOSSignalHandler *find_sh(JSThreadState *ts, int sig_num) -{ - JSOSSignalHandler *sh; - struct list_head *el; - list_for_each(el, &ts->os_signal_handlers) { - sh = list_entry(el, JSOSSignalHandler, link); - if (sh->sig_num == sig_num) - return sh; - } - return NULL; -} - -static void free_sh(JSRuntime *rt, JSOSSignalHandler *sh) -{ - list_del(&sh->link); - JS_FreeValueRT(rt, sh->func); - js_free_rt(rt, sh); -} - -static void os_signal_handler(int sig_num) -{ - os_pending_signals |= ((uint64_t)1 << sig_num); -} - -#if defined(_WIN32) -typedef void (*sighandler_t)(int sig_num); -#endif - -static JSValue js_os_signal(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - JSOSSignalHandler *sh; - uint32_t sig_num; - JSValue func; - sighandler_t handler; - - if (!is_main_thread(rt)) - return JS_ThrowTypeError(ctx, "signal handler can only be set in the main thread"); - - if (JS_ToUint32(ctx, &sig_num, argv[0])) - return JS_EXCEPTION; - if (sig_num >= 64) - return JS_ThrowRangeError(ctx, "invalid signal number"); - func = argv[1]; - /* func = null: SIG_DFL, func = undefined, SIG_IGN */ - if (JS_IsNull(func) || JS_IsUndefined(func)) { - sh = find_sh(ts, sig_num); - if (sh) { - free_sh(JS_GetRuntime(ctx), sh); - } - if (JS_IsNull(func)) - handler = SIG_DFL; - else - handler = SIG_IGN; - signal(sig_num, handler); - } else { - if (!JS_IsFunction(ctx, func)) - return JS_ThrowTypeError(ctx, "not a function"); - sh = find_sh(ts, sig_num); - if (!sh) { - sh = js_mallocz(ctx, sizeof(*sh)); - if (!sh) - return JS_EXCEPTION; - sh->sig_num = sig_num; - list_add_tail(&sh->link, &ts->os_signal_handlers); - } - JS_FreeValue(ctx, sh->func); - sh->func = JS_DupValue(ctx, func); - signal(sig_num, os_signal_handler); - } - return JS_UNDEFINED; -} - -#ifndef _WIN32 -static JSValue js_os_cputime(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - struct rusage ru; - int64_t cputime; - - cputime = 0; - if (!getrusage(RUSAGE_SELF, &ru)) - cputime = (int64_t)ru.ru_utime.tv_sec * 1000000 + ru.ru_utime.tv_usec; - - return JS_NewInt64(ctx, cputime); -} -#endif - -static JSValue js_os_now(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - return JS_NewInt64(ctx, js__hrtime_ns() / 1000); -} - -static void unlink_timer(JSRuntime *rt, JSOSTimer *th) -{ - if (th->link.prev) { - list_del(&th->link); - th->link.prev = th->link.next = NULL; - } -} - -static void free_timer(JSRuntime *rt, JSOSTimer *th) -{ - JS_FreeValueRT(rt, th->func); - js_free_rt(rt, th); -} - -static JSClassID js_os_timer_class_id; - -static void js_os_timer_finalizer(JSRuntime *rt, JSValue val) -{ - JSOSTimer *th = JS_GetOpaque(val, js_os_timer_class_id); - if (th) { - th->has_object = FALSE; - if (!th->link.prev) - free_timer(rt, th); - } -} - -static void js_os_timer_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSOSTimer *th = JS_GetOpaque(val, js_os_timer_class_id); - if (th) { - JS_MarkValue(rt, th->func, mark_func); - } -} - -static JSValue js_os_setTimeout(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - int64_t delay; - JSValue func; - JSOSTimer *th; - JSValue obj; - - func = argv[0]; - if (!JS_IsFunction(ctx, func)) - return JS_ThrowTypeError(ctx, "not a function"); - if (JS_ToInt64(ctx, &delay, argv[1])) - return JS_EXCEPTION; - obj = JS_NewObjectClass(ctx, js_os_timer_class_id); - if (JS_IsException(obj)) - return obj; - th = js_mallocz(ctx, sizeof(*th)); - if (!th) { - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } - th->has_object = TRUE; - th->timeout = js__hrtime_ns() / 1e6 + delay; - th->func = JS_DupValue(ctx, func); - list_add_tail(&th->link, &ts->os_timers); - JS_SetOpaque(obj, th); - return obj; -} - -static JSValue js_os_clearTimeout(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSOSTimer *th = JS_GetOpaque2(ctx, argv[0], js_os_timer_class_id); - if (!th) - return JS_EXCEPTION; - unlink_timer(JS_GetRuntime(ctx), th); - return JS_UNDEFINED; -} - -static JSClassDef js_os_timer_class = { - "OSTimer", - .finalizer = js_os_timer_finalizer, - .gc_mark = js_os_timer_mark, -}; - -static void call_handler(JSContext *ctx, JSValue func) -{ - JSValue ret, func1; - /* 'func' might be destroyed when calling itself (if it frees the - handler), so must take extra care */ - func1 = JS_DupValue(ctx, func); - ret = JS_Call(ctx, func1, JS_UNDEFINED, 0, NULL); - JS_FreeValue(ctx, func1); - if (JS_IsException(ret)) - js_std_dump_error(ctx); - JS_FreeValue(ctx, ret); -} - -#if defined(_WIN32) - -static int js_os_poll(JSContext *ctx) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - int min_delay, console_fd; - int64_t cur_time, delay; - JSOSRWHandler *rh; - struct list_head *el; - - /* XXX: handle signals if useful */ - - if (list_empty(&ts->os_rw_handlers) && list_empty(&ts->os_timers)) - return -1; /* no more events */ - - /* XXX: only timers and basic console input are supported */ - if (!list_empty(&ts->os_timers)) { - cur_time = js__hrtime_ns() / 1e6; - min_delay = 10000; - list_for_each(el, &ts->os_timers) { - JSOSTimer *th = list_entry(el, JSOSTimer, link); - delay = th->timeout - cur_time; - if (delay <= 0) { - JSValue func; - /* the timer expired */ - func = th->func; - th->func = JS_UNDEFINED; - unlink_timer(rt, th); - if (!th->has_object) - free_timer(rt, th); - call_handler(ctx, func); - JS_FreeValue(ctx, func); - return 0; - } else if (delay < min_delay) { - min_delay = delay; - } - } - } else { - min_delay = -1; - } - - console_fd = -1; - list_for_each(el, &ts->os_rw_handlers) { - rh = list_entry(el, JSOSRWHandler, link); - if (rh->fd == 0 && !JS_IsNull(rh->rw_func[0])) { - console_fd = rh->fd; - break; - } - } - - if (console_fd >= 0) { - DWORD ti, ret; - HANDLE handle; - if (min_delay == -1) - ti = INFINITE; - else - ti = min_delay; - handle = (HANDLE)_get_osfhandle(console_fd); - ret = WaitForSingleObject(handle, ti); - if (ret == WAIT_OBJECT_0) { - list_for_each(el, &ts->os_rw_handlers) { - rh = list_entry(el, JSOSRWHandler, link); - if (rh->fd == console_fd && !JS_IsNull(rh->rw_func[0])) { - call_handler(ctx, rh->rw_func[0]); - /* must stop because the list may have been modified */ - break; - } - } - } - } else { - Sleep(min_delay); - } - return 0; -} -#else - -#ifdef USE_WORKER - -static void js_free_message(JSWorkerMessage *msg); - -/* return 1 if a message was handled, 0 if no message */ -static int handle_posted_message(JSRuntime *rt, JSContext *ctx, - JSWorkerMessageHandler *port) -{ - JSWorkerMessagePipe *ps = port->recv_pipe; - int ret; - struct list_head *el; - JSWorkerMessage *msg; - JSValue obj, data_obj, func, retval; - - pthread_mutex_lock(&ps->mutex); - if (!list_empty(&ps->msg_queue)) { - el = ps->msg_queue.next; - msg = list_entry(el, JSWorkerMessage, link); - - /* remove the message from the queue */ - list_del(&msg->link); - - if (list_empty(&ps->msg_queue)) { - uint8_t buf[16]; - int ret; - for(;;) { - ret = read(ps->read_fd, buf, sizeof(buf)); - if (ret >= 0) - break; - if (errno != EAGAIN && errno != EINTR) - break; - } - } - - pthread_mutex_unlock(&ps->mutex); - - data_obj = JS_ReadObject(ctx, msg->data, msg->data_len, - JS_READ_OBJ_SAB | JS_READ_OBJ_REFERENCE); - - js_free_message(msg); - - if (JS_IsException(data_obj)) - goto fail; - obj = JS_NewObject(ctx); - if (JS_IsException(obj)) { - JS_FreeValue(ctx, data_obj); - goto fail; - } - JS_DefinePropertyValueStr(ctx, obj, "data", data_obj, JS_PROP_C_W_E); - - /* 'func' might be destroyed when calling itself (if it frees the - handler), so must take extra care */ - func = JS_DupValue(ctx, port->on_message_func); - retval = JS_Call(ctx, func, JS_UNDEFINED, 1, &obj); - JS_FreeValue(ctx, obj); - JS_FreeValue(ctx, func); - if (JS_IsException(retval)) { - fail: - js_std_dump_error(ctx); - } else { - JS_FreeValue(ctx, retval); - } - ret = 1; - } else { - pthread_mutex_unlock(&ps->mutex); - ret = 0; - } - return ret; -} -#else -static int handle_posted_message(JSRuntime *rt, JSContext *ctx, - JSWorkerMessageHandler *port) -{ - return 0; -} -#endif - -static int js_os_poll(JSContext *ctx) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - int ret, fd_max, min_delay; - int64_t cur_time, delay; - fd_set rfds, wfds; - JSOSRWHandler *rh; - struct list_head *el; - struct timeval tv, *tvp; - - /* only check signals in the main thread */ - if (!ts->recv_pipe && - unlikely(os_pending_signals != 0)) { - JSOSSignalHandler *sh; - uint64_t mask; - - list_for_each(el, &ts->os_signal_handlers) { - sh = list_entry(el, JSOSSignalHandler, link); - mask = (uint64_t)1 << sh->sig_num; - if (os_pending_signals & mask) { - os_pending_signals &= ~mask; - call_handler(ctx, sh->func); - return 0; - } - } - } - - if (list_empty(&ts->os_rw_handlers) && list_empty(&ts->os_timers) && - list_empty(&ts->port_list)) - return -1; /* no more events */ - - if (!list_empty(&ts->os_timers)) { - cur_time = js__hrtime_ns() / 1e6; - min_delay = 10000; - list_for_each(el, &ts->os_timers) { - JSOSTimer *th = list_entry(el, JSOSTimer, link); - delay = th->timeout - cur_time; - if (delay <= 0) { - JSValue func; - /* the timer expired */ - func = th->func; - th->func = JS_UNDEFINED; - unlink_timer(rt, th); - if (!th->has_object) - free_timer(rt, th); - call_handler(ctx, func); - JS_FreeValue(ctx, func); - return 0; - } else if (delay < min_delay) { - min_delay = delay; - } - } - tv.tv_sec = min_delay / 1000; - tv.tv_usec = (min_delay % 1000) * 1000; - tvp = &tv; - } else { - tvp = NULL; - } - - FD_ZERO(&rfds); - FD_ZERO(&wfds); - fd_max = -1; - list_for_each(el, &ts->os_rw_handlers) { - rh = list_entry(el, JSOSRWHandler, link); - fd_max = max_int(fd_max, rh->fd); - if (!JS_IsNull(rh->rw_func[0])) - FD_SET(rh->fd, &rfds); - if (!JS_IsNull(rh->rw_func[1])) - FD_SET(rh->fd, &wfds); - } - - list_for_each(el, &ts->port_list) { - JSWorkerMessageHandler *port = list_entry(el, JSWorkerMessageHandler, link); - if (!JS_IsNull(port->on_message_func)) { - JSWorkerMessagePipe *ps = port->recv_pipe; - fd_max = max_int(fd_max, ps->read_fd); - FD_SET(ps->read_fd, &rfds); - } - } - - ret = select(fd_max + 1, &rfds, &wfds, NULL, tvp); - if (ret > 0) { - list_for_each(el, &ts->os_rw_handlers) { - rh = list_entry(el, JSOSRWHandler, link); - if (!JS_IsNull(rh->rw_func[0]) && - FD_ISSET(rh->fd, &rfds)) { - call_handler(ctx, rh->rw_func[0]); - /* must stop because the list may have been modified */ - goto done; - } - if (!JS_IsNull(rh->rw_func[1]) && - FD_ISSET(rh->fd, &wfds)) { - call_handler(ctx, rh->rw_func[1]); - /* must stop because the list may have been modified */ - goto done; - } - } - - list_for_each(el, &ts->port_list) { - JSWorkerMessageHandler *port = list_entry(el, JSWorkerMessageHandler, link); - if (!JS_IsNull(port->on_message_func)) { - JSWorkerMessagePipe *ps = port->recv_pipe; - if (FD_ISSET(ps->read_fd, &rfds)) { - if (handle_posted_message(rt, ctx, port)) - goto done; - } - } - } - } - done: - return 0; -} -#endif /* !_WIN32 */ - -static JSValue make_obj_error(JSContext *ctx, - JSValue obj, - int err) -{ - JSValue arr; - if (JS_IsException(obj)) - return obj; - arr = JS_NewArray(ctx); - if (JS_IsException(arr)) - return JS_EXCEPTION; - JS_DefinePropertyValueUint32(ctx, arr, 0, obj, - JS_PROP_C_W_E); - JS_DefinePropertyValueUint32(ctx, arr, 1, JS_NewInt32(ctx, err), - JS_PROP_C_W_E); - return arr; -} - -static JSValue make_string_error(JSContext *ctx, - const char *buf, - int err) -{ - return make_obj_error(ctx, JS_NewString(ctx, buf), err); -} - -/* return [cwd, errorcode] */ -static JSValue js_os_getcwd(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - char buf[PATH_MAX]; - int err; - - if (!getcwd(buf, sizeof(buf))) { - buf[0] = '\0'; - err = errno; - } else { - err = 0; - } - return make_string_error(ctx, buf, err); -} - -static JSValue js_os_chdir(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *target; - int err; - - target = JS_ToCString(ctx, argv[0]); - if (!target) - return JS_EXCEPTION; - err = js_get_errno(chdir(target)); - JS_FreeCString(ctx, target); - return JS_NewInt32(ctx, err); -} - -static JSValue js_os_mkdir(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int mode, ret; - const char *path; - - if (argc >= 2) { - if (JS_ToInt32(ctx, &mode, argv[1])) - return JS_EXCEPTION; - } else { - mode = 0777; - } - path = JS_ToCString(ctx, argv[0]); - if (!path) - return JS_EXCEPTION; -#if defined(_WIN32) - (void)mode; - ret = js_get_errno(mkdir(path)); -#else - ret = js_get_errno(mkdir(path, mode)); -#endif - JS_FreeCString(ctx, path); - return JS_NewInt32(ctx, ret); -} - -/* return [array, errorcode] */ -static JSValue js_os_readdir(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *path; - DIR *f; - struct dirent *d; - JSValue obj; - int err; - uint32_t len; - - path = JS_ToCString(ctx, argv[0]); - if (!path) - return JS_EXCEPTION; - obj = JS_NewArray(ctx); - if (JS_IsException(obj)) { - JS_FreeCString(ctx, path); - return JS_EXCEPTION; - } - f = opendir(path); - if (!f) - err = errno; - else - err = 0; - JS_FreeCString(ctx, path); - if (!f) - goto done; - len = 0; - for(;;) { - errno = 0; - d = readdir(f); - if (!d) { - err = errno; - break; - } - JS_DefinePropertyValueUint32(ctx, obj, len++, - JS_NewString(ctx, d->d_name), - JS_PROP_C_W_E); - } - closedir(f); - done: - return make_obj_error(ctx, obj, err); -} - -#if !defined(_WIN32) -static int64_t timespec_to_ms(const struct timespec *tv) -{ - return (int64_t)tv->tv_sec * 1000 + (tv->tv_nsec / 1000000); -} -#endif - -/* return [obj, errcode] */ -static JSValue js_os_stat(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int is_lstat) -{ - const char *path; - int err, res; - struct stat st; - JSValue obj; - - path = JS_ToCString(ctx, argv[0]); - if (!path) - return JS_EXCEPTION; -#if defined(_WIN32) - res = stat(path, &st); -#else - if (is_lstat) - res = lstat(path, &st); - else - res = stat(path, &st); -#endif - JS_FreeCString(ctx, path); - if (res < 0) { - err = errno; - obj = JS_NULL; - } else { - err = 0; - obj = JS_NewObject(ctx); - if (JS_IsException(obj)) - return JS_EXCEPTION; - JS_DefinePropertyValueStr(ctx, obj, "dev", - JS_NewInt64(ctx, st.st_dev), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "ino", - JS_NewInt64(ctx, st.st_ino), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "mode", - JS_NewInt32(ctx, st.st_mode), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "nlink", - JS_NewInt64(ctx, st.st_nlink), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "uid", - JS_NewInt64(ctx, st.st_uid), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "gid", - JS_NewInt64(ctx, st.st_gid), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "rdev", - JS_NewInt64(ctx, st.st_rdev), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "size", - JS_NewInt64(ctx, st.st_size), - JS_PROP_C_W_E); -#if !defined(_WIN32) - JS_DefinePropertyValueStr(ctx, obj, "blocks", - JS_NewInt64(ctx, st.st_blocks), - JS_PROP_C_W_E); -#endif -#if defined(_WIN32) - JS_DefinePropertyValueStr(ctx, obj, "atime", - JS_NewInt64(ctx, (int64_t)st.st_atime * 1000), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "mtime", - JS_NewInt64(ctx, (int64_t)st.st_mtime * 1000), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "ctime", - JS_NewInt64(ctx, (int64_t)st.st_ctime * 1000), - JS_PROP_C_W_E); -#elif defined(__APPLE__) - JS_DefinePropertyValueStr(ctx, obj, "atime", - JS_NewInt64(ctx, timespec_to_ms(&st.st_atimespec)), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "mtime", - JS_NewInt64(ctx, timespec_to_ms(&st.st_mtimespec)), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "ctime", - JS_NewInt64(ctx, timespec_to_ms(&st.st_ctimespec)), - JS_PROP_C_W_E); -#else - JS_DefinePropertyValueStr(ctx, obj, "atime", - JS_NewInt64(ctx, timespec_to_ms(&st.st_atim)), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "mtime", - JS_NewInt64(ctx, timespec_to_ms(&st.st_mtim)), - JS_PROP_C_W_E); - JS_DefinePropertyValueStr(ctx, obj, "ctime", - JS_NewInt64(ctx, timespec_to_ms(&st.st_ctim)), - JS_PROP_C_W_E); -#endif - } - return make_obj_error(ctx, obj, err); -} - -#if !defined(_WIN32) -static void ms_to_timeval(struct timeval *tv, uint64_t v) -{ - tv->tv_sec = v / 1000; - tv->tv_usec = (v % 1000) * 1000; -} -#endif - -static JSValue js_os_utimes(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *path; - int64_t atime, mtime; - int ret; - - if (JS_ToInt64(ctx, &atime, argv[1])) - return JS_EXCEPTION; - if (JS_ToInt64(ctx, &mtime, argv[2])) - return JS_EXCEPTION; - path = JS_ToCString(ctx, argv[0]); - if (!path) - return JS_EXCEPTION; -#if defined(_WIN32) - { - struct _utimbuf times; - times.actime = atime / 1000; - times.modtime = mtime / 1000; - ret = js_get_errno(_utime(path, ×)); - } -#else - { - struct timeval times[2]; - ms_to_timeval(×[0], atime); - ms_to_timeval(×[1], mtime); - ret = js_get_errno(utimes(path, times)); - } -#endif - JS_FreeCString(ctx, path); - return JS_NewInt32(ctx, ret); -} - -/* sleep(delay_ms) */ -static JSValue js_os_sleep(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int64_t delay; - int ret; - - if (JS_ToInt64(ctx, &delay, argv[0])) - return JS_EXCEPTION; - if (delay < 0) - delay = 0; -#if defined(_WIN32) - { - if (delay > INT32_MAX) - delay = INT32_MAX; - Sleep(delay); - ret = 0; - } -#else - { - struct timespec ts; - - ts.tv_sec = delay / 1000; - ts.tv_nsec = (delay % 1000) * 1000000; - ret = js_get_errno(nanosleep(&ts, NULL)); - } -#endif - return JS_NewInt32(ctx, ret); -} - -#if defined(_WIN32) -static char *realpath(const char *path, char *buf) -{ - if (!_fullpath(buf, path, PATH_MAX)) { - errno = ENOENT; - return NULL; - } else { - return buf; - } -} -#endif - -/* return [path, errorcode] */ -static JSValue js_os_realpath(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *path; - char buf[PATH_MAX], *res; - int err; - - path = JS_ToCString(ctx, argv[0]); - if (!path) - return JS_EXCEPTION; - res = realpath(path, buf); - JS_FreeCString(ctx, path); - if (!res) { - buf[0] = '\0'; - err = errno; - } else { - err = 0; - } - return make_string_error(ctx, buf, err); -} - -#if !defined(_WIN32) -static JSValue js_os_symlink(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *target, *linkpath; - int err; - - target = JS_ToCString(ctx, argv[0]); - if (!target) - return JS_EXCEPTION; - linkpath = JS_ToCString(ctx, argv[1]); - if (!linkpath) { - JS_FreeCString(ctx, target); - return JS_EXCEPTION; - } - err = js_get_errno(symlink(target, linkpath)); - JS_FreeCString(ctx, target); - JS_FreeCString(ctx, linkpath); - return JS_NewInt32(ctx, err); -} - -/* return [path, errorcode] */ -static JSValue js_os_readlink(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - const char *path; - char buf[PATH_MAX]; - int err; - ssize_t res; - - path = JS_ToCString(ctx, argv[0]); - if (!path) - return JS_EXCEPTION; - res = readlink(path, buf, sizeof(buf) - 1); - if (res < 0) { - buf[0] = '\0'; - err = errno; - } else { - buf[res] = '\0'; - err = 0; - } - JS_FreeCString(ctx, path); - return make_string_error(ctx, buf, err); -} - -static char **build_envp(JSContext *ctx, JSValue obj) -{ - uint32_t len, i; - JSPropertyEnum *tab; - char **envp, *pair; - const char *key, *str; - JSValue val; - size_t key_len, str_len; - - if (JS_GetOwnPropertyNames(ctx, &tab, &len, obj, - JS_GPN_STRING_MASK | JS_GPN_ENUM_ONLY) < 0) - return NULL; - envp = js_mallocz(ctx, sizeof(envp[0]) * ((size_t)len + 1)); - if (!envp) - goto fail; - for(i = 0; i < len; i++) { - val = JS_GetProperty(ctx, obj, tab[i].atom); - if (JS_IsException(val)) - goto fail; - str = JS_ToCString(ctx, val); - JS_FreeValue(ctx, val); - if (!str) - goto fail; - key = JS_AtomToCString(ctx, tab[i].atom); - if (!key) { - JS_FreeCString(ctx, str); - goto fail; - } - key_len = strlen(key); - str_len = strlen(str); - pair = js_malloc(ctx, key_len + str_len + 2); - if (!pair) { - JS_FreeCString(ctx, key); - JS_FreeCString(ctx, str); - goto fail; - } - memcpy(pair, key, key_len); - pair[key_len] = '='; - memcpy(pair + key_len + 1, str, str_len); - pair[key_len + 1 + str_len] = '\0'; - envp[i] = pair; - JS_FreeCString(ctx, key); - JS_FreeCString(ctx, str); - } - done: - for(i = 0; i < len; i++) - JS_FreeAtom(ctx, tab[i].atom); - js_free(ctx, tab); - return envp; - fail: - if (envp) { - for(i = 0; i < len; i++) - js_free(ctx, envp[i]); - js_free(ctx, envp); - envp = NULL; - } - goto done; -} - -/* execvpe is not available on non GNU systems */ -static int my_execvpe(const char *filename, char **argv, char **envp) -{ - char *path, *p, *p_next, *p1; - char buf[PATH_MAX]; - size_t filename_len, path_len; - BOOL eacces_error; - - filename_len = strlen(filename); - if (filename_len == 0) { - errno = ENOENT; - return -1; - } - if (strchr(filename, '/')) - return execve(filename, argv, envp); - - path = getenv("PATH"); - if (!path) - path = (char *)"/bin:/usr/bin"; - eacces_error = FALSE; - p = path; - for(p = path; p != NULL; p = p_next) { - p1 = strchr(p, ':'); - if (!p1) { - p_next = NULL; - path_len = strlen(p); - } else { - p_next = p1 + 1; - path_len = p1 - p; - } - /* path too long */ - if ((path_len + 1 + filename_len + 1) > PATH_MAX) - continue; - memcpy(buf, p, path_len); - buf[path_len] = '/'; - memcpy(buf + path_len + 1, filename, filename_len); - buf[path_len + 1 + filename_len] = '\0'; - - execve(buf, argv, envp); - - switch(errno) { - case EACCES: - eacces_error = TRUE; - break; - case ENOENT: - case ENOTDIR: - break; - default: - return -1; - } - } - if (eacces_error) - errno = EACCES; - return -1; -} - -/* exec(args[, options]) -> exitcode */ -static JSValue js_os_exec(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSValue options, args = argv[0]; - JSValue val, ret_val; - const char **exec_argv, *file = NULL, *str, *cwd = NULL; - char **envp = environ; - uint32_t exec_argc, i; - int ret, pid, status; - BOOL block_flag = TRUE, use_path = TRUE; - static const char *std_name[3] = { "stdin", "stdout", "stderr" }; - int std_fds[3]; - uint32_t uid = -1, gid = -1; - - val = JS_GetPropertyStr(ctx, args, "length"); - if (JS_IsException(val)) - return JS_EXCEPTION; - ret = JS_ToUint32(ctx, &exec_argc, val); - JS_FreeValue(ctx, val); - if (ret) - return JS_EXCEPTION; - /* arbitrary limit to avoid overflow */ - if (exec_argc < 1 || exec_argc > 65535) { - return JS_ThrowTypeError(ctx, "invalid number of arguments"); - } - exec_argv = js_mallocz(ctx, sizeof(exec_argv[0]) * (exec_argc + 1)); - if (!exec_argv) - return JS_EXCEPTION; - for(i = 0; i < exec_argc; i++) { - val = JS_GetPropertyUint32(ctx, args, i); - if (JS_IsException(val)) - goto exception; - str = JS_ToCString(ctx, val); - JS_FreeValue(ctx, val); - if (!str) - goto exception; - exec_argv[i] = str; - } - exec_argv[exec_argc] = NULL; - - for(i = 0; i < 3; i++) - std_fds[i] = i; - - /* get the options, if any */ - if (argc >= 2) { - options = argv[1]; - - if (get_bool_option(ctx, &block_flag, options, "block")) - goto exception; - if (get_bool_option(ctx, &use_path, options, "usePath")) - goto exception; - - val = JS_GetPropertyStr(ctx, options, "file"); - if (JS_IsException(val)) - goto exception; - if (!JS_IsUndefined(val)) { - file = JS_ToCString(ctx, val); - JS_FreeValue(ctx, val); - if (!file) - goto exception; - } - - val = JS_GetPropertyStr(ctx, options, "cwd"); - if (JS_IsException(val)) - goto exception; - if (!JS_IsUndefined(val)) { - cwd = JS_ToCString(ctx, val); - JS_FreeValue(ctx, val); - if (!cwd) - goto exception; - } - - /* stdin/stdout/stderr handles */ - for(i = 0; i < 3; i++) { - val = JS_GetPropertyStr(ctx, options, std_name[i]); - if (JS_IsException(val)) - goto exception; - if (!JS_IsUndefined(val)) { - int fd; - ret = JS_ToInt32(ctx, &fd, val); - JS_FreeValue(ctx, val); - if (ret) - goto exception; - std_fds[i] = fd; - } - } - - val = JS_GetPropertyStr(ctx, options, "env"); - if (JS_IsException(val)) - goto exception; - if (!JS_IsUndefined(val)) { - envp = build_envp(ctx, val); - JS_FreeValue(ctx, val); - if (!envp) - goto exception; - } - - val = JS_GetPropertyStr(ctx, options, "uid"); - if (JS_IsException(val)) - goto exception; - if (!JS_IsUndefined(val)) { - ret = JS_ToUint32(ctx, &uid, val); - JS_FreeValue(ctx, val); - if (ret) - goto exception; - } - - val = JS_GetPropertyStr(ctx, options, "gid"); - if (JS_IsException(val)) - goto exception; - if (!JS_IsUndefined(val)) { - ret = JS_ToUint32(ctx, &gid, val); - JS_FreeValue(ctx, val); - if (ret) - goto exception; - } - } - - pid = fork(); - if (pid < 0) { - JS_ThrowTypeError(ctx, "fork error"); - goto exception; - } - if (pid == 0) { - /* child */ - int fd_max = sysconf(_SC_OPEN_MAX); - - /* remap the stdin/stdout/stderr handles if necessary */ - for(i = 0; i < 3; i++) { - if (std_fds[i] != i) { - if (dup2(std_fds[i], i) < 0) - _exit(127); - } - } - - for(i = 3; i < fd_max; i++) - close(i); - if (cwd) { - if (chdir(cwd) < 0) - _exit(127); - } - if (uid != -1) { - if (setuid(uid) < 0) - _exit(127); - } - if (gid != -1) { - if (setgid(gid) < 0) - _exit(127); - } - - if (!file) - file = exec_argv[0]; - if (use_path) - ret = my_execvpe(file, (char **)exec_argv, envp); - else - ret = execve(file, (char **)exec_argv, envp); - _exit(127); - } - /* parent */ - if (block_flag) { - for(;;) { - ret = waitpid(pid, &status, 0); - if (ret == pid) { - if (WIFEXITED(status)) { - ret = WEXITSTATUS(status); - break; - } else if (WIFSIGNALED(status)) { - ret = -WTERMSIG(status); - break; - } - } - } - } else { - ret = pid; - } - ret_val = JS_NewInt32(ctx, ret); - done: - JS_FreeCString(ctx, file); - JS_FreeCString(ctx, cwd); - for(i = 0; i < exec_argc; i++) - JS_FreeCString(ctx, exec_argv[i]); - js_free(ctx, exec_argv); - if (envp != environ) { - char **p; - p = envp; - while (*p != NULL) { - js_free(ctx, *p); - p++; - } - js_free(ctx, envp); - } - return ret_val; - exception: - ret_val = JS_EXCEPTION; - goto done; -} - -/* waitpid(pid, block) -> [pid, status] */ -static JSValue js_os_waitpid(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int pid, status, options, ret; - JSValue obj; - - if (JS_ToInt32(ctx, &pid, argv[0])) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &options, argv[1])) - return JS_EXCEPTION; - - ret = waitpid(pid, &status, options); - if (ret < 0) { - ret = -errno; - status = 0; - } - - obj = JS_NewArray(ctx); - if (JS_IsException(obj)) - return obj; - JS_DefinePropertyValueUint32(ctx, obj, 0, JS_NewInt32(ctx, ret), - JS_PROP_C_W_E); - JS_DefinePropertyValueUint32(ctx, obj, 1, JS_NewInt32(ctx, status), - JS_PROP_C_W_E); - return obj; -} - -/* pipe() -> [read_fd, write_fd] or null if error */ -static JSValue js_os_pipe(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int pipe_fds[2], ret; - JSValue obj; - - ret = pipe(pipe_fds); - if (ret < 0) - return JS_NULL; - obj = JS_NewArray(ctx); - if (JS_IsException(obj)) - return obj; - JS_DefinePropertyValueUint32(ctx, obj, 0, JS_NewInt32(ctx, pipe_fds[0]), - JS_PROP_C_W_E); - JS_DefinePropertyValueUint32(ctx, obj, 1, JS_NewInt32(ctx, pipe_fds[1]), - JS_PROP_C_W_E); - return obj; -} - -/* kill(pid, sig) */ -static JSValue js_os_kill(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int pid, sig, ret; - - if (JS_ToInt32(ctx, &pid, argv[0])) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &sig, argv[1])) - return JS_EXCEPTION; - ret = js_get_errno(kill(pid, sig)); - return JS_NewInt32(ctx, ret); -} - -/* dup(fd) */ -static JSValue js_os_dup(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd, ret; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - ret = js_get_errno(dup(fd)); - return JS_NewInt32(ctx, ret); -} - -/* dup2(fd) */ -static JSValue js_os_dup2(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int fd, fd2, ret; - - if (JS_ToInt32(ctx, &fd, argv[0])) - return JS_EXCEPTION; - if (JS_ToInt32(ctx, &fd2, argv[1])) - return JS_EXCEPTION; - ret = js_get_errno(dup2(fd, fd2)); - return JS_NewInt32(ctx, ret); -} - -#endif /* !_WIN32 */ - -#ifdef USE_WORKER - -/* Worker */ - -typedef struct { - JSWorkerMessagePipe *recv_pipe; - JSWorkerMessagePipe *send_pipe; - JSWorkerMessageHandler *msg_handler; -} JSWorkerData; - -typedef struct { - char *filename; /* module filename */ - char *basename; /* module base name */ - JSWorkerMessagePipe *recv_pipe, *send_pipe; -} WorkerFuncArgs; - -typedef struct { - int ref_count; - uint64_t buf[0]; -} JSSABHeader; - -static JSClassID js_worker_class_id; -static JSContext *(*js_worker_new_context_func)(JSRuntime *rt); - -static int atomic_add_int(int *ptr, int v) -{ - return atomic_fetch_add((_Atomic uint32_t*)ptr, v) + v; -} - -/* shared array buffer allocator */ -static void *js_sab_alloc(void *opaque, size_t size) -{ - JSSABHeader *sab; - sab = malloc(sizeof(JSSABHeader) + size); - if (!sab) - return NULL; - sab->ref_count = 1; - return sab->buf; -} - -static void js_sab_free(void *opaque, void *ptr) -{ - JSSABHeader *sab; - int ref_count; - sab = (JSSABHeader *)((uint8_t *)ptr - sizeof(JSSABHeader)); - ref_count = atomic_add_int(&sab->ref_count, -1); - assert(ref_count >= 0); - if (ref_count == 0) { - free(sab); - } -} - -static void js_sab_dup(void *opaque, void *ptr) -{ - JSSABHeader *sab; - sab = (JSSABHeader *)((uint8_t *)ptr - sizeof(JSSABHeader)); - atomic_add_int(&sab->ref_count, 1); -} - -static JSWorkerMessagePipe *js_new_message_pipe(void) -{ - JSWorkerMessagePipe *ps; - int pipe_fds[2]; - - if (pipe(pipe_fds) < 0) - return NULL; - - ps = malloc(sizeof(*ps)); - if (!ps) { - close(pipe_fds[0]); - close(pipe_fds[1]); - return NULL; - } - ps->ref_count = 1; - init_list_head(&ps->msg_queue); - pthread_mutex_init(&ps->mutex, NULL); - ps->read_fd = pipe_fds[0]; - ps->write_fd = pipe_fds[1]; - return ps; -} - -static JSWorkerMessagePipe *js_dup_message_pipe(JSWorkerMessagePipe *ps) -{ - atomic_add_int(&ps->ref_count, 1); - return ps; -} - -static void js_free_message(JSWorkerMessage *msg) -{ - size_t i; - /* free the SAB */ - for(i = 0; i < msg->sab_tab_len; i++) { - js_sab_free(NULL, msg->sab_tab[i]); - } - free(msg->sab_tab); - free(msg->data); - free(msg); -} - -static void js_free_message_pipe(JSWorkerMessagePipe *ps) -{ - struct list_head *el, *el1; - JSWorkerMessage *msg; - int ref_count; - - if (!ps) - return; - - ref_count = atomic_add_int(&ps->ref_count, -1); - assert(ref_count >= 0); - if (ref_count == 0) { - list_for_each_safe(el, el1, &ps->msg_queue) { - msg = list_entry(el, JSWorkerMessage, link); - js_free_message(msg); - } - pthread_mutex_destroy(&ps->mutex); - close(ps->read_fd); - close(ps->write_fd); - free(ps); - } -} - -static void js_free_port(JSRuntime *rt, JSWorkerMessageHandler *port) -{ - if (port) { - js_free_message_pipe(port->recv_pipe); - JS_FreeValueRT(rt, port->on_message_func); - list_del(&port->link); - js_free_rt(rt, port); - } -} - -static void js_worker_finalizer(JSRuntime *rt, JSValue val) -{ - JSWorkerData *worker = JS_GetOpaque(val, js_worker_class_id); - if (worker) { - js_free_message_pipe(worker->recv_pipe); - js_free_message_pipe(worker->send_pipe); - js_free_port(rt, worker->msg_handler); - js_free_rt(rt, worker); - } -} - -static JSClassDef js_worker_class = { - "Worker", - .finalizer = js_worker_finalizer, -}; - -static void *worker_func(void *opaque) -{ - WorkerFuncArgs *args = opaque; - JSRuntime *rt; - JSThreadState *ts; - JSContext *ctx; - - rt = JS_NewRuntime(); - if (rt == NULL) { - fprintf(stderr, "JS_NewRuntime failure"); - exit(1); - } - js_std_init_handlers(rt); - - JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL); - - /* set the pipe to communicate with the parent */ - ts = JS_GetRuntimeOpaque(rt); - ts->recv_pipe = args->recv_pipe; - ts->send_pipe = args->send_pipe; - - /* function pointer to avoid linking the whole JS_NewContext() if - not needed */ - ctx = js_worker_new_context_func(rt); - if (ctx == NULL) { - fprintf(stderr, "JS_NewContext failure"); - } - - JS_SetCanBlock(rt, TRUE); - - js_std_add_helpers(ctx, -1, NULL); - - if (!JS_RunModule(ctx, args->basename, args->filename)) - js_std_dump_error(ctx); - free(args->filename); - free(args->basename); - free(args); - - js_std_loop(ctx); - - JS_FreeContext(ctx); - js_std_free_handlers(rt); - JS_FreeRuntime(rt); - return NULL; -} - -static JSValue js_worker_ctor_internal(JSContext *ctx, JSValue new_target, - JSWorkerMessagePipe *recv_pipe, - JSWorkerMessagePipe *send_pipe) -{ - JSValue obj = JS_UNDEFINED, proto; - JSWorkerData *s; - - /* create the object */ - if (JS_IsUndefined(new_target)) { - proto = JS_GetClassProto(ctx, js_worker_class_id); - } else { - proto = JS_GetPropertyStr(ctx, new_target, "prototype"); - if (JS_IsException(proto)) - goto fail; - } - obj = JS_NewObjectProtoClass(ctx, proto, js_worker_class_id); - JS_FreeValue(ctx, proto); - if (JS_IsException(obj)) - goto fail; - s = js_mallocz(ctx, sizeof(*s)); - if (!s) - goto fail; - s->recv_pipe = js_dup_message_pipe(recv_pipe); - s->send_pipe = js_dup_message_pipe(send_pipe); - - JS_SetOpaque(obj, s); - return obj; - fail: - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; -} - -static JSValue js_worker_ctor(JSContext *ctx, JSValue new_target, - int argc, JSValue *argv) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - WorkerFuncArgs *args = NULL; - pthread_t tid; - pthread_attr_t attr; - JSValue obj = JS_UNDEFINED; - int ret; - const char *filename = NULL, *basename; - JSAtom basename_atom; - - /* XXX: in order to avoid problems with resource liberation, we - don't support creating workers inside workers */ - if (!is_main_thread(rt)) - return JS_ThrowTypeError(ctx, "cannot create a worker inside a worker"); - - /* base name, assuming the calling function is a normal JS - function */ - basename_atom = JS_GetScriptOrModuleName(ctx, 1); - if (basename_atom == JS_ATOM_NULL) { - return JS_ThrowTypeError(ctx, "could not determine calling script or module name"); - } - basename = JS_AtomToCString(ctx, basename_atom); - JS_FreeAtom(ctx, basename_atom); - if (!basename) - goto fail; - - /* module name */ - filename = JS_ToCString(ctx, argv[0]); - if (!filename) - goto fail; - - args = malloc(sizeof(*args)); - if (!args) - goto oom_fail; - memset(args, 0, sizeof(*args)); - args->filename = strdup(filename); - args->basename = strdup(basename); - - /* ports */ - args->recv_pipe = js_new_message_pipe(); - if (!args->recv_pipe) - goto oom_fail; - args->send_pipe = js_new_message_pipe(); - if (!args->send_pipe) - goto oom_fail; - - obj = js_worker_ctor_internal(ctx, new_target, - args->send_pipe, args->recv_pipe); - if (JS_IsException(obj)) - goto fail; - - pthread_attr_init(&attr); - /* no join at the end */ - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - // musl libc gives threads 80 kb stacks, much smaller than - // JS_DEFAULT_STACK_SIZE (256 kb) - pthread_attr_setstacksize(&attr, 2 << 20); // 2 MB, glibc default - ret = pthread_create(&tid, &attr, worker_func, args); - pthread_attr_destroy(&attr); - if (ret != 0) { - JS_ThrowTypeError(ctx, "could not create worker"); - goto fail; - } - JS_FreeCString(ctx, basename); - JS_FreeCString(ctx, filename); - return obj; - oom_fail: - JS_ThrowOutOfMemory(ctx); - fail: - JS_FreeCString(ctx, basename); - JS_FreeCString(ctx, filename); - if (args) { - free(args->filename); - free(args->basename); - js_free_message_pipe(args->recv_pipe); - js_free_message_pipe(args->send_pipe); - free(args); - } - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; -} - -static JSValue js_worker_postMessage(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, js_worker_class_id); - JSWorkerMessagePipe *ps; - size_t data_len, sab_tab_len, i; - uint8_t *data; - JSWorkerMessage *msg; - uint8_t **sab_tab; - - if (!worker) - return JS_EXCEPTION; - - data = JS_WriteObject2(ctx, &data_len, argv[0], - JS_WRITE_OBJ_SAB | JS_WRITE_OBJ_REFERENCE, - &sab_tab, &sab_tab_len); - if (!data) - return JS_EXCEPTION; - - msg = malloc(sizeof(*msg)); - if (!msg) - goto fail; - msg->data = NULL; - msg->sab_tab = NULL; - - /* must reallocate because the allocator may be different */ - msg->data = malloc(data_len); - if (!msg->data) - goto fail; - memcpy(msg->data, data, data_len); - msg->data_len = data_len; - - msg->sab_tab = malloc(sizeof(msg->sab_tab[0]) * sab_tab_len); - if (!msg->sab_tab) - goto fail; - if (sab_tab_len > 0) - memcpy(msg->sab_tab, sab_tab, sizeof(msg->sab_tab[0]) * sab_tab_len); - msg->sab_tab_len = sab_tab_len; - - js_free(ctx, data); - js_free(ctx, sab_tab); - - /* increment the SAB reference counts */ - for(i = 0; i < msg->sab_tab_len; i++) { - js_sab_dup(NULL, msg->sab_tab[i]); - } - - ps = worker->send_pipe; - pthread_mutex_lock(&ps->mutex); - /* indicate that data is present */ - if (list_empty(&ps->msg_queue)) { - uint8_t ch = '\0'; - int ret; - for(;;) { - ret = write(ps->write_fd, &ch, 1); - if (ret == 1) - break; - if (ret < 0 && (errno != EAGAIN || errno != EINTR)) - break; - } - } - list_add_tail(&msg->link, &ps->msg_queue); - pthread_mutex_unlock(&ps->mutex); - return JS_UNDEFINED; - fail: - if (msg) { - free(msg->data); - free(msg->sab_tab); - free(msg); - } - js_free(ctx, data); - js_free(ctx, sab_tab); - return JS_EXCEPTION; - -} - -static JSValue js_worker_set_onmessage(JSContext *ctx, JSValue this_val, - JSValue func) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, js_worker_class_id); - JSWorkerMessageHandler *port; - - if (!worker) - return JS_EXCEPTION; - - port = worker->msg_handler; - if (JS_IsNull(func)) { - if (port) { - js_free_port(rt, port); - worker->msg_handler = NULL; - } - } else { - if (!JS_IsFunction(ctx, func)) - return JS_ThrowTypeError(ctx, "not a function"); - if (!port) { - port = js_mallocz(ctx, sizeof(*port)); - if (!port) - return JS_EXCEPTION; - port->recv_pipe = js_dup_message_pipe(worker->recv_pipe); - port->on_message_func = JS_NULL; - list_add_tail(&port->link, &ts->port_list); - worker->msg_handler = port; - } - JS_FreeValue(ctx, port->on_message_func); - port->on_message_func = JS_DupValue(ctx, func); - } - return JS_UNDEFINED; -} - -static JSValue js_worker_get_onmessage(JSContext *ctx, JSValue this_val) -{ - JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, js_worker_class_id); - JSWorkerMessageHandler *port; - if (!worker) - return JS_EXCEPTION; - port = worker->msg_handler; - if (port) { - return JS_DupValue(ctx, port->on_message_func); - } else { - return JS_NULL; - } -} - -static const JSCFunctionListEntry js_worker_proto_funcs[] = { - JS_CFUNC_DEF("postMessage", 1, js_worker_postMessage ), - JS_CGETSET_DEF("onmessage", js_worker_get_onmessage, js_worker_set_onmessage ), -}; - -#endif /* USE_WORKER */ - -void js_std_set_worker_new_context_func(JSContext *(*func)(JSRuntime *rt)) -{ -#ifdef USE_WORKER - js_worker_new_context_func = func; -#endif -} - -#if defined(_WIN32) -#define OS_PLATFORM "win32" -#elif defined(__APPLE__) -#define OS_PLATFORM "darwin" -#elif defined(EMSCRIPTEN) -#define OS_PLATFORM "js" -#elif defined(__CYGWIN__) -#define OS_PLATFORM "cygwin" -#elif defined(__linux__) -#define OS_PLATFORM "linux" -#elif defined(__OpenBSD__) -#define OS_PLATFORM "openbsd" -#elif defined(__NetBSD__) -#define OS_PLATFORM "netbsd" -#elif defined(__FreeBSD__) -#define OS_PLATFORM "freebsd" -#else -#define OS_PLATFORM "unknown" -#endif - -#define OS_FLAG(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE ) - -static const JSCFunctionListEntry js_os_funcs[] = { - JS_CFUNC_DEF("open", 2, js_os_open ), - OS_FLAG(O_RDONLY), - OS_FLAG(O_WRONLY), - OS_FLAG(O_RDWR), - OS_FLAG(O_APPEND), - OS_FLAG(O_CREAT), - OS_FLAG(O_EXCL), - OS_FLAG(O_TRUNC), -#if defined(_WIN32) - OS_FLAG(O_BINARY), - OS_FLAG(O_TEXT), -#endif - JS_CFUNC_DEF("close", 1, js_os_close ), - JS_CFUNC_DEF("seek", 3, js_os_seek ), - JS_CFUNC_MAGIC_DEF("read", 4, js_os_read_write, 0 ), - JS_CFUNC_MAGIC_DEF("write", 4, js_os_read_write, 1 ), - JS_CFUNC_DEF("isatty", 1, js_os_isatty ), - JS_CFUNC_DEF("ttyGetWinSize", 1, js_os_ttyGetWinSize ), - JS_CFUNC_DEF("ttySetRaw", 1, js_os_ttySetRaw ), - JS_CFUNC_DEF("remove", 1, js_os_remove ), - JS_CFUNC_DEF("rename", 2, js_os_rename ), - JS_CFUNC_MAGIC_DEF("setReadHandler", 2, js_os_setReadHandler, 0 ), - JS_CFUNC_MAGIC_DEF("setWriteHandler", 2, js_os_setReadHandler, 1 ), - JS_CFUNC_DEF("signal", 2, js_os_signal ), - OS_FLAG(SIGINT), - OS_FLAG(SIGABRT), - OS_FLAG(SIGFPE), - OS_FLAG(SIGILL), - OS_FLAG(SIGSEGV), - OS_FLAG(SIGTERM), -#if !defined(_WIN32) - OS_FLAG(SIGQUIT), - OS_FLAG(SIGPIPE), - OS_FLAG(SIGALRM), - OS_FLAG(SIGUSR1), - OS_FLAG(SIGUSR2), - OS_FLAG(SIGCHLD), - OS_FLAG(SIGCONT), - OS_FLAG(SIGSTOP), - OS_FLAG(SIGTSTP), - OS_FLAG(SIGTTIN), - OS_FLAG(SIGTTOU), - JS_CFUNC_DEF("cputime", 0, js_os_cputime ), -#endif - JS_CFUNC_DEF("now", 0, js_os_now ), - JS_CFUNC_DEF("setTimeout", 2, js_os_setTimeout ), - JS_CFUNC_DEF("clearTimeout", 1, js_os_clearTimeout ), - JS_PROP_STRING_DEF("platform", OS_PLATFORM, 0 ), - JS_CFUNC_DEF("getcwd", 0, js_os_getcwd ), - JS_CFUNC_DEF("chdir", 0, js_os_chdir ), - JS_CFUNC_DEF("mkdir", 1, js_os_mkdir ), - JS_CFUNC_DEF("readdir", 1, js_os_readdir ), - /* st_mode constants */ - OS_FLAG(S_IFMT), - OS_FLAG(S_IFIFO), - OS_FLAG(S_IFCHR), - OS_FLAG(S_IFDIR), - OS_FLAG(S_IFBLK), - OS_FLAG(S_IFREG), -#if !defined(_WIN32) - OS_FLAG(S_IFSOCK), - OS_FLAG(S_IFLNK), - OS_FLAG(S_ISGID), - OS_FLAG(S_ISUID), -#endif - JS_CFUNC_MAGIC_DEF("stat", 1, js_os_stat, 0 ), - JS_CFUNC_DEF("utimes", 3, js_os_utimes ), - JS_CFUNC_DEF("sleep", 1, js_os_sleep ), - JS_CFUNC_DEF("realpath", 1, js_os_realpath ), -#if !defined(_WIN32) - JS_CFUNC_MAGIC_DEF("lstat", 1, js_os_stat, 1 ), - JS_CFUNC_DEF("symlink", 2, js_os_symlink ), - JS_CFUNC_DEF("readlink", 1, js_os_readlink ), - JS_CFUNC_DEF("exec", 1, js_os_exec ), - JS_CFUNC_DEF("waitpid", 2, js_os_waitpid ), - OS_FLAG(WNOHANG), - JS_CFUNC_DEF("pipe", 0, js_os_pipe ), - JS_CFUNC_DEF("kill", 2, js_os_kill ), - JS_CFUNC_DEF("dup", 1, js_os_dup ), - JS_CFUNC_DEF("dup2", 2, js_os_dup2 ), -#endif -}; - -static int js_os_init(JSContext *ctx, JSModuleDef *m) -{ - JSRuntime *rt = JS_GetRuntime(ctx); - os_poll_func = js_os_poll; - - /* OSTimer class */ - JS_NewClassID(rt, &js_os_timer_class_id); - JS_NewClass(rt, js_os_timer_class_id, &js_os_timer_class); - -#ifdef USE_WORKER - { - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - JSValue proto, obj; - /* Worker class */ - JS_NewClassID(rt, &js_worker_class_id); - JS_NewClass(rt, js_worker_class_id, &js_worker_class); - proto = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, proto, js_worker_proto_funcs, countof(js_worker_proto_funcs)); - - obj = JS_NewCFunction2(ctx, js_worker_ctor, "Worker", 1, - JS_CFUNC_constructor, 0); - JS_SetConstructor(ctx, obj, proto); - - JS_SetClassProto(ctx, js_worker_class_id, proto); - - /* set 'Worker.parent' if necessary */ - if (ts->recv_pipe && ts->send_pipe) { - JS_DefinePropertyValueStr(ctx, obj, "parent", - js_worker_ctor_internal(ctx, JS_UNDEFINED, ts->recv_pipe, ts->send_pipe), - JS_PROP_C_W_E); - } - - JS_SetModuleExport(ctx, m, "Worker", obj); - } -#endif /* USE_WORKER */ - - return JS_SetModuleExportList(ctx, m, js_os_funcs, - countof(js_os_funcs)); -} - -JSModuleDef *js_init_module_os(JSContext *ctx, const char *module_name) -{ - JSModuleDef *m; - m = JS_NewCModule(ctx, module_name, js_os_init); - if (!m) - return NULL; - JS_AddModuleExportList(ctx, m, js_os_funcs, countof(js_os_funcs)); -#ifdef USE_WORKER - JS_AddModuleExport(ctx, m, "Worker"); -#endif - return m; -} - -/**********************************************************/ - -static JSValue js_print(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - int i; - const char *str; - size_t len; - - for(i = 0; i < argc; i++) { - if (i != 0) - putchar(' '); - str = JS_ToCStringLen(ctx, &len, argv[i]); - if (!str) - return JS_EXCEPTION; - fwrite(str, 1, len, stdout); - JS_FreeCString(ctx, str); - } - putchar('\n'); - fflush(stdout); - return JS_UNDEFINED; -} - -void js_std_add_helpers(JSContext *ctx, int argc, char **argv) -{ - JSValue global_obj, console, args; - int i; - - /* XXX: should these global definitions be enumerable? */ - global_obj = JS_GetGlobalObject(ctx); - - console = JS_NewObject(ctx); - JS_SetPropertyStr(ctx, console, "log", - JS_NewCFunction(ctx, js_print, "log", 1)); - JS_SetPropertyStr(ctx, global_obj, "console", console); - - /* same methods as the mozilla JS shell */ - if (argc >= 0) { - args = JS_NewArray(ctx); - for(i = 0; i < argc; i++) { - JS_SetPropertyUint32(ctx, args, i, JS_NewString(ctx, argv[i])); - } - JS_SetPropertyStr(ctx, global_obj, "scriptArgs", args); - } - - JS_SetPropertyStr(ctx, global_obj, "print", - JS_NewCFunction(ctx, js_print, "print", 1)); - JS_SetPropertyStr(ctx, global_obj, "__loadScript", - JS_NewCFunction(ctx, js_loadScript, "__loadScript", 1)); - - JS_FreeValue(ctx, global_obj); -} - -void js_std_init_handlers(JSRuntime *rt) -{ - JSThreadState *ts; - - ts = malloc(sizeof(*ts)); - if (!ts) { - fprintf(stderr, "Could not allocate memory for the worker"); - exit(1); - } - memset(ts, 0, sizeof(*ts)); - init_list_head(&ts->os_rw_handlers); - init_list_head(&ts->os_signal_handlers); - init_list_head(&ts->os_timers); - init_list_head(&ts->port_list); - - JS_SetRuntimeOpaque(rt, ts); - -#ifdef USE_WORKER - /* set the SharedArrayBuffer memory handlers */ - { - JSSharedArrayBufferFunctions sf; - memset(&sf, 0, sizeof(sf)); - sf.sab_alloc = js_sab_alloc; - sf.sab_free = js_sab_free; - sf.sab_dup = js_sab_dup; - JS_SetSharedArrayBufferFunctions(rt, &sf); - } -#endif -} - -void js_std_free_handlers(JSRuntime *rt) -{ - JSThreadState *ts = JS_GetRuntimeOpaque(rt); - struct list_head *el, *el1; - - list_for_each_safe(el, el1, &ts->os_rw_handlers) { - JSOSRWHandler *rh = list_entry(el, JSOSRWHandler, link); - free_rw_handler(rt, rh); - } - - list_for_each_safe(el, el1, &ts->os_signal_handlers) { - JSOSSignalHandler *sh = list_entry(el, JSOSSignalHandler, link); - free_sh(rt, sh); - } - - list_for_each_safe(el, el1, &ts->os_timers) { - JSOSTimer *th = list_entry(el, JSOSTimer, link); - unlink_timer(rt, th); - if (!th->has_object) - free_timer(rt, th); - } - -#ifdef USE_WORKER - /* XXX: free port_list ? */ - js_free_message_pipe(ts->recv_pipe); - js_free_message_pipe(ts->send_pipe); -#endif - - free(ts); - JS_SetRuntimeOpaque(rt, NULL); /* fail safe */ -} - -static void js_dump_obj(JSContext *ctx, FILE *f, JSValue val) -{ - const char *str; - - str = JS_ToCString(ctx, val); - if (str) { - fprintf(f, "%s\n", str); - JS_FreeCString(ctx, str); - } else { - fprintf(f, "[exception]\n"); - } -} - -static void js_std_dump_error1(JSContext *ctx, JSValue exception_val) -{ - JSValue val; - BOOL is_error; - - is_error = JS_IsError(ctx, exception_val); - js_dump_obj(ctx, stderr, exception_val); - if (is_error) { - val = JS_GetPropertyStr(ctx, exception_val, "stack"); - if (!JS_IsUndefined(val)) { - js_dump_obj(ctx, stderr, val); - } - JS_FreeValue(ctx, val); - } -} - -void js_std_dump_error(JSContext *ctx) -{ - JSValue exception_val; - - exception_val = JS_GetException(ctx); - js_std_dump_error1(ctx, exception_val); - JS_FreeValue(ctx, exception_val); -} - -void js_std_promise_rejection_tracker(JSContext *ctx, JSValue promise, - JSValue reason, - BOOL is_handled, void *opaque) -{ - if (!is_handled) { - fprintf(stderr, "Possibly unhandled promise rejection: "); - js_std_dump_error1(ctx, reason); - } -} - -/* main loop which calls the user JS callbacks */ -void js_std_loop(JSContext *ctx) -{ - JSContext *ctx1; - int err; - - for(;;) { - /* execute the pending jobs */ - for(;;) { - err = JS_ExecutePendingJob(JS_GetRuntime(ctx), &ctx1); - if (err <= 0) { - if (err < 0) { - js_std_dump_error(ctx1); - } - break; - } - } - - if (!os_poll_func || os_poll_func(ctx)) - break; - } -} - -void js_std_eval_binary(JSContext *ctx, const uint8_t *buf, size_t buf_len, - int load_only) -{ - JSValue obj, val; - obj = JS_ReadObject(ctx, buf, buf_len, JS_READ_OBJ_BYTECODE); - if (JS_IsException(obj)) - goto exception; - if (load_only) { - if (JS_VALUE_GET_TAG(obj) == JS_TAG_MODULE) { - js_module_set_import_meta(ctx, obj, FALSE, FALSE); - } - } else { - if (JS_VALUE_GET_TAG(obj) == JS_TAG_MODULE) { - if (JS_ResolveModule(ctx, obj) < 0) { - JS_FreeValue(ctx, obj); - goto exception; - } - js_module_set_import_meta(ctx, obj, FALSE, TRUE); - } - val = JS_EvalFunction(ctx, obj); - if (JS_IsException(val)) { - exception: - js_std_dump_error(ctx); - exit(1); - } - JS_FreeValue(ctx, val); - } -} diff --git a/vendor/quickjs-ng/quickjs-libc.h b/vendor/quickjs-ng/quickjs-libc.h deleted file mode 100644 index f8e31d4b1..000000000 --- a/vendor/quickjs-ng/quickjs-libc.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * QuickJS C library - * - * Copyright (c) 2017-2018 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef QUICKJS_LIBC_H -#define QUICKJS_LIBC_H - -#include -#include - -#include "quickjs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -JSModuleDef *js_init_module_std(JSContext *ctx, const char *module_name); -JSModuleDef *js_init_module_os(JSContext *ctx, const char *module_name); -void js_std_add_helpers(JSContext *ctx, int argc, char **argv); -void js_std_loop(JSContext *ctx); -void js_std_init_handlers(JSRuntime *rt); -void js_std_free_handlers(JSRuntime *rt); -void js_std_dump_error(JSContext *ctx); -uint8_t *js_load_file(JSContext *ctx, size_t *pbuf_len, const char *filename); -int js_module_set_import_meta(JSContext *ctx, JSValue func_val, - JS_BOOL use_realpath, JS_BOOL is_main); -JSModuleDef *js_module_loader(JSContext *ctx, - const char *module_name, void *opaque); -void js_std_eval_binary(JSContext *ctx, const uint8_t *buf, size_t buf_len, - int flags); -void js_std_promise_rejection_tracker(JSContext *ctx, JSValue promise, - JSValue reason, - JS_BOOL is_handled, void *opaque); -void js_std_set_worker_new_context_func(JSContext *(*func)(JSRuntime *rt)); - -#ifdef __cplusplus -} /* extern "C" { */ -#endif - -#endif /* QUICKJS_LIBC_H */ diff --git a/vendor/quickjs-ng/quickjs-opcode.h b/vendor/quickjs-ng/quickjs-opcode.h deleted file mode 100644 index fb55c55c5..000000000 --- a/vendor/quickjs-ng/quickjs-opcode.h +++ /dev/null @@ -1,367 +0,0 @@ -/* - * QuickJS opcode definitions - * - * Copyright (c) 2017-2018 Fabrice Bellard - * Copyright (c) 2017-2018 Charlie Gordon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifdef FMT -FMT(none) -FMT(none_int) -FMT(none_loc) -FMT(none_arg) -FMT(none_var_ref) -FMT(u8) -FMT(i8) -FMT(loc8) -FMT(const8) -FMT(label8) -FMT(u16) -FMT(i16) -FMT(label16) -FMT(npop) -FMT(npopx) -FMT(npop_u16) -FMT(loc) -FMT(arg) -FMT(var_ref) -FMT(u32) -FMT(u32x2) -FMT(i32) -FMT(const) -FMT(label) -FMT(atom) -FMT(atom_u8) -FMT(atom_u16) -FMT(atom_label_u8) -FMT(atom_label_u16) -FMT(label_u16) -#undef FMT -#endif /* FMT */ - -#ifdef DEF - -#ifndef def -#define def(id, size, n_pop, n_push, f) DEF(id, size, n_pop, n_push, f) -#endif - -DEF(invalid, 1, 0, 0, none) /* never emitted */ - -/* push values */ -DEF( push_i32, 5, 0, 1, i32) -DEF( push_const, 5, 0, 1, const) -DEF( fclosure, 5, 0, 1, const) /* must follow push_const */ -DEF(push_atom_value, 5, 0, 1, atom) -DEF( private_symbol, 5, 0, 1, atom) -DEF( undefined, 1, 0, 1, none) -DEF( null, 1, 0, 1, none) -DEF( push_this, 1, 0, 1, none) /* only used at the start of a function */ -DEF( push_false, 1, 0, 1, none) -DEF( push_true, 1, 0, 1, none) -DEF( object, 1, 0, 1, none) -DEF( special_object, 2, 0, 1, u8) /* only used at the start of a function */ -DEF( rest, 3, 0, 1, u16) /* only used at the start of a function */ - -DEF( drop, 1, 1, 0, none) /* a -> */ -DEF( nip, 1, 2, 1, none) /* a b -> b */ -DEF( nip1, 1, 3, 2, none) /* a b c -> b c */ -DEF( dup, 1, 1, 2, none) /* a -> a a */ -DEF( dup1, 1, 2, 3, none) /* a b -> a a b */ -DEF( dup2, 1, 2, 4, none) /* a b -> a b a b */ -DEF( dup3, 1, 3, 6, none) /* a b c -> a b c a b c */ -DEF( insert2, 1, 2, 3, none) /* obj a -> a obj a (dup_x1) */ -DEF( insert3, 1, 3, 4, none) /* obj prop a -> a obj prop a (dup_x2) */ -DEF( insert4, 1, 4, 5, none) /* this obj prop a -> a this obj prop a */ -DEF( perm3, 1, 3, 3, none) /* obj a b -> a obj b */ -DEF( perm4, 1, 4, 4, none) /* obj prop a b -> a obj prop b */ -DEF( perm5, 1, 5, 5, none) /* this obj prop a b -> a this obj prop b */ -DEF( swap, 1, 2, 2, none) /* a b -> b a */ -DEF( swap2, 1, 4, 4, none) /* a b c d -> c d a b */ -DEF( rot3l, 1, 3, 3, none) /* x a b -> a b x */ -DEF( rot3r, 1, 3, 3, none) /* a b x -> x a b */ -DEF( rot4l, 1, 4, 4, none) /* x a b c -> a b c x */ -DEF( rot5l, 1, 5, 5, none) /* x a b c d -> a b c d x */ - -DEF(call_constructor, 3, 2, 1, npop) /* func new.target args -> ret. arguments are not counted in n_pop */ -DEF( call, 3, 1, 1, npop) /* arguments are not counted in n_pop */ -DEF( tail_call, 3, 1, 0, npop) /* arguments are not counted in n_pop */ -DEF( call_method, 3, 2, 1, npop) /* arguments are not counted in n_pop */ -DEF(tail_call_method, 3, 2, 0, npop) /* arguments are not counted in n_pop */ -DEF( array_from, 3, 0, 1, npop) /* arguments are not counted in n_pop */ -DEF( apply, 3, 3, 1, u16) -DEF( return, 1, 1, 0, none) -DEF( return_undef, 1, 0, 0, none) -DEF(check_ctor_return, 1, 1, 2, none) -DEF( check_ctor, 1, 0, 0, none) -DEF( check_brand, 1, 2, 2, none) /* this_obj func -> this_obj func */ -DEF( add_brand, 1, 2, 0, none) /* this_obj home_obj -> */ -DEF( return_async, 1, 1, 0, none) -DEF( throw, 1, 1, 0, none) -DEF( throw_error, 6, 0, 0, atom_u8) -DEF( eval, 5, 1, 1, npop_u16) /* func args... -> ret_val */ -DEF( apply_eval, 3, 2, 1, u16) /* func array -> ret_eval */ -DEF( regexp, 1, 2, 1, none) /* create a RegExp object from the pattern and a - bytecode string */ -DEF( get_super, 1, 1, 1, none) -DEF( import, 1, 1, 1, none) /* dynamic module import */ - -DEF( check_var, 5, 0, 1, atom) /* check if a variable exists */ -DEF( get_var_undef, 5, 0, 1, atom) /* push undefined if the variable does not exist */ -DEF( get_var, 5, 0, 1, atom) /* throw an exception if the variable does not exist */ -DEF( put_var, 5, 1, 0, atom) /* must come after get_var */ -DEF( put_var_init, 5, 1, 0, atom) /* must come after put_var. Used to initialize a global lexical variable */ -DEF( put_var_strict, 5, 2, 0, atom) /* for strict mode variable write */ - -DEF( get_ref_value, 1, 2, 3, none) -DEF( put_ref_value, 1, 3, 0, none) - -DEF( define_var, 6, 0, 0, atom_u8) -DEF(check_define_var, 6, 0, 0, atom_u8) -DEF( define_func, 6, 1, 0, atom_u8) -DEF( get_field, 5, 1, 1, atom) -DEF( get_field2, 5, 1, 2, atom) -DEF( put_field, 5, 2, 0, atom) -DEF( get_private_field, 1, 2, 1, none) /* obj prop -> value */ -DEF( put_private_field, 1, 3, 0, none) /* obj value prop -> */ -DEF(define_private_field, 1, 3, 1, none) /* obj prop value -> obj */ -DEF( get_array_el, 1, 2, 1, none) -DEF( get_array_el2, 1, 2, 2, none) /* obj prop -> obj value */ -DEF( put_array_el, 1, 3, 0, none) -DEF(get_super_value, 1, 3, 1, none) /* this obj prop -> value */ -DEF(put_super_value, 1, 4, 0, none) /* this obj prop value -> */ -DEF( define_field, 5, 2, 1, atom) -DEF( set_name, 5, 1, 1, atom) -DEF(set_name_computed, 1, 2, 2, none) -DEF( set_proto, 1, 2, 1, none) -DEF(set_home_object, 1, 2, 2, none) -DEF(define_array_el, 1, 3, 2, none) -DEF( append, 1, 3, 2, none) /* append enumerated object, update length */ -DEF(copy_data_properties, 2, 3, 3, u8) -DEF( define_method, 6, 2, 1, atom_u8) -DEF(define_method_computed, 2, 3, 1, u8) /* must come after define_method */ -DEF( define_class, 6, 2, 2, atom_u8) /* parent ctor -> ctor proto */ -DEF( define_class_computed, 6, 3, 3, atom_u8) /* field_name parent ctor -> field_name ctor proto (class with computed name) */ - -DEF( get_loc, 3, 0, 1, loc) -DEF( put_loc, 3, 1, 0, loc) /* must come after get_loc */ -DEF( set_loc, 3, 1, 1, loc) /* must come after put_loc */ -DEF( get_arg, 3, 0, 1, arg) -DEF( put_arg, 3, 1, 0, arg) /* must come after get_arg */ -DEF( set_arg, 3, 1, 1, arg) /* must come after put_arg */ -DEF( get_var_ref, 3, 0, 1, var_ref) -DEF( put_var_ref, 3, 1, 0, var_ref) /* must come after get_var_ref */ -DEF( set_var_ref, 3, 1, 1, var_ref) /* must come after put_var_ref */ -DEF(set_loc_uninitialized, 3, 0, 0, loc) -DEF( get_loc_check, 3, 0, 1, loc) -DEF( put_loc_check, 3, 1, 0, loc) /* must come after get_loc_check */ -DEF( put_loc_check_init, 3, 1, 0, loc) -DEF(get_var_ref_check, 3, 0, 1, var_ref) -DEF(put_var_ref_check, 3, 1, 0, var_ref) /* must come after get_var_ref_check */ -DEF(put_var_ref_check_init, 3, 1, 0, var_ref) -DEF( close_loc, 3, 0, 0, loc) -DEF( if_false, 5, 1, 0, label) -DEF( if_true, 5, 1, 0, label) /* must come after if_false */ -DEF( goto, 5, 0, 0, label) /* must come after if_true */ -DEF( catch, 5, 0, 1, label) -DEF( gosub, 5, 0, 0, label) /* used to execute the finally block */ -DEF( ret, 1, 1, 0, none) /* used to return from the finally block */ -DEF( nip_catch, 1, 2, 1, none) /* catch ... a -> a */ - -DEF( to_object, 1, 1, 1, none) -//DEF( to_string, 1, 1, 1, none) -DEF( to_propkey, 1, 1, 1, none) -DEF( to_propkey2, 1, 2, 2, none) - -DEF( with_get_var, 10, 1, 0, atom_label_u8) /* must be in the same order as scope_xxx */ -DEF( with_put_var, 10, 2, 1, atom_label_u8) /* must be in the same order as scope_xxx */ -DEF(with_delete_var, 10, 1, 0, atom_label_u8) /* must be in the same order as scope_xxx */ -DEF( with_make_ref, 10, 1, 0, atom_label_u8) /* must be in the same order as scope_xxx */ -DEF( with_get_ref, 10, 1, 0, atom_label_u8) /* must be in the same order as scope_xxx */ -DEF(with_get_ref_undef, 10, 1, 0, atom_label_u8) - -DEF( make_loc_ref, 7, 0, 2, atom_u16) -DEF( make_arg_ref, 7, 0, 2, atom_u16) -DEF(make_var_ref_ref, 7, 0, 2, atom_u16) -DEF( make_var_ref, 5, 0, 2, atom) - -DEF( for_in_start, 1, 1, 1, none) -DEF( for_of_start, 1, 1, 3, none) -DEF(for_await_of_start, 1, 1, 3, none) -DEF( for_in_next, 1, 1, 3, none) -DEF( for_of_next, 2, 3, 5, u8) -DEF(iterator_check_object, 1, 1, 1, none) -DEF(iterator_get_value_done, 1, 1, 2, none) -DEF( iterator_close, 1, 3, 0, none) -DEF( iterator_next, 1, 4, 4, none) -DEF( iterator_call, 2, 4, 5, u8) -DEF( initial_yield, 1, 0, 0, none) -DEF( yield, 1, 1, 2, none) -DEF( yield_star, 1, 1, 2, none) -DEF(async_yield_star, 1, 1, 2, none) -DEF( await, 1, 1, 1, none) - -/* arithmetic/logic operations */ -DEF( neg, 1, 1, 1, none) -DEF( plus, 1, 1, 1, none) -DEF( dec, 1, 1, 1, none) -DEF( inc, 1, 1, 1, none) -DEF( post_dec, 1, 1, 2, none) -DEF( post_inc, 1, 1, 2, none) -DEF( dec_loc, 2, 0, 0, loc8) -DEF( inc_loc, 2, 0, 0, loc8) -DEF( add_loc, 2, 1, 0, loc8) -DEF( not, 1, 1, 1, none) -DEF( lnot, 1, 1, 1, none) -DEF( typeof, 1, 1, 1, none) -DEF( delete, 1, 2, 1, none) -DEF( delete_var, 5, 0, 1, atom) - -/* warning: order matters (see js_parse_assign_expr) */ -DEF( mul, 1, 2, 1, none) -DEF( div, 1, 2, 1, none) -DEF( mod, 1, 2, 1, none) -DEF( add, 1, 2, 1, none) -DEF( sub, 1, 2, 1, none) -DEF( shl, 1, 2, 1, none) -DEF( sar, 1, 2, 1, none) -DEF( shr, 1, 2, 1, none) -DEF( and, 1, 2, 1, none) -DEF( xor, 1, 2, 1, none) -DEF( or, 1, 2, 1, none) -DEF( pow, 1, 2, 1, none) - -DEF( lt, 1, 2, 1, none) -DEF( lte, 1, 2, 1, none) -DEF( gt, 1, 2, 1, none) -DEF( gte, 1, 2, 1, none) -DEF( instanceof, 1, 2, 1, none) -DEF( in, 1, 2, 1, none) -DEF( eq, 1, 2, 1, none) -DEF( neq, 1, 2, 1, none) -DEF( strict_eq, 1, 2, 1, none) -DEF( strict_neq, 1, 2, 1, none) -DEF(is_undefined_or_null, 1, 1, 1, none) -/* must be the last non short and non temporary opcode */ -DEF( nop, 1, 0, 0, none) - -/* temporary opcodes: never emitted in the final bytecode */ - -def( enter_scope, 3, 0, 0, u16) /* emitted in phase 1, removed in phase 2 */ -def( leave_scope, 3, 0, 0, u16) /* emitted in phase 1, removed in phase 2 */ - -def( label, 5, 0, 0, label) /* emitted in phase 1, removed in phase 3 */ - -def(scope_get_var_undef, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2 */ -def( scope_get_var, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2 */ -def( scope_put_var, 7, 1, 0, atom_u16) /* emitted in phase 1, removed in phase 2 */ -def(scope_delete_var, 7, 0, 1, atom_u16) /* emitted in phase 1, removed in phase 2 */ -def( scope_make_ref, 11, 0, 2, atom_label_u16) /* emitted in phase 1, removed in phase 2 */ -def( scope_get_ref, 7, 0, 2, atom_u16) /* emitted in phase 1, removed in phase 2 */ -def(scope_put_var_init, 7, 0, 2, atom_u16) /* emitted in phase 1, removed in phase 2 */ -def(scope_get_private_field, 7, 1, 1, atom_u16) /* obj -> value, emitted in phase 1, removed in phase 2 */ -def(scope_get_private_field2, 7, 1, 2, atom_u16) /* obj -> obj value, emitted in phase 1, removed in phase 2 */ -def(scope_put_private_field, 7, 2, 0, atom_u16) /* obj value ->, emitted in phase 1, removed in phase 2 */ - -def( set_class_name, 5, 1, 1, u32) /* emitted in phase 1, removed in phase 2 */ - -def( source_loc, 9, 0, 0, u32x2) /* emitted in phase 1, removed in phase 3 */ - -DEF( push_minus1, 1, 0, 1, none_int) -DEF( push_0, 1, 0, 1, none_int) -DEF( push_1, 1, 0, 1, none_int) -DEF( push_2, 1, 0, 1, none_int) -DEF( push_3, 1, 0, 1, none_int) -DEF( push_4, 1, 0, 1, none_int) -DEF( push_5, 1, 0, 1, none_int) -DEF( push_6, 1, 0, 1, none_int) -DEF( push_7, 1, 0, 1, none_int) -DEF( push_i8, 2, 0, 1, i8) -DEF( push_i16, 3, 0, 1, i16) -DEF( push_const8, 2, 0, 1, const8) -DEF( fclosure8, 2, 0, 1, const8) /* must follow push_const8 */ -DEF(push_empty_string, 1, 0, 1, none) - -DEF( get_loc8, 2, 0, 1, loc8) -DEF( put_loc8, 2, 1, 0, loc8) -DEF( set_loc8, 2, 1, 1, loc8) - -DEF( get_loc0_loc1, 1, 0, 2, none_loc) -DEF( get_loc0, 1, 0, 1, none_loc) -DEF( get_loc1, 1, 0, 1, none_loc) -DEF( get_loc2, 1, 0, 1, none_loc) -DEF( get_loc3, 1, 0, 1, none_loc) -DEF( put_loc0, 1, 1, 0, none_loc) -DEF( put_loc1, 1, 1, 0, none_loc) -DEF( put_loc2, 1, 1, 0, none_loc) -DEF( put_loc3, 1, 1, 0, none_loc) -DEF( set_loc0, 1, 1, 1, none_loc) -DEF( set_loc1, 1, 1, 1, none_loc) -DEF( set_loc2, 1, 1, 1, none_loc) -DEF( set_loc3, 1, 1, 1, none_loc) -DEF( get_arg0, 1, 0, 1, none_arg) -DEF( get_arg1, 1, 0, 1, none_arg) -DEF( get_arg2, 1, 0, 1, none_arg) -DEF( get_arg3, 1, 0, 1, none_arg) -DEF( put_arg0, 1, 1, 0, none_arg) -DEF( put_arg1, 1, 1, 0, none_arg) -DEF( put_arg2, 1, 1, 0, none_arg) -DEF( put_arg3, 1, 1, 0, none_arg) -DEF( set_arg0, 1, 1, 1, none_arg) -DEF( set_arg1, 1, 1, 1, none_arg) -DEF( set_arg2, 1, 1, 1, none_arg) -DEF( set_arg3, 1, 1, 1, none_arg) -DEF( get_var_ref0, 1, 0, 1, none_var_ref) -DEF( get_var_ref1, 1, 0, 1, none_var_ref) -DEF( get_var_ref2, 1, 0, 1, none_var_ref) -DEF( get_var_ref3, 1, 0, 1, none_var_ref) -DEF( put_var_ref0, 1, 1, 0, none_var_ref) -DEF( put_var_ref1, 1, 1, 0, none_var_ref) -DEF( put_var_ref2, 1, 1, 0, none_var_ref) -DEF( put_var_ref3, 1, 1, 0, none_var_ref) -DEF( set_var_ref0, 1, 1, 1, none_var_ref) -DEF( set_var_ref1, 1, 1, 1, none_var_ref) -DEF( set_var_ref2, 1, 1, 1, none_var_ref) -DEF( set_var_ref3, 1, 1, 1, none_var_ref) - -DEF( get_length, 1, 1, 1, none) - -DEF( if_false8, 2, 1, 0, label8) -DEF( if_true8, 2, 1, 0, label8) /* must come after if_false8 */ -DEF( goto8, 2, 0, 0, label8) /* must come after if_true8 */ -DEF( goto16, 3, 0, 0, label16) - -DEF( call0, 1, 1, 1, npopx) -DEF( call1, 1, 1, 1, npopx) -DEF( call2, 1, 1, 1, npopx) -DEF( call3, 1, 1, 1, npopx) - -DEF( is_undefined, 1, 1, 1, none) -DEF( is_null, 1, 1, 1, none) -DEF(typeof_is_undefined, 1, 1, 1, none) -DEF( typeof_is_function, 1, 1, 1, none) - -DEF( get_field_ic, 5, 1, 1, none) -DEF( get_field2_ic, 5, 1, 2, none) -DEF( put_field_ic, 5, 2, 0, none) - -#undef DEF -#undef def -#endif /* DEF */ diff --git a/vendor/quickjs-ng/quickjs.c b/vendor/quickjs-ng/quickjs.c deleted file mode 100644 index c46f480f4..000000000 --- a/vendor/quickjs-ng/quickjs.c +++ /dev/null @@ -1,51907 +0,0 @@ -/* - * QuickJS Javascript Engine - * - * Copyright (c) 2017-2021 Fabrice Bellard - * Copyright (c) 2017-2021 Charlie Gordon - * Copyright (c) 2023 Ben Noordhuis - * Copyright (c) 2023 Saúl Ibarra Corretgé - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#if !defined(_MSC_VER) -#include -#endif -#include -#include -#include - -#include "cutils.h" -#include "list.h" -#include "quickjs.h" -#include "libregexp.h" -#include "libbf.h" - -#if defined(EMSCRIPTEN) || defined(_MSC_VER) -#define DIRECT_DISPATCH 0 -#else -#define DIRECT_DISPATCH 1 -#endif - -#if defined(__APPLE__) -#define MALLOC_OVERHEAD 0 -#else -#define MALLOC_OVERHEAD 8 -#endif - -#if !defined(_WIN32) -/* define it if printf uses the RNDN rounding mode instead of RNDNA */ -#define CONFIG_PRINTF_RNDN -#endif - -#if defined(__NEWLIB__) -#define NO_TM_GMTOFF -#endif - -/* dump object free */ -//#define DUMP_FREE -//#define DUMP_CLOSURE -/* dump the bytecode of the compiled functions: combination of bits - 1: dump pass 3 final byte code - 2: dump pass 2 code - 4: dump pass 1 code - 8: dump stdlib functions - 16: dump bytecode in hex - 32: dump line number table - 64: dump compute_stack_size - 128: dump executed bytecode - */ -//#define DUMP_BYTECODE (1) -/* dump the occurence of the automatic GC */ -//#define DUMP_GC -/* dump objects freed by the garbage collector */ -//#define DUMP_GC_FREE -/* dump objects leaking when freeing the runtime */ -//#define DUMP_LEAKS 1 -/* dump memory usage before running the garbage collector */ -//#define DUMP_MEM -//#define DUMP_OBJECTS /* dump objects in JS_FreeContext */ -//#define DUMP_ATOMS /* dump atoms in JS_FreeContext */ -//#define DUMP_SHAPES /* dump shapes in JS_FreeContext */ -//#define DUMP_MODULE_RESOLVE -//#define DUMP_PROMISE -//#define DUMP_READ_OBJECT - -/* test the GC by forcing it before each object allocation */ -//#define FORCE_GC_AT_MALLOC - -#ifdef CONFIG_ATOMICS -#include -#include "quickjs-c-atomics.h" -#include -#endif - -#define STRINGIFY_(x) #x -#define STRINGIFY(x) STRINGIFY_(x) - -#define QJS_VERSION_STRING \ - STRINGIFY(QJS_VERSION_MAJOR) "." STRINGIFY(QJS_VERSION_MINOR) "." STRINGIFY(QJS_VERSION_PATCH) QJS_VERSION_SUFFIX - -const char* JS_GetVersion(void) { - return QJS_VERSION_STRING; -} - -#undef STRINFIGY_ -#undef STRINGIFY - -enum { - /* classid tag */ /* union usage | properties */ - JS_CLASS_OBJECT = 1, /* must be first */ - JS_CLASS_ARRAY, /* u.array | length */ - JS_CLASS_ERROR, - JS_CLASS_NUMBER, /* u.object_data */ - JS_CLASS_STRING, /* u.object_data */ - JS_CLASS_BOOLEAN, /* u.object_data */ - JS_CLASS_SYMBOL, /* u.object_data */ - JS_CLASS_ARGUMENTS, /* u.array | length */ - JS_CLASS_MAPPED_ARGUMENTS, /* | length */ - JS_CLASS_DATE, /* u.object_data */ - JS_CLASS_MODULE_NS, - JS_CLASS_C_FUNCTION, /* u.cfunc */ - JS_CLASS_BYTECODE_FUNCTION, /* u.func */ - JS_CLASS_BOUND_FUNCTION, /* u.bound_function */ - JS_CLASS_C_FUNCTION_DATA, /* u.c_function_data_record */ - JS_CLASS_GENERATOR_FUNCTION, /* u.func */ - JS_CLASS_FOR_IN_ITERATOR, /* u.for_in_iterator */ - JS_CLASS_REGEXP, /* u.regexp */ - JS_CLASS_ARRAY_BUFFER, /* u.array_buffer */ - JS_CLASS_SHARED_ARRAY_BUFFER, /* u.array_buffer */ - JS_CLASS_UINT8C_ARRAY, /* u.array (typed_array) */ - JS_CLASS_INT8_ARRAY, /* u.array (typed_array) */ - JS_CLASS_UINT8_ARRAY, /* u.array (typed_array) */ - JS_CLASS_INT16_ARRAY, /* u.array (typed_array) */ - JS_CLASS_UINT16_ARRAY, /* u.array (typed_array) */ - JS_CLASS_INT32_ARRAY, /* u.array (typed_array) */ - JS_CLASS_UINT32_ARRAY, /* u.array (typed_array) */ - JS_CLASS_BIG_INT64_ARRAY, /* u.array (typed_array) */ - JS_CLASS_BIG_UINT64_ARRAY, /* u.array (typed_array) */ - JS_CLASS_FLOAT32_ARRAY, /* u.array (typed_array) */ - JS_CLASS_FLOAT64_ARRAY, /* u.array (typed_array) */ - JS_CLASS_DATAVIEW, /* u.typed_array */ - JS_CLASS_BIG_INT, /* u.object_data */ - JS_CLASS_MAP, /* u.map_state */ - JS_CLASS_SET, /* u.map_state */ - JS_CLASS_WEAKMAP, /* u.map_state */ - JS_CLASS_WEAKSET, /* u.map_state */ - JS_CLASS_MAP_ITERATOR, /* u.map_iterator_data */ - JS_CLASS_SET_ITERATOR, /* u.map_iterator_data */ - JS_CLASS_ARRAY_ITERATOR, /* u.array_iterator_data */ - JS_CLASS_STRING_ITERATOR, /* u.array_iterator_data */ - JS_CLASS_REGEXP_STRING_ITERATOR, /* u.regexp_string_iterator_data */ - JS_CLASS_GENERATOR, /* u.generator_data */ - JS_CLASS_PROXY, /* u.proxy_data */ - JS_CLASS_PROMISE, /* u.promise_data */ - JS_CLASS_PROMISE_RESOLVE_FUNCTION, /* u.promise_function_data */ - JS_CLASS_PROMISE_REJECT_FUNCTION, /* u.promise_function_data */ - JS_CLASS_ASYNC_FUNCTION, /* u.func */ - JS_CLASS_ASYNC_FUNCTION_RESOLVE, /* u.async_function_data */ - JS_CLASS_ASYNC_FUNCTION_REJECT, /* u.async_function_data */ - JS_CLASS_ASYNC_FROM_SYNC_ITERATOR, /* u.async_from_sync_iterator_data */ - JS_CLASS_ASYNC_GENERATOR_FUNCTION, /* u.func */ - JS_CLASS_ASYNC_GENERATOR, /* u.async_generator_data */ - JS_CLASS_WEAK_REF, - JS_CLASS_FINALIZATION_REGISTRY, - JS_CLASS_CALL_SITE, - - JS_CLASS_INIT_COUNT, /* last entry for predefined classes */ -}; - -/* number of typed array types */ -#define JS_TYPED_ARRAY_COUNT (JS_CLASS_FLOAT64_ARRAY - JS_CLASS_UINT8C_ARRAY + 1) -static uint8_t const typed_array_size_log2[JS_TYPED_ARRAY_COUNT]; -#define typed_array_size_log2(classid) (typed_array_size_log2[(classid)- JS_CLASS_UINT8C_ARRAY]) - -typedef enum JSErrorEnum { - JS_EVAL_ERROR, - JS_RANGE_ERROR, - JS_REFERENCE_ERROR, - JS_SYNTAX_ERROR, - JS_TYPE_ERROR, - JS_URI_ERROR, - JS_INTERNAL_ERROR, - JS_AGGREGATE_ERROR, - - JS_NATIVE_ERROR_COUNT, /* number of different NativeError objects */ -} JSErrorEnum; - -#define JS_MAX_LOCAL_VARS 65535 -#define JS_STACK_SIZE_MAX 65534 -#define JS_STRING_LEN_MAX ((1 << 30) - 1) - -#define __exception __attribute__((warn_unused_result)) - -typedef struct JSShape JSShape; -typedef struct JSString JSString; -typedef struct JSString JSAtomStruct; - -typedef enum { - JS_GC_PHASE_NONE, - JS_GC_PHASE_DECREF, - JS_GC_PHASE_REMOVE_CYCLES, -} JSGCPhaseEnum; - -typedef enum OPCodeEnum OPCodeEnum; - -struct JSRuntime { - JSMallocFunctions mf; - JSMallocState malloc_state; - const char *rt_info; - - int atom_hash_size; /* power of two */ - int atom_count; - int atom_size; - int atom_count_resize; /* resize hash table at this count */ - uint32_t *atom_hash; - JSAtomStruct **atom_array; - int atom_free_index; /* 0 = none */ - - JSClassID js_class_id_alloc; /* counter for user defined classes */ - int class_count; /* size of class_array */ - JSClass *class_array; - - struct list_head context_list; /* list of JSContext.link */ - /* list of JSGCObjectHeader.link. List of allocated GC objects (used - by the garbage collector) */ - struct list_head gc_obj_list; - /* list of JSGCObjectHeader.link. Used during JS_FreeValueRT() */ - struct list_head gc_zero_ref_count_list; - struct list_head tmp_obj_list; /* used during GC */ - JSGCPhaseEnum gc_phase : 8; - size_t malloc_gc_threshold; -#ifdef DUMP_LEAKS - struct list_head string_list; /* list of JSString.link */ -#endif - /* stack limitation */ - uintptr_t stack_size; /* in bytes, 0 if no limit */ - uintptr_t stack_top; - uintptr_t stack_limit; /* lower stack limit */ - - JSValue current_exception; - /* true if inside an out of memory error, to avoid recursing */ - BOOL in_out_of_memory : 8; - /* and likewise if inside Error.prepareStackTrace() */ - BOOL in_prepare_stack_trace : 8; - - struct JSStackFrame *current_stack_frame; - - JSInterruptHandler *interrupt_handler; - void *interrupt_opaque; - - JSHostPromiseRejectionTracker *host_promise_rejection_tracker; - void *host_promise_rejection_tracker_opaque; - - struct list_head job_list; /* list of JSJobEntry.link */ - - JSModuleNormalizeFunc *module_normalize_func; - JSModuleLoaderFunc *module_loader_func; - void *module_loader_opaque; - - BOOL can_block : 8; /* TRUE if Atomics.wait can block */ - /* used to allocate, free and clone SharedArrayBuffers */ - JSSharedArrayBufferFunctions sab_funcs; - - /* Shape hash table */ - int shape_hash_bits; - int shape_hash_size; - int shape_hash_count; /* number of hashed shapes */ - JSShape **shape_hash; - bf_context_t bf_ctx; - void *user_opaque; -}; - -struct JSClass { - uint32_t class_id; /* 0 means free entry */ - JSAtom class_name; - JSClassFinalizer *finalizer; - JSClassGCMark *gc_mark; - JSClassCall *call; - /* pointers for exotic behavior, can be NULL if none are present */ - const JSClassExoticMethods *exotic; -}; - -#define JS_MODE_STRICT (1 << 0) - -typedef struct JSStackFrame { - struct JSStackFrame *prev_frame; /* NULL if first stack frame */ - JSValue cur_func; /* current function, JS_UNDEFINED if the frame is detached */ - JSValue *arg_buf; /* arguments */ - JSValue *var_buf; /* variables */ - struct list_head var_ref_list; /* list of JSVarRef.link */ - uint8_t *cur_pc; /* only used in bytecode functions : PC of the - instruction after the call */ - int arg_count; - int js_mode; - /* only used in generators. Current stack pointer value. NULL if - the function is running. */ - JSValue *cur_sp; -} JSStackFrame; - -typedef enum { - JS_GC_OBJ_TYPE_JS_OBJECT, - JS_GC_OBJ_TYPE_FUNCTION_BYTECODE, - JS_GC_OBJ_TYPE_SHAPE, - JS_GC_OBJ_TYPE_VAR_REF, - JS_GC_OBJ_TYPE_ASYNC_FUNCTION, - JS_GC_OBJ_TYPE_JS_CONTEXT, -} JSGCObjectTypeEnum; - -/* header for GC objects. GC objects are C data structures with a - reference count that can reference other GC objects. JS Objects are - a particular type of GC object. */ -struct JSGCObjectHeader { - int ref_count; /* must come first, 32-bit */ - JSGCObjectTypeEnum gc_obj_type : 4; - uint8_t mark : 4; /* used by the GC */ - uint8_t dummy1; /* not used by the GC */ - uint16_t dummy2; /* not used by the GC */ - struct list_head link; -}; - -typedef struct JSVarRef { - union { - JSGCObjectHeader header; /* must come first */ - struct { - int __gc_ref_count; /* corresponds to header.ref_count */ - uint8_t __gc_mark; /* corresponds to header.mark/gc_obj_type */ - - /* 0 : the JSVarRef is on the stack. header.link is an element - of JSStackFrame.var_ref_list. - 1 : the JSVarRef is detached. header.link has the normal meanning - */ - uint8_t is_detached : 1; - uint8_t is_arg : 1; - uint16_t var_idx; /* index of the corresponding function variable on - the stack */ - }; - }; - JSValue *pvalue; /* pointer to the value, either on the stack or - to 'value' */ - JSValue value; /* used when the variable is no longer on the stack */ -} JSVarRef; - -/* the same structure is used for big integers. - Big integers are never infinite or NaNs */ -typedef struct JSBigInt { - JSRefCountHeader header; /* must come first, 32-bit */ - bf_t num; -} JSBigInt; - -typedef enum { - JS_AUTOINIT_ID_PROTOTYPE, - JS_AUTOINIT_ID_MODULE_NS, - JS_AUTOINIT_ID_PROP, -} JSAutoInitIDEnum; - -/* must be large enough to have a negligible runtime cost and small - enough to call the interrupt callback often. */ -#define JS_INTERRUPT_COUNTER_INIT 10000 - -struct JSContext { - JSGCObjectHeader header; /* must come first */ - JSRuntime *rt; - struct list_head link; - - uint16_t binary_object_count; - int binary_object_size; - - JSShape *array_shape; /* initial shape for Array objects */ - - JSValue *class_proto; - JSValue function_proto; - JSValue function_ctor; - JSValue array_ctor; - JSValue regexp_ctor; - JSValue promise_ctor; - JSValue native_error_proto[JS_NATIVE_ERROR_COUNT]; - JSValue error_ctor; - JSValue error_prepare_stack; - int error_stack_trace_limit; - JSValue iterator_proto; - JSValue async_iterator_proto; - JSValue array_proto_values; - JSValue throw_type_error; - JSValue eval_obj; - - JSValue global_obj; /* global object */ - JSValue global_var_obj; /* contains the global let/const definitions */ - - uint64_t time_origin; - - uint64_t random_state; - bf_context_t *bf_ctx; /* points to rt->bf_ctx, shared by all contexts */ - /* when the counter reaches zero, JSRutime.interrupt_handler is called */ - int interrupt_counter; - - struct list_head loaded_modules; /* list of JSModuleDef.link */ - - /* if NULL, RegExp compilation is not supported */ - JSValue (*compile_regexp)(JSContext *ctx, JSValue pattern, - JSValue flags); - /* if NULL, eval is not supported */ - JSValue (*eval_internal)(JSContext *ctx, JSValue this_obj, - const char *input, size_t input_len, - const char *filename, int flags, int scope_idx); - void *user_opaque; -}; - -typedef union JSFloat64Union { - double d; - uint64_t u64; - uint32_t u32[2]; -} JSFloat64Union; - -typedef enum { - JS_WEAK_REF_KIND_MAP, - JS_WEAK_REF_KIND_WEAK_REF, - JS_WEAK_REF_KIND_FINALIZATION_REGISTRY_ENTRY, -} JSWeakRefKindEnum; - -typedef struct JSWeakRefRecord { - JSWeakRefKindEnum kind; - struct JSWeakRefRecord *next_weak_ref; - union { - struct JSMapRecord *map_record; - struct JSWeakRefData *weak_ref_data; - struct JSFinRecEntry *fin_rec_entry; - } u; -} JSWeakRefRecord; - -enum { - JS_ATOM_TYPE_STRING = 1, - JS_ATOM_TYPE_GLOBAL_SYMBOL, - JS_ATOM_TYPE_SYMBOL, - JS_ATOM_TYPE_PRIVATE, -}; - -enum { - JS_ATOM_HASH_SYMBOL, - JS_ATOM_HASH_PRIVATE, -}; - -typedef enum { - JS_ATOM_KIND_STRING, - JS_ATOM_KIND_SYMBOL, - JS_ATOM_KIND_PRIVATE, -} JSAtomKindEnum; - -#define JS_ATOM_HASH_MASK ((1 << 30) - 1) - -struct JSString { - JSRefCountHeader header; /* must come first, 32-bit */ - uint32_t len : 31; - uint8_t is_wide_char : 1; /* 0 = 8 bits, 1 = 16 bits characters */ - /* for JS_ATOM_TYPE_SYMBOL: hash = 0, atom_type = 3, - for JS_ATOM_TYPE_PRIVATE: hash = 1, atom_type = 3 - XXX: could change encoding to have one more bit in hash */ - uint32_t hash : 30; - uint8_t atom_type : 2; /* != 0 if atom, JS_ATOM_TYPE_x */ - uint32_t hash_next; /* atom_index for JS_ATOM_TYPE_SYMBOL */ - JSWeakRefRecord *first_weak_ref; -#ifdef DUMP_LEAKS - struct list_head link; /* string list */ -#endif - union { - uint8_t str8[0]; /* 8 bit strings will get an extra null terminator */ - uint16_t str16[0]; - } u; -}; - -typedef struct JSClosureVar { - uint8_t is_local : 1; - uint8_t is_arg : 1; - uint8_t is_const : 1; - uint8_t is_lexical : 1; - uint8_t var_kind : 4; /* see JSVarKindEnum */ - /* 8 bits available */ - uint16_t var_idx; /* is_local = TRUE: index to a normal variable of the - parent function. otherwise: index to a closure - variable of the parent function */ - JSAtom var_name; -} JSClosureVar; - -#define ARG_SCOPE_INDEX 1 -#define ARG_SCOPE_END (-2) - -typedef struct JSVarScope { - int parent; /* index into fd->scopes of the enclosing scope */ - int first; /* index into fd->vars of the last variable in this scope */ -} JSVarScope; - -typedef enum { - /* XXX: add more variable kinds here instead of using bit fields */ - JS_VAR_NORMAL, - JS_VAR_FUNCTION_DECL, /* lexical var with function declaration */ - JS_VAR_NEW_FUNCTION_DECL, /* lexical var with async/generator - function declaration */ - JS_VAR_CATCH, - JS_VAR_FUNCTION_NAME, /* function expression name */ - JS_VAR_PRIVATE_FIELD, - JS_VAR_PRIVATE_METHOD, - JS_VAR_PRIVATE_GETTER, - JS_VAR_PRIVATE_SETTER, /* must come after JS_VAR_PRIVATE_GETTER */ - JS_VAR_PRIVATE_GETTER_SETTER, /* must come after JS_VAR_PRIVATE_SETTER */ -} JSVarKindEnum; - -/* XXX: could use a different structure in bytecode functions to save - memory */ -typedef struct JSVarDef { - JSAtom var_name; - /* index into fd->scopes of this variable lexical scope */ - int scope_level; - /* during compilation: - - if scope_level = 0: scope in which the variable is defined - - if scope_level != 0: index into fd->vars of the next - variable in the same or enclosing lexical scope - in a bytecode function: - index into fd->vars of the next - variable in the same or enclosing lexical scope - */ - int scope_next; - uint8_t is_const : 1; - uint8_t is_lexical : 1; - uint8_t is_captured : 1; - uint8_t is_static_private : 1; /* only used during private class field parsing */ - uint8_t var_kind : 4; /* see JSVarKindEnum */ - /* only used during compilation: function pool index for lexical - variables with var_kind = - JS_VAR_FUNCTION_DECL/JS_VAR_NEW_FUNCTION_DECL or scope level of - the definition of the 'var' variables (they have scope_level = - 0) */ - int func_pool_idx : 24; /* only used during compilation : index in - the constant pool for hoisted function - definition */ -} JSVarDef; - -/* for the encoding of the pc2line table */ -#define PC2LINE_BASE (-1) -#define PC2LINE_RANGE 5 -#define PC2LINE_OP_FIRST 1 -#define PC2LINE_DIFF_PC_MAX ((255 - PC2LINE_OP_FIRST) / PC2LINE_RANGE) - -typedef enum JSFunctionKindEnum { - JS_FUNC_NORMAL = 0, - JS_FUNC_GENERATOR = (1 << 0), - JS_FUNC_ASYNC = (1 << 1), - JS_FUNC_ASYNC_GENERATOR = (JS_FUNC_GENERATOR | JS_FUNC_ASYNC), -} JSFunctionKindEnum; - -#define IC_CACHE_ITEM_CAPACITY 4 - -typedef struct JSInlineCacheRingSlot { - /* SoA for space optimization: 56 bytes */ - JSShape* shape[IC_CACHE_ITEM_CAPACITY]; - uint32_t prop_offset[IC_CACHE_ITEM_CAPACITY]; - JSAtom atom; - uint8_t index; -} JSInlineCacheRingSlot; - -typedef struct JSInlineCacheHashSlot { - JSAtom atom; - uint32_t index; - struct JSInlineCacheHashSlot *next; -} JSInlineCacheHashSlot; - -typedef struct JSInlineCache { - uint32_t count; - uint32_t capacity; - uint32_t hash_bits; - JSInlineCacheHashSlot **hash; - JSInlineCacheRingSlot *cache; - uint32_t updated_offset; - BOOL updated; -} JSInlineCache; - -static JSInlineCache *init_ic(JSContext *ctx); -static int rebuild_ic(JSContext *ctx, JSInlineCache *ic); -static int resize_ic_hash(JSContext *ctx, JSInlineCache *ic); -static int free_ic(JSRuntime *rt, JSInlineCache *ic); -static uint32_t add_ic_slot(JSContext *ctx, JSInlineCache *ic, JSAtom atom, JSObject *object, - uint32_t prop_offset); -static uint32_t add_ic_slot1(JSContext *ctx, JSInlineCache *ic, JSAtom atom); - -static int32_t get_ic_prop_offset(JSInlineCache *ic, uint32_t cache_offset, - JSShape *shape) -{ - uint32_t i; - JSInlineCacheRingSlot *cr; - JSShape *shape_slot; - assert(cache_offset < ic->capacity); - cr = ic->cache + cache_offset; - i = cr->index; - for (;;) { - shape_slot = *(cr->shape + i); - if (likely(shape_slot == shape)) { - cr->index = i; - return cr->prop_offset[i]; - } - - i = (i + 1) % countof(cr->shape); - if (unlikely(i == cr->index)) { - break; - } - } - - return -1; -} - -static force_inline JSAtom get_ic_atom(JSInlineCache *ic, uint32_t cache_offset) -{ - assert(cache_offset < ic->capacity); - return ic->cache[cache_offset].atom; -} - -typedef struct JSFunctionBytecode { - JSGCObjectHeader header; /* must come first */ - uint8_t js_mode; - uint8_t has_prototype : 1; /* true if a prototype field is necessary */ - uint8_t has_simple_parameter_list : 1; - uint8_t is_derived_class_constructor : 1; - /* true if home_object needs to be initialized */ - uint8_t need_home_object : 1; - uint8_t func_kind : 2; - uint8_t new_target_allowed : 1; - uint8_t super_call_allowed : 1; - uint8_t super_allowed : 1; - uint8_t arguments_allowed : 1; - uint8_t backtrace_barrier : 1; /* stop backtrace on this function */ - /* XXX: 5 bits available */ - uint8_t *byte_code_buf; /* (self pointer) */ - int byte_code_len; - JSAtom func_name; - JSVarDef *vardefs; /* arguments + local variables (arg_count + var_count) (self pointer) */ - JSClosureVar *closure_var; /* list of variables in the closure (self pointer) */ - uint16_t arg_count; - uint16_t var_count; - uint16_t defined_arg_count; /* for length function property */ - uint16_t stack_size; /* maximum stack size */ - JSContext *realm; /* function realm */ - JSValue *cpool; /* constant pool (self pointer) */ - int cpool_count; - int closure_var_count; - JSInlineCache *ic; - JSAtom filename; - int line_num; - int col_num; - int source_len; - int pc2line_len; - uint8_t *pc2line_buf; - char *source; -} JSFunctionBytecode; - -typedef struct JSBoundFunction { - JSValue func_obj; - JSValue this_val; - int argc; - JSValue argv[0]; -} JSBoundFunction; - -typedef enum JSIteratorKindEnum { - JS_ITERATOR_KIND_KEY, - JS_ITERATOR_KIND_VALUE, - JS_ITERATOR_KIND_KEY_AND_VALUE, -} JSIteratorKindEnum; - -typedef struct JSForInIterator { - JSValue obj; - BOOL is_array; - uint32_t array_length; - uint32_t idx; -} JSForInIterator; - -typedef struct JSRegExp { - JSString *pattern; - JSString *bytecode; /* also contains the flags */ -} JSRegExp; - -typedef struct JSProxyData { - JSValue target; - JSValue handler; - uint8_t is_func; - uint8_t is_revoked; -} JSProxyData; - -typedef struct JSArrayBuffer { - int byte_length; /* 0 if detached */ - uint8_t detached; - uint8_t shared; /* if shared, the array buffer cannot be detached */ - uint8_t *data; /* NULL if detached */ - struct list_head array_list; - void *opaque; - JSFreeArrayBufferDataFunc *free_func; -} JSArrayBuffer; - -typedef struct JSTypedArray { - struct list_head link; /* link to arraybuffer */ - JSObject *obj; /* back pointer to the TypedArray/DataView object */ - JSObject *buffer; /* based array buffer */ - uint32_t offset; /* offset in the array buffer */ - uint32_t length; /* length in the array buffer */ -} JSTypedArray; - -typedef struct JSAsyncFunctionState { - JSValue this_val; /* 'this' generator argument */ - int argc; /* number of function arguments */ - BOOL throw_flag; /* used to throw an exception in JS_CallInternal() */ - JSStackFrame frame; -} JSAsyncFunctionState; - -/* XXX: could use an object instead to avoid the - JS_TAG_ASYNC_FUNCTION tag for the GC */ -typedef struct JSAsyncFunctionData { - JSGCObjectHeader header; /* must come first */ - JSValue resolving_funcs[2]; - BOOL is_active; /* true if the async function state is valid */ - JSAsyncFunctionState func_state; -} JSAsyncFunctionData; - -typedef struct JSReqModuleEntry { - JSAtom module_name; - JSModuleDef *module; /* used using resolution */ -} JSReqModuleEntry; - -typedef enum JSExportTypeEnum { - JS_EXPORT_TYPE_LOCAL, - JS_EXPORT_TYPE_INDIRECT, -} JSExportTypeEnum; - -typedef struct JSExportEntry { - union { - struct { - int var_idx; /* closure variable index */ - JSVarRef *var_ref; /* if != NULL, reference to the variable */ - } local; /* for local export */ - int req_module_idx; /* module for indirect export */ - } u; - JSExportTypeEnum export_type; - JSAtom local_name; /* '*' if export ns from. not used for local - export after compilation */ - JSAtom export_name; /* exported variable name */ -} JSExportEntry; - -typedef struct JSStarExportEntry { - int req_module_idx; /* in req_module_entries */ -} JSStarExportEntry; - -typedef struct JSImportEntry { - int var_idx; /* closure variable index */ - JSAtom import_name; - int req_module_idx; /* in req_module_entries */ -} JSImportEntry; - -struct JSModuleDef { - JSRefCountHeader header; /* must come first, 32-bit */ - JSAtom module_name; - struct list_head link; - - JSReqModuleEntry *req_module_entries; - int req_module_entries_count; - int req_module_entries_size; - - JSExportEntry *export_entries; - int export_entries_count; - int export_entries_size; - - JSStarExportEntry *star_export_entries; - int star_export_entries_count; - int star_export_entries_size; - - JSImportEntry *import_entries; - int import_entries_count; - int import_entries_size; - - JSValue promise; - JSValue module_ns; - JSValue func_obj; /* only used for JS modules */ - JSModuleInitFunc *init_func; /* only used for C modules */ - BOOL resolved : 8; - BOOL func_created : 8; - BOOL instantiated : 8; - BOOL evaluated : 8; - BOOL eval_mark : 8; /* temporary use during js_evaluate_module() */ - /* true if evaluation yielded an exception. It is saved in - eval_exception */ - BOOL eval_has_exception : 8; - JSValue eval_exception; - JSValue meta_obj; /* for import.meta */ -}; - -typedef struct JSJobEntry { - struct list_head link; - JSContext *ctx; - JSJobFunc *job_func; - int argc; - JSValue argv[0]; -} JSJobEntry; - -typedef struct JSProperty { - union { - JSValue value; /* JS_PROP_NORMAL */ - struct { /* JS_PROP_GETSET */ - JSObject *getter; /* NULL if undefined */ - JSObject *setter; /* NULL if undefined */ - } getset; - JSVarRef *var_ref; /* JS_PROP_VARREF */ - struct { /* JS_PROP_AUTOINIT */ - /* in order to use only 2 pointers, we compress the realm - and the init function pointer */ - uintptr_t realm_and_id; /* realm and init_id (JS_AUTOINIT_ID_x) - in the 2 low bits */ - void *opaque; - } init; - } u; -} JSProperty; - -#define JS_PROP_INITIAL_SIZE 2 -#define JS_PROP_INITIAL_HASH_SIZE 4 /* must be a power of two */ -#define JS_ARRAY_INITIAL_SIZE 2 - -typedef struct JSShapeProperty { - uint32_t hash_next : 26; /* 0 if last in list */ - uint32_t flags : 6; /* JS_PROP_XXX */ - JSAtom atom; /* JS_ATOM_NULL = free property entry */ -} JSShapeProperty; - -struct JSShape { - /* hash table of size hash_mask + 1 before the start of the - structure (see prop_hash_end()). */ - JSGCObjectHeader header; - /* true if the shape is inserted in the shape hash table. If not, - JSShape.hash is not valid */ - uint8_t is_hashed; - /* If true, the shape may have small array index properties 'n' with 0 - <= n <= 2^31-1. If false, the shape is guaranteed not to have - small array index properties */ - uint8_t has_small_array_index; - uint32_t hash; /* current hash value */ - uint32_t prop_hash_mask; - int prop_size; /* allocated properties */ - int prop_count; /* include deleted properties */ - int deleted_prop_count; - JSShape *shape_hash_next; /* in JSRuntime.shape_hash[h] list */ - JSObject *proto; - JSShapeProperty prop[0]; /* prop_size elements */ -}; - -typedef struct JSPromiseData { - JSPromiseStateEnum promise_state; - /* 0=fulfill, 1=reject, list of JSPromiseReactionData.link */ - struct list_head promise_reactions[2]; - BOOL is_handled; /* Note: only useful to debug */ - JSValue promise_result; -} JSPromiseData; - -struct JSObject { - union { - JSGCObjectHeader header; - struct { - int __gc_ref_count; /* corresponds to header.ref_count */ - uint8_t __gc_mark; /* corresponds to header.mark/gc_obj_type */ - - uint8_t extensible : 1; - uint8_t free_mark : 1; /* only used when freeing objects with cycles */ - uint8_t is_exotic : 1; /* TRUE if object has exotic property handlers */ - uint8_t fast_array : 1; /* TRUE if u.array is used for get/put (for JS_CLASS_ARRAY, JS_CLASS_ARGUMENTS and typed arrays) */ - uint8_t is_constructor : 1; /* TRUE if object is a constructor function */ - uint8_t is_uncatchable_error : 1; /* if TRUE, error is not catchable */ - uint8_t tmp_mark : 1; /* used in JS_WriteObjectRec() */ - uint8_t is_HTMLDDA : 1; /* specific annex B IsHtmlDDA behavior */ - uint16_t class_id; /* see JS_CLASS_x */ - }; - }; - /* byte offsets: 16/24 */ - JSShape *shape; /* prototype and property names + flag */ - JSProperty *prop; /* array of properties */ - /* byte offsets: 24/40 */ - JSWeakRefRecord *first_weak_ref; - /* byte offsets: 28/48 */ - union { - void *opaque; - struct JSBoundFunction *bound_function; /* JS_CLASS_BOUND_FUNCTION */ - struct JSCFunctionDataRecord *c_function_data_record; /* JS_CLASS_C_FUNCTION_DATA */ - struct JSForInIterator *for_in_iterator; /* JS_CLASS_FOR_IN_ITERATOR */ - struct JSArrayBuffer *array_buffer; /* JS_CLASS_ARRAY_BUFFER, JS_CLASS_SHARED_ARRAY_BUFFER */ - struct JSTypedArray *typed_array; /* JS_CLASS_UINT8C_ARRAY..JS_CLASS_DATAVIEW */ - struct JSMapState *map_state; /* JS_CLASS_MAP..JS_CLASS_WEAKSET */ - struct JSMapIteratorData *map_iterator_data; /* JS_CLASS_MAP_ITERATOR, JS_CLASS_SET_ITERATOR */ - struct JSArrayIteratorData *array_iterator_data; /* JS_CLASS_ARRAY_ITERATOR, JS_CLASS_STRING_ITERATOR */ - struct JSRegExpStringIteratorData *regexp_string_iterator_data; /* JS_CLASS_REGEXP_STRING_ITERATOR */ - struct JSGeneratorData *generator_data; /* JS_CLASS_GENERATOR */ - struct JSProxyData *proxy_data; /* JS_CLASS_PROXY */ - struct JSPromiseData *promise_data; /* JS_CLASS_PROMISE */ - struct JSPromiseFunctionData *promise_function_data; /* JS_CLASS_PROMISE_RESOLVE_FUNCTION, JS_CLASS_PROMISE_REJECT_FUNCTION */ - struct JSAsyncFunctionData *async_function_data; /* JS_CLASS_ASYNC_FUNCTION_RESOLVE, JS_CLASS_ASYNC_FUNCTION_REJECT */ - struct JSAsyncFromSyncIteratorData *async_from_sync_iterator_data; /* JS_CLASS_ASYNC_FROM_SYNC_ITERATOR */ - struct JSAsyncGeneratorData *async_generator_data; /* JS_CLASS_ASYNC_GENERATOR */ - struct { /* JS_CLASS_BYTECODE_FUNCTION: 12/24 bytes */ - /* also used by JS_CLASS_GENERATOR_FUNCTION, JS_CLASS_ASYNC_FUNCTION and JS_CLASS_ASYNC_GENERATOR_FUNCTION */ - struct JSFunctionBytecode *function_bytecode; - JSVarRef **var_refs; - JSObject *home_object; /* for 'super' access */ - } func; - struct { /* JS_CLASS_C_FUNCTION: 12/20 bytes */ - JSContext *realm; - JSCFunctionType c_function; - uint8_t length; - uint8_t cproto; - int16_t magic; - } cfunc; - /* array part for fast arrays and typed arrays */ - struct { /* JS_CLASS_ARRAY, JS_CLASS_ARGUMENTS, JS_CLASS_UINT8C_ARRAY..JS_CLASS_FLOAT64_ARRAY */ - union { - uint32_t size; /* JS_CLASS_ARRAY, JS_CLASS_ARGUMENTS */ - struct JSTypedArray *typed_array; /* JS_CLASS_UINT8C_ARRAY..JS_CLASS_FLOAT64_ARRAY */ - } u1; - union { - JSValue *values; /* JS_CLASS_ARRAY, JS_CLASS_ARGUMENTS */ - void *ptr; /* JS_CLASS_UINT8C_ARRAY..JS_CLASS_FLOAT64_ARRAY */ - int8_t *int8_ptr; /* JS_CLASS_INT8_ARRAY */ - uint8_t *uint8_ptr; /* JS_CLASS_UINT8_ARRAY, JS_CLASS_UINT8C_ARRAY */ - int16_t *int16_ptr; /* JS_CLASS_INT16_ARRAY */ - uint16_t *uint16_ptr; /* JS_CLASS_UINT16_ARRAY */ - int32_t *int32_ptr; /* JS_CLASS_INT32_ARRAY */ - uint32_t *uint32_ptr; /* JS_CLASS_UINT32_ARRAY */ - int64_t *int64_ptr; /* JS_CLASS_INT64_ARRAY */ - uint64_t *uint64_ptr; /* JS_CLASS_UINT64_ARRAY */ - float *float_ptr; /* JS_CLASS_FLOAT32_ARRAY */ - double *double_ptr; /* JS_CLASS_FLOAT64_ARRAY */ - } u; - uint32_t count; /* <= 2^31-1. 0 for a detached typed array */ - } array; /* 12/20 bytes */ - JSRegExp regexp; /* JS_CLASS_REGEXP: 8/16 bytes */ - JSValue object_data; /* for JS_SetObjectData(): 8/16/16 bytes */ - } u; - /* byte sizes: 40/48/72 */ -}; - -typedef struct JSCallSiteData { - JSValue filename; - JSValue func; - JSValue func_name; - BOOL native; - int line_num; - int col_num; -} JSCallSiteData; - -enum { - __JS_ATOM_NULL = JS_ATOM_NULL, -#define DEF(name, str) JS_ATOM_ ## name, -#include "quickjs-atom.h" -#undef DEF - JS_ATOM_END, -}; -#define JS_ATOM_LAST_KEYWORD JS_ATOM_super -#define JS_ATOM_LAST_STRICT_KEYWORD JS_ATOM_yield - -static const char js_atom_init[] = -#define DEF(name, str) str "\0" -#include "quickjs-atom.h" -#undef DEF -; - -typedef enum OPCodeFormat { -#define FMT(f) OP_FMT_ ## f, -#define DEF(id, size, n_pop, n_push, f) -#include "quickjs-opcode.h" -#undef DEF -#undef FMT -} OPCodeFormat; - -enum OPCodeEnum { -#define FMT(f) -#define DEF(id, size, n_pop, n_push, f) OP_ ## id, -#define def(id, size, n_pop, n_push, f) -#include "quickjs-opcode.h" -#undef def -#undef DEF -#undef FMT - OP_COUNT, /* excluding temporary opcodes */ - /* temporary opcodes : overlap with the short opcodes */ - OP_TEMP_START = OP_nop + 1, - OP___dummy = OP_TEMP_START - 1, -#define FMT(f) -#define DEF(id, size, n_pop, n_push, f) -#define def(id, size, n_pop, n_push, f) OP_ ## id, -#include "quickjs-opcode.h" -#undef def -#undef DEF -#undef FMT - OP_TEMP_END, -}; - -static int JS_InitAtoms(JSRuntime *rt); -static JSAtom __JS_NewAtomInit(JSRuntime *rt, const char *str, int len, - int atom_type); -static void JS_FreeAtomStruct(JSRuntime *rt, JSAtomStruct *p); -static void free_function_bytecode(JSRuntime *rt, JSFunctionBytecode *b); -static JSValue js_call_c_function(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, int flags); -static JSValue js_call_bound_function(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, int flags); -static JSValue JS_CallInternal(JSContext *ctx, JSValue func_obj, - JSValue this_obj, JSValue new_target, - int argc, JSValue *argv, int flags); -static JSValue JS_CallConstructorInternal(JSContext *ctx, - JSValue func_obj, - JSValue new_target, - int argc, JSValue *argv, int flags); -static JSValue JS_CallFree(JSContext *ctx, JSValue func_obj, JSValue this_obj, - int argc, JSValue *argv); -static JSValue JS_InvokeFree(JSContext *ctx, JSValue this_val, JSAtom atom, - int argc, JSValue *argv); -static __exception int JS_ToArrayLengthFree(JSContext *ctx, uint32_t *plen, - JSValue val, BOOL is_array_ctor); -static JSValue JS_EvalObject(JSContext *ctx, JSValue this_obj, - JSValue val, int flags, int scope_idx); -JSValue __attribute__((format(printf, 2, 3))) JS_ThrowInternalError(JSContext *ctx, const char *fmt, ...); -static __maybe_unused void JS_DumpAtoms(JSRuntime *rt); -static __maybe_unused void JS_DumpString(JSRuntime *rt, - const JSString *p); -static __maybe_unused void JS_DumpObjectHeader(JSRuntime *rt); -static __maybe_unused void JS_DumpObject(JSRuntime *rt, JSObject *p); -static __maybe_unused void JS_DumpGCObject(JSRuntime *rt, JSGCObjectHeader *p); -static __maybe_unused void JS_DumpValueShort(JSRuntime *rt, - JSValue val); -static __maybe_unused void JS_DumpValue(JSContext *ctx, JSValue val); -static __maybe_unused void JS_PrintValue(JSContext *ctx, - const char *str, - JSValue val); -static __maybe_unused void JS_DumpShapes(JSRuntime *rt); -static JSValue js_function_apply(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic); -static void js_array_finalizer(JSRuntime *rt, JSValue val); -static void js_array_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_object_data_finalizer(JSRuntime *rt, JSValue val); -static void js_object_data_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_c_function_finalizer(JSRuntime *rt, JSValue val); -static void js_c_function_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_bytecode_function_finalizer(JSRuntime *rt, JSValue val); -static void js_bytecode_function_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_bound_function_finalizer(JSRuntime *rt, JSValue val); -static void js_bound_function_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_for_in_iterator_finalizer(JSRuntime *rt, JSValue val); -static void js_for_in_iterator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_regexp_finalizer(JSRuntime *rt, JSValue val); -static void js_array_buffer_finalizer(JSRuntime *rt, JSValue val); -static void js_typed_array_finalizer(JSRuntime *rt, JSValue val); -static void js_typed_array_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_proxy_finalizer(JSRuntime *rt, JSValue val); -static void js_proxy_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_map_finalizer(JSRuntime *rt, JSValue val); -static void js_map_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_map_iterator_finalizer(JSRuntime *rt, JSValue val); -static void js_map_iterator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_array_iterator_finalizer(JSRuntime *rt, JSValue val); -static void js_array_iterator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_regexp_string_iterator_finalizer(JSRuntime *rt, JSValue val); -static void js_regexp_string_iterator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_generator_finalizer(JSRuntime *rt, JSValue obj); -static void js_generator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_promise_finalizer(JSRuntime *rt, JSValue val); -static void js_promise_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static void js_promise_resolve_function_finalizer(JSRuntime *rt, JSValue val); -static void js_promise_resolve_function_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); - -#define HINT_STRING 0 -#define HINT_NUMBER 1 -#define HINT_NONE 2 -#define HINT_FORCE_ORDINARY (1 << 4) // don't try Symbol.toPrimitive -static JSValue JS_ToPrimitiveFree(JSContext *ctx, JSValue val, int hint); -static JSValue JS_ToStringFree(JSContext *ctx, JSValue val); -static int JS_ToBoolFree(JSContext *ctx, JSValue val); -static int JS_ToInt32Free(JSContext *ctx, int32_t *pres, JSValue val); -static int JS_ToFloat64Free(JSContext *ctx, double *pres, JSValue val); -static int JS_ToUint8ClampFree(JSContext *ctx, int32_t *pres, JSValue val); -static JSValue js_compile_regexp(JSContext *ctx, JSValue pattern, - JSValue flags); -static JSValue js_regexp_constructor_internal(JSContext *ctx, JSValue ctor, - JSValue pattern, JSValue bc); -static void gc_decref(JSRuntime *rt); -static int JS_NewClass1(JSRuntime *rt, JSClassID class_id, - const JSClassDef *class_def, JSAtom name); -static JSValue js_promise_all(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic); -static JSValue js_promise_then(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv); -static JSValue js_array_push(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int unshift); - -typedef enum JSStrictEqModeEnum { - JS_EQ_STRICT, - JS_EQ_SAME_VALUE, - JS_EQ_SAME_VALUE_ZERO, -} JSStrictEqModeEnum; - -static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2, - JSStrictEqModeEnum eq_mode); -static BOOL js_strict_eq(JSContext *ctx, JSValue op1, JSValue op2); -static BOOL js_same_value(JSContext *ctx, JSValue op1, JSValue op2); -static BOOL js_same_value_zero(JSContext *ctx, JSValue op1, JSValue op2); -static JSValue JS_ToObject(JSContext *ctx, JSValue val); -static JSValue JS_ToObjectFree(JSContext *ctx, JSValue val); -static JSProperty *add_property(JSContext *ctx, - JSObject *p, JSAtom prop, int prop_flags); -static JSValue JS_NewBigInt(JSContext *ctx); -static inline bf_t *JS_GetBigInt(JSValue val) -{ - JSBigInt *p = JS_VALUE_GET_PTR(val); - return &p->num; -} -static JSValue JS_CompactBigInt1(JSContext *ctx, JSValue val); -static JSValue JS_CompactBigInt(JSContext *ctx, JSValue val); -static int JS_ToBigInt64Free(JSContext *ctx, int64_t *pres, JSValue val); -static bf_t *JS_ToBigInt(JSContext *ctx, bf_t *buf, JSValue val); -static bf_t *JS_ToBigInt1(JSContext *ctx, bf_t *buf, JSValue val); -static void JS_FreeBigInt(JSContext *ctx, bf_t *a, bf_t *buf); -JSValue JS_ThrowOutOfMemory(JSContext *ctx); -static JSValue JS_ThrowTypeErrorRevokedProxy(JSContext *ctx); -static JSValue js_proxy_getPrototypeOf(JSContext *ctx, JSValue obj); -static int js_proxy_setPrototypeOf(JSContext *ctx, JSValue obj, - JSValue proto_val, BOOL throw_flag); -static int js_proxy_isExtensible(JSContext *ctx, JSValue obj); -static int js_proxy_preventExtensions(JSContext *ctx, JSValue obj); -static int js_proxy_isArray(JSContext *ctx, JSValue obj); -static int JS_CreateProperty(JSContext *ctx, JSObject *p, - JSAtom prop, JSValue val, - JSValue getter, JSValue setter, - int flags); -static int js_string_memcmp(const JSString *p1, const JSString *p2, int len); -static void reset_weak_ref(JSRuntime *rt, JSWeakRefRecord **first_weak_ref); -static BOOL is_valid_weakref_target(JSValue val); -static void insert_weakref_record(JSValue target, struct JSWeakRefRecord *wr); -static JSValue js_array_buffer_constructor3(JSContext *ctx, - JSValue new_target, - uint64_t len, JSClassID class_id, - uint8_t *buf, - JSFreeArrayBufferDataFunc *free_func, - void *opaque, BOOL alloc_flag); -static JSArrayBuffer *js_get_array_buffer(JSContext *ctx, JSValue obj); -static JSValue js_typed_array_constructor(JSContext *ctx, - JSValue this_val, - int argc, JSValue *argv, - int classid); -static JSValue js_typed_array_constructor_ta(JSContext *ctx, - JSValue new_target, - JSValue src_obj, - int classid); -static BOOL typed_array_is_detached(JSContext *ctx, JSObject *p); -static uint32_t typed_array_get_length(JSContext *ctx, JSObject *p); -static JSValue JS_ThrowTypeErrorDetachedArrayBuffer(JSContext *ctx); -static JSVarRef *get_var_ref(JSContext *ctx, JSStackFrame *sf, int var_idx, - BOOL is_arg); -static JSValue js_generator_function_call(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, - int flags); -static void js_async_function_resolve_finalizer(JSRuntime *rt, JSValue val); -static void js_async_function_resolve_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static JSValue JS_EvalInternal(JSContext *ctx, JSValue this_obj, - const char *input, size_t input_len, - const char *filename, int flags, int scope_idx); -static void js_free_module_def(JSContext *ctx, JSModuleDef *m); -static void js_mark_module_def(JSRuntime *rt, JSModuleDef *m, - JS_MarkFunc *mark_func); -static JSValue js_import_meta(JSContext *ctx); -static JSValue js_dynamic_import(JSContext *ctx, JSValue specifier); -static void free_var_ref(JSRuntime *rt, JSVarRef *var_ref); -static JSValue js_new_promise_capability(JSContext *ctx, - JSValue *resolving_funcs, - JSValue ctor); -static __exception int perform_promise_then(JSContext *ctx, - JSValue promise, - JSValue *resolve_reject, - JSValue *cap_resolving_funcs); -static JSValue js_promise_resolve(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic); -static int js_string_compare(JSContext *ctx, - const JSString *p1, const JSString *p2); -static JSValue JS_ToNumber(JSContext *ctx, JSValue val); -static int JS_SetPropertyValue(JSContext *ctx, JSValue this_obj, - JSValue prop, JSValue val, int flags); -static int JS_NumberIsInteger(JSContext *ctx, JSValue val); -static BOOL JS_NumberIsNegativeOrMinusZero(JSContext *ctx, JSValue val); -static JSValue JS_ToNumberFree(JSContext *ctx, JSValue val); -static int JS_GetOwnPropertyInternal(JSContext *ctx, JSPropertyDescriptor *desc, - JSObject *p, JSAtom prop); -static void js_free_desc(JSContext *ctx, JSPropertyDescriptor *desc); -static void async_func_mark(JSRuntime *rt, JSAsyncFunctionState *s, - JS_MarkFunc *mark_func); -static void JS_AddIntrinsicBasicObjects(JSContext *ctx); -static void js_free_shape(JSRuntime *rt, JSShape *sh); -static void js_free_shape_null(JSRuntime *rt, JSShape *sh); -static int js_shape_prepare_update(JSContext *ctx, JSObject *p, - JSShapeProperty **pprs); -static int init_shape_hash(JSRuntime *rt); -static __exception int js_get_length32(JSContext *ctx, uint32_t *pres, - JSValue obj); -static __exception int js_get_length64(JSContext *ctx, int64_t *pres, - JSValue obj); -static void free_arg_list(JSContext *ctx, JSValue *tab, uint32_t len); -static JSValue *build_arg_list(JSContext *ctx, uint32_t *plen, - JSValue array_arg); -static BOOL js_get_fast_array(JSContext *ctx, JSValue obj, - JSValue **arrpp, uint32_t *countp); -static JSValue JS_CreateAsyncFromSyncIterator(JSContext *ctx, - JSValue sync_iter); -static void js_c_function_data_finalizer(JSRuntime *rt, JSValue val); -static void js_c_function_data_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func); -static JSValue js_c_function_data_call(JSContext *ctx, JSValue func_obj, - JSValue this_val, - int argc, JSValue *argv, int flags); -static JSAtom js_symbol_to_atom(JSContext *ctx, JSValue val); -static void add_gc_object(JSRuntime *rt, JSGCObjectHeader *h, - JSGCObjectTypeEnum type); -static void remove_gc_object(JSGCObjectHeader *h); -static void js_async_function_free0(JSRuntime *rt, JSAsyncFunctionData *s); -static JSValue js_instantiate_prototype(JSContext *ctx, JSObject *p, JSAtom atom, void *opaque); -static JSValue js_module_ns_autoinit(JSContext *ctx, JSObject *p, JSAtom atom, - void *opaque); -static JSValue JS_InstantiateFunctionListItem2(JSContext *ctx, JSObject *p, - JSAtom atom, void *opaque); -void JS_SetUncatchableError(JSContext *ctx, JSValue val, BOOL flag); - -static JSValue js_new_callsite(JSContext *ctx, JSCallSiteData *csd); -static void js_new_callsite_data(JSContext *ctx, JSCallSiteData *csd, JSStackFrame *sf); -static void js_new_callsite_data2(JSContext *ctx, JSCallSiteData *csd, const char *filename, int line_num, int col_num); -static void _JS_AddIntrinsicCallSite(JSContext *ctx); - -static const JSClassExoticMethods js_arguments_exotic_methods; -static const JSClassExoticMethods js_string_exotic_methods; -static const JSClassExoticMethods js_proxy_exotic_methods; -static const JSClassExoticMethods js_module_ns_exotic_methods; - -// Special care is taken to not invoke UB when checking if the result fits -// in an int32_t. Leans on the fact that the input is integral if the lower -// 52 bits of the equation 2**e * (f + 2**52) are zero. -static BOOL float_is_int32(double d) -{ - uint64_t u, m, e, f; - JSFloat64Union t; - - t.d = d; - u = t.u64; - - // special case -0 - m = 1ull << 63; - if (u == m) - return FALSE; - - e = (u >> 52) & 0x7FF; - if (e > 0) - e -= 1023; - - // too large, nan or inf? - if (e > 30) - return FALSE; - - // fractional or subnormal if low bits are non-zero - f = 0xFFFFFFFFFFFFFull & u; - m = 0xFFFFFFFFFFFFFull >> e; - return 0 == (f & m); -} - -static JSValue js_float64(double d) -{ - if (float_is_int32(d)) - return JS_MKVAL(JS_TAG_INT, (int32_t)d); - return __JS_NewFloat64(d); -} - -static int compare_u32(uint32_t a, uint32_t b) -{ - return -(a < b) + (b < a); // -1, 0 or 1 -} - -static JSValue js_int32(int32_t v) -{ - return JS_MKVAL(JS_TAG_INT, v); -} - -static JSValue js_uint32(uint32_t v) -{ - if (v <= INT32_MAX) - return js_int32(v); - return js_float64(v); -} - -static JSValue js_bool(JS_BOOL v) -{ - return JS_MKVAL(JS_TAG_BOOL, (v != 0)); -} - -static JSValue js_dup(JSValue v) -{ - if (JS_VALUE_HAS_REF_COUNT(v)) { - JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v); - p->ref_count++; - } - return v; -} - -static void js_trigger_gc(JSRuntime *rt, size_t size) -{ - BOOL force_gc; -#ifdef FORCE_GC_AT_MALLOC - force_gc = TRUE; -#else - force_gc = ((rt->malloc_state.malloc_size + size) > - rt->malloc_gc_threshold); -#endif - if (force_gc) { -#ifdef DUMP_GC - printf("GC: size=%" PRIu64 "\n", - (uint64_t)rt->malloc_state.malloc_size); -#endif - JS_RunGC(rt); - rt->malloc_gc_threshold = rt->malloc_state.malloc_size + - (rt->malloc_state.malloc_size >> 1); - } -} - -static size_t js_malloc_usable_size_unknown(const void *ptr) -{ - return 0; -} - -void *js_malloc_rt(JSRuntime *rt, size_t size) -{ - return rt->mf.js_malloc(&rt->malloc_state, size); -} - -void js_free_rt(JSRuntime *rt, void *ptr) -{ - rt->mf.js_free(&rt->malloc_state, ptr); -} - -void *js_realloc_rt(JSRuntime *rt, void *ptr, size_t size) -{ - return rt->mf.js_realloc(&rt->malloc_state, ptr, size); -} - -size_t js_malloc_usable_size_rt(JSRuntime *rt, const void *ptr) -{ - return rt->mf.js_malloc_usable_size(ptr); -} - -void *js_mallocz_rt(JSRuntime *rt, size_t size) -{ - void *ptr; - ptr = js_malloc_rt(rt, size); - if (!ptr) - return NULL; - return memset(ptr, 0, size); -} - -/* called by libbf */ -static void *js_bf_realloc(void *opaque, void *ptr, size_t size) -{ - JSRuntime *rt = opaque; - return js_realloc_rt(rt, ptr, size); -} - -/* Throw out of memory in case of error */ -void *js_malloc(JSContext *ctx, size_t size) -{ - void *ptr; - ptr = js_malloc_rt(ctx->rt, size); - if (unlikely(!ptr)) { - JS_ThrowOutOfMemory(ctx); - return NULL; - } - return ptr; -} - -/* Throw out of memory in case of error */ -void *js_mallocz(JSContext *ctx, size_t size) -{ - void *ptr; - ptr = js_mallocz_rt(ctx->rt, size); - if (unlikely(!ptr)) { - JS_ThrowOutOfMemory(ctx); - return NULL; - } - return ptr; -} - -void js_free(JSContext *ctx, void *ptr) -{ - js_free_rt(ctx->rt, ptr); -} - -/* Throw out of memory in case of error */ -void *js_realloc(JSContext *ctx, void *ptr, size_t size) -{ - void *ret; - ret = js_realloc_rt(ctx->rt, ptr, size); - if (unlikely(!ret && size != 0)) { - JS_ThrowOutOfMemory(ctx); - return NULL; - } - return ret; -} - -/* store extra allocated size in *pslack if successful */ -void *js_realloc2(JSContext *ctx, void *ptr, size_t size, size_t *pslack) -{ - void *ret; - ret = js_realloc_rt(ctx->rt, ptr, size); - if (unlikely(!ret && size != 0)) { - JS_ThrowOutOfMemory(ctx); - return NULL; - } - if (pslack) { - size_t new_size = js_malloc_usable_size_rt(ctx->rt, ret); - *pslack = (new_size > size) ? new_size - size : 0; - } - return ret; -} - -size_t js_malloc_usable_size(JSContext *ctx, const void *ptr) -{ - return js_malloc_usable_size_rt(ctx->rt, ptr); -} - -/* Throw out of memory exception in case of error */ -char *js_strndup(JSContext *ctx, const char *s, size_t n) -{ - char *ptr; - ptr = js_malloc(ctx, n + 1); - if (ptr) { - memcpy(ptr, s, n); - ptr[n] = '\0'; - } - return ptr; -} - -char *js_strdup(JSContext *ctx, const char *str) -{ - return js_strndup(ctx, str, strlen(str)); -} - -static no_inline int js_realloc_array(JSContext *ctx, void **parray, - int elem_size, int *psize, int req_size) -{ - int new_size; - size_t slack; - void *new_array; - /* XXX: potential arithmetic overflow */ - new_size = max_int(req_size, *psize * 3 / 2); - new_array = js_realloc2(ctx, *parray, new_size * elem_size, &slack); - if (!new_array) - return -1; - new_size += slack / elem_size; - *psize = new_size; - *parray = new_array; - return 0; -} - -/* resize the array and update its size if req_size > *psize */ -static inline int js_resize_array(JSContext *ctx, void **parray, int elem_size, - int *psize, int req_size) -{ - if (unlikely(req_size > *psize)) - return js_realloc_array(ctx, parray, elem_size, psize, req_size); - else - return 0; -} - -static inline void js_dbuf_init(JSContext *ctx, DynBuf *s) -{ - dbuf_init2(s, ctx->rt, (DynBufReallocFunc *)js_realloc_rt); -} - -static inline int is_digit(int c) { - return c >= '0' && c <= '9'; -} - -typedef struct JSClassShortDef { - JSAtom class_name; - JSClassFinalizer *finalizer; - JSClassGCMark *gc_mark; -} JSClassShortDef; - -static JSClassShortDef const js_std_class_def[] = { - { JS_ATOM_Object, NULL, NULL }, /* JS_CLASS_OBJECT */ - { JS_ATOM_Array, js_array_finalizer, js_array_mark }, /* JS_CLASS_ARRAY */ - { JS_ATOM_Error, NULL, NULL }, /* JS_CLASS_ERROR */ - { JS_ATOM_Number, js_object_data_finalizer, js_object_data_mark }, /* JS_CLASS_NUMBER */ - { JS_ATOM_String, js_object_data_finalizer, js_object_data_mark }, /* JS_CLASS_STRING */ - { JS_ATOM_Boolean, js_object_data_finalizer, js_object_data_mark }, /* JS_CLASS_BOOLEAN */ - { JS_ATOM_Symbol, js_object_data_finalizer, js_object_data_mark }, /* JS_CLASS_SYMBOL */ - { JS_ATOM_Arguments, js_array_finalizer, js_array_mark }, /* JS_CLASS_ARGUMENTS */ - { JS_ATOM_Arguments, NULL, NULL }, /* JS_CLASS_MAPPED_ARGUMENTS */ - { JS_ATOM_Date, js_object_data_finalizer, js_object_data_mark }, /* JS_CLASS_DATE */ - { JS_ATOM_Object, NULL, NULL }, /* JS_CLASS_MODULE_NS */ - { JS_ATOM_Function, js_c_function_finalizer, js_c_function_mark }, /* JS_CLASS_C_FUNCTION */ - { JS_ATOM_Function, js_bytecode_function_finalizer, js_bytecode_function_mark }, /* JS_CLASS_BYTECODE_FUNCTION */ - { JS_ATOM_Function, js_bound_function_finalizer, js_bound_function_mark }, /* JS_CLASS_BOUND_FUNCTION */ - { JS_ATOM_Function, js_c_function_data_finalizer, js_c_function_data_mark }, /* JS_CLASS_C_FUNCTION_DATA */ - { JS_ATOM_GeneratorFunction, js_bytecode_function_finalizer, js_bytecode_function_mark }, /* JS_CLASS_GENERATOR_FUNCTION */ - { JS_ATOM_ForInIterator, js_for_in_iterator_finalizer, js_for_in_iterator_mark }, /* JS_CLASS_FOR_IN_ITERATOR */ - { JS_ATOM_RegExp, js_regexp_finalizer, NULL }, /* JS_CLASS_REGEXP */ - { JS_ATOM_ArrayBuffer, js_array_buffer_finalizer, NULL }, /* JS_CLASS_ARRAY_BUFFER */ - { JS_ATOM_SharedArrayBuffer, js_array_buffer_finalizer, NULL }, /* JS_CLASS_SHARED_ARRAY_BUFFER */ - { JS_ATOM_Uint8ClampedArray, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_UINT8C_ARRAY */ - { JS_ATOM_Int8Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_INT8_ARRAY */ - { JS_ATOM_Uint8Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_UINT8_ARRAY */ - { JS_ATOM_Int16Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_INT16_ARRAY */ - { JS_ATOM_Uint16Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_UINT16_ARRAY */ - { JS_ATOM_Int32Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_INT32_ARRAY */ - { JS_ATOM_Uint32Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_UINT32_ARRAY */ - { JS_ATOM_BigInt64Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_BIG_INT64_ARRAY */ - { JS_ATOM_BigUint64Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_BIG_UINT64_ARRAY */ - { JS_ATOM_Float32Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_FLOAT32_ARRAY */ - { JS_ATOM_Float64Array, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_FLOAT64_ARRAY */ - { JS_ATOM_DataView, js_typed_array_finalizer, js_typed_array_mark }, /* JS_CLASS_DATAVIEW */ - { JS_ATOM_BigInt, js_object_data_finalizer, js_object_data_mark }, /* JS_CLASS_BIG_INT */ - { JS_ATOM_Map, js_map_finalizer, js_map_mark }, /* JS_CLASS_MAP */ - { JS_ATOM_Set, js_map_finalizer, js_map_mark }, /* JS_CLASS_SET */ - { JS_ATOM_WeakMap, js_map_finalizer, js_map_mark }, /* JS_CLASS_WEAKMAP */ - { JS_ATOM_WeakSet, js_map_finalizer, js_map_mark }, /* JS_CLASS_WEAKSET */ - { JS_ATOM_Map_Iterator, js_map_iterator_finalizer, js_map_iterator_mark }, /* JS_CLASS_MAP_ITERATOR */ - { JS_ATOM_Set_Iterator, js_map_iterator_finalizer, js_map_iterator_mark }, /* JS_CLASS_SET_ITERATOR */ - { JS_ATOM_Array_Iterator, js_array_iterator_finalizer, js_array_iterator_mark }, /* JS_CLASS_ARRAY_ITERATOR */ - { JS_ATOM_String_Iterator, js_array_iterator_finalizer, js_array_iterator_mark }, /* JS_CLASS_STRING_ITERATOR */ - { JS_ATOM_RegExp_String_Iterator, js_regexp_string_iterator_finalizer, js_regexp_string_iterator_mark }, /* JS_CLASS_REGEXP_STRING_ITERATOR */ - { JS_ATOM_Generator, js_generator_finalizer, js_generator_mark }, /* JS_CLASS_GENERATOR */ -}; - -static int init_class_range(JSRuntime *rt, JSClassShortDef const *tab, - int start, int count) -{ - JSClassDef cm_s, *cm = &cm_s; - int i, class_id; - - for(i = 0; i < count; i++) { - class_id = i + start; - memset(cm, 0, sizeof(*cm)); - cm->finalizer = tab[i].finalizer; - cm->gc_mark = tab[i].gc_mark; - if (JS_NewClass1(rt, class_id, cm, tab[i].class_name) < 0) - return -1; - } - return 0; -} - -/* Note: OS and CPU dependent */ -static inline uintptr_t js_get_stack_pointer(void) -{ - return (uintptr_t)__builtin_frame_address(0); -} - -static inline BOOL js_check_stack_overflow(JSRuntime *rt, size_t alloca_size) -{ - uintptr_t sp; - sp = js_get_stack_pointer() - alloca_size; - return unlikely(sp < rt->stack_limit); -} - -JSRuntime *JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque) -{ - JSRuntime *rt; - JSMallocState ms; - - memset(&ms, 0, sizeof(ms)); - ms.opaque = opaque; - ms.malloc_limit = -1; - - rt = mf->js_malloc(&ms, sizeof(JSRuntime)); - if (!rt) - return NULL; - memset(rt, 0, sizeof(*rt)); - rt->mf = *mf; - if (!rt->mf.js_malloc_usable_size) { - /* use dummy function if none provided */ - rt->mf.js_malloc_usable_size = js_malloc_usable_size_unknown; - } - rt->malloc_state = ms; - rt->malloc_gc_threshold = 256 * 1024; - - bf_context_init(&rt->bf_ctx, js_bf_realloc, rt); - - init_list_head(&rt->context_list); - init_list_head(&rt->gc_obj_list); - init_list_head(&rt->gc_zero_ref_count_list); - rt->gc_phase = JS_GC_PHASE_NONE; - -#ifdef DUMP_LEAKS - init_list_head(&rt->string_list); -#endif - init_list_head(&rt->job_list); - - if (JS_InitAtoms(rt)) - goto fail; - - /* create the object, array and function classes */ - if (init_class_range(rt, js_std_class_def, JS_CLASS_OBJECT, - countof(js_std_class_def)) < 0) - goto fail; - rt->class_array[JS_CLASS_ARGUMENTS].exotic = &js_arguments_exotic_methods; - rt->class_array[JS_CLASS_STRING].exotic = &js_string_exotic_methods; - rt->class_array[JS_CLASS_MODULE_NS].exotic = &js_module_ns_exotic_methods; - - rt->class_array[JS_CLASS_C_FUNCTION].call = js_call_c_function; - rt->class_array[JS_CLASS_C_FUNCTION_DATA].call = js_c_function_data_call; - rt->class_array[JS_CLASS_BOUND_FUNCTION].call = js_call_bound_function; - rt->class_array[JS_CLASS_GENERATOR_FUNCTION].call = js_generator_function_call; - if (init_shape_hash(rt)) - goto fail; - - rt->js_class_id_alloc = JS_CLASS_INIT_COUNT; - - rt->stack_size = JS_DEFAULT_STACK_SIZE; -#ifdef __ASAN__ - rt->stack_size *= 2; // stack frames are bigger under AddressSanitizer -#endif - JS_UpdateStackTop(rt); - - rt->current_exception = JS_NULL; - - return rt; - fail: - JS_FreeRuntime(rt); - return NULL; -} - -void *JS_GetRuntimeOpaque(JSRuntime *rt) -{ - return rt->user_opaque; -} - -void JS_SetRuntimeOpaque(JSRuntime *rt, void *opaque) -{ - rt->user_opaque = opaque; -} - -static void *js_def_malloc(JSMallocState *s, size_t size) -{ - void *ptr; - - /* Do not allocate zero bytes: behavior is platform dependent */ - assert(size != 0); - - if (unlikely(s->malloc_size + size > s->malloc_limit)) - return NULL; - - ptr = malloc(size); - if (!ptr) - return NULL; - - s->malloc_count++; - s->malloc_size += js__malloc_usable_size(ptr) + MALLOC_OVERHEAD; - return ptr; -} - -static void js_def_free(JSMallocState *s, void *ptr) -{ - if (!ptr) - return; - - s->malloc_count--; - s->malloc_size -= js__malloc_usable_size(ptr) + MALLOC_OVERHEAD; - free(ptr); -} - -static void *js_def_realloc(JSMallocState *s, void *ptr, size_t size) -{ - size_t old_size; - - if (!ptr) { - if (size == 0) - return NULL; - return js_def_malloc(s, size); - } - old_size = js__malloc_usable_size(ptr); - if (size == 0) { - s->malloc_count--; - s->malloc_size -= old_size + MALLOC_OVERHEAD; - free(ptr); - return NULL; - } - if (s->malloc_size + size - old_size > s->malloc_limit) - return NULL; - - ptr = realloc(ptr, size); - if (!ptr) - return NULL; - - s->malloc_size += js__malloc_usable_size(ptr) - old_size; - return ptr; -} - -static const JSMallocFunctions def_malloc_funcs = { - js_def_malloc, - js_def_free, - js_def_realloc, -#if defined(__APPLE__) - malloc_size, -#elif defined(_WIN32) - (size_t (*)(const void *))_msize, -#elif defined(__ANDROID__) - (size_t (*)(const void *))dlmalloc_usable_size, -#elif defined(__linux__) || defined (__CYGWIN__) - (size_t (*)(const void *))malloc_usable_size, -#else - NULL, -#endif -}; - -JSRuntime *JS_NewRuntime(void) -{ - return JS_NewRuntime2(&def_malloc_funcs, NULL); -} - -void JS_SetMemoryLimit(JSRuntime *rt, size_t limit) -{ - rt->malloc_state.malloc_limit = limit; -} - -/* use -1 to disable automatic GC */ -void JS_SetGCThreshold(JSRuntime *rt, size_t gc_threshold) -{ - rt->malloc_gc_threshold = gc_threshold; -} - -#define malloc(s) malloc_is_forbidden(s) -#define free(p) free_is_forbidden(p) -#define realloc(p,s) realloc_is_forbidden(p,s) - -void JS_SetInterruptHandler(JSRuntime *rt, JSInterruptHandler *cb, void *opaque) -{ - rt->interrupt_handler = cb; - rt->interrupt_opaque = opaque; -} - -void JS_SetCanBlock(JSRuntime *rt, BOOL can_block) -{ - rt->can_block = can_block; -} - -void JS_SetSharedArrayBufferFunctions(JSRuntime *rt, - const JSSharedArrayBufferFunctions *sf) -{ - rt->sab_funcs = *sf; -} - -/* return 0 if OK, < 0 if exception */ -int JS_EnqueueJob(JSContext *ctx, JSJobFunc *job_func, - int argc, JSValue *argv) -{ - JSRuntime *rt = ctx->rt; - JSJobEntry *e; - int i; - - e = js_malloc(ctx, sizeof(*e) + argc * sizeof(JSValue)); - if (!e) - return -1; - e->ctx = ctx; - e->job_func = job_func; - e->argc = argc; - for(i = 0; i < argc; i++) { - e->argv[i] = js_dup(argv[i]); - } - list_add_tail(&e->link, &rt->job_list); - return 0; -} - -BOOL JS_IsJobPending(JSRuntime *rt) -{ - return !list_empty(&rt->job_list); -} - -/* return < 0 if exception, 0 if no job pending, 1 if a job was - executed successfully. the context of the job is stored in '*pctx' */ -int JS_ExecutePendingJob(JSRuntime *rt, JSContext **pctx) -{ - JSContext *ctx; - JSJobEntry *e; - JSValue res; - int i, ret; - - if (list_empty(&rt->job_list)) { - *pctx = NULL; - return 0; - } - - /* get the first pending job and execute it */ - e = list_entry(rt->job_list.next, JSJobEntry, link); - list_del(&e->link); - ctx = e->ctx; - res = e->job_func(e->ctx, e->argc, e->argv); - for(i = 0; i < e->argc; i++) - JS_FreeValue(ctx, e->argv[i]); - if (JS_IsException(res)) - ret = -1; - else - ret = 1; - JS_FreeValue(ctx, res); - js_free(ctx, e); - *pctx = ctx; - return ret; -} - -static inline uint32_t atom_get_free(const JSAtomStruct *p) -{ - return (uintptr_t)p >> 1; -} - -static inline BOOL atom_is_free(const JSAtomStruct *p) -{ - return (uintptr_t)p & 1; -} - -static inline JSAtomStruct *atom_set_free(uint32_t v) -{ - return (JSAtomStruct *)(((uintptr_t)v << 1) | 1); -} - -/* Note: the string contents are uninitialized */ -static JSString *js_alloc_string_rt(JSRuntime *rt, int max_len, int is_wide_char) -{ - JSString *str; - str = js_malloc_rt(rt, sizeof(JSString) + (max_len << is_wide_char) + 1 - is_wide_char); - if (unlikely(!str)) - return NULL; - str->header.ref_count = 1; - str->is_wide_char = is_wide_char; - str->len = max_len; - str->atom_type = 0; - str->hash = 0; /* optional but costless */ - str->hash_next = 0; /* optional */ -#ifdef DUMP_LEAKS - list_add_tail(&str->link, &rt->string_list); -#endif - return str; -} - -static JSString *js_alloc_string(JSContext *ctx, int max_len, int is_wide_char) -{ - JSString *p; - p = js_alloc_string_rt(ctx->rt, max_len, is_wide_char); - if (unlikely(!p)) { - JS_ThrowOutOfMemory(ctx); - return NULL; - } - return p; -} - -/* same as JS_FreeValueRT() but faster */ -static inline void js_free_string(JSRuntime *rt, JSString *str) -{ - if (--str->header.ref_count <= 0) { - if (str->atom_type) { - JS_FreeAtomStruct(rt, str); - } else { -#ifdef DUMP_LEAKS - list_del(&str->link); -#endif - js_free_rt(rt, str); - } - } -} - -void JS_SetRuntimeInfo(JSRuntime *rt, const char *s) -{ - if (rt) - rt->rt_info = s; -} - -void JS_FreeRuntime(JSRuntime *rt) -{ - struct list_head *el, *el1; - int i; - - JS_FreeValueRT(rt, rt->current_exception); - - list_for_each_safe(el, el1, &rt->job_list) { - JSJobEntry *e = list_entry(el, JSJobEntry, link); - for(i = 0; i < e->argc; i++) - JS_FreeValueRT(rt, e->argv[i]); - js_free_rt(rt, e); - } - init_list_head(&rt->job_list); - - JS_RunGC(rt); - -#ifdef DUMP_LEAKS - /* leaking objects */ - { - BOOL header_done; - JSGCObjectHeader *p; - int count; - - /* remove the internal refcounts to display only the object - referenced externally */ - list_for_each(el, &rt->gc_obj_list) { - p = list_entry(el, JSGCObjectHeader, link); - p->mark = 0; - } - gc_decref(rt); - - header_done = FALSE; - list_for_each(el, &rt->gc_obj_list) { - p = list_entry(el, JSGCObjectHeader, link); - if (p->ref_count != 0) { - if (!header_done) { - printf("Object leaks:\n"); - JS_DumpObjectHeader(rt); - header_done = TRUE; - } - JS_DumpGCObject(rt, p); - } - } - - count = 0; - list_for_each(el, &rt->gc_obj_list) { - p = list_entry(el, JSGCObjectHeader, link); - if (p->ref_count == 0) { - count++; - } - } - if (count != 0) - printf("Secondary object leaks: %d\n", count); - } -#endif - assert(list_empty(&rt->gc_obj_list)); - - /* free the classes */ - for(i = 0; i < rt->class_count; i++) { - JSClass *cl = &rt->class_array[i]; - if (cl->class_id != 0) { - JS_FreeAtomRT(rt, cl->class_name); - } - } - js_free_rt(rt, rt->class_array); - - bf_context_end(&rt->bf_ctx); - -#ifdef DUMP_LEAKS - /* only the atoms defined in JS_InitAtoms() should be left */ - { - BOOL header_done = FALSE; - - for(i = 0; i < rt->atom_size; i++) { - JSAtomStruct *p = rt->atom_array[i]; - if (!atom_is_free(p) /* && p->str*/) { - if (i >= JS_ATOM_END || p->header.ref_count != 1) { - if (!header_done) { - header_done = TRUE; - if (rt->rt_info) { - printf("%s:1: atom leakage:", rt->rt_info); - } else { - printf("Atom leaks:\n" - " %6s %6s %s\n", - "ID", "REFCNT", "NAME"); - } - } - if (rt->rt_info) { - printf(" "); - } else { - printf(" %6u %6u ", i, p->header.ref_count); - } - switch (p->atom_type) { - case JS_ATOM_TYPE_STRING: - JS_DumpString(rt, p); - break; - case JS_ATOM_TYPE_GLOBAL_SYMBOL: - printf("Symbol.for("); - JS_DumpString(rt, p); - printf(")"); - break; - case JS_ATOM_TYPE_SYMBOL: - if (p->hash == JS_ATOM_HASH_SYMBOL) { - printf("Symbol("); - JS_DumpString(rt, p); - printf(")"); - } else { - printf("Private("); - JS_DumpString(rt, p); - printf(")"); - } - break; - } - if (rt->rt_info) { - printf(":%u", p->header.ref_count); - } else { - printf("\n"); - } - } - } - } - if (rt->rt_info && header_done) - printf("\n"); - } -#endif - - /* free the atoms */ - for(i = 0; i < rt->atom_size; i++) { - JSAtomStruct *p = rt->atom_array[i]; - if (!atom_is_free(p)) { -#ifdef DUMP_LEAKS - list_del(&p->link); -#endif - js_free_rt(rt, p); - } - } - js_free_rt(rt, rt->atom_array); - js_free_rt(rt, rt->atom_hash); - js_free_rt(rt, rt->shape_hash); -#ifdef DUMP_LEAKS - if (!list_empty(&rt->string_list)) { - if (rt->rt_info) { - printf("%s:1: string leakage:", rt->rt_info); - } else { - printf("String leaks:\n" - " %6s %s\n", - "REFCNT", "VALUE"); - } - list_for_each_safe(el, el1, &rt->string_list) { - JSString *str = list_entry(el, JSString, link); - if (rt->rt_info) { - printf(" "); - } else { - printf(" %6u ", str->header.ref_count); - } - JS_DumpString(rt, str); - if (rt->rt_info) { - printf(":%u", str->header.ref_count); - } else { - printf("\n"); - } - list_del(&str->link); - js_free_rt(rt, str); - } - if (rt->rt_info) - printf("\n"); - } - { - JSMallocState *s = &rt->malloc_state; - if (s->malloc_count > 1) { - if (rt->rt_info) - printf("%s:1: ", rt->rt_info); - printf("Memory leak: %"PRIu64" bytes lost in %"PRIu64" block%s\n", - (uint64_t)(s->malloc_size - sizeof(JSRuntime)), - (uint64_t)(s->malloc_count - 1), &"s"[s->malloc_count == 2]); - } - } -#endif - - { - JSMallocState ms = rt->malloc_state; - rt->mf.js_free(&ms, rt); - } -} - -JSContext *JS_NewContextRaw(JSRuntime *rt) -{ - JSContext *ctx; - int i; - - ctx = js_mallocz_rt(rt, sizeof(JSContext)); - if (!ctx) - return NULL; - ctx->header.ref_count = 1; - add_gc_object(rt, &ctx->header, JS_GC_OBJ_TYPE_JS_CONTEXT); - - ctx->class_proto = js_malloc_rt(rt, sizeof(ctx->class_proto[0]) * - rt->class_count); - if (!ctx->class_proto) { - js_free_rt(rt, ctx); - return NULL; - } - ctx->rt = rt; - list_add_tail(&ctx->link, &rt->context_list); - ctx->bf_ctx = &rt->bf_ctx; - for(i = 0; i < rt->class_count; i++) - ctx->class_proto[i] = JS_NULL; - ctx->array_ctor = JS_NULL; - ctx->regexp_ctor = JS_NULL; - ctx->promise_ctor = JS_NULL; - ctx->error_ctor = JS_NULL; - ctx->error_prepare_stack = JS_UNDEFINED; - ctx->error_stack_trace_limit = 10; - init_list_head(&ctx->loaded_modules); - - JS_AddIntrinsicBasicObjects(ctx); - return ctx; -} - -JSContext *JS_NewContext(JSRuntime *rt) -{ - JSContext *ctx; - - ctx = JS_NewContextRaw(rt); - if (!ctx) - return NULL; - - JS_AddIntrinsicBaseObjects(ctx); - JS_AddIntrinsicDate(ctx); - JS_AddIntrinsicEval(ctx); - JS_AddIntrinsicRegExp(ctx); - JS_AddIntrinsicJSON(ctx); - JS_AddIntrinsicProxy(ctx); - JS_AddIntrinsicMapSet(ctx); - JS_AddIntrinsicTypedArrays(ctx); - JS_AddIntrinsicPromise(ctx); - JS_AddIntrinsicBigInt(ctx); - JS_AddIntrinsicWeakRef(ctx); - - JS_AddPerformance(ctx); - - return ctx; -} - -void *JS_GetContextOpaque(JSContext *ctx) -{ - return ctx->user_opaque; -} - -void JS_SetContextOpaque(JSContext *ctx, void *opaque) -{ - ctx->user_opaque = opaque; -} - -/* set the new value and free the old value after (freeing the value - can reallocate the object data) */ -static inline void set_value(JSContext *ctx, JSValue *pval, JSValue new_val) -{ - JSValue old_val; - old_val = *pval; - *pval = new_val; - JS_FreeValue(ctx, old_val); -} - -void JS_SetClassProto(JSContext *ctx, JSClassID class_id, JSValue obj) -{ - JSRuntime *rt = ctx->rt; - assert(class_id < rt->class_count); - set_value(ctx, &ctx->class_proto[class_id], obj); -} - -JSValue JS_GetClassProto(JSContext *ctx, JSClassID class_id) -{ - JSRuntime *rt = ctx->rt; - assert(class_id < rt->class_count); - return js_dup(ctx->class_proto[class_id]); -} - -typedef enum JSFreeModuleEnum { - JS_FREE_MODULE_ALL, - JS_FREE_MODULE_NOT_RESOLVED, - JS_FREE_MODULE_NOT_EVALUATED, -} JSFreeModuleEnum; - -/* XXX: would be more efficient with separate module lists */ -static void js_free_modules(JSContext *ctx, JSFreeModuleEnum flag) -{ - struct list_head *el, *el1; - list_for_each_safe(el, el1, &ctx->loaded_modules) { - JSModuleDef *m = list_entry(el, JSModuleDef, link); - if (flag == JS_FREE_MODULE_ALL || - (flag == JS_FREE_MODULE_NOT_RESOLVED && !m->resolved) || - (flag == JS_FREE_MODULE_NOT_EVALUATED && !m->evaluated - && !m->eval_mark)) { - js_free_module_def(ctx, m); - } - } -} - -JSContext *JS_DupContext(JSContext *ctx) -{ - ctx->header.ref_count++; - return ctx; -} - -/* used by the GC */ -static void JS_MarkContext(JSRuntime *rt, JSContext *ctx, - JS_MarkFunc *mark_func) -{ - int i; - struct list_head *el; - - /* modules are not seen by the GC, so we directly mark the objects - referenced by each module */ - list_for_each(el, &ctx->loaded_modules) { - JSModuleDef *m = list_entry(el, JSModuleDef, link); - js_mark_module_def(rt, m, mark_func); - } - - JS_MarkValue(rt, ctx->global_obj, mark_func); - JS_MarkValue(rt, ctx->global_var_obj, mark_func); - - JS_MarkValue(rt, ctx->throw_type_error, mark_func); - JS_MarkValue(rt, ctx->eval_obj, mark_func); - - JS_MarkValue(rt, ctx->array_proto_values, mark_func); - for(i = 0; i < JS_NATIVE_ERROR_COUNT; i++) { - JS_MarkValue(rt, ctx->native_error_proto[i], mark_func); - } - JS_MarkValue(rt, ctx->error_ctor, mark_func); - JS_MarkValue(rt, ctx->error_prepare_stack, mark_func); - for(i = 0; i < rt->class_count; i++) { - JS_MarkValue(rt, ctx->class_proto[i], mark_func); - } - JS_MarkValue(rt, ctx->iterator_proto, mark_func); - JS_MarkValue(rt, ctx->async_iterator_proto, mark_func); - JS_MarkValue(rt, ctx->promise_ctor, mark_func); - JS_MarkValue(rt, ctx->array_ctor, mark_func); - JS_MarkValue(rt, ctx->regexp_ctor, mark_func); - JS_MarkValue(rt, ctx->function_ctor, mark_func); - JS_MarkValue(rt, ctx->function_proto, mark_func); - - if (ctx->array_shape) - mark_func(rt, &ctx->array_shape->header); -} - -void JS_FreeContext(JSContext *ctx) -{ - JSRuntime *rt = ctx->rt; - int i; - - if (--ctx->header.ref_count > 0) - return; - assert(ctx->header.ref_count == 0); - -#ifdef DUMP_ATOMS - JS_DumpAtoms(ctx->rt); -#endif -#ifdef DUMP_SHAPES - JS_DumpShapes(ctx->rt); -#endif -#ifdef DUMP_OBJECTS - { - struct list_head *el; - JSGCObjectHeader *p; - printf("JSObjects: {\n"); - JS_DumpObjectHeader(ctx->rt); - list_for_each(el, &rt->gc_obj_list) { - p = list_entry(el, JSGCObjectHeader, link); - JS_DumpGCObject(rt, p); - } - printf("}\n"); - } -#endif -#ifdef DUMP_MEM - { - JSMemoryUsage stats; - JS_ComputeMemoryUsage(rt, &stats); - JS_DumpMemoryUsage(stdout, &stats, rt); - } -#endif - - js_free_modules(ctx, JS_FREE_MODULE_ALL); - - JS_FreeValue(ctx, ctx->global_obj); - JS_FreeValue(ctx, ctx->global_var_obj); - - JS_FreeValue(ctx, ctx->throw_type_error); - JS_FreeValue(ctx, ctx->eval_obj); - - JS_FreeValue(ctx, ctx->array_proto_values); - for(i = 0; i < JS_NATIVE_ERROR_COUNT; i++) { - JS_FreeValue(ctx, ctx->native_error_proto[i]); - } - JS_FreeValue(ctx, ctx->error_ctor); - JS_FreeValue(ctx, ctx->error_prepare_stack); - for(i = 0; i < rt->class_count; i++) { - JS_FreeValue(ctx, ctx->class_proto[i]); - } - js_free_rt(rt, ctx->class_proto); - JS_FreeValue(ctx, ctx->iterator_proto); - JS_FreeValue(ctx, ctx->async_iterator_proto); - JS_FreeValue(ctx, ctx->promise_ctor); - JS_FreeValue(ctx, ctx->array_ctor); - JS_FreeValue(ctx, ctx->regexp_ctor); - JS_FreeValue(ctx, ctx->function_ctor); - JS_FreeValue(ctx, ctx->function_proto); - - js_free_shape_null(ctx->rt, ctx->array_shape); - - list_del(&ctx->link); - remove_gc_object(&ctx->header); - js_free_rt(ctx->rt, ctx); -} - -JSRuntime *JS_GetRuntime(JSContext *ctx) -{ - return ctx->rt; -} - -static void update_stack_limit(JSRuntime *rt) -{ - if (rt->stack_size == 0) { - rt->stack_limit = 0; /* no limit */ - } else { - rt->stack_limit = rt->stack_top - rt->stack_size; - } -} - -void JS_SetMaxStackSize(JSRuntime *rt, size_t stack_size) -{ - rt->stack_size = stack_size; - update_stack_limit(rt); -} - -void JS_UpdateStackTop(JSRuntime *rt) -{ - rt->stack_top = js_get_stack_pointer(); - update_stack_limit(rt); -} - -static inline BOOL is_strict_mode(JSContext *ctx) -{ - JSStackFrame *sf = ctx->rt->current_stack_frame; - return (sf && (sf->js_mode & JS_MODE_STRICT)); -} - -/* JSAtom support */ - -#define JS_ATOM_TAG_INT (1U << 31) -#define JS_ATOM_MAX_INT (JS_ATOM_TAG_INT - 1) -#define JS_ATOM_MAX ((1U << 30) - 1) - -/* return the max count from the hash size */ -#define JS_ATOM_COUNT_RESIZE(n) ((n) * 2) - -static inline BOOL __JS_AtomIsConst(JSAtom v) -{ -#if defined(DUMP_LEAKS) && DUMP_LEAKS > 1 - return (int32_t)v <= 0; -#else - return (int32_t)v < JS_ATOM_END; -#endif -} - -static inline BOOL __JS_AtomIsTaggedInt(JSAtom v) -{ - return (v & JS_ATOM_TAG_INT) != 0; -} - -static inline JSAtom __JS_AtomFromUInt32(uint32_t v) -{ - return v | JS_ATOM_TAG_INT; -} - -static inline uint32_t __JS_AtomToUInt32(JSAtom atom) -{ - return atom & ~JS_ATOM_TAG_INT; -} - -static inline int is_num(int c) -{ - return c >= '0' && c <= '9'; -} - -/* return TRUE if the string is a number n with 0 <= n <= 2^32-1 */ -static inline BOOL is_num_string(uint32_t *pval, const JSString *p) -{ - uint32_t n; - uint64_t n64; - int c, i, len; - - len = p->len; - if (len == 0 || len > 10) - return FALSE; - if (p->is_wide_char) - c = p->u.str16[0]; - else - c = p->u.str8[0]; - if (is_num(c)) { - if (c == '0') { - if (len != 1) - return FALSE; - n = 0; - } else { - n = c - '0'; - for(i = 1; i < len; i++) { - if (p->is_wide_char) - c = p->u.str16[i]; - else - c = p->u.str8[i]; - if (!is_num(c)) - return FALSE; - n64 = (uint64_t)n * 10 + (c - '0'); - if ((n64 >> 32) != 0) - return FALSE; - n = n64; - } - } - *pval = n; - return TRUE; - } else { - return FALSE; - } -} - -/* XXX: could use faster version ? */ -static inline uint32_t hash_string8(const uint8_t *str, size_t len, uint32_t h) -{ - size_t i; - - for(i = 0; i < len; i++) - h = h * 263 + str[i]; - return h; -} - -static inline uint32_t hash_string16(const uint16_t *str, - size_t len, uint32_t h) -{ - size_t i; - - for(i = 0; i < len; i++) - h = h * 263 + str[i]; - return h; -} - -static uint32_t hash_string(const JSString *str, uint32_t h) -{ - if (str->is_wide_char) - h = hash_string16(str->u.str16, str->len, h); - else - h = hash_string8(str->u.str8, str->len, h); - return h; -} - -static __maybe_unused void JS_DumpString(JSRuntime *rt, - const JSString *p) -{ - int i, c, sep; - - if (p == NULL) { - printf(""); - return; - } - printf("%d", p->header.ref_count); - sep = (p->header.ref_count == 1) ? '\"' : '\''; - putchar(sep); - for(i = 0; i < p->len; i++) { - if (p->is_wide_char) - c = p->u.str16[i]; - else - c = p->u.str8[i]; - if (c == sep || c == '\\') { - putchar('\\'); - putchar(c); - } else if (c >= ' ' && c <= 126) { - putchar(c); - } else if (c == '\n') { - putchar('\\'); - putchar('n'); - } else { - printf("\\u%04x", c); - } - } - putchar(sep); -} - -static __maybe_unused void JS_DumpAtoms(JSRuntime *rt) -{ - JSAtomStruct *p; - int h, i; - /* This only dumps hashed atoms, not JS_ATOM_TYPE_SYMBOL atoms */ - printf("JSAtom count=%d size=%d hash_size=%d:\n", - rt->atom_count, rt->atom_size, rt->atom_hash_size); - printf("JSAtom hash table: {\n"); - for(i = 0; i < rt->atom_hash_size; i++) { - h = rt->atom_hash[i]; - if (h) { - printf(" %d:", i); - while (h) { - p = rt->atom_array[h]; - printf(" "); - JS_DumpString(rt, p); - h = p->hash_next; - } - printf("\n"); - } - } - printf("}\n"); - printf("JSAtom table: {\n"); - for(i = 0; i < rt->atom_size; i++) { - p = rt->atom_array[i]; - if (!atom_is_free(p)) { - printf(" %d: { %d %08x ", i, p->atom_type, p->hash); - if (!(p->len == 0 && p->is_wide_char != 0)) - JS_DumpString(rt, p); - printf(" %d }\n", p->hash_next); - } - } - printf("}\n"); -} - -static int JS_ResizeAtomHash(JSRuntime *rt, int new_hash_size) -{ - JSAtomStruct *p; - uint32_t new_hash_mask, h, i, hash_next1, j, *new_hash; - - assert((new_hash_size & (new_hash_size - 1)) == 0); /* power of two */ - new_hash_mask = new_hash_size - 1; - new_hash = js_mallocz_rt(rt, sizeof(rt->atom_hash[0]) * new_hash_size); - if (!new_hash) - return -1; - for(i = 0; i < rt->atom_hash_size; i++) { - h = rt->atom_hash[i]; - while (h != 0) { - p = rt->atom_array[h]; - hash_next1 = p->hash_next; - /* add in new hash table */ - j = p->hash & new_hash_mask; - p->hash_next = new_hash[j]; - new_hash[j] = h; - h = hash_next1; - } - } - js_free_rt(rt, rt->atom_hash); - rt->atom_hash = new_hash; - rt->atom_hash_size = new_hash_size; - rt->atom_count_resize = JS_ATOM_COUNT_RESIZE(new_hash_size); - // JS_DumpAtoms(rt); - return 0; -} - -static int JS_InitAtoms(JSRuntime *rt) -{ - int i, len, atom_type; - const char *p; - - rt->atom_hash_size = 0; - rt->atom_hash = NULL; - rt->atom_count = 0; - rt->atom_size = 0; - rt->atom_free_index = 0; - if (JS_ResizeAtomHash(rt, 256)) /* there are at least 195 predefined atoms */ - return -1; - - p = js_atom_init; - for(i = 1; i < JS_ATOM_END; i++) { - if (i == JS_ATOM_Private_brand) - atom_type = JS_ATOM_TYPE_PRIVATE; - else if (i >= JS_ATOM_Symbol_toPrimitive) - atom_type = JS_ATOM_TYPE_SYMBOL; - else - atom_type = JS_ATOM_TYPE_STRING; - len = strlen(p); - if (__JS_NewAtomInit(rt, p, len, atom_type) == JS_ATOM_NULL) - return -1; - p = p + len + 1; - } - return 0; -} - -static JSAtom JS_DupAtomRT(JSRuntime *rt, JSAtom v) -{ - JSAtomStruct *p; - - if (!__JS_AtomIsConst(v)) { - p = rt->atom_array[v]; - p->header.ref_count++; - } - return v; -} - -JSAtom JS_DupAtom(JSContext *ctx, JSAtom v) -{ - JSRuntime *rt; - JSAtomStruct *p; - - if (!__JS_AtomIsConst(v)) { - rt = ctx->rt; - p = rt->atom_array[v]; - p->header.ref_count++; - } - return v; -} - -static JSAtomKindEnum JS_AtomGetKind(JSContext *ctx, JSAtom v) -{ - JSRuntime *rt; - JSAtomStruct *p; - - rt = ctx->rt; - if (__JS_AtomIsTaggedInt(v)) - return JS_ATOM_KIND_STRING; - p = rt->atom_array[v]; - switch(p->atom_type) { - case JS_ATOM_TYPE_STRING: - return JS_ATOM_KIND_STRING; - case JS_ATOM_TYPE_GLOBAL_SYMBOL: - return JS_ATOM_KIND_SYMBOL; - case JS_ATOM_TYPE_SYMBOL: - switch(p->hash) { - case JS_ATOM_HASH_SYMBOL: - return JS_ATOM_KIND_SYMBOL; - case JS_ATOM_HASH_PRIVATE: - return JS_ATOM_KIND_PRIVATE; - default: - abort(); - } - default: - abort(); - } - return (JSAtomKindEnum){-1}; // pacify compiler -} - -static BOOL JS_AtomIsString(JSContext *ctx, JSAtom v) -{ - return JS_AtomGetKind(ctx, v) == JS_ATOM_KIND_STRING; -} - -static JSAtom js_get_atom_index(JSRuntime *rt, JSAtomStruct *p) -{ - uint32_t i = p->hash_next; /* atom_index */ - if (p->atom_type != JS_ATOM_TYPE_SYMBOL) { - JSAtomStruct *p1; - - i = rt->atom_hash[p->hash & (rt->atom_hash_size - 1)]; - p1 = rt->atom_array[i]; - while (p1 != p) { - assert(i != 0); - i = p1->hash_next; - p1 = rt->atom_array[i]; - } - } - return i; -} - -/* string case (internal). Return JS_ATOM_NULL if error. 'str' is - freed. */ -static JSAtom __JS_NewAtom(JSRuntime *rt, JSString *str, int atom_type) -{ - uint32_t h, h1, i; - JSAtomStruct *p; - int len; - - if (atom_type < JS_ATOM_TYPE_SYMBOL) { - /* str is not NULL */ - if (str->atom_type == atom_type) { - /* str is the atom, return its index */ - i = js_get_atom_index(rt, str); - /* reduce string refcount and increase atom's unless constant */ - if (__JS_AtomIsConst(i)) - str->header.ref_count--; - return i; - } - /* try and locate an already registered atom */ - len = str->len; - h = hash_string(str, atom_type); - h &= JS_ATOM_HASH_MASK; - h1 = h & (rt->atom_hash_size - 1); - i = rt->atom_hash[h1]; - while (i != 0) { - p = rt->atom_array[i]; - if (p->hash == h && - p->atom_type == atom_type && - p->len == len && - js_string_memcmp(p, str, len) == 0) { - if (!__JS_AtomIsConst(i)) - p->header.ref_count++; - goto done; - } - i = p->hash_next; - } - } else { - h1 = 0; /* avoid warning */ - if (atom_type == JS_ATOM_TYPE_SYMBOL) { - h = JS_ATOM_HASH_SYMBOL; - } else { - h = JS_ATOM_HASH_PRIVATE; - atom_type = JS_ATOM_TYPE_SYMBOL; - } - } - - if (rt->atom_free_index == 0) { - /* allow new atom entries */ - uint32_t new_size, start; - JSAtomStruct **new_array; - - /* alloc new with size progression 3/2: - 4 6 9 13 19 28 42 63 94 141 211 316 474 711 1066 1599 2398 3597 5395 8092 - preallocating space for predefined atoms (at least 195). - */ - new_size = max_int(211, rt->atom_size * 3 / 2); - if (new_size > JS_ATOM_MAX) - goto fail; - /* XXX: should use realloc2 to use slack space */ - new_array = js_realloc_rt(rt, rt->atom_array, sizeof(*new_array) * new_size); - if (!new_array) - goto fail; - /* Note: the atom 0 is not used */ - start = rt->atom_size; - if (start == 0) { - /* JS_ATOM_NULL entry */ - p = js_mallocz_rt(rt, sizeof(JSAtomStruct)); - if (!p) { - js_free_rt(rt, new_array); - goto fail; - } - p->header.ref_count = 1; /* not refcounted */ - p->atom_type = JS_ATOM_TYPE_SYMBOL; -#ifdef DUMP_LEAKS - list_add_tail(&p->link, &rt->string_list); -#endif - new_array[0] = p; - rt->atom_count++; - start = 1; - } - rt->atom_size = new_size; - rt->atom_array = new_array; - rt->atom_free_index = start; - for(i = start; i < new_size; i++) { - uint32_t next; - if (i == (new_size - 1)) - next = 0; - else - next = i + 1; - rt->atom_array[i] = atom_set_free(next); - } - } - - if (str) { - if (str->atom_type == 0) { - p = str; - p->atom_type = atom_type; - } else { - p = js_malloc_rt(rt, sizeof(JSString) + - (str->len << str->is_wide_char) + - 1 - str->is_wide_char); - if (unlikely(!p)) - goto fail; - p->header.ref_count = 1; - p->is_wide_char = str->is_wide_char; - p->len = str->len; -#ifdef DUMP_LEAKS - list_add_tail(&p->link, &rt->string_list); -#endif - memcpy(p->u.str8, str->u.str8, (str->len << str->is_wide_char) + - 1 - str->is_wide_char); - js_free_string(rt, str); - } - } else { - p = js_malloc_rt(rt, sizeof(JSAtomStruct)); /* empty wide string */ - if (!p) - return JS_ATOM_NULL; - p->header.ref_count = 1; - p->is_wide_char = 1; /* Hack to represent NULL as a JSString */ - p->len = 0; -#ifdef DUMP_LEAKS - list_add_tail(&p->link, &rt->string_list); -#endif - } - - /* use an already free entry */ - i = rt->atom_free_index; - rt->atom_free_index = atom_get_free(rt->atom_array[i]); - rt->atom_array[i] = p; - - p->hash = h; - p->hash_next = i; /* atom_index */ - p->atom_type = atom_type; - p->first_weak_ref = NULL; - - rt->atom_count++; - - if (atom_type != JS_ATOM_TYPE_SYMBOL) { - p->hash_next = rt->atom_hash[h1]; - rt->atom_hash[h1] = i; - if (unlikely(rt->atom_count >= rt->atom_count_resize)) - JS_ResizeAtomHash(rt, rt->atom_hash_size * 2); - } - - // JS_DumpAtoms(rt); - return i; - - fail: - i = JS_ATOM_NULL; - done: - if (str) - js_free_string(rt, str); - return i; -} - -/* only works with zero terminated 8 bit strings */ -static JSAtom __JS_NewAtomInit(JSRuntime *rt, const char *str, int len, - int atom_type) -{ - JSString *p; - p = js_alloc_string_rt(rt, len, 0); - if (!p) - return JS_ATOM_NULL; - memcpy(p->u.str8, str, len); - p->u.str8[len] = '\0'; - return __JS_NewAtom(rt, p, atom_type); -} - -static JSAtom __JS_FindAtom(JSRuntime *rt, const char *str, size_t len, - int atom_type) -{ - uint32_t h, h1, i; - JSAtomStruct *p; - - h = hash_string8((const uint8_t *)str, len, JS_ATOM_TYPE_STRING); - h &= JS_ATOM_HASH_MASK; - h1 = h & (rt->atom_hash_size - 1); - i = rt->atom_hash[h1]; - while (i != 0) { - p = rt->atom_array[i]; - if (p->hash == h && - p->atom_type == JS_ATOM_TYPE_STRING && - p->len == len && - p->is_wide_char == 0 && - memcmp(p->u.str8, str, len) == 0) { - if (!__JS_AtomIsConst(i)) - p->header.ref_count++; - return i; - } - i = p->hash_next; - } - return JS_ATOM_NULL; -} - -static void JS_FreeAtomStruct(JSRuntime *rt, JSAtomStruct *p) -{ - uint32_t i = p->hash_next; /* atom_index */ - if (p->atom_type != JS_ATOM_TYPE_SYMBOL) { - JSAtomStruct *p0, *p1; - uint32_t h0; - - h0 = p->hash & (rt->atom_hash_size - 1); - i = rt->atom_hash[h0]; - p1 = rt->atom_array[i]; - if (p1 == p) { - rt->atom_hash[h0] = p1->hash_next; - } else { - for(;;) { - assert(i != 0); - p0 = p1; - i = p1->hash_next; - p1 = rt->atom_array[i]; - if (p1 == p) { - p0->hash_next = p1->hash_next; - break; - } - } - } - } - /* insert in free atom list */ - rt->atom_array[i] = atom_set_free(rt->atom_free_index); - rt->atom_free_index = i; - if (unlikely(p->first_weak_ref)) { - reset_weak_ref(rt, &p->first_weak_ref); - } - /* free the string structure */ -#ifdef DUMP_LEAKS - list_del(&p->link); -#endif - js_free_rt(rt, p); - rt->atom_count--; - assert(rt->atom_count >= 0); -} - -static void __JS_FreeAtom(JSRuntime *rt, uint32_t i) -{ - JSAtomStruct *p; - - p = rt->atom_array[i]; - if (--p->header.ref_count > 0) - return; - JS_FreeAtomStruct(rt, p); -} - -/* Warning: 'p' is freed */ -static JSAtom JS_NewAtomStr(JSContext *ctx, JSString *p) -{ - JSRuntime *rt = ctx->rt; - uint32_t n; - if (is_num_string(&n, p)) { - if (n <= JS_ATOM_MAX_INT) { - js_free_string(rt, p); - return __JS_AtomFromUInt32(n); - } - } - /* XXX: should generate an exception */ - return __JS_NewAtom(rt, p, JS_ATOM_TYPE_STRING); -} - -JSAtom JS_NewAtomLen(JSContext *ctx, const char *str, size_t len) -{ - JSValue val; - - if (len == 0 || !is_digit(*str)) { - JSAtom atom = __JS_FindAtom(ctx->rt, str, len, JS_ATOM_TYPE_STRING); - if (atom) - return atom; - } - val = JS_NewStringLen(ctx, str, len); - if (JS_IsException(val)) - return JS_ATOM_NULL; - return JS_NewAtomStr(ctx, JS_VALUE_GET_STRING(val)); -} - -JSAtom JS_NewAtom(JSContext *ctx, const char *str) -{ - return JS_NewAtomLen(ctx, str, strlen(str)); -} - -JSAtom JS_NewAtomUInt32(JSContext *ctx, uint32_t n) -{ - if (n <= JS_ATOM_MAX_INT) { - return __JS_AtomFromUInt32(n); - } else { - char buf[11]; - JSValue val; - snprintf(buf, sizeof(buf), "%u", n); - val = JS_NewString(ctx, buf); - if (JS_IsException(val)) - return JS_ATOM_NULL; - return __JS_NewAtom(ctx->rt, JS_VALUE_GET_STRING(val), - JS_ATOM_TYPE_STRING); - } -} - -static JSAtom JS_NewAtomInt64(JSContext *ctx, int64_t n) -{ - if ((uint64_t)n <= JS_ATOM_MAX_INT) { - return __JS_AtomFromUInt32((uint32_t)n); - } else { - char buf[24]; - JSValue val; - snprintf(buf, sizeof(buf), "%" PRId64 , n); - val = JS_NewString(ctx, buf); - if (JS_IsException(val)) - return JS_ATOM_NULL; - return __JS_NewAtom(ctx->rt, JS_VALUE_GET_STRING(val), - JS_ATOM_TYPE_STRING); - } -} - -/* 'p' is freed */ -static JSValue JS_NewSymbol(JSContext *ctx, JSString *p, int atom_type) -{ - JSRuntime *rt = ctx->rt; - JSAtom atom; - atom = __JS_NewAtom(rt, p, atom_type); - if (atom == JS_ATOM_NULL) - return JS_ThrowOutOfMemory(ctx); - return JS_MKPTR(JS_TAG_SYMBOL, rt->atom_array[atom]); -} - -/* descr must be a non-numeric string atom */ -static JSValue JS_NewSymbolFromAtom(JSContext *ctx, JSAtom descr, - int atom_type) -{ - JSRuntime *rt = ctx->rt; - JSString *p; - - assert(!__JS_AtomIsTaggedInt(descr)); - assert(descr < rt->atom_size); - p = rt->atom_array[descr]; - js_dup(JS_MKPTR(JS_TAG_STRING, p)); - return JS_NewSymbol(ctx, p, atom_type); -} - -#define ATOM_GET_STR_BUF_SIZE 64 - -/* Should only be used for debug. */ -static const char *JS_AtomGetStrRT(JSRuntime *rt, char *buf, int buf_size, - JSAtom atom) -{ - if (__JS_AtomIsTaggedInt(atom)) { - snprintf(buf, buf_size, "%u", __JS_AtomToUInt32(atom)); - } else { - JSAtomStruct *p; - assert(atom < rt->atom_size); - if (atom == JS_ATOM_NULL) { - snprintf(buf, buf_size, ""); - } else { - int i, c; - char *q; - JSString *str; - - q = buf; - p = rt->atom_array[atom]; - assert(!atom_is_free(p)); - str = p; - if (str) { - if (!str->is_wide_char) { - /* special case ASCII strings */ - c = 0; - for(i = 0; i < str->len; i++) { - c |= str->u.str8[i]; - } - if (c < 0x80) - return (const char *)str->u.str8; - } - for(i = 0; i < str->len; i++) { - if (str->is_wide_char) - c = str->u.str16[i]; - else - c = str->u.str8[i]; - if ((q - buf) >= buf_size - UTF8_CHAR_LEN_MAX) - break; - if (c < 128) { - *q++ = c; - } else { - q += unicode_to_utf8((uint8_t *)q, c); - } - } - } - *q = '\0'; - } - } - return buf; -} - -static const char *JS_AtomGetStr(JSContext *ctx, char *buf, int buf_size, JSAtom atom) -{ - return JS_AtomGetStrRT(ctx->rt, buf, buf_size, atom); -} - -static JSValue __JS_AtomToValue(JSContext *ctx, JSAtom atom, BOOL force_string) -{ - char buf[ATOM_GET_STR_BUF_SIZE]; - - if (__JS_AtomIsTaggedInt(atom)) { - snprintf(buf, sizeof(buf), "%u", __JS_AtomToUInt32(atom)); - return JS_NewString(ctx, buf); - } else { - JSRuntime *rt = ctx->rt; - JSAtomStruct *p; - assert(atom < rt->atom_size); - p = rt->atom_array[atom]; - if (p->atom_type == JS_ATOM_TYPE_STRING) { - goto ret_string; - } else if (force_string) { - if (p->len == 0 && p->is_wide_char != 0) { - /* no description string */ - p = rt->atom_array[JS_ATOM_empty_string]; - } - ret_string: - return js_dup(JS_MKPTR(JS_TAG_STRING, p)); - } else { - return js_dup(JS_MKPTR(JS_TAG_SYMBOL, p)); - } - } -} - -JSValue JS_AtomToValue(JSContext *ctx, JSAtom atom) -{ - return __JS_AtomToValue(ctx, atom, FALSE); -} - -JSValue JS_AtomToString(JSContext *ctx, JSAtom atom) -{ - return __JS_AtomToValue(ctx, atom, TRUE); -} - -/* return TRUE if the atom is an array index (i.e. 0 <= index <= - 2^32-2 and return its value */ -static BOOL JS_AtomIsArrayIndex(JSContext *ctx, uint32_t *pval, JSAtom atom) -{ - if (__JS_AtomIsTaggedInt(atom)) { - *pval = __JS_AtomToUInt32(atom); - return TRUE; - } else { - JSRuntime *rt = ctx->rt; - JSAtomStruct *p; - uint32_t val; - - assert(atom < rt->atom_size); - p = rt->atom_array[atom]; - if (p->atom_type == JS_ATOM_TYPE_STRING && - is_num_string(&val, p) && val != -1) { - *pval = val; - return TRUE; - } else { - *pval = 0; - return FALSE; - } - } -} - -/* This test must be fast if atom is not a numeric index (e.g. a - method name). Return JS_UNDEFINED if not a numeric - index. JS_EXCEPTION can also be returned. */ -static JSValue JS_AtomIsNumericIndex1(JSContext *ctx, JSAtom atom) -{ - JSRuntime *rt = ctx->rt; - JSAtomStruct *p1; - JSString *p; - int c, len, ret; - JSValue num, str; - - if (__JS_AtomIsTaggedInt(atom)) - return js_int32(__JS_AtomToUInt32(atom)); - assert(atom < rt->atom_size); - p1 = rt->atom_array[atom]; - if (p1->atom_type != JS_ATOM_TYPE_STRING) - return JS_UNDEFINED; - p = p1; - len = p->len; - if (p->is_wide_char) { - const uint16_t *r = p->u.str16, *r_end = p->u.str16 + len; - if (r >= r_end) - return JS_UNDEFINED; - c = *r; - if (c == '-') { - if (r >= r_end) - return JS_UNDEFINED; - r++; - c = *r; - /* -0 case is specific */ - if (c == '0' && len == 2) - goto minus_zero; - } - /* XXX: should test NaN, but the tests do not check it */ - if (!is_num(c)) { - /* XXX: String should be normalized, therefore 8-bit only */ - const uint16_t nfinity16[7] = { 'n', 'f', 'i', 'n', 'i', 't', 'y' }; - if (!(c =='I' && (r_end - r) == 8 && - !memcmp(r + 1, nfinity16, sizeof(nfinity16)))) - return JS_UNDEFINED; - } - } else { - const uint8_t *r = p->u.str8, *r_end = p->u.str8 + len; - if (r >= r_end) - return JS_UNDEFINED; - c = *r; - if (c == '-') { - if (r >= r_end) - return JS_UNDEFINED; - r++; - c = *r; - /* -0 case is specific */ - if (c == '0' && len == 2) { - minus_zero: - return __JS_NewFloat64(-0.0); - } - } - if (!is_num(c)) { - if (!(c =='I' && (r_end - r) == 8 && - !memcmp(r + 1, "nfinity", 7))) - return JS_UNDEFINED; - } - } - /* this is ECMA CanonicalNumericIndexString primitive */ - num = JS_ToNumber(ctx, JS_MKPTR(JS_TAG_STRING, p)); - if (JS_IsException(num)) - return num; - str = JS_ToString(ctx, num); - if (JS_IsException(str)) { - JS_FreeValue(ctx, num); - return str; - } - ret = js_string_compare(ctx, p, JS_VALUE_GET_STRING(str)); - JS_FreeValue(ctx, str); - if (ret == 0) { - return num; - } else { - JS_FreeValue(ctx, num); - return JS_UNDEFINED; - } -} - -/* return -1 if exception or TRUE/FALSE */ -static int JS_AtomIsNumericIndex(JSContext *ctx, JSAtom atom) -{ - JSValue num; - num = JS_AtomIsNumericIndex1(ctx, atom); - if (likely(JS_IsUndefined(num))) - return FALSE; - if (JS_IsException(num)) - return -1; - JS_FreeValue(ctx, num); - return TRUE; -} - -void JS_FreeAtom(JSContext *ctx, JSAtom v) -{ - if (!__JS_AtomIsConst(v)) - __JS_FreeAtom(ctx->rt, v); -} - -void JS_FreeAtomRT(JSRuntime *rt, JSAtom v) -{ - if (!__JS_AtomIsConst(v)) - __JS_FreeAtom(rt, v); -} - -/* return TRUE if 'v' is a symbol with a string description */ -static BOOL JS_AtomSymbolHasDescription(JSContext *ctx, JSAtom v) -{ - JSRuntime *rt; - JSAtomStruct *p; - - rt = ctx->rt; - if (__JS_AtomIsTaggedInt(v)) - return FALSE; - p = rt->atom_array[v]; - return (((p->atom_type == JS_ATOM_TYPE_SYMBOL && - p->hash == JS_ATOM_HASH_SYMBOL) || - p->atom_type == JS_ATOM_TYPE_GLOBAL_SYMBOL) && - !(p->len == 0 && p->is_wide_char != 0)); -} - -static __maybe_unused void print_atom(JSContext *ctx, JSAtom atom) -{ - char buf[ATOM_GET_STR_BUF_SIZE]; - const char *p; - int i; - - /* XXX: should handle embedded null characters */ - /* XXX: should move encoding code to JS_AtomGetStr */ - p = JS_AtomGetStr(ctx, buf, sizeof(buf), atom); - for (i = 0; p[i]; i++) { - int c = (unsigned char)p[i]; - if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || - (c == '_' || c == '$') || (c >= '0' && c <= '9' && i > 0))) - break; - } - if (i > 0 && p[i] == '\0') { - printf("%s", p); - } else { - putchar('"'); - printf("%.*s", i, p); - for (; p[i]; i++) { - int c = (unsigned char)p[i]; - if (c == '\"' || c == '\\') { - putchar('\\'); - putchar(c); - } else if (c >= ' ' && c <= 126) { - putchar(c); - } else if (c == '\n') { - putchar('\\'); - putchar('n'); - } else { - printf("\\u%04x", c); - } - } - putchar('\"'); - } -} - -/* free with JS_FreeCString() */ -const char *JS_AtomToCString(JSContext *ctx, JSAtom atom) -{ - JSValue str; - const char *cstr; - - str = JS_AtomToString(ctx, atom); - if (JS_IsException(str)) - return NULL; - cstr = JS_ToCString(ctx, str); - JS_FreeValue(ctx, str); - return cstr; -} - -/* return a string atom containing name concatenated with str1 */ -static JSAtom js_atom_concat_str(JSContext *ctx, JSAtom name, const char *str1) -{ - JSValue str; - JSAtom atom; - const char *cstr; - char *cstr2; - size_t len, len1; - - str = JS_AtomToString(ctx, name); - if (JS_IsException(str)) - return JS_ATOM_NULL; - cstr = JS_ToCStringLen(ctx, &len, str); - if (!cstr) - goto fail; - len1 = strlen(str1); - cstr2 = js_malloc(ctx, len + len1 + 1); - if (!cstr2) - goto fail; - memcpy(cstr2, cstr, len); - memcpy(cstr2 + len, str1, len1); - cstr2[len + len1] = '\0'; - atom = JS_NewAtomLen(ctx, cstr2, len + len1); - js_free(ctx, cstr2); - JS_FreeCString(ctx, cstr); - JS_FreeValue(ctx, str); - return atom; - fail: - JS_FreeCString(ctx, cstr); - JS_FreeValue(ctx, str); - return JS_ATOM_NULL; -} - -static JSAtom js_atom_concat_num(JSContext *ctx, JSAtom name, uint32_t n) -{ - char buf[16]; - snprintf(buf, sizeof(buf), "%u", n); - return js_atom_concat_str(ctx, name, buf); -} - -static inline BOOL JS_IsEmptyString(JSValue v) -{ - return JS_VALUE_GET_TAG(v) == JS_TAG_STRING && JS_VALUE_GET_STRING(v)->len == 0; -} - -/* JSClass support */ - -/* a new class ID is allocated if *pclass_id != 0 */ -JSClassID JS_NewClassID(JSRuntime *rt, JSClassID *pclass_id) -{ - JSClassID class_id = *pclass_id; - if (class_id == 0) { - class_id = rt->js_class_id_alloc++; - *pclass_id = class_id; - } - return class_id; -} - -BOOL JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id) -{ - return (class_id < rt->class_count && - rt->class_array[class_id].class_id != 0); -} - -/* create a new object internal class. Return -1 if error, 0 if - OK. The finalizer can be NULL if none is needed. */ -static int JS_NewClass1(JSRuntime *rt, JSClassID class_id, - const JSClassDef *class_def, JSAtom name) -{ - int new_size, i; - JSClass *cl, *new_class_array; - struct list_head *el; - - if (class_id >= (1 << 16)) - return -1; - if (class_id < rt->class_count && - rt->class_array[class_id].class_id != 0) - return -1; - - if (class_id >= rt->class_count) { - new_size = max_int(JS_CLASS_INIT_COUNT, - max_int(class_id + 1, rt->class_count * 3 / 2)); - - /* reallocate the context class prototype array, if any */ - list_for_each(el, &rt->context_list) { - JSContext *ctx = list_entry(el, JSContext, link); - JSValue *new_tab; - new_tab = js_realloc_rt(rt, ctx->class_proto, - sizeof(ctx->class_proto[0]) * new_size); - if (!new_tab) - return -1; - for(i = rt->class_count; i < new_size; i++) - new_tab[i] = JS_NULL; - ctx->class_proto = new_tab; - } - /* reallocate the class array */ - new_class_array = js_realloc_rt(rt, rt->class_array, - sizeof(JSClass) * new_size); - if (!new_class_array) - return -1; - memset(new_class_array + rt->class_count, 0, - (new_size - rt->class_count) * sizeof(JSClass)); - rt->class_array = new_class_array; - rt->class_count = new_size; - } - cl = &rt->class_array[class_id]; - cl->class_id = class_id; - cl->class_name = JS_DupAtomRT(rt, name); - cl->finalizer = class_def->finalizer; - cl->gc_mark = class_def->gc_mark; - cl->call = class_def->call; - cl->exotic = class_def->exotic; - return 0; -} - -int JS_NewClass(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def) -{ - int ret, len; - JSAtom name; - - len = strlen(class_def->class_name); - name = __JS_FindAtom(rt, class_def->class_name, len, JS_ATOM_TYPE_STRING); - if (name == JS_ATOM_NULL) { - name = __JS_NewAtomInit(rt, class_def->class_name, len, JS_ATOM_TYPE_STRING); - if (name == JS_ATOM_NULL) - return -1; - } - ret = JS_NewClass1(rt, class_id, class_def, name); - JS_FreeAtomRT(rt, name); - return ret; -} - -static JSValue js_new_string8(JSContext *ctx, const uint8_t *buf, int len) -{ - JSString *str; - - if (len <= 0) { - return JS_AtomToString(ctx, JS_ATOM_empty_string); - } - str = js_alloc_string(ctx, len, 0); - if (!str) - return JS_EXCEPTION; - memcpy(str->u.str8, buf, len); - str->u.str8[len] = '\0'; - return JS_MKPTR(JS_TAG_STRING, str); -} - -static JSValue js_new_string16(JSContext *ctx, const uint16_t *buf, int len) -{ - JSString *str; - str = js_alloc_string(ctx, len, 1); - if (!str) - return JS_EXCEPTION; - memcpy(str->u.str16, buf, len * 2); - return JS_MKPTR(JS_TAG_STRING, str); -} - -static JSValue js_new_string_char(JSContext *ctx, uint16_t c) -{ - if (c < 0x100) { - uint8_t ch8 = c; - return js_new_string8(ctx, &ch8, 1); - } else { - uint16_t ch16 = c; - return js_new_string16(ctx, &ch16, 1); - } -} - -static JSValue js_sub_string(JSContext *ctx, JSString *p, int start, int end) -{ - int len = end - start; - if (start == 0 && end == p->len) { - return js_dup(JS_MKPTR(JS_TAG_STRING, p)); - } - if (p->is_wide_char && len > 0) { - JSString *str; - int i; - uint16_t c = 0; - for (i = start; i < end; i++) { - c |= p->u.str16[i]; - } - if (c > 0xFF) - return js_new_string16(ctx, p->u.str16 + start, len); - - str = js_alloc_string(ctx, len, 0); - if (!str) - return JS_EXCEPTION; - for (i = 0; i < len; i++) { - str->u.str8[i] = p->u.str16[start + i]; - } - str->u.str8[len] = '\0'; - return JS_MKPTR(JS_TAG_STRING, str); - } else { - return js_new_string8(ctx, p->u.str8 + start, len); - } -} - -typedef struct StringBuffer { - JSContext *ctx; - JSString *str; - int len; - int size; - int is_wide_char; - int error_status; -} StringBuffer; - -/* It is valid to call string_buffer_end() and all string_buffer functions even - if string_buffer_init() or another string_buffer function returns an error. - If the error_status is set, string_buffer_end() returns JS_EXCEPTION. - */ -static int string_buffer_init2(JSContext *ctx, StringBuffer *s, int size, - int is_wide) -{ - s->ctx = ctx; - s->size = size; - s->len = 0; - s->is_wide_char = is_wide; - s->error_status = 0; - s->str = js_alloc_string(ctx, size, is_wide); - if (unlikely(!s->str)) { - s->size = 0; - return s->error_status = -1; - } -#ifdef DUMP_LEAKS - /* the StringBuffer may reallocate the JSString, only link it at the end */ - list_del(&s->str->link); -#endif - return 0; -} - -static inline int string_buffer_init(JSContext *ctx, StringBuffer *s, int size) -{ - return string_buffer_init2(ctx, s, size, 0); -} - -static void string_buffer_free(StringBuffer *s) -{ - js_free(s->ctx, s->str); - s->str = NULL; -} - -static int string_buffer_set_error(StringBuffer *s) -{ - js_free(s->ctx, s->str); - s->str = NULL; - s->size = 0; - s->len = 0; - return s->error_status = -1; -} - -static no_inline int string_buffer_widen(StringBuffer *s, int size) -{ - JSString *str; - size_t slack; - int i; - - if (s->error_status) - return -1; - - str = js_realloc2(s->ctx, s->str, sizeof(JSString) + (size << 1), &slack); - if (!str) - return string_buffer_set_error(s); - size += slack >> 1; - for(i = s->len; i-- > 0;) { - str->u.str16[i] = str->u.str8[i]; - } - s->is_wide_char = 1; - s->size = size; - s->str = str; - return 0; -} - -static no_inline int string_buffer_realloc(StringBuffer *s, int new_len, int c) -{ - JSString *new_str; - int new_size; - size_t new_size_bytes, slack; - - if (s->error_status) - return -1; - - if (new_len > JS_STRING_LEN_MAX) { - JS_ThrowInternalError(s->ctx, "string too long"); - return string_buffer_set_error(s); - } - new_size = min_int(max_int(new_len, s->size * 3 / 2), JS_STRING_LEN_MAX); - if (!s->is_wide_char && c >= 0x100) { - return string_buffer_widen(s, new_size); - } - new_size_bytes = sizeof(JSString) + (new_size << s->is_wide_char) + 1 - s->is_wide_char; - new_str = js_realloc2(s->ctx, s->str, new_size_bytes, &slack); - if (!new_str) - return string_buffer_set_error(s); - new_size = min_int(new_size + (slack >> s->is_wide_char), JS_STRING_LEN_MAX); - s->size = new_size; - s->str = new_str; - return 0; -} - -static no_inline int string_buffer_putc_slow(StringBuffer *s, uint32_t c) -{ - if (unlikely(s->len >= s->size)) { - if (string_buffer_realloc(s, s->len + 1, c)) - return -1; - } - if (s->is_wide_char) { - s->str->u.str16[s->len++] = c; - } else if (c < 0x100) { - s->str->u.str8[s->len++] = c; - } else { - if (string_buffer_widen(s, s->size)) - return -1; - s->str->u.str16[s->len++] = c; - } - return 0; -} - -/* 0 <= c <= 0xff */ -static int string_buffer_putc8(StringBuffer *s, uint32_t c) -{ - if (unlikely(s->len >= s->size)) { - if (string_buffer_realloc(s, s->len + 1, c)) - return -1; - } - if (s->is_wide_char) { - s->str->u.str16[s->len++] = c; - } else { - s->str->u.str8[s->len++] = c; - } - return 0; -} - -/* 0 <= c <= 0xffff */ -static int string_buffer_putc16(StringBuffer *s, uint32_t c) -{ - if (likely(s->len < s->size)) { - if (s->is_wide_char) { - s->str->u.str16[s->len++] = c; - return 0; - } else if (c < 0x100) { - s->str->u.str8[s->len++] = c; - return 0; - } - } - return string_buffer_putc_slow(s, c); -} - -/* 0 <= c <= 0x10ffff */ -static int string_buffer_putc(StringBuffer *s, uint32_t c) -{ - if (unlikely(c >= 0x10000)) { - /* surrogate pair */ - c -= 0x10000; - if (string_buffer_putc16(s, (c >> 10) + 0xd800)) - return -1; - c = (c & 0x3ff) + 0xdc00; - } - return string_buffer_putc16(s, c); -} - -static int string_get(const JSString *p, int idx) { - return p->is_wide_char ? p->u.str16[idx] : p->u.str8[idx]; -} - -static int string_getc(const JSString *p, int *pidx) -{ - int idx, c, c1; - idx = *pidx; - if (p->is_wide_char) { - c = p->u.str16[idx++]; - if (is_hi_surrogate(c) && idx < p->len) { - c1 = p->u.str16[idx]; - if (is_lo_surrogate(c1)) { - c = from_surrogate(c, c1); - idx++; - } - } - } else { - c = p->u.str8[idx++]; - } - *pidx = idx; - return c; -} - -static int string_buffer_write8(StringBuffer *s, const uint8_t *p, int len) -{ - int i; - - if (s->len + len > s->size) { - if (string_buffer_realloc(s, s->len + len, 0)) - return -1; - } - if (s->is_wide_char) { - for (i = 0; i < len; i++) { - s->str->u.str16[s->len + i] = p[i]; - } - s->len += len; - } else { - memcpy(&s->str->u.str8[s->len], p, len); - s->len += len; - } - return 0; -} - -static int string_buffer_write16(StringBuffer *s, const uint16_t *p, int len) -{ - int c = 0, i; - - for (i = 0; i < len; i++) { - c |= p[i]; - } - if (s->len + len > s->size) { - if (string_buffer_realloc(s, s->len + len, c)) - return -1; - } else if (!s->is_wide_char && c >= 0x100) { - if (string_buffer_widen(s, s->size)) - return -1; - } - if (s->is_wide_char) { - memcpy(&s->str->u.str16[s->len], p, len << 1); - s->len += len; - } else { - for (i = 0; i < len; i++) { - s->str->u.str8[s->len + i] = p[i]; - } - s->len += len; - } - return 0; -} - -/* appending an ASCII string */ -static int string_buffer_puts8(StringBuffer *s, const char *str) -{ - return string_buffer_write8(s, (const uint8_t *)str, strlen(str)); -} - -static int string_buffer_concat(StringBuffer *s, const JSString *p, - uint32_t from, uint32_t to) -{ - if (to <= from) - return 0; - if (p->is_wide_char) - return string_buffer_write16(s, p->u.str16 + from, to - from); - else - return string_buffer_write8(s, p->u.str8 + from, to - from); -} - -static int string_buffer_concat_value(StringBuffer *s, JSValue v) -{ - JSString *p; - JSValue v1; - int res; - - if (s->error_status) { - /* prevent exception overload */ - return -1; - } - if (unlikely(JS_VALUE_GET_TAG(v) != JS_TAG_STRING)) { - v1 = JS_ToString(s->ctx, v); - if (JS_IsException(v1)) - return string_buffer_set_error(s); - p = JS_VALUE_GET_STRING(v1); - res = string_buffer_concat(s, p, 0, p->len); - JS_FreeValue(s->ctx, v1); - return res; - } - p = JS_VALUE_GET_STRING(v); - return string_buffer_concat(s, p, 0, p->len); -} - -static int string_buffer_concat_value_free(StringBuffer *s, JSValue v) -{ - JSString *p; - int res; - - if (s->error_status) { - /* prevent exception overload */ - JS_FreeValue(s->ctx, v); - return -1; - } - if (unlikely(JS_VALUE_GET_TAG(v) != JS_TAG_STRING)) { - v = JS_ToStringFree(s->ctx, v); - if (JS_IsException(v)) - return string_buffer_set_error(s); - } - p = JS_VALUE_GET_STRING(v); - res = string_buffer_concat(s, p, 0, p->len); - JS_FreeValue(s->ctx, v); - return res; -} - -static int string_buffer_fill(StringBuffer *s, int c, int count) -{ - /* XXX: optimize */ - if (s->len + count > s->size) { - if (string_buffer_realloc(s, s->len + count, c)) - return -1; - } - while (count-- > 0) { - if (string_buffer_putc16(s, c)) - return -1; - } - return 0; -} - -static JSValue string_buffer_end(StringBuffer *s) -{ - JSString *str; - str = s->str; - if (s->error_status) - return JS_EXCEPTION; - if (s->len == 0) { - js_free(s->ctx, str); - s->str = NULL; - return JS_AtomToString(s->ctx, JS_ATOM_empty_string); - } - if (s->len < s->size) { - /* smaller size so js_realloc should not fail, but OK if it does */ - /* XXX: should add some slack to avoid unnecessary calls */ - /* XXX: might need to use malloc+free to ensure smaller size */ - str = js_realloc_rt(s->ctx->rt, str, sizeof(JSString) + - (s->len << s->is_wide_char) + 1 - s->is_wide_char); - if (str == NULL) - str = s->str; - s->str = str; - } - if (!s->is_wide_char) - str->u.str8[s->len] = 0; -#ifdef DUMP_LEAKS - list_add_tail(&str->link, &s->ctx->rt->string_list); -#endif - str->is_wide_char = s->is_wide_char; - str->len = s->len; - s->str = NULL; - return JS_MKPTR(JS_TAG_STRING, str); -} - -/* create a string from a UTF-8 buffer */ -JSValue JS_NewStringLen(JSContext *ctx, const char *buf, size_t buf_len) -{ - const uint8_t *p, *p_end, *p_start, *p_next; - uint32_t c; - StringBuffer b_s, *b = &b_s; - size_t len1; - - p_start = (const uint8_t *)buf; - p_end = p_start + buf_len; - p = p_start; - while (p < p_end && *p < 128) - p++; - len1 = p - p_start; - if (len1 > JS_STRING_LEN_MAX) - return JS_ThrowInternalError(ctx, "string too long"); - if (p == p_end) { - /* ASCII string */ - return js_new_string8(ctx, (const uint8_t *)buf, buf_len); - } else { - if (string_buffer_init(ctx, b, buf_len)) - goto fail; - string_buffer_write8(b, p_start, len1); - while (p < p_end) { - if (*p < 128) { - string_buffer_putc8(b, *p++); - } else { - /* parse utf-8 sequence, return 0xFFFFFFFF for error */ - c = unicode_from_utf8(p, p_end - p, &p_next); - if (c < 0x10000) { - p = p_next; - } else if (c <= 0x10FFFF) { - p = p_next; - /* surrogate pair */ - c -= 0x10000; - string_buffer_putc16(b, (c >> 10) + 0xd800); - c = (c & 0x3ff) + 0xdc00; - } else { - /* invalid char */ - c = 0xfffd; - /* skip the invalid chars */ - /* XXX: seems incorrect. Why not just use c = *p++; ? */ - while (p < p_end && (*p >= 0x80 && *p < 0xc0)) - p++; - if (p < p_end) { - p++; - while (p < p_end && (*p >= 0x80 && *p < 0xc0)) - p++; - } - } - string_buffer_putc16(b, c); - } - } - } - return string_buffer_end(b); - - fail: - string_buffer_free(b); - return JS_EXCEPTION; -} - -static JSValue JS_ConcatString3(JSContext *ctx, const char *str1, - JSValue str2, const char *str3) -{ - StringBuffer b_s, *b = &b_s; - int len1, len3; - JSString *p; - - if (unlikely(JS_VALUE_GET_TAG(str2) != JS_TAG_STRING)) { - str2 = JS_ToStringFree(ctx, str2); - if (JS_IsException(str2)) - goto fail; - } - p = JS_VALUE_GET_STRING(str2); - len1 = strlen(str1); - len3 = strlen(str3); - - if (string_buffer_init2(ctx, b, len1 + p->len + len3, p->is_wide_char)) - goto fail; - - string_buffer_write8(b, (const uint8_t *)str1, len1); - string_buffer_concat(b, p, 0, p->len); - string_buffer_write8(b, (const uint8_t *)str3, len3); - - JS_FreeValue(ctx, str2); - return string_buffer_end(b); - - fail: - JS_FreeValue(ctx, str2); - return JS_EXCEPTION; -} - -JSValue JS_NewString(JSContext *ctx, const char *str) -{ - return JS_NewStringLen(ctx, str, strlen(str)); -} - -JSValue JS_NewAtomString(JSContext *ctx, const char *str) -{ - JSAtom atom = JS_NewAtom(ctx, str); - if (atom == JS_ATOM_NULL) - return JS_EXCEPTION; - JSValue val = JS_AtomToString(ctx, atom); - JS_FreeAtom(ctx, atom); - return val; -} - -/* return (NULL, 0) if exception. */ -/* return pointer into a JSString with a live ref_count */ -/* cesu8 determines if non-BMP1 codepoints are encoded as 1 or 2 utf-8 sequences */ -const char *JS_ToCStringLen2(JSContext *ctx, size_t *plen, JSValue val1, BOOL cesu8) -{ - JSValue val; - JSString *str, *str_new; - int pos, len, c, c1; - uint8_t *q; - - if (JS_VALUE_GET_TAG(val1) != JS_TAG_STRING) { - val = JS_ToString(ctx, val1); - if (JS_IsException(val)) - goto fail; - } else { - val = js_dup(val1); - } - - str = JS_VALUE_GET_STRING(val); - len = str->len; - if (!str->is_wide_char) { - const uint8_t *src = str->u.str8; - int count; - - /* count the number of non-ASCII characters */ - /* Scanning the whole string is required for ASCII strings, - and computing the number of non-ASCII bytes is less expensive - than testing each byte, hence this method is faster for ASCII - strings, which is the most common case. - */ - count = 0; - for (pos = 0; pos < len; pos++) { - count += src[pos] >> 7; - } - if (count == 0) { - if (plen) - *plen = len; - return (const char *)src; - } - str_new = js_alloc_string(ctx, len + count, 0); - if (!str_new) - goto fail; - q = str_new->u.str8; - for (pos = 0; pos < len; pos++) { - c = src[pos]; - if (c < 0x80) { - *q++ = c; - } else { - *q++ = (c >> 6) | 0xc0; - *q++ = (c & 0x3f) | 0x80; - } - } - } else { - const uint16_t *src = str->u.str16; - /* Allocate 3 bytes per 16 bit code point. Surrogate pairs may - produce 4 bytes but use 2 code points. - */ - str_new = js_alloc_string(ctx, len * 3, 0); - if (!str_new) - goto fail; - q = str_new->u.str8; - pos = 0; - while (pos < len) { - c = src[pos++]; - if (c < 0x80) { - *q++ = c; - } else { - if (is_hi_surrogate(c)) { - if (pos < len && !cesu8) { - c1 = src[pos]; - if (is_lo_surrogate(c1)) { - pos++; - c = from_surrogate(c, c1); - } else { - /* Keep unmatched surrogate code points */ - /* c = 0xfffd; */ /* error */ - } - } else { - /* Keep unmatched surrogate code points */ - /* c = 0xfffd; */ /* error */ - } - } - q += unicode_to_utf8(q, c); - } - } - } - - *q = '\0'; - str_new->len = q - str_new->u.str8; - JS_FreeValue(ctx, val); - if (plen) - *plen = str_new->len; - return (const char *)str_new->u.str8; - fail: - if (plen) - *plen = 0; - return NULL; -} - -void JS_FreeCString(JSContext *ctx, const char *ptr) -{ - JSString *p; - if (!ptr) - return; - /* purposely removing constness */ - p = container_of(ptr, JSString, u); - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_STRING, p)); -} - -static int memcmp16_8(const uint16_t *src1, const uint8_t *src2, int len) -{ - int c, i; - for(i = 0; i < len; i++) { - c = src1[i] - src2[i]; - if (c != 0) - return c; - } - return 0; -} - -static int memcmp16(const uint16_t *src1, const uint16_t *src2, int len) -{ - int c, i; - for(i = 0; i < len; i++) { - c = src1[i] - src2[i]; - if (c != 0) - return c; - } - return 0; -} - -static int js_string_memcmp(const JSString *p1, const JSString *p2, int len) -{ - int res; - - if (likely(!p1->is_wide_char)) { - if (likely(!p2->is_wide_char)) - res = memcmp(p1->u.str8, p2->u.str8, len); - else - res = -memcmp16_8(p2->u.str16, p1->u.str8, len); - } else { - if (!p2->is_wide_char) - res = memcmp16_8(p1->u.str16, p2->u.str8, len); - else - res = memcmp16(p1->u.str16, p2->u.str16, len); - } - return res; -} - -/* return < 0, 0 or > 0 */ -static int js_string_compare(JSContext *ctx, - const JSString *p1, const JSString *p2) -{ - int res, len; - len = min_int(p1->len, p2->len); - res = js_string_memcmp(p1, p2, len); - if (res == 0) - res = compare_u32(p1->len, p2->len); - return res; -} - -static void copy_str16(uint16_t *dst, const JSString *p, int offset, int len) -{ - if (p->is_wide_char) { - memcpy(dst, p->u.str16 + offset, len * 2); - } else { - const uint8_t *src1 = p->u.str8 + offset; - int i; - - for(i = 0; i < len; i++) - dst[i] = src1[i]; - } -} - -static JSValue JS_ConcatString1(JSContext *ctx, - const JSString *p1, const JSString *p2) -{ - JSString *p; - uint32_t len; - int is_wide_char; - - len = p1->len + p2->len; - if (len > JS_STRING_LEN_MAX) - return JS_ThrowInternalError(ctx, "string too long"); - is_wide_char = p1->is_wide_char | p2->is_wide_char; - p = js_alloc_string(ctx, len, is_wide_char); - if (!p) - return JS_EXCEPTION; - if (!is_wide_char) { - memcpy(p->u.str8, p1->u.str8, p1->len); - memcpy(p->u.str8 + p1->len, p2->u.str8, p2->len); - p->u.str8[len] = '\0'; - } else { - copy_str16(p->u.str16, p1, 0, p1->len); - copy_str16(p->u.str16 + p1->len, p2, 0, p2->len); - } - return JS_MKPTR(JS_TAG_STRING, p); -} - -/* op1 and op2 are converted to strings. For convience, op1 or op2 = - JS_EXCEPTION are accepted and return JS_EXCEPTION. */ -static JSValue JS_ConcatString(JSContext *ctx, JSValue op1, JSValue op2) -{ - JSValue ret; - JSString *p1, *p2; - - if (unlikely(JS_VALUE_GET_TAG(op1) != JS_TAG_STRING)) { - op1 = JS_ToStringFree(ctx, op1); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - return JS_EXCEPTION; - } - } - if (unlikely(JS_VALUE_GET_TAG(op2) != JS_TAG_STRING)) { - op2 = JS_ToStringFree(ctx, op2); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - return JS_EXCEPTION; - } - } - p1 = JS_VALUE_GET_STRING(op1); - p2 = JS_VALUE_GET_STRING(op2); - - /* XXX: could also check if p1 is empty */ - if (p2->len == 0) { - goto ret_op1; - } - if (p1->header.ref_count == 1 && p1->is_wide_char == p2->is_wide_char - && js_malloc_usable_size(ctx, p1) >= sizeof(*p1) + ((p1->len + p2->len) << p2->is_wide_char) + 1 - p1->is_wide_char) { - /* Concatenate in place in available space at the end of p1 */ - if (p1->is_wide_char) { - memcpy(p1->u.str16 + p1->len, p2->u.str16, p2->len << 1); - p1->len += p2->len; - } else { - memcpy(p1->u.str8 + p1->len, p2->u.str8, p2->len); - p1->len += p2->len; - p1->u.str8[p1->len] = '\0'; - } - ret_op1: - JS_FreeValue(ctx, op2); - return op1; - } - ret = JS_ConcatString1(ctx, p1, p2); - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - return ret; -} - -/* Shape support */ - -static inline size_t get_shape_size(size_t hash_size, size_t prop_size) -{ - return hash_size * sizeof(uint32_t) + sizeof(JSShape) + - prop_size * sizeof(JSShapeProperty); -} - -static inline JSShape *get_shape_from_alloc(void *sh_alloc, size_t hash_size) -{ - return (JSShape *)(void *)((uint32_t *)sh_alloc + hash_size); -} - -static inline uint32_t *prop_hash_end(JSShape *sh) -{ - return (uint32_t *)sh; -} - -static inline void *get_alloc_from_shape(JSShape *sh) -{ - return prop_hash_end(sh) - ((intptr_t)sh->prop_hash_mask + 1); -} - -static inline JSShapeProperty *get_shape_prop(JSShape *sh) -{ - return sh->prop; -} - -static int init_shape_hash(JSRuntime *rt) -{ - rt->shape_hash_bits = 4; /* 16 shapes */ - rt->shape_hash_size = 1 << rt->shape_hash_bits; - rt->shape_hash_count = 0; - rt->shape_hash = js_mallocz_rt(rt, sizeof(rt->shape_hash[0]) * - rt->shape_hash_size); - if (!rt->shape_hash) - return -1; - return 0; -} - -/* same magic hash multiplier as the Linux kernel */ -static uint32_t shape_hash(uint32_t h, uint32_t val) -{ - return (h + val) * 0x9e370001; -} - -/* truncate the shape hash to 'hash_bits' bits */ -static uint32_t get_shape_hash(uint32_t h, int hash_bits) -{ - return h >> (32 - hash_bits); -} - -static uint32_t shape_initial_hash(JSObject *proto) -{ - uint32_t h; - h = shape_hash(1, (uintptr_t)proto); - if (sizeof(proto) > 4) - h = shape_hash(h, (uint64_t)(uintptr_t)proto >> 32); - return h; -} - -static int resize_shape_hash(JSRuntime *rt, int new_shape_hash_bits) -{ - int new_shape_hash_size, i; - uint32_t h; - JSShape **new_shape_hash, *sh, *sh_next; - - new_shape_hash_size = 1 << new_shape_hash_bits; - new_shape_hash = js_mallocz_rt(rt, sizeof(rt->shape_hash[0]) * - new_shape_hash_size); - if (!new_shape_hash) - return -1; - for(i = 0; i < rt->shape_hash_size; i++) { - for(sh = rt->shape_hash[i]; sh != NULL; sh = sh_next) { - sh_next = sh->shape_hash_next; - h = get_shape_hash(sh->hash, new_shape_hash_bits); - sh->shape_hash_next = new_shape_hash[h]; - new_shape_hash[h] = sh; - } - } - js_free_rt(rt, rt->shape_hash); - rt->shape_hash_bits = new_shape_hash_bits; - rt->shape_hash_size = new_shape_hash_size; - rt->shape_hash = new_shape_hash; - return 0; -} - -static void js_shape_hash_link(JSRuntime *rt, JSShape *sh) -{ - uint32_t h; - h = get_shape_hash(sh->hash, rt->shape_hash_bits); - sh->shape_hash_next = rt->shape_hash[h]; - rt->shape_hash[h] = sh; - rt->shape_hash_count++; -} - -static void js_shape_hash_unlink(JSRuntime *rt, JSShape *sh) -{ - uint32_t h; - JSShape **psh; - - h = get_shape_hash(sh->hash, rt->shape_hash_bits); - psh = &rt->shape_hash[h]; - while (*psh != sh) - psh = &(*psh)->shape_hash_next; - *psh = sh->shape_hash_next; - rt->shape_hash_count--; -} - -/* create a new empty shape with prototype 'proto' */ -static no_inline JSShape *js_new_shape2(JSContext *ctx, JSObject *proto, - int hash_size, int prop_size) -{ - JSRuntime *rt = ctx->rt; - void *sh_alloc; - JSShape *sh; - - /* resize the shape hash table if necessary */ - if (2 * (rt->shape_hash_count + 1) > rt->shape_hash_size) { - resize_shape_hash(rt, rt->shape_hash_bits + 1); - } - - sh_alloc = js_malloc(ctx, get_shape_size(hash_size, prop_size)); - if (!sh_alloc) - return NULL; - sh = get_shape_from_alloc(sh_alloc, hash_size); - sh->header.ref_count = 1; - add_gc_object(rt, &sh->header, JS_GC_OBJ_TYPE_SHAPE); - if (proto) - js_dup(JS_MKPTR(JS_TAG_OBJECT, proto)); - sh->proto = proto; - memset(prop_hash_end(sh) - hash_size, 0, sizeof(prop_hash_end(sh)[0]) * - hash_size); - sh->prop_hash_mask = hash_size - 1; - sh->prop_size = prop_size; - sh->prop_count = 0; - sh->deleted_prop_count = 0; - - /* insert in the hash table */ - sh->hash = shape_initial_hash(proto); - sh->is_hashed = TRUE; - sh->has_small_array_index = FALSE; - js_shape_hash_link(ctx->rt, sh); - return sh; -} - -static JSShape *js_new_shape(JSContext *ctx, JSObject *proto) -{ - return js_new_shape2(ctx, proto, JS_PROP_INITIAL_HASH_SIZE, - JS_PROP_INITIAL_SIZE); -} - -/* The shape is cloned. The new shape is not inserted in the shape - hash table */ -static JSShape *js_clone_shape(JSContext *ctx, JSShape *sh1) -{ - JSShape *sh; - void *sh_alloc, *sh_alloc1; - size_t size; - JSShapeProperty *pr; - uint32_t i, hash_size; - - hash_size = sh1->prop_hash_mask + 1; - size = get_shape_size(hash_size, sh1->prop_size); - sh_alloc = js_malloc(ctx, size); - if (!sh_alloc) - return NULL; - sh_alloc1 = get_alloc_from_shape(sh1); - memcpy(sh_alloc, sh_alloc1, size); - sh = get_shape_from_alloc(sh_alloc, hash_size); - sh->header.ref_count = 1; - add_gc_object(ctx->rt, &sh->header, JS_GC_OBJ_TYPE_SHAPE); - sh->is_hashed = FALSE; - if (sh->proto) { - js_dup(JS_MKPTR(JS_TAG_OBJECT, sh->proto)); - } - for(i = 0, pr = get_shape_prop(sh); i < sh->prop_count; i++, pr++) { - JS_DupAtom(ctx, pr->atom); - } - return sh; -} - -static JSShape *js_dup_shape(JSShape *sh) -{ - sh->header.ref_count++; - return sh; -} - -static void js_free_shape0(JSRuntime *rt, JSShape *sh) -{ - uint32_t i; - JSShapeProperty *pr; - - assert(sh->header.ref_count == 0); - if (sh->is_hashed) - js_shape_hash_unlink(rt, sh); - if (sh->proto != NULL) { - JS_FreeValueRT(rt, JS_MKPTR(JS_TAG_OBJECT, sh->proto)); - } - pr = get_shape_prop(sh); - for(i = 0; i < sh->prop_count; i++) { - JS_FreeAtomRT(rt, pr->atom); - pr++; - } - remove_gc_object(&sh->header); - js_free_rt(rt, get_alloc_from_shape(sh)); -} - -static void js_free_shape(JSRuntime *rt, JSShape *sh) -{ - if (unlikely(--sh->header.ref_count <= 0)) { - js_free_shape0(rt, sh); - } -} - -static void js_free_shape_null(JSRuntime *rt, JSShape *sh) -{ - if (sh) - js_free_shape(rt, sh); -} - -/* make space to hold at least 'count' properties */ -static no_inline int resize_properties(JSContext *ctx, JSShape **psh, - JSObject *p, uint32_t count) -{ - JSShape *sh; - uint32_t new_size, new_hash_size, new_hash_mask, i; - JSShapeProperty *pr; - void *sh_alloc; - intptr_t h; - - sh = *psh; - new_size = max_int(count, sh->prop_size * 3 / 2); - /* Reallocate prop array first to avoid crash or size inconsistency - in case of memory allocation failure */ - if (p) { - JSProperty *new_prop; - new_prop = js_realloc(ctx, p->prop, sizeof(new_prop[0]) * new_size); - if (unlikely(!new_prop)) - return -1; - p->prop = new_prop; - } - new_hash_size = sh->prop_hash_mask + 1; - while (new_hash_size < new_size) - new_hash_size = 2 * new_hash_size; - if (new_hash_size != (sh->prop_hash_mask + 1)) { - JSShape *old_sh; - /* resize the hash table and the properties */ - old_sh = sh; - sh_alloc = js_malloc(ctx, get_shape_size(new_hash_size, new_size)); - if (!sh_alloc) - return -1; - sh = get_shape_from_alloc(sh_alloc, new_hash_size); - list_del(&old_sh->header.link); - /* copy all the fields and the properties */ - memcpy(sh, old_sh, - sizeof(JSShape) + sizeof(sh->prop[0]) * old_sh->prop_count); - list_add_tail(&sh->header.link, &ctx->rt->gc_obj_list); - new_hash_mask = new_hash_size - 1; - sh->prop_hash_mask = new_hash_mask; - memset(prop_hash_end(sh) - new_hash_size, 0, - sizeof(prop_hash_end(sh)[0]) * new_hash_size); - for(i = 0, pr = sh->prop; i < sh->prop_count; i++, pr++) { - if (pr->atom != JS_ATOM_NULL) { - h = ((uintptr_t)pr->atom & new_hash_mask); - pr->hash_next = prop_hash_end(sh)[-h - 1]; - prop_hash_end(sh)[-h - 1] = i + 1; - } - } - js_free(ctx, get_alloc_from_shape(old_sh)); - } else { - /* only resize the properties */ - list_del(&sh->header.link); - sh_alloc = js_realloc(ctx, get_alloc_from_shape(sh), - get_shape_size(new_hash_size, new_size)); - if (unlikely(!sh_alloc)) { - /* insert again in the GC list */ - list_add_tail(&sh->header.link, &ctx->rt->gc_obj_list); - return -1; - } - sh = get_shape_from_alloc(sh_alloc, new_hash_size); - list_add_tail(&sh->header.link, &ctx->rt->gc_obj_list); - } - *psh = sh; - sh->prop_size = new_size; - return 0; -} - -/* remove the deleted properties. */ -static int compact_properties(JSContext *ctx, JSObject *p) -{ - JSShape *sh, *old_sh; - void *sh_alloc; - intptr_t h; - uint32_t new_hash_size, i, j, new_hash_mask, new_size; - JSShapeProperty *old_pr, *pr; - JSProperty *prop, *new_prop; - - sh = p->shape; - assert(!sh->is_hashed); - - new_size = max_int(JS_PROP_INITIAL_SIZE, - sh->prop_count - sh->deleted_prop_count); - assert(new_size <= sh->prop_size); - - new_hash_size = sh->prop_hash_mask + 1; - while ((new_hash_size / 2) >= new_size) - new_hash_size = new_hash_size / 2; - new_hash_mask = new_hash_size - 1; - - /* resize the hash table and the properties */ - old_sh = sh; - sh_alloc = js_malloc(ctx, get_shape_size(new_hash_size, new_size)); - if (!sh_alloc) - return -1; - sh = get_shape_from_alloc(sh_alloc, new_hash_size); - list_del(&old_sh->header.link); - memcpy(sh, old_sh, sizeof(JSShape)); - list_add_tail(&sh->header.link, &ctx->rt->gc_obj_list); - - memset(prop_hash_end(sh) - new_hash_size, 0, - sizeof(prop_hash_end(sh)[0]) * new_hash_size); - - j = 0; - old_pr = old_sh->prop; - pr = sh->prop; - prop = p->prop; - for(i = 0; i < sh->prop_count; i++) { - if (old_pr->atom != JS_ATOM_NULL) { - pr->atom = old_pr->atom; - pr->flags = old_pr->flags; - h = ((uintptr_t)old_pr->atom & new_hash_mask); - pr->hash_next = prop_hash_end(sh)[-h - 1]; - prop_hash_end(sh)[-h - 1] = j + 1; - prop[j] = prop[i]; - j++; - pr++; - } - old_pr++; - } - assert(j == (sh->prop_count - sh->deleted_prop_count)); - sh->prop_hash_mask = new_hash_mask; - sh->prop_size = new_size; - sh->deleted_prop_count = 0; - sh->prop_count = j; - - p->shape = sh; - js_free(ctx, get_alloc_from_shape(old_sh)); - - /* reduce the size of the object properties */ - new_prop = js_realloc(ctx, p->prop, sizeof(new_prop[0]) * new_size); - if (new_prop) - p->prop = new_prop; - return 0; -} - -static int add_shape_property(JSContext *ctx, JSShape **psh, - JSObject *p, JSAtom atom, int prop_flags) -{ - JSRuntime *rt = ctx->rt; - JSShape *sh = *psh; - JSShapeProperty *pr, *prop; - uint32_t hash_mask, new_shape_hash = 0; - intptr_t h; - - /* update the shape hash */ - if (sh->is_hashed) { - js_shape_hash_unlink(rt, sh); - new_shape_hash = shape_hash(shape_hash(sh->hash, atom), prop_flags); - } - - if (unlikely(sh->prop_count >= sh->prop_size)) { - if (resize_properties(ctx, psh, p, sh->prop_count + 1)) { - /* in case of error, reinsert in the hash table. - sh is still valid if resize_properties() failed */ - if (sh->is_hashed) - js_shape_hash_link(rt, sh); - return -1; - } - sh = *psh; - } - if (sh->is_hashed) { - sh->hash = new_shape_hash; - js_shape_hash_link(rt, sh); - } - /* Initialize the new shape property. - The object property at p->prop[sh->prop_count] is uninitialized */ - prop = get_shape_prop(sh); - pr = &prop[sh->prop_count++]; - pr->atom = JS_DupAtom(ctx, atom); - pr->flags = prop_flags; - sh->has_small_array_index |= __JS_AtomIsTaggedInt(atom); - /* add in hash table */ - hash_mask = sh->prop_hash_mask; - h = atom & hash_mask; - pr->hash_next = prop_hash_end(sh)[-h - 1]; - prop_hash_end(sh)[-h - 1] = sh->prop_count; - return 0; -} - -/* find a hashed empty shape matching the prototype. Return NULL if - not found */ -static JSShape *find_hashed_shape_proto(JSRuntime *rt, JSObject *proto) -{ - JSShape *sh1; - uint32_t h, h1; - - h = shape_initial_hash(proto); - h1 = get_shape_hash(h, rt->shape_hash_bits); - for(sh1 = rt->shape_hash[h1]; sh1 != NULL; sh1 = sh1->shape_hash_next) { - if (sh1->hash == h && - sh1->proto == proto && - sh1->prop_count == 0) { - return sh1; - } - } - return NULL; -} - -/* find a hashed shape matching sh + (prop, prop_flags). Return NULL if - not found */ -static JSShape *find_hashed_shape_prop(JSRuntime *rt, JSShape *sh, - JSAtom atom, int prop_flags) -{ - JSShape *sh1; - uint32_t h, h1, i, n; - - h = sh->hash; - h = shape_hash(h, atom); - h = shape_hash(h, prop_flags); - h1 = get_shape_hash(h, rt->shape_hash_bits); - for(sh1 = rt->shape_hash[h1]; sh1 != NULL; sh1 = sh1->shape_hash_next) { - /* we test the hash first so that the rest is done only if the - shapes really match */ - if (sh1->hash == h && - sh1->proto == sh->proto && - sh1->prop_count == ((n = sh->prop_count) + 1)) { - for(i = 0; i < n; i++) { - if (unlikely(sh1->prop[i].atom != sh->prop[i].atom) || - unlikely(sh1->prop[i].flags != sh->prop[i].flags)) - goto next; - } - if (unlikely(sh1->prop[n].atom != atom) || - unlikely(sh1->prop[n].flags != prop_flags)) - goto next; - return sh1; - } - next: ; - } - return NULL; -} - -static __maybe_unused void JS_DumpShape(JSRuntime *rt, int i, JSShape *sh) -{ - char atom_buf[ATOM_GET_STR_BUF_SIZE]; - int j; - - /* XXX: should output readable class prototype */ - printf("%5d %3d%c %14p %5d %5d", i, - sh->header.ref_count, " *"[sh->is_hashed], - (void *)sh->proto, sh->prop_size, sh->prop_count); - for(j = 0; j < sh->prop_count; j++) { - printf(" %s", JS_AtomGetStrRT(rt, atom_buf, sizeof(atom_buf), - sh->prop[j].atom)); - } - printf("\n"); -} - -static __maybe_unused void JS_DumpShapes(JSRuntime *rt) -{ - int i; - JSShape *sh; - struct list_head *el; - JSObject *p; - JSGCObjectHeader *gp; - - printf("JSShapes: {\n"); - printf("%5s %4s %14s %5s %5s %s\n", "SLOT", "REFS", "PROTO", "SIZE", "COUNT", "PROPS"); - for(i = 0; i < rt->shape_hash_size; i++) { - for(sh = rt->shape_hash[i]; sh != NULL; sh = sh->shape_hash_next) { - JS_DumpShape(rt, i, sh); - assert(sh->is_hashed); - } - } - /* dump non-hashed shapes */ - list_for_each(el, &rt->gc_obj_list) { - gp = list_entry(el, JSGCObjectHeader, link); - if (gp->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { - p = (JSObject *)gp; - if (!p->shape->is_hashed) { - JS_DumpShape(rt, -1, p->shape); - } - } - } - printf("}\n"); -} - -static JSValue JS_NewObjectFromShape(JSContext *ctx, JSShape *sh, JSClassID class_id) -{ - JSObject *p; - - js_trigger_gc(ctx->rt, sizeof(JSObject)); - p = js_malloc(ctx, sizeof(JSObject)); - if (unlikely(!p)) - goto fail; - p->class_id = class_id; - p->extensible = TRUE; - p->free_mark = 0; - p->is_exotic = 0; - p->fast_array = 0; - p->is_constructor = 0; - p->is_uncatchable_error = 0; - p->tmp_mark = 0; - p->is_HTMLDDA = 0; - p->first_weak_ref = NULL; - p->u.opaque = NULL; - p->shape = sh; - p->prop = js_malloc(ctx, sizeof(JSProperty) * sh->prop_size); - if (unlikely(!p->prop)) { - js_free(ctx, p); - fail: - js_free_shape(ctx->rt, sh); - return JS_EXCEPTION; - } - - switch(class_id) { - case JS_CLASS_OBJECT: - break; - case JS_CLASS_ARRAY: - { - JSProperty *pr; - p->is_exotic = 1; - p->fast_array = 1; - p->u.array.u.values = NULL; - p->u.array.count = 0; - p->u.array.u1.size = 0; - /* the length property is always the first one */ - if (likely(sh == ctx->array_shape)) { - pr = &p->prop[0]; - } else { - /* only used for the first array */ - /* cannot fail */ - pr = add_property(ctx, p, JS_ATOM_length, - JS_PROP_WRITABLE | JS_PROP_LENGTH); - } - pr->u.value = js_int32(0); - } - break; - case JS_CLASS_C_FUNCTION: - p->prop[0].u.value = JS_UNDEFINED; - break; - case JS_CLASS_ARGUMENTS: - case JS_CLASS_UINT8C_ARRAY: - case JS_CLASS_INT8_ARRAY: - case JS_CLASS_UINT8_ARRAY: - case JS_CLASS_INT16_ARRAY: - case JS_CLASS_UINT16_ARRAY: - case JS_CLASS_INT32_ARRAY: - case JS_CLASS_UINT32_ARRAY: - case JS_CLASS_BIG_INT64_ARRAY: - case JS_CLASS_BIG_UINT64_ARRAY: - case JS_CLASS_FLOAT32_ARRAY: - case JS_CLASS_FLOAT64_ARRAY: - p->is_exotic = 1; - p->fast_array = 1; - p->u.array.u.ptr = NULL; - p->u.array.count = 0; - break; - case JS_CLASS_DATAVIEW: - p->u.array.u.ptr = NULL; - p->u.array.count = 0; - break; - case JS_CLASS_NUMBER: - case JS_CLASS_STRING: - case JS_CLASS_BOOLEAN: - case JS_CLASS_SYMBOL: - case JS_CLASS_DATE: - case JS_CLASS_BIG_INT: - p->u.object_data = JS_UNDEFINED; - goto set_exotic; - case JS_CLASS_REGEXP: - p->u.regexp.pattern = NULL; - p->u.regexp.bytecode = NULL; - goto set_exotic; - default: - set_exotic: - if (ctx->rt->class_array[class_id].exotic) { - p->is_exotic = 1; - } - break; - } - p->header.ref_count = 1; - add_gc_object(ctx->rt, &p->header, JS_GC_OBJ_TYPE_JS_OBJECT); - return JS_MKPTR(JS_TAG_OBJECT, p); -} - -static JSObject *get_proto_obj(JSValue proto_val) -{ - if (JS_VALUE_GET_TAG(proto_val) != JS_TAG_OBJECT) - return NULL; - else - return JS_VALUE_GET_OBJ(proto_val); -} - -/* WARNING: proto must be an object or JS_NULL */ -JSValue JS_NewObjectProtoClass(JSContext *ctx, JSValue proto_val, - JSClassID class_id) -{ - JSShape *sh; - JSObject *proto; - - proto = get_proto_obj(proto_val); - sh = find_hashed_shape_proto(ctx->rt, proto); - if (likely(sh)) { - sh = js_dup_shape(sh); - } else { - sh = js_new_shape(ctx, proto); - if (!sh) - return JS_EXCEPTION; - } - return JS_NewObjectFromShape(ctx, sh, class_id); -} - -static int JS_SetObjectData(JSContext *ctx, JSValue obj, JSValue val) -{ - JSObject *p; - - if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { - p = JS_VALUE_GET_OBJ(obj); - switch(p->class_id) { - case JS_CLASS_NUMBER: - case JS_CLASS_STRING: - case JS_CLASS_BOOLEAN: - case JS_CLASS_SYMBOL: - case JS_CLASS_DATE: - case JS_CLASS_BIG_INT: - JS_FreeValue(ctx, p->u.object_data); - p->u.object_data = val; - return 0; - } - } - JS_FreeValue(ctx, val); - if (!JS_IsException(obj)) - JS_ThrowTypeError(ctx, "invalid object type"); - return -1; -} - -JSValue JS_NewObjectClass(JSContext *ctx, int class_id) -{ - return JS_NewObjectProtoClass(ctx, ctx->class_proto[class_id], class_id); -} - -JSValue JS_NewObjectProto(JSContext *ctx, JSValue proto) -{ - return JS_NewObjectProtoClass(ctx, proto, JS_CLASS_OBJECT); -} - -JSValue JS_NewArray(JSContext *ctx) -{ - return JS_NewObjectFromShape(ctx, js_dup_shape(ctx->array_shape), - JS_CLASS_ARRAY); -} - -JSValue JS_NewObject(JSContext *ctx) -{ - /* inline JS_NewObjectClass(ctx, JS_CLASS_OBJECT); */ - return JS_NewObjectProtoClass(ctx, ctx->class_proto[JS_CLASS_OBJECT], JS_CLASS_OBJECT); -} - -static void js_function_set_properties(JSContext *ctx, JSValue func_obj, - JSAtom name, int len) -{ - /* ES6 feature non compatible with ES5.1: length is configurable */ - JS_DefinePropertyValue(ctx, func_obj, JS_ATOM_length, js_int32(len), - JS_PROP_CONFIGURABLE); - JS_DefinePropertyValue(ctx, func_obj, JS_ATOM_name, - JS_AtomToString(ctx, name), JS_PROP_CONFIGURABLE); -} - -static BOOL js_class_has_bytecode(JSClassID class_id) -{ - return (class_id == JS_CLASS_BYTECODE_FUNCTION || - class_id == JS_CLASS_GENERATOR_FUNCTION || - class_id == JS_CLASS_ASYNC_FUNCTION || - class_id == JS_CLASS_ASYNC_GENERATOR_FUNCTION); -} - -/* return NULL without exception if not a function or no bytecode */ -static JSFunctionBytecode *JS_GetFunctionBytecode(JSValue val) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return NULL; - p = JS_VALUE_GET_OBJ(val); - if (!js_class_has_bytecode(p->class_id)) - return NULL; - return p->u.func.function_bytecode; -} - -static void js_method_set_home_object(JSContext *ctx, JSValue func_obj, - JSValue home_obj) -{ - JSObject *p, *p1; - JSFunctionBytecode *b; - - if (JS_VALUE_GET_TAG(func_obj) != JS_TAG_OBJECT) - return; - p = JS_VALUE_GET_OBJ(func_obj); - if (!js_class_has_bytecode(p->class_id)) - return; - b = p->u.func.function_bytecode; - if (b->need_home_object) { - p1 = p->u.func.home_object; - if (p1) { - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_OBJECT, p1)); - } - if (JS_VALUE_GET_TAG(home_obj) == JS_TAG_OBJECT) - p1 = JS_VALUE_GET_OBJ(js_dup(home_obj)); - else - p1 = NULL; - p->u.func.home_object = p1; - } -} - -static JSValue js_get_function_name(JSContext *ctx, JSAtom name) -{ - JSValue name_str; - - name_str = JS_AtomToString(ctx, name); - if (JS_AtomSymbolHasDescription(ctx, name)) { - name_str = JS_ConcatString3(ctx, "[", name_str, "]"); - } - return name_str; -} - -/* Modify the name of a method according to the atom and - 'flags'. 'flags' is a bitmask of JS_PROP_HAS_GET and - JS_PROP_HAS_SET. Also set the home object of the method. - Return < 0 if exception. */ -static int js_method_set_properties(JSContext *ctx, JSValue func_obj, - JSAtom name, int flags, JSValue home_obj) -{ - JSValue name_str; - - name_str = js_get_function_name(ctx, name); - if (flags & JS_PROP_HAS_GET) { - name_str = JS_ConcatString3(ctx, "get ", name_str, ""); - } else if (flags & JS_PROP_HAS_SET) { - name_str = JS_ConcatString3(ctx, "set ", name_str, ""); - } - if (JS_IsException(name_str)) - return -1; - if (JS_DefinePropertyValue(ctx, func_obj, JS_ATOM_name, name_str, - JS_PROP_CONFIGURABLE) < 0) - return -1; - js_method_set_home_object(ctx, func_obj, home_obj); - return 0; -} - -/* Note: at least 'length' arguments will be readable in 'argv' */ -static JSValue JS_NewCFunction3(JSContext *ctx, JSCFunction *func, - const char *name, - int length, JSCFunctionEnum cproto, int magic, - JSValue proto_val) -{ - JSValue func_obj; - JSObject *p; - JSAtom name_atom; - - func_obj = JS_NewObjectProtoClass(ctx, proto_val, JS_CLASS_C_FUNCTION); - if (JS_IsException(func_obj)) - return func_obj; - p = JS_VALUE_GET_OBJ(func_obj); - p->u.cfunc.realm = JS_DupContext(ctx); - p->u.cfunc.c_function.generic = func; - p->u.cfunc.length = length; - p->u.cfunc.cproto = cproto; - p->u.cfunc.magic = magic; - p->is_constructor = (cproto == JS_CFUNC_constructor || - cproto == JS_CFUNC_constructor_magic || - cproto == JS_CFUNC_constructor_or_func || - cproto == JS_CFUNC_constructor_or_func_magic); - if (!name) - name = ""; - name_atom = JS_NewAtom(ctx, name); - js_function_set_properties(ctx, func_obj, name_atom, length); - JS_FreeAtom(ctx, name_atom); - return func_obj; -} - -/* Note: at least 'length' arguments will be readable in 'argv' */ -JSValue JS_NewCFunction2(JSContext *ctx, JSCFunction *func, - const char *name, - int length, JSCFunctionEnum cproto, int magic) -{ - return JS_NewCFunction3(ctx, func, name, length, cproto, magic, - ctx->function_proto); -} - -typedef struct JSCFunctionDataRecord { - JSCFunctionData *func; - uint8_t length; - uint8_t data_len; - uint16_t magic; - JSValue data[0]; -} JSCFunctionDataRecord; - -static void js_c_function_data_finalizer(JSRuntime *rt, JSValue val) -{ - JSCFunctionDataRecord *s = JS_GetOpaque(val, JS_CLASS_C_FUNCTION_DATA); - int i; - - if (s) { - for(i = 0; i < s->data_len; i++) { - JS_FreeValueRT(rt, s->data[i]); - } - js_free_rt(rt, s); - } -} - -static void js_c_function_data_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSCFunctionDataRecord *s = JS_GetOpaque(val, JS_CLASS_C_FUNCTION_DATA); - int i; - - if (s) { - for(i = 0; i < s->data_len; i++) { - JS_MarkValue(rt, s->data[i], mark_func); - } - } -} - -static JSValue js_c_function_data_call(JSContext *ctx, JSValue func_obj, - JSValue this_val, - int argc, JSValue *argv, int flags) -{ - JSCFunctionDataRecord *s = JS_GetOpaque(func_obj, JS_CLASS_C_FUNCTION_DATA); - JSValue *arg_buf; - int i; - - /* XXX: could add the function on the stack for debug */ - if (unlikely(argc < s->length)) { - arg_buf = alloca(sizeof(arg_buf[0]) * s->length); - for(i = 0; i < argc; i++) - arg_buf[i] = argv[i]; - for(i = argc; i < s->length; i++) - arg_buf[i] = JS_UNDEFINED; - } else { - arg_buf = argv; - } - - return s->func(ctx, this_val, argc, arg_buf, s->magic, s->data); -} - -JSValue JS_NewCFunctionData(JSContext *ctx, JSCFunctionData *func, - int length, int magic, int data_len, - JSValue *data) -{ - JSCFunctionDataRecord *s; - JSValue func_obj; - int i; - - func_obj = JS_NewObjectProtoClass(ctx, ctx->function_proto, - JS_CLASS_C_FUNCTION_DATA); - if (JS_IsException(func_obj)) - return func_obj; - s = js_malloc(ctx, sizeof(*s) + data_len * sizeof(JSValue)); - if (!s) { - JS_FreeValue(ctx, func_obj); - return JS_EXCEPTION; - } - s->func = func; - s->length = length; - s->data_len = data_len; - s->magic = magic; - for(i = 0; i < data_len; i++) - s->data[i] = js_dup(data[i]); - JS_SetOpaque(func_obj, s); - js_function_set_properties(ctx, func_obj, - JS_ATOM_empty_string, length); - return func_obj; -} - -static JSContext *js_autoinit_get_realm(JSProperty *pr) -{ - return (JSContext *)(pr->u.init.realm_and_id & ~3); -} - -static JSAutoInitIDEnum js_autoinit_get_id(JSProperty *pr) -{ - return pr->u.init.realm_and_id & 3; -} - -static void js_autoinit_free(JSRuntime *rt, JSProperty *pr) -{ - JS_FreeContext(js_autoinit_get_realm(pr)); -} - -static void js_autoinit_mark(JSRuntime *rt, JSProperty *pr, - JS_MarkFunc *mark_func) -{ - mark_func(rt, &js_autoinit_get_realm(pr)->header); -} - -static void free_property(JSRuntime *rt, JSProperty *pr, int prop_flags) -{ - if (unlikely(prop_flags & JS_PROP_TMASK)) { - if ((prop_flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - if (pr->u.getset.getter) - JS_FreeValueRT(rt, JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.getter)); - if (pr->u.getset.setter) - JS_FreeValueRT(rt, JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.setter)); - } else if ((prop_flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - free_var_ref(rt, pr->u.var_ref); - } else if ((prop_flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - js_autoinit_free(rt, pr); - } - } else { - JS_FreeValueRT(rt, pr->u.value); - } -} - -static force_inline JSShapeProperty *find_own_property1(JSObject *p, - JSAtom atom) -{ - JSShape *sh; - JSShapeProperty *pr, *prop; - intptr_t h; - sh = p->shape; - h = (uintptr_t)atom & sh->prop_hash_mask; - h = prop_hash_end(sh)[-h - 1]; - prop = get_shape_prop(sh); - while (h) { - pr = &prop[h - 1]; - if (likely(pr->atom == atom)) { - return pr; - } - h = pr->hash_next; - } - return NULL; -} - -static force_inline JSShapeProperty *find_own_property(JSProperty **ppr, - JSObject *p, - JSAtom atom) -{ - JSShape *sh; - JSShapeProperty *pr, *prop; - intptr_t h; - sh = p->shape; - h = (uintptr_t)atom & sh->prop_hash_mask; - h = prop_hash_end(sh)[-h - 1]; - prop = get_shape_prop(sh); - while (h) { - pr = &prop[h - 1]; - if (likely(pr->atom == atom)) { - *ppr = &p->prop[h - 1]; - /* the compiler should be able to assume that pr != NULL here */ - return pr; - } - h = pr->hash_next; - } - *ppr = NULL; - return NULL; -} - -static force_inline JSShapeProperty* find_own_property_ic(JSProperty** ppr, JSObject* p, - JSAtom atom, uint32_t* offset) -{ - JSShape* sh; - JSShapeProperty *pr, *prop; - intptr_t h, i; - sh = p->shape; - h = (uintptr_t)atom & sh->prop_hash_mask; - h = prop_hash_end(sh)[-h - 1]; - prop = get_shape_prop(sh); - while (h) { - i = h - 1; - pr = &prop[i]; - if (likely(pr->atom == atom)) { - *ppr = &p->prop[i]; - *offset = i; - /* the compiler should be able to assume that pr != NULL here */ - return pr; - } - h = pr->hash_next; - } - *ppr = NULL; - return NULL; -} - -/* indicate that the object may be part of a function prototype cycle */ -static void set_cycle_flag(JSContext *ctx, JSValue obj) -{ -} - -static void free_var_ref(JSRuntime *rt, JSVarRef *var_ref) -{ - if (var_ref) { - assert(var_ref->header.ref_count > 0); - if (--var_ref->header.ref_count == 0) { - if (var_ref->is_detached) { - JS_FreeValueRT(rt, var_ref->value); - remove_gc_object(&var_ref->header); - } else { - list_del(&var_ref->header.link); /* still on the stack */ - } - js_free_rt(rt, var_ref); - } - } -} - -static void js_array_finalizer(JSRuntime *rt, JSValue val) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - int i; - - for(i = 0; i < p->u.array.count; i++) { - JS_FreeValueRT(rt, p->u.array.u.values[i]); - } - js_free_rt(rt, p->u.array.u.values); -} - -static void js_array_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - int i; - - for(i = 0; i < p->u.array.count; i++) { - JS_MarkValue(rt, p->u.array.u.values[i], mark_func); - } -} - -static void js_object_data_finalizer(JSRuntime *rt, JSValue val) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JS_FreeValueRT(rt, p->u.object_data); - p->u.object_data = JS_UNDEFINED; -} - -static void js_object_data_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JS_MarkValue(rt, p->u.object_data, mark_func); -} - -static void js_c_function_finalizer(JSRuntime *rt, JSValue val) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - - if (p->u.cfunc.realm) - JS_FreeContext(p->u.cfunc.realm); -} - -static void js_c_function_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - - if (p->u.cfunc.realm) - mark_func(rt, &p->u.cfunc.realm->header); -} - -static void js_bytecode_function_finalizer(JSRuntime *rt, JSValue val) -{ - JSObject *p1, *p = JS_VALUE_GET_OBJ(val); - JSFunctionBytecode *b; - JSVarRef **var_refs; - int i; - - p1 = p->u.func.home_object; - if (p1) { - JS_FreeValueRT(rt, JS_MKPTR(JS_TAG_OBJECT, p1)); - } - b = p->u.func.function_bytecode; - if (b) { - var_refs = p->u.func.var_refs; - if (var_refs) { - for(i = 0; i < b->closure_var_count; i++) - free_var_ref(rt, var_refs[i]); - js_free_rt(rt, var_refs); - } - JS_FreeValueRT(rt, JS_MKPTR(JS_TAG_FUNCTION_BYTECODE, b)); - } -} - -static void js_bytecode_function_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSVarRef **var_refs = p->u.func.var_refs; - JSFunctionBytecode *b = p->u.func.function_bytecode; - int i; - - if (p->u.func.home_object) { - JS_MarkValue(rt, JS_MKPTR(JS_TAG_OBJECT, p->u.func.home_object), - mark_func); - } - if (b) { - if (var_refs) { - for(i = 0; i < b->closure_var_count; i++) { - JSVarRef *var_ref = var_refs[i]; - if (var_ref && var_ref->is_detached) { - mark_func(rt, &var_ref->header); - } - } - } - /* must mark the function bytecode because template objects may be - part of a cycle */ - JS_MarkValue(rt, JS_MKPTR(JS_TAG_FUNCTION_BYTECODE, b), mark_func); - } -} - -static void js_bound_function_finalizer(JSRuntime *rt, JSValue val) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSBoundFunction *bf = p->u.bound_function; - int i; - - JS_FreeValueRT(rt, bf->func_obj); - JS_FreeValueRT(rt, bf->this_val); - for(i = 0; i < bf->argc; i++) { - JS_FreeValueRT(rt, bf->argv[i]); - } - js_free_rt(rt, bf); -} - -static void js_bound_function_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSBoundFunction *bf = p->u.bound_function; - int i; - - JS_MarkValue(rt, bf->func_obj, mark_func); - JS_MarkValue(rt, bf->this_val, mark_func); - for(i = 0; i < bf->argc; i++) - JS_MarkValue(rt, bf->argv[i], mark_func); -} - -static void js_for_in_iterator_finalizer(JSRuntime *rt, JSValue val) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSForInIterator *it = p->u.for_in_iterator; - JS_FreeValueRT(rt, it->obj); - js_free_rt(rt, it); -} - -static void js_for_in_iterator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSForInIterator *it = p->u.for_in_iterator; - JS_MarkValue(rt, it->obj, mark_func); -} - -static void free_object(JSRuntime *rt, JSObject *p) -{ - int i; - JSClassFinalizer *finalizer; - JSShape *sh; - JSShapeProperty *pr; - - p->free_mark = 1; /* used to tell the object is invalid when - freeing cycles */ - /* free all the fields */ - sh = p->shape; - pr = get_shape_prop(sh); - for(i = 0; i < sh->prop_count; i++) { - free_property(rt, &p->prop[i], pr->flags); - pr++; - } - js_free_rt(rt, p->prop); - /* as an optimization we destroy the shape immediately without - putting it in gc_zero_ref_count_list */ - js_free_shape(rt, sh); - - /* fail safe */ - p->shape = NULL; - p->prop = NULL; - - if (unlikely(p->first_weak_ref)) { - reset_weak_ref(rt, &p->first_weak_ref); - } - - finalizer = rt->class_array[p->class_id].finalizer; - if (finalizer) - (*finalizer)(rt, JS_MKPTR(JS_TAG_OBJECT, p)); - - /* fail safe */ - p->class_id = 0; - p->u.opaque = NULL; - p->u.func.var_refs = NULL; - p->u.func.home_object = NULL; - - remove_gc_object(&p->header); - if (rt->gc_phase == JS_GC_PHASE_REMOVE_CYCLES && p->header.ref_count != 0) { - list_add_tail(&p->header.link, &rt->gc_zero_ref_count_list); - } else { - js_free_rt(rt, p); - } -} - -static void free_gc_object(JSRuntime *rt, JSGCObjectHeader *gp) -{ - switch(gp->gc_obj_type) { - case JS_GC_OBJ_TYPE_JS_OBJECT: - free_object(rt, (JSObject *)gp); - break; - case JS_GC_OBJ_TYPE_FUNCTION_BYTECODE: - free_function_bytecode(rt, (JSFunctionBytecode *)gp); - break; - default: - abort(); - } -} - -static void free_zero_refcount(JSRuntime *rt) -{ - struct list_head *el; - JSGCObjectHeader *p; - - rt->gc_phase = JS_GC_PHASE_DECREF; - for(;;) { - el = rt->gc_zero_ref_count_list.next; - if (el == &rt->gc_zero_ref_count_list) - break; - p = list_entry(el, JSGCObjectHeader, link); - assert(p->ref_count == 0); - free_gc_object(rt, p); - } - rt->gc_phase = JS_GC_PHASE_NONE; -} - -/* called with the ref_count of 'v' reaches zero. */ -void __JS_FreeValueRT(JSRuntime *rt, JSValue v) -{ - uint32_t tag = JS_VALUE_GET_TAG(v); - -#ifdef DUMP_FREE - { - printf("Freeing "); - if (tag == JS_TAG_OBJECT) { - JS_DumpObject(rt, JS_VALUE_GET_OBJ(v)); - } else { - JS_DumpValueShort(rt, v); - printf("\n"); - } - } -#endif - - switch(tag) { - case JS_TAG_STRING: - { - JSString *p = JS_VALUE_GET_STRING(v); - if (p->atom_type) { - JS_FreeAtomStruct(rt, p); - } else { -#ifdef DUMP_LEAKS - list_del(&p->link); -#endif - js_free_rt(rt, p); - } - } - break; - case JS_TAG_OBJECT: - case JS_TAG_FUNCTION_BYTECODE: - { - JSGCObjectHeader *p = JS_VALUE_GET_PTR(v); - if (rt->gc_phase != JS_GC_PHASE_REMOVE_CYCLES) { - list_del(&p->link); - list_add(&p->link, &rt->gc_zero_ref_count_list); - if (rt->gc_phase == JS_GC_PHASE_NONE) { - free_zero_refcount(rt); - } - } - } - break; - case JS_TAG_MODULE: - abort(); /* never freed here */ - break; - case JS_TAG_BIG_INT: - { - JSBigInt *bf = JS_VALUE_GET_PTR(v); - bf_delete(&bf->num); - js_free_rt(rt, bf); - } - break; - case JS_TAG_SYMBOL: - { - JSAtomStruct *p = JS_VALUE_GET_PTR(v); - JS_FreeAtomStruct(rt, p); - } - break; - default: - printf("__JS_FreeValue: unknown tag=%d\n", tag); - abort(); - } -} - -void __JS_FreeValue(JSContext *ctx, JSValue v) -{ - __JS_FreeValueRT(ctx->rt, v); -} - -/* garbage collection */ - -static void add_gc_object(JSRuntime *rt, JSGCObjectHeader *h, - JSGCObjectTypeEnum type) -{ - h->mark = 0; - h->gc_obj_type = type; - list_add_tail(&h->link, &rt->gc_obj_list); -} - -static void remove_gc_object(JSGCObjectHeader *h) -{ - list_del(&h->link); -} - -void JS_MarkValue(JSRuntime *rt, JSValue val, JS_MarkFunc *mark_func) -{ - if (JS_VALUE_HAS_REF_COUNT(val)) { - switch(JS_VALUE_GET_TAG(val)) { - case JS_TAG_OBJECT: - case JS_TAG_FUNCTION_BYTECODE: - mark_func(rt, JS_VALUE_GET_PTR(val)); - break; - default: - break; - } - } -} - -static void mark_children(JSRuntime *rt, JSGCObjectHeader *gp, - JS_MarkFunc *mark_func) -{ - switch(gp->gc_obj_type) { - case JS_GC_OBJ_TYPE_JS_OBJECT: - { - JSObject *p = (JSObject *)gp; - JSShapeProperty *prs; - JSShape *sh; - int i; - sh = p->shape; - mark_func(rt, &sh->header); - /* mark all the fields */ - prs = get_shape_prop(sh); - for(i = 0; i < sh->prop_count; i++) { - JSProperty *pr = &p->prop[i]; - if (prs->atom != JS_ATOM_NULL) { - if (prs->flags & JS_PROP_TMASK) { - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - if (pr->u.getset.getter) - mark_func(rt, &pr->u.getset.getter->header); - if (pr->u.getset.setter) - mark_func(rt, &pr->u.getset.setter->header); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - if (pr->u.var_ref->is_detached) { - /* Note: the tag does not matter - provided it is a GC object */ - mark_func(rt, &pr->u.var_ref->header); - } - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - js_autoinit_mark(rt, pr, mark_func); - } - } else { - JS_MarkValue(rt, pr->u.value, mark_func); - } - } - prs++; - } - - if (p->class_id != JS_CLASS_OBJECT) { - JSClassGCMark *gc_mark; - gc_mark = rt->class_array[p->class_id].gc_mark; - if (gc_mark) - gc_mark(rt, JS_MKPTR(JS_TAG_OBJECT, p), mark_func); - } - } - break; - case JS_GC_OBJ_TYPE_FUNCTION_BYTECODE: - /* the template objects can be part of a cycle */ - { - JSShape **shape, *(*shapes)[IC_CACHE_ITEM_CAPACITY]; - JSFunctionBytecode *b = (JSFunctionBytecode *)gp; - int i; - for(i = 0; i < b->cpool_count; i++) { - JS_MarkValue(rt, b->cpool[i], mark_func); - } - if (b->realm) - mark_func(rt, &b->realm->header); - if (b->ic) { - for (i = 0; i < b->ic->count; i++) { - shapes = &b->ic->cache[i].shape; - for (shape = *shapes; shape != endof(*shapes); shape++) - if (*shape) - mark_func(rt, &(*shape)->header); - } - } - } - break; - case JS_GC_OBJ_TYPE_VAR_REF: - { - JSVarRef *var_ref = (JSVarRef *)gp; - /* only detached variable referenced are taken into account */ - assert(var_ref->is_detached); - JS_MarkValue(rt, *var_ref->pvalue, mark_func); - } - break; - case JS_GC_OBJ_TYPE_ASYNC_FUNCTION: - { - JSAsyncFunctionData *s = (JSAsyncFunctionData *)gp; - if (s->is_active) - async_func_mark(rt, &s->func_state, mark_func); - JS_MarkValue(rt, s->resolving_funcs[0], mark_func); - JS_MarkValue(rt, s->resolving_funcs[1], mark_func); - } - break; - case JS_GC_OBJ_TYPE_SHAPE: - { - JSShape *sh = (JSShape *)gp; - if (sh->proto != NULL) { - mark_func(rt, &sh->proto->header); - } - } - break; - case JS_GC_OBJ_TYPE_JS_CONTEXT: - { - JSContext *ctx = (JSContext *)gp; - JS_MarkContext(rt, ctx, mark_func); - } - break; - default: - abort(); - } -} - -static void gc_decref_child(JSRuntime *rt, JSGCObjectHeader *p) -{ - assert(p->ref_count > 0); - p->ref_count--; - if (p->ref_count == 0 && p->mark == 1) { - list_del(&p->link); - list_add_tail(&p->link, &rt->tmp_obj_list); - } -} - -static void gc_decref(JSRuntime *rt) -{ - struct list_head *el, *el1; - JSGCObjectHeader *p; - - init_list_head(&rt->tmp_obj_list); - - /* decrement the refcount of all the children of all the GC - objects and move the GC objects with zero refcount to - tmp_obj_list */ - list_for_each_safe(el, el1, &rt->gc_obj_list) { - p = list_entry(el, JSGCObjectHeader, link); - assert(p->mark == 0); - mark_children(rt, p, gc_decref_child); - p->mark = 1; - if (p->ref_count == 0) { - list_del(&p->link); - list_add_tail(&p->link, &rt->tmp_obj_list); - } - } -} - -static void gc_scan_incref_child(JSRuntime *rt, JSGCObjectHeader *p) -{ - p->ref_count++; - if (p->ref_count == 1) { - /* ref_count was 0: remove from tmp_obj_list and add at the - end of gc_obj_list */ - list_del(&p->link); - list_add_tail(&p->link, &rt->gc_obj_list); - p->mark = 0; /* reset the mark for the next GC call */ - } -} - -static void gc_scan_incref_child2(JSRuntime *rt, JSGCObjectHeader *p) -{ - p->ref_count++; -} - -static void gc_scan(JSRuntime *rt) -{ - struct list_head *el; - JSGCObjectHeader *p; - - /* keep the objects with a refcount > 0 and their children. */ - list_for_each(el, &rt->gc_obj_list) { - p = list_entry(el, JSGCObjectHeader, link); - assert(p->ref_count > 0); - p->mark = 0; /* reset the mark for the next GC call */ - mark_children(rt, p, gc_scan_incref_child); - } - - /* restore the refcount of the objects to be deleted. */ - list_for_each(el, &rt->tmp_obj_list) { - p = list_entry(el, JSGCObjectHeader, link); - mark_children(rt, p, gc_scan_incref_child2); - } -} - -static void gc_free_cycles(JSRuntime *rt) -{ - struct list_head *el, *el1; - JSGCObjectHeader *p; -#ifdef DUMP_GC_FREE - BOOL header_done = FALSE; -#endif - - rt->gc_phase = JS_GC_PHASE_REMOVE_CYCLES; - - for(;;) { - el = rt->tmp_obj_list.next; - if (el == &rt->tmp_obj_list) - break; - p = list_entry(el, JSGCObjectHeader, link); - /* Only need to free the GC object associated with JS - values. The rest will be automatically removed because they - must be referenced by them. */ - switch(p->gc_obj_type) { - case JS_GC_OBJ_TYPE_JS_OBJECT: - case JS_GC_OBJ_TYPE_FUNCTION_BYTECODE: -#ifdef DUMP_GC_FREE - if (!header_done) { - printf("Freeing cycles:\n"); - JS_DumpObjectHeader(rt); - header_done = TRUE; - } - JS_DumpGCObject(rt, p); -#endif - free_gc_object(rt, p); - break; - default: - list_del(&p->link); - list_add_tail(&p->link, &rt->gc_zero_ref_count_list); - break; - } - } - rt->gc_phase = JS_GC_PHASE_NONE; - - list_for_each_safe(el, el1, &rt->gc_zero_ref_count_list) { - p = list_entry(el, JSGCObjectHeader, link); - assert(p->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT || - p->gc_obj_type == JS_GC_OBJ_TYPE_FUNCTION_BYTECODE); - js_free_rt(rt, p); - } - - init_list_head(&rt->gc_zero_ref_count_list); -} - -void JS_RunGC(JSRuntime *rt) -{ - /* decrement the reference of the children of each object. mark = - 1 after this pass. */ - gc_decref(rt); - - /* keep the GC objects with a non zero refcount and their childs */ - gc_scan(rt); - - /* free the GC objects in a cycle */ - gc_free_cycles(rt); -} - -/* Return false if not an object or if the object has already been - freed (zombie objects are visible in finalizers when freeing - cycles). */ -BOOL JS_IsLiveObject(JSRuntime *rt, JSValue obj) -{ - JSObject *p; - if (!JS_IsObject(obj)) - return FALSE; - p = JS_VALUE_GET_OBJ(obj); - return !p->free_mark; -} - -/* Compute memory used by various object types */ -/* XXX: poor man's approach to handling multiply referenced objects */ -typedef struct JSMemoryUsage_helper { - double memory_used_count; - double str_count; - double str_size; - int64_t js_func_count; - double js_func_size; - int64_t js_func_code_size; - int64_t js_func_pc2line_count; - int64_t js_func_pc2line_size; -} JSMemoryUsage_helper; - -static void compute_value_size(JSValue val, JSMemoryUsage_helper *hp); - -static void compute_jsstring_size(JSString *str, JSMemoryUsage_helper *hp) -{ - if (!str->atom_type) { /* atoms are handled separately */ - double s_ref_count = str->header.ref_count; - hp->str_count += 1 / s_ref_count; - hp->str_size += ((sizeof(*str) + (str->len << str->is_wide_char) + - 1 - str->is_wide_char) / s_ref_count); - } -} - -static void compute_bytecode_size(JSFunctionBytecode *b, JSMemoryUsage_helper *hp) -{ - int memory_used_count, js_func_size, i; - - memory_used_count = 0; - js_func_size = sizeof(*b); - if (b->vardefs) { - js_func_size += (b->arg_count + b->var_count) * sizeof(*b->vardefs); - } - if (b->cpool) { - js_func_size += b->cpool_count * sizeof(*b->cpool); - for (i = 0; i < b->cpool_count; i++) { - JSValue val = b->cpool[i]; - compute_value_size(val, hp); - } - } - if (b->closure_var) { - js_func_size += b->closure_var_count * sizeof(*b->closure_var); - } - if (b->byte_code_buf) { - hp->js_func_code_size += b->byte_code_len; - } - memory_used_count++; - js_func_size += b->source_len + 1; - if (b->pc2line_len) { - memory_used_count++; - hp->js_func_pc2line_count += 1; - hp->js_func_pc2line_size += b->pc2line_len; - } - hp->js_func_size += js_func_size; - hp->js_func_count += 1; - hp->memory_used_count += memory_used_count; -} - -static void compute_value_size(JSValue val, JSMemoryUsage_helper *hp) -{ - switch(JS_VALUE_GET_TAG(val)) { - case JS_TAG_STRING: - compute_jsstring_size(JS_VALUE_GET_STRING(val), hp); - break; - case JS_TAG_BIG_INT: - /* should track JSBigInt usage */ - break; - } -} - -void JS_ComputeMemoryUsage(JSRuntime *rt, JSMemoryUsage *s) -{ - struct list_head *el, *el1; - int i; - JSMemoryUsage_helper mem = { 0 }, *hp = &mem; - - memset(s, 0, sizeof(*s)); - s->malloc_count = rt->malloc_state.malloc_count; - s->malloc_size = rt->malloc_state.malloc_size; - s->malloc_limit = rt->malloc_state.malloc_limit; - - s->memory_used_count = 2; /* rt + rt->class_array */ - s->memory_used_size = sizeof(JSRuntime) + sizeof(JSClass) * rt->class_count; - - list_for_each(el, &rt->context_list) { - JSContext *ctx = list_entry(el, JSContext, link); - JSShape *sh = ctx->array_shape; - s->memory_used_count += 2; /* ctx + ctx->class_proto */ - s->memory_used_size += sizeof(JSContext) + - sizeof(JSValue) * rt->class_count; - s->binary_object_count += ctx->binary_object_count; - s->binary_object_size += ctx->binary_object_size; - - /* the hashed shapes are counted separately */ - if (sh && !sh->is_hashed) { - int hash_size = sh->prop_hash_mask + 1; - s->shape_count++; - s->shape_size += get_shape_size(hash_size, sh->prop_size); - } - list_for_each(el1, &ctx->loaded_modules) { - JSModuleDef *m = list_entry(el1, JSModuleDef, link); - s->memory_used_count += 1; - s->memory_used_size += sizeof(*m); - if (m->req_module_entries) { - s->memory_used_count += 1; - s->memory_used_size += m->req_module_entries_count * sizeof(*m->req_module_entries); - } - if (m->export_entries) { - s->memory_used_count += 1; - s->memory_used_size += m->export_entries_count * sizeof(*m->export_entries); - for (i = 0; i < m->export_entries_count; i++) { - JSExportEntry *me = &m->export_entries[i]; - if (me->export_type == JS_EXPORT_TYPE_LOCAL && me->u.local.var_ref) { - /* potential multiple count */ - s->memory_used_count += 1; - compute_value_size(me->u.local.var_ref->value, hp); - } - } - } - if (m->star_export_entries) { - s->memory_used_count += 1; - s->memory_used_size += m->star_export_entries_count * sizeof(*m->star_export_entries); - } - if (m->import_entries) { - s->memory_used_count += 1; - s->memory_used_size += m->import_entries_count * sizeof(*m->import_entries); - } - compute_value_size(m->module_ns, hp); - compute_value_size(m->func_obj, hp); - } - } - - list_for_each(el, &rt->gc_obj_list) { - JSGCObjectHeader *gp = list_entry(el, JSGCObjectHeader, link); - JSObject *p; - JSShape *sh; - JSShapeProperty *prs; - - /* XXX: could count the other GC object types too */ - if (gp->gc_obj_type == JS_GC_OBJ_TYPE_FUNCTION_BYTECODE) { - compute_bytecode_size((JSFunctionBytecode *)gp, hp); - continue; - } else if (gp->gc_obj_type != JS_GC_OBJ_TYPE_JS_OBJECT) { - continue; - } - p = (JSObject *)gp; - sh = p->shape; - s->obj_count++; - if (p->prop) { - s->memory_used_count++; - s->prop_size += sh->prop_size * sizeof(*p->prop); - s->prop_count += sh->prop_count; - prs = get_shape_prop(sh); - for(i = 0; i < sh->prop_count; i++) { - JSProperty *pr = &p->prop[i]; - if (prs->atom != JS_ATOM_NULL && !(prs->flags & JS_PROP_TMASK)) { - compute_value_size(pr->u.value, hp); - } - prs++; - } - } - /* the hashed shapes are counted separately */ - if (!sh->is_hashed) { - int hash_size = sh->prop_hash_mask + 1; - s->shape_count++; - s->shape_size += get_shape_size(hash_size, sh->prop_size); - } - - switch(p->class_id) { - case JS_CLASS_ARRAY: /* u.array | length */ - case JS_CLASS_ARGUMENTS: /* u.array | length */ - s->array_count++; - if (p->fast_array) { - s->fast_array_count++; - if (p->u.array.u.values) { - s->memory_used_count++; - s->memory_used_size += p->u.array.count * - sizeof(*p->u.array.u.values); - s->fast_array_elements += p->u.array.count; - for (i = 0; i < p->u.array.count; i++) { - compute_value_size(p->u.array.u.values[i], hp); - } - } - } - break; - case JS_CLASS_NUMBER: /* u.object_data */ - case JS_CLASS_STRING: /* u.object_data */ - case JS_CLASS_BOOLEAN: /* u.object_data */ - case JS_CLASS_SYMBOL: /* u.object_data */ - case JS_CLASS_DATE: /* u.object_data */ - case JS_CLASS_BIG_INT: /* u.object_data */ - compute_value_size(p->u.object_data, hp); - break; - case JS_CLASS_C_FUNCTION: /* u.cfunc */ - s->c_func_count++; - break; - case JS_CLASS_BYTECODE_FUNCTION: /* u.func */ - { - JSFunctionBytecode *b = p->u.func.function_bytecode; - JSVarRef **var_refs = p->u.func.var_refs; - /* home_object: object will be accounted for in list scan */ - if (var_refs) { - s->memory_used_count++; - s->js_func_size += b->closure_var_count * sizeof(*var_refs); - for (i = 0; i < b->closure_var_count; i++) { - if (var_refs[i]) { - double ref_count = var_refs[i]->header.ref_count; - s->memory_used_count += 1 / ref_count; - s->js_func_size += sizeof(*var_refs[i]) / ref_count; - /* handle non object closed values */ - if (var_refs[i]->pvalue == &var_refs[i]->value) { - /* potential multiple count */ - compute_value_size(var_refs[i]->value, hp); - } - } - } - } - } - break; - case JS_CLASS_BOUND_FUNCTION: /* u.bound_function */ - { - JSBoundFunction *bf = p->u.bound_function; - /* func_obj and this_val are objects */ - for (i = 0; i < bf->argc; i++) { - compute_value_size(bf->argv[i], hp); - } - s->memory_used_count += 1; - s->memory_used_size += sizeof(*bf) + bf->argc * sizeof(*bf->argv); - } - break; - case JS_CLASS_C_FUNCTION_DATA: /* u.c_function_data_record */ - { - JSCFunctionDataRecord *fd = p->u.c_function_data_record; - if (fd) { - for (i = 0; i < fd->data_len; i++) { - compute_value_size(fd->data[i], hp); - } - s->memory_used_count += 1; - s->memory_used_size += sizeof(*fd) + fd->data_len * sizeof(*fd->data); - } - } - break; - case JS_CLASS_REGEXP: /* u.regexp */ - compute_jsstring_size(p->u.regexp.pattern, hp); - compute_jsstring_size(p->u.regexp.bytecode, hp); - break; - - case JS_CLASS_FOR_IN_ITERATOR: /* u.for_in_iterator */ - { - JSForInIterator *it = p->u.for_in_iterator; - if (it) { - compute_value_size(it->obj, hp); - s->memory_used_count += 1; - s->memory_used_size += sizeof(*it); - } - } - break; - case JS_CLASS_ARRAY_BUFFER: /* u.array_buffer */ - case JS_CLASS_SHARED_ARRAY_BUFFER: /* u.array_buffer */ - { - JSArrayBuffer *abuf = p->u.array_buffer; - if (abuf) { - s->memory_used_count += 1; - s->memory_used_size += sizeof(*abuf); - if (abuf->data) { - s->memory_used_count += 1; - s->memory_used_size += abuf->byte_length; - } - } - } - break; - case JS_CLASS_GENERATOR: /* u.generator_data */ - case JS_CLASS_UINT8C_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_INT8_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_UINT8_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_INT16_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_UINT16_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_INT32_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_UINT32_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_BIG_INT64_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_BIG_UINT64_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_FLOAT32_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_FLOAT64_ARRAY: /* u.typed_array / u.array */ - case JS_CLASS_DATAVIEW: /* u.typed_array */ - case JS_CLASS_MAP: /* u.map_state */ - case JS_CLASS_SET: /* u.map_state */ - case JS_CLASS_WEAKMAP: /* u.map_state */ - case JS_CLASS_WEAKSET: /* u.map_state */ - case JS_CLASS_MAP_ITERATOR: /* u.map_iterator_data */ - case JS_CLASS_SET_ITERATOR: /* u.map_iterator_data */ - case JS_CLASS_ARRAY_ITERATOR: /* u.array_iterator_data */ - case JS_CLASS_STRING_ITERATOR: /* u.array_iterator_data */ - case JS_CLASS_PROXY: /* u.proxy_data */ - case JS_CLASS_PROMISE: /* u.promise_data */ - case JS_CLASS_PROMISE_RESOLVE_FUNCTION: /* u.promise_function_data */ - case JS_CLASS_PROMISE_REJECT_FUNCTION: /* u.promise_function_data */ - case JS_CLASS_ASYNC_FUNCTION_RESOLVE: /* u.async_function_data */ - case JS_CLASS_ASYNC_FUNCTION_REJECT: /* u.async_function_data */ - case JS_CLASS_ASYNC_FROM_SYNC_ITERATOR: /* u.async_from_sync_iterator_data */ - case JS_CLASS_ASYNC_GENERATOR: /* u.async_generator_data */ - /* TODO */ - default: - /* XXX: class definition should have an opaque block size */ - if (p->u.opaque) { - s->memory_used_count += 1; - } - break; - } - } - s->obj_size += s->obj_count * sizeof(JSObject); - - /* hashed shapes */ - s->memory_used_count++; /* rt->shape_hash */ - s->memory_used_size += sizeof(rt->shape_hash[0]) * rt->shape_hash_size; - for(i = 0; i < rt->shape_hash_size; i++) { - JSShape *sh; - for(sh = rt->shape_hash[i]; sh != NULL; sh = sh->shape_hash_next) { - int hash_size = sh->prop_hash_mask + 1; - s->shape_count++; - s->shape_size += get_shape_size(hash_size, sh->prop_size); - } - } - - /* atoms */ - s->memory_used_count += 2; /* rt->atom_array, rt->atom_hash */ - s->atom_count = rt->atom_count; - s->atom_size = sizeof(rt->atom_array[0]) * rt->atom_size + - sizeof(rt->atom_hash[0]) * rt->atom_hash_size; - for(i = 0; i < rt->atom_size; i++) { - JSAtomStruct *p = rt->atom_array[i]; - if (!atom_is_free(p)) { - s->atom_size += (sizeof(*p) + (p->len << p->is_wide_char) + - 1 - p->is_wide_char); - } - } - s->str_count = round(mem.str_count); - s->str_size = round(mem.str_size); - s->js_func_count = mem.js_func_count; - s->js_func_size = round(mem.js_func_size); - s->js_func_code_size = mem.js_func_code_size; - s->js_func_pc2line_count = mem.js_func_pc2line_count; - s->js_func_pc2line_size = mem.js_func_pc2line_size; - s->memory_used_count += round(mem.memory_used_count) + - s->atom_count + s->str_count + - s->obj_count + s->shape_count + - s->js_func_count + s->js_func_pc2line_count; - s->memory_used_size += s->atom_size + s->str_size + - s->obj_size + s->prop_size + s->shape_size + - s->js_func_size + s->js_func_code_size + s->js_func_pc2line_size; -} - -void JS_DumpMemoryUsage(FILE *fp, const JSMemoryUsage *s, JSRuntime *rt) -{ - fprintf(fp, "QuickJS-ng memory usage -- %s version, %d-bit, malloc limit: %"PRId64"\n\n", - JS_GetVersion(), (int)sizeof(void *) * 8, (int64_t)(ssize_t)s->malloc_limit); - if (rt) { - static const struct { - const char *name; - size_t size; - } object_types[] = { - { "JSRuntime", sizeof(JSRuntime) }, - { "JSContext", sizeof(JSContext) }, - { "JSObject", sizeof(JSObject) }, - { "JSString", sizeof(JSString) }, - { "JSFunctionBytecode", sizeof(JSFunctionBytecode) }, - }; - int i, usage_size_ok = 0; - for(i = 0; i < countof(object_types); i++) { - unsigned int size = object_types[i].size; - void *p = js_malloc_rt(rt, size); - if (p) { - unsigned int size1 = js_malloc_usable_size_rt(rt, p); - if (size1 >= size) { - usage_size_ok = 1; - fprintf(fp, " %3u + %-2u %s\n", - size, size1 - size, object_types[i].name); - } - js_free_rt(rt, p); - } - } - if (!usage_size_ok) { - fprintf(fp, " malloc_usable_size unavailable\n"); - } - { - int obj_classes[JS_CLASS_INIT_COUNT + 1] = { 0 }; - int class_id; - struct list_head *el; - list_for_each(el, &rt->gc_obj_list) { - JSGCObjectHeader *gp = list_entry(el, JSGCObjectHeader, link); - JSObject *p; - if (gp->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { - p = (JSObject *)gp; - obj_classes[min_uint32(p->class_id, JS_CLASS_INIT_COUNT)]++; - } - } - fprintf(fp, "\n" "JSObject classes\n"); - if (obj_classes[0]) - fprintf(fp, " %5d %2.0d %s\n", obj_classes[0], 0, "none"); - for (class_id = 1; class_id < JS_CLASS_INIT_COUNT; class_id++) { - if (obj_classes[class_id]) { - char buf[ATOM_GET_STR_BUF_SIZE]; - fprintf(fp, " %5d %2.0d %s\n", obj_classes[class_id], class_id, - JS_AtomGetStrRT(rt, buf, sizeof(buf), js_std_class_def[class_id - 1].class_name)); - } - } - if (obj_classes[JS_CLASS_INIT_COUNT]) - fprintf(fp, " %5d %2.0d %s\n", obj_classes[JS_CLASS_INIT_COUNT], 0, "other"); - } - fprintf(fp, "\n"); - } - fprintf(fp, "%-20s %8s %8s\n", "NAME", "COUNT", "SIZE"); - - if (s->malloc_count) { - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per block)\n", - "memory allocated", s->malloc_count, s->malloc_size, - (double)s->malloc_size / s->malloc_count); - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%d overhead, %0.1f average slack)\n", - "memory used", s->memory_used_count, s->memory_used_size, - MALLOC_OVERHEAD, ((double)(s->malloc_size - s->memory_used_size) / - s->memory_used_count)); - } - if (s->atom_count) { - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per atom)\n", - "atoms", s->atom_count, s->atom_size, - (double)s->atom_size / s->atom_count); - } - if (s->str_count) { - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per string)\n", - "strings", s->str_count, s->str_size, - (double)s->str_size / s->str_count); - } - if (s->obj_count) { - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per object)\n", - "objects", s->obj_count, s->obj_size, - (double)s->obj_size / s->obj_count); - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per object)\n", - " properties", s->prop_count, s->prop_size, - (double)s->prop_count / s->obj_count); - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per shape)\n", - " shapes", s->shape_count, s->shape_size, - (double)s->shape_size / s->shape_count); - } - if (s->js_func_count) { - fprintf(fp, "%-20s %8"PRId64" %8"PRId64"\n", - "bytecode functions", s->js_func_count, s->js_func_size); - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per function)\n", - " bytecode", s->js_func_count, s->js_func_code_size, - (double)s->js_func_code_size / s->js_func_count); - if (s->js_func_pc2line_count) { - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per function)\n", - " pc2line", s->js_func_pc2line_count, - s->js_func_pc2line_size, - (double)s->js_func_pc2line_size / s->js_func_pc2line_count); - } - } - if (s->c_func_count) { - fprintf(fp, "%-20s %8"PRId64"\n", "C functions", s->c_func_count); - } - if (s->array_count) { - fprintf(fp, "%-20s %8"PRId64"\n", "arrays", s->array_count); - if (s->fast_array_count) { - fprintf(fp, "%-20s %8"PRId64"\n", " fast arrays", s->fast_array_count); - fprintf(fp, "%-20s %8"PRId64" %8"PRId64" (%0.1f per fast array)\n", - " elements", s->fast_array_elements, - s->fast_array_elements * (int)sizeof(JSValue), - (double)s->fast_array_elements / s->fast_array_count); - } - } - if (s->binary_object_count) { - fprintf(fp, "%-20s %8"PRId64" %8"PRId64"\n", - "binary objects", s->binary_object_count, s->binary_object_size); - } -} - -JSValue JS_GetGlobalObject(JSContext *ctx) -{ - return js_dup(ctx->global_obj); -} - -/* WARNING: obj is freed */ -JSValue JS_Throw(JSContext *ctx, JSValue obj) -{ - JSRuntime *rt = ctx->rt; - JS_FreeValue(ctx, rt->current_exception); - rt->current_exception = obj; - return JS_EXCEPTION; -} - -/* return the pending exception (cannot be called twice). */ -JSValue JS_GetException(JSContext *ctx) -{ - JSValue val; - JSRuntime *rt = ctx->rt; - val = rt->current_exception; - rt->current_exception = JS_NULL; - return val; -} - -static void dbuf_put_leb128(DynBuf *s, uint32_t v) -{ - uint32_t a; - for(;;) { - a = v & 0x7f; - v >>= 7; - if (v != 0) { - dbuf_putc(s, a | 0x80); - } else { - dbuf_putc(s, a); - break; - } - } -} - -static void dbuf_put_sleb128(DynBuf *s, int32_t v1) -{ - uint32_t v = v1; - dbuf_put_leb128(s, (2 * v) ^ -(v >> 31)); -} - -static int get_leb128(uint32_t *pval, const uint8_t *buf, - const uint8_t *buf_end) -{ - const uint8_t *ptr = buf; - uint32_t v, a, i; - v = 0; - for(i = 0; i < 5; i++) { - if (unlikely(ptr >= buf_end)) - break; - a = *ptr++; - v |= (a & 0x7f) << (i * 7); - if (!(a & 0x80)) { - *pval = v; - return ptr - buf; - } - } - *pval = 0; - return -1; -} - -static int get_sleb128(int32_t *pval, const uint8_t *buf, - const uint8_t *buf_end) -{ - int ret; - uint32_t val; - ret = get_leb128(&val, buf, buf_end); - if (ret < 0) { - *pval = 0; - return -1; - } - *pval = (val >> 1) ^ -(val & 1); - return ret; -} - -static int find_line_num(JSContext *ctx, JSFunctionBytecode *b, - uint32_t pc_value, int *col) -{ - const uint8_t *p_end, *p; - int new_line_num, new_col_num, line_num, col_num, pc, v, ret; - unsigned int op; - - *col = 1; - p = b->pc2line_buf; - p_end = p + b->pc2line_len; - pc = 0; - line_num = b->line_num; - col_num = b->col_num; - while (p < p_end) { - op = *p++; - if (op == 0) { - uint32_t val; - ret = get_leb128(&val, p, p_end); - if (ret < 0) - goto fail; - pc += val; - p += ret; - ret = get_sleb128(&v, p, p_end); - if (ret < 0) - goto fail; - p += ret; - new_line_num = line_num + v; - } else { - op -= PC2LINE_OP_FIRST; - pc += (op / PC2LINE_RANGE); - new_line_num = line_num + (op % PC2LINE_RANGE) + PC2LINE_BASE; - } - ret = get_sleb128(&v, p, p_end); - if (ret < 0) - goto fail; - p += ret; - new_col_num = col_num + v; - if (pc_value < pc) - break; - line_num = new_line_num; - col_num = new_col_num; - } - *col = col_num; - return line_num; -fail: - /* should never happen */ - return b->line_num; -} - -/* in order to avoid executing arbitrary code during the stack trace - generation, we only look at simple 'name' properties containing a - string. */ -static const char *get_func_name(JSContext *ctx, JSValue func) -{ - JSProperty *pr; - JSShapeProperty *prs; - JSValue val; - - if (JS_VALUE_GET_TAG(func) != JS_TAG_OBJECT) - return NULL; - prs = find_own_property(&pr, JS_VALUE_GET_OBJ(func), JS_ATOM_name); - if (!prs) - return NULL; - if ((prs->flags & JS_PROP_TMASK) != JS_PROP_NORMAL) - return NULL; - val = pr->u.value; - if (JS_VALUE_GET_TAG(val) != JS_TAG_STRING) - return NULL; - return JS_ToCString(ctx, val); -} - -#define JS_BACKTRACE_FLAG_SKIP_FIRST_LEVEL (1 << 0) -/* only taken into account if filename is provided */ -#define JS_BACKTRACE_FLAG_SINGLE_LEVEL (1 << 1) - -/* if filename != NULL, an additional level is added with the filename - and line number information (used for parse error). */ -static void build_backtrace(JSContext *ctx, JSValue error_obj, - const char *filename, int line_num, int col_num, - int backtrace_flags) -{ - JSStackFrame *sf; - JSValue stack, prepare, saved_exception; - DynBuf dbuf; - const char *func_name_str; - const char *str1; - JSObject *p; - JSFunctionBytecode *b; - BOOL backtrace_barrier, has_prepare; - JSRuntime *rt; - JSCallSiteData csd[64]; - uint32_t i; - int stack_trace_limit; - - stack_trace_limit = ctx->error_stack_trace_limit; - stack_trace_limit = min_int(stack_trace_limit, countof(csd)); - stack_trace_limit = max_int(stack_trace_limit, 0); - rt = ctx->rt; - has_prepare = FALSE; - i = 0; - - if (!rt->in_prepare_stack_trace && !JS_IsNull(ctx->error_ctor)) { - prepare = js_dup(ctx->error_prepare_stack); - has_prepare = JS_IsFunction(ctx, prepare); - rt->in_prepare_stack_trace = TRUE; - } - - if (has_prepare) { - saved_exception = rt->current_exception; - rt->current_exception = JS_NULL; - if (stack_trace_limit == 0) - goto done; - if (filename) - js_new_callsite_data2(ctx, &csd[i++], filename, line_num, col_num); - } else { - js_dbuf_init(ctx, &dbuf); - if (stack_trace_limit == 0) - goto done; - if (filename) { - i++; - dbuf_printf(&dbuf, " at %s", filename); - if (line_num != -1) - dbuf_printf(&dbuf, ":%d:%d", line_num, col_num); - dbuf_putc(&dbuf, '\n'); - } - } - - if (filename && (backtrace_flags & JS_BACKTRACE_FLAG_SINGLE_LEVEL)) - goto done; - - for (sf = rt->current_stack_frame; sf != NULL && i < stack_trace_limit; sf = sf->prev_frame) { - if (backtrace_flags & JS_BACKTRACE_FLAG_SKIP_FIRST_LEVEL) { - backtrace_flags &= ~JS_BACKTRACE_FLAG_SKIP_FIRST_LEVEL; - continue; - } - - p = JS_VALUE_GET_OBJ(sf->cur_func); - b = NULL; - backtrace_barrier = FALSE; - - if (js_class_has_bytecode(p->class_id)) { - b = p->u.func.function_bytecode; - backtrace_barrier = b->backtrace_barrier; - } - - if (has_prepare) { - js_new_callsite_data(ctx, &csd[i], sf); - } else { - func_name_str = get_func_name(ctx, sf->cur_func); - if (!func_name_str || func_name_str[0] == '\0') - str1 = ""; - else - str1 = func_name_str; - dbuf_printf(&dbuf, " at %s", str1); - JS_FreeCString(ctx, func_name_str); - - if (b) { - const char *atom_str; - int line_num1, col_num1; - - line_num1 = find_line_num(ctx, b, - sf->cur_pc - b->byte_code_buf - 1, - &col_num1); - atom_str = JS_AtomToCString(ctx, b->filename); - dbuf_printf(&dbuf, " (%s", atom_str ? atom_str : ""); - JS_FreeCString(ctx, atom_str); - if (line_num1 != -1) - dbuf_printf(&dbuf, ":%d:%d", line_num1, col_num1); - dbuf_putc(&dbuf, ')'); - } else { - dbuf_printf(&dbuf, " (native)"); - } - dbuf_putc(&dbuf, '\n'); - } - i++; - - /* stop backtrace if JS_EVAL_FLAG_BACKTRACE_BARRIER was used */ - if (backtrace_barrier) - break; - } - done: - if (has_prepare) { - int j = 0; - stack = JS_NewArray(ctx); - if (JS_IsException(stack)) { - stack = JS_NULL; - } else { - for (; j < i; j++) { - JSValue v = js_new_callsite(ctx, &csd[j]); - if (JS_IsException(v)) - break; - if (JS_DefinePropertyValueUint32(ctx, stack, j, v, JS_PROP_C_W_E) < 0) { - JS_FreeValue(ctx, v); - break; - } - } - } - // Clear the csd's we didn't use in case of error. - for (int k = j; k < i; k++) { - JS_FreeValue(ctx, csd[k].filename); - JS_FreeValue(ctx, csd[k].func); - JS_FreeValue(ctx, csd[k].func_name); - } - JSValue args[] = { - error_obj, - stack, - }; - JSValue stack2 = JS_Call(ctx, prepare, ctx->error_ctor, countof(args), args); - JS_FreeValue(ctx, stack); - if (JS_IsException(stack2)) - stack = JS_NULL; - else - stack = stack2; - JS_FreeValue(ctx, prepare); - JS_FreeValue(ctx, rt->current_exception); - rt->current_exception = saved_exception; - } else { - dbuf_putc(&dbuf, '\0'); - if (dbuf_error(&dbuf)) - stack = JS_NULL; - else - stack = JS_NewString(ctx, (char *)dbuf.buf); - dbuf_free(&dbuf); - } - - rt->in_prepare_stack_trace = FALSE; - JS_DefinePropertyValue(ctx, error_obj, JS_ATOM_stack, stack, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); -} - -/* Note: it is important that no exception is returned by this function */ -static BOOL is_backtrace_needed(JSContext *ctx, JSValue obj) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(obj); - if (p->class_id != JS_CLASS_ERROR) - return FALSE; - if (find_own_property1(p, JS_ATOM_stack)) - return FALSE; - return TRUE; -} - -JSValue JS_NewError(JSContext *ctx) -{ - return JS_NewObjectClass(ctx, JS_CLASS_ERROR); -} - -static JSValue JS_ThrowError2(JSContext *ctx, JSErrorEnum error_num, - const char *fmt, va_list ap, BOOL add_backtrace) -{ - char buf[256]; - JSValue obj, ret; - - vsnprintf(buf, sizeof(buf), fmt, ap); - obj = JS_NewObjectProtoClass(ctx, ctx->native_error_proto[error_num], - JS_CLASS_ERROR); - if (unlikely(JS_IsException(obj))) { - /* out of memory: throw JS_NULL to avoid recursing */ - obj = JS_NULL; - } else { - JS_DefinePropertyValue(ctx, obj, JS_ATOM_message, - JS_NewString(ctx, buf), - JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); - } - if (add_backtrace) { - build_backtrace(ctx, obj, NULL, 0, 0, 0); - } - ret = JS_Throw(ctx, obj); - return ret; -} - -static JSValue JS_ThrowError(JSContext *ctx, JSErrorEnum error_num, - const char *fmt, va_list ap) -{ - JSRuntime *rt = ctx->rt; - JSStackFrame *sf; - BOOL add_backtrace; - - /* the backtrace is added later if called from a bytecode function */ - sf = rt->current_stack_frame; - add_backtrace = !rt->in_out_of_memory && - (!sf || (JS_GetFunctionBytecode(sf->cur_func) == NULL)); - return JS_ThrowError2(ctx, error_num, fmt, ap, add_backtrace); -} - -JSValue __attribute__((format(printf, 2, 3))) JS_ThrowSyntaxError(JSContext *ctx, const char *fmt, ...) -{ - JSValue val; - va_list ap; - - va_start(ap, fmt); - val = JS_ThrowError(ctx, JS_SYNTAX_ERROR, fmt, ap); - va_end(ap); - return val; -} - -JSValue __attribute__((format(printf, 2, 3))) JS_ThrowTypeError(JSContext *ctx, const char *fmt, ...) -{ - JSValue val; - va_list ap; - - va_start(ap, fmt); - val = JS_ThrowError(ctx, JS_TYPE_ERROR, fmt, ap); - va_end(ap); - return val; -} - -static int __attribute__((format(printf, 3, 4))) JS_ThrowTypeErrorOrFalse(JSContext *ctx, int flags, const char *fmt, ...) -{ - va_list ap; - - if ((flags & JS_PROP_THROW) || - ((flags & JS_PROP_THROW_STRICT) && is_strict_mode(ctx))) { - va_start(ap, fmt); - JS_ThrowError(ctx, JS_TYPE_ERROR, fmt, ap); - va_end(ap); - return -1; - } else { - return FALSE; - } -} - -/* never use it directly */ -static JSValue __attribute__((format(printf, 3, 4))) __JS_ThrowTypeErrorAtom(JSContext *ctx, JSAtom atom, const char *fmt, ...) -{ - char buf[ATOM_GET_STR_BUF_SIZE]; - return JS_ThrowTypeError(ctx, fmt, - JS_AtomGetStr(ctx, buf, sizeof(buf), atom)); -} - -/* never use it directly */ -static JSValue __attribute__((format(printf, 3, 4))) __JS_ThrowSyntaxErrorAtom(JSContext *ctx, JSAtom atom, const char *fmt, ...) -{ - char buf[ATOM_GET_STR_BUF_SIZE]; - return JS_ThrowSyntaxError(ctx, fmt, - JS_AtomGetStr(ctx, buf, sizeof(buf), atom)); -} - -/* %s is replaced by 'atom'. The macro is used so that gcc can check - the format string. */ -#define JS_ThrowTypeErrorAtom(ctx, fmt, atom) __JS_ThrowTypeErrorAtom(ctx, atom, fmt, "") -#define JS_ThrowSyntaxErrorAtom(ctx, fmt, atom) __JS_ThrowSyntaxErrorAtom(ctx, atom, fmt, "") - -static int JS_ThrowTypeErrorReadOnly(JSContext *ctx, int flags, JSAtom atom) -{ - if ((flags & JS_PROP_THROW) || - ((flags & JS_PROP_THROW_STRICT) && is_strict_mode(ctx))) { - JS_ThrowTypeErrorAtom(ctx, "'%s' is read-only", atom); - return -1; - } else { - return FALSE; - } -} - -JSValue __attribute__((format(printf, 2, 3))) JS_ThrowReferenceError(JSContext *ctx, const char *fmt, ...) -{ - JSValue val; - va_list ap; - - va_start(ap, fmt); - val = JS_ThrowError(ctx, JS_REFERENCE_ERROR, fmt, ap); - va_end(ap); - return val; -} - -JSValue __attribute__((format(printf, 2, 3))) JS_ThrowRangeError(JSContext *ctx, const char *fmt, ...) -{ - JSValue val; - va_list ap; - - va_start(ap, fmt); - val = JS_ThrowError(ctx, JS_RANGE_ERROR, fmt, ap); - va_end(ap); - return val; -} - -JSValue __attribute__((format(printf, 2, 3))) JS_ThrowInternalError(JSContext *ctx, const char *fmt, ...) -{ - JSValue val; - va_list ap; - - va_start(ap, fmt); - val = JS_ThrowError(ctx, JS_INTERNAL_ERROR, fmt, ap); - va_end(ap); - return val; -} - -JSValue JS_ThrowOutOfMemory(JSContext *ctx) -{ - JSRuntime *rt = ctx->rt; - if (!rt->in_out_of_memory) { - rt->in_out_of_memory = TRUE; - JS_ThrowInternalError(ctx, "out of memory"); - rt->in_out_of_memory = FALSE; - } - return JS_EXCEPTION; -} - -static JSValue JS_ThrowStackOverflow(JSContext *ctx) -{ - return JS_ThrowInternalError(ctx, "stack overflow"); -} - -static JSValue JS_ThrowTypeErrorNotAnObject(JSContext *ctx) -{ - return JS_ThrowTypeError(ctx, "not an object"); -} - -static JSValue JS_ThrowTypeErrorNotASymbol(JSContext *ctx) -{ - return JS_ThrowTypeError(ctx, "not a symbol"); -} - -static JSValue JS_ThrowReferenceErrorNotDefined(JSContext *ctx, JSAtom name) -{ - char buf[ATOM_GET_STR_BUF_SIZE]; - return JS_ThrowReferenceError(ctx, "'%s' is not defined", - JS_AtomGetStr(ctx, buf, sizeof(buf), name)); -} - -static JSValue JS_ThrowReferenceErrorUninitialized(JSContext *ctx, JSAtom name) -{ - char buf[ATOM_GET_STR_BUF_SIZE]; - return JS_ThrowReferenceError(ctx, "%s is not initialized", - name == JS_ATOM_NULL ? "lexical variable" : - JS_AtomGetStr(ctx, buf, sizeof(buf), name)); -} - -static JSValue JS_ThrowReferenceErrorUninitialized2(JSContext *ctx, - JSFunctionBytecode *b, - int idx, BOOL is_ref) -{ - JSAtom atom = JS_ATOM_NULL; - if (is_ref) { - atom = b->closure_var[idx].var_name; - } else { - /* not present if the function is stripped and contains no eval() */ - if (b->vardefs) - atom = b->vardefs[b->arg_count + idx].var_name; - } - return JS_ThrowReferenceErrorUninitialized(ctx, atom); -} - -static JSValue JS_ThrowTypeErrorInvalidClass(JSContext *ctx, int class_id) -{ - JSRuntime *rt = ctx->rt; - JSAtom name; - name = rt->class_array[class_id].class_name; - return JS_ThrowTypeErrorAtom(ctx, "%s object expected", name); -} - -static no_inline __exception int __js_poll_interrupts(JSContext *ctx) -{ - JSRuntime *rt = ctx->rt; - ctx->interrupt_counter = JS_INTERRUPT_COUNTER_INIT; - if (rt->interrupt_handler) { - if (rt->interrupt_handler(rt, rt->interrupt_opaque)) { - /* XXX: should set a specific flag to avoid catching */ - JS_ThrowInternalError(ctx, "interrupted"); - JS_SetUncatchableError(ctx, ctx->rt->current_exception, TRUE); - return -1; - } - } - return 0; -} - -static inline __exception int js_poll_interrupts(JSContext *ctx) -{ - if (unlikely(--ctx->interrupt_counter <= 0)) { - return __js_poll_interrupts(ctx); - } else { - return 0; - } -} - -/* return -1 (exception) or TRUE/FALSE */ -static int JS_SetPrototypeInternal(JSContext *ctx, JSValue obj, - JSValue proto_val, - BOOL throw_flag) -{ - JSObject *proto, *p, *p1; - JSShape *sh; - - if (throw_flag) { - if (JS_VALUE_GET_TAG(obj) == JS_TAG_NULL || - JS_VALUE_GET_TAG(obj) == JS_TAG_UNDEFINED) - goto not_obj; - } else { - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) - goto not_obj; - } - p = JS_VALUE_GET_OBJ(obj); - if (JS_VALUE_GET_TAG(proto_val) != JS_TAG_OBJECT) { - if (JS_VALUE_GET_TAG(proto_val) != JS_TAG_NULL) { - not_obj: - JS_ThrowTypeErrorNotAnObject(ctx); - return -1; - } - proto = NULL; - } else { - proto = JS_VALUE_GET_OBJ(proto_val); - } - - if (throw_flag && JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) - return TRUE; - - if (unlikely(p->class_id == JS_CLASS_PROXY)) - return js_proxy_setPrototypeOf(ctx, obj, proto_val, throw_flag); - sh = p->shape; - if (sh->proto == proto) - return TRUE; - if (!p->extensible) { - if (throw_flag) { - JS_ThrowTypeError(ctx, "object is not extensible"); - return -1; - } else { - return FALSE; - } - } - if (proto) { - /* check if there is a cycle */ - p1 = proto; - do { - if (p1 == p) { - if (throw_flag) { - JS_ThrowTypeError(ctx, "circular prototype chain"); - return -1; - } else { - return FALSE; - } - } - /* Note: for Proxy objects, proto is NULL */ - p1 = p1->shape->proto; - } while (p1 != NULL); - js_dup(proto_val); - } - - if (js_shape_prepare_update(ctx, p, NULL)) - return -1; - sh = p->shape; - if (sh->proto) - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_OBJECT, sh->proto)); - sh->proto = proto; - return TRUE; -} - -/* return -1 (exception) or TRUE/FALSE */ -int JS_SetPrototype(JSContext *ctx, JSValue obj, JSValue proto_val) -{ - return JS_SetPrototypeInternal(ctx, obj, proto_val, TRUE); -} - -/* Only works for primitive types, otherwise return JS_NULL. */ -static JSValue JS_GetPrototypePrimitive(JSContext *ctx, JSValue val) -{ - switch(JS_VALUE_GET_NORM_TAG(val)) { - case JS_TAG_BIG_INT: - val = ctx->class_proto[JS_CLASS_BIG_INT]; - break; - case JS_TAG_INT: - case JS_TAG_FLOAT64: - val = ctx->class_proto[JS_CLASS_NUMBER]; - break; - case JS_TAG_BOOL: - val = ctx->class_proto[JS_CLASS_BOOLEAN]; - break; - case JS_TAG_STRING: - val = ctx->class_proto[JS_CLASS_STRING]; - break; - case JS_TAG_SYMBOL: - val = ctx->class_proto[JS_CLASS_SYMBOL]; - break; - case JS_TAG_OBJECT: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - default: - val = JS_NULL; - break; - } - return val; -} - -/* Return an Object, JS_NULL or JS_EXCEPTION in case of Proxy object. */ -JSValue JS_GetPrototype(JSContext *ctx, JSValue obj) -{ - JSValue val; - if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { - JSObject *p; - p = JS_VALUE_GET_OBJ(obj); - if (unlikely(p->class_id == JS_CLASS_PROXY)) { - val = js_proxy_getPrototypeOf(ctx, obj); - } else { - p = p->shape->proto; - if (!p) - val = JS_NULL; - else - val = js_dup(JS_MKPTR(JS_TAG_OBJECT, p)); - } - } else { - val = js_dup(JS_GetPrototypePrimitive(ctx, obj)); - } - return val; -} - -static JSValue JS_GetPrototypeFree(JSContext *ctx, JSValue obj) -{ - JSValue obj1; - obj1 = JS_GetPrototype(ctx, obj); - JS_FreeValue(ctx, obj); - return obj1; -} - -/* return TRUE, FALSE or (-1) in case of exception */ -static int JS_OrdinaryIsInstanceOf(JSContext *ctx, JSValue val, - JSValue obj) -{ - JSValue obj_proto; - JSObject *proto; - const JSObject *p, *proto1; - BOOL ret; - - if (!JS_IsFunction(ctx, obj)) - return FALSE; - p = JS_VALUE_GET_OBJ(obj); - if (p->class_id == JS_CLASS_BOUND_FUNCTION) { - JSBoundFunction *s = p->u.bound_function; - return JS_IsInstanceOf(ctx, val, s->func_obj); - } - - /* Only explicitly boxed values are instances of constructors */ - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return FALSE; - obj_proto = JS_GetProperty(ctx, obj, JS_ATOM_prototype); - if (JS_VALUE_GET_TAG(obj_proto) != JS_TAG_OBJECT) { - if (!JS_IsException(obj_proto)) - JS_ThrowTypeError(ctx, "operand 'prototype' property is not an object"); - ret = -1; - goto done; - } - proto = JS_VALUE_GET_OBJ(obj_proto); - p = JS_VALUE_GET_OBJ(val); - for(;;) { - proto1 = p->shape->proto; - if (!proto1) { - /* slow case if proxy in the prototype chain */ - if (unlikely(p->class_id == JS_CLASS_PROXY)) { - JSValue obj1; - obj1 = js_dup(JS_MKPTR(JS_TAG_OBJECT, (JSObject *)p)); - for(;;) { - obj1 = JS_GetPrototypeFree(ctx, obj1); - if (JS_IsException(obj1)) { - ret = -1; - break; - } - if (JS_IsNull(obj1)) { - ret = FALSE; - break; - } - if (proto == JS_VALUE_GET_OBJ(obj1)) { - JS_FreeValue(ctx, obj1); - ret = TRUE; - break; - } - /* must check for timeout to avoid infinite loop */ - if (js_poll_interrupts(ctx)) { - JS_FreeValue(ctx, obj1); - ret = -1; - break; - } - } - } else { - ret = FALSE; - } - break; - } - p = proto1; - if (proto == p) { - ret = TRUE; - break; - } - } -done: - JS_FreeValue(ctx, obj_proto); - return ret; -} - -/* return TRUE, FALSE or (-1) in case of exception */ -int JS_IsInstanceOf(JSContext *ctx, JSValue val, JSValue obj) -{ - JSValue method; - - if (!JS_IsObject(obj)) - goto fail; - method = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_hasInstance); - if (JS_IsException(method)) - return -1; - if (!JS_IsNull(method) && !JS_IsUndefined(method)) { - JSValue ret; - ret = JS_CallFree(ctx, method, obj, 1, &val); - return JS_ToBoolFree(ctx, ret); - } - - /* legacy case */ - if (!JS_IsFunction(ctx, obj)) { - fail: - JS_ThrowTypeError(ctx, "invalid 'instanceof' right operand"); - return -1; - } - return JS_OrdinaryIsInstanceOf(ctx, val, obj); -} - -/* return the value associated to the autoinit property or an exception */ -typedef JSValue JSAutoInitFunc(JSContext *ctx, JSObject *p, JSAtom atom, void *opaque); - -static JSAutoInitFunc *js_autoinit_func_table[] = { - js_instantiate_prototype, /* JS_AUTOINIT_ID_PROTOTYPE */ - js_module_ns_autoinit, /* JS_AUTOINIT_ID_MODULE_NS */ - JS_InstantiateFunctionListItem2, /* JS_AUTOINIT_ID_PROP */ -}; - -/* warning: 'prs' is reallocated after it */ -static int JS_AutoInitProperty(JSContext *ctx, JSObject *p, JSAtom prop, - JSProperty *pr, JSShapeProperty *prs) -{ - JSValue val; - JSContext *realm; - JSAutoInitFunc *func; - - if (js_shape_prepare_update(ctx, p, &prs)) - return -1; - - realm = js_autoinit_get_realm(pr); - func = js_autoinit_func_table[js_autoinit_get_id(pr)]; - /* 'func' shall not modify the object properties 'pr' */ - val = func(realm, p, prop, pr->u.init.opaque); - js_autoinit_free(ctx->rt, pr); - prs->flags &= ~JS_PROP_TMASK; - pr->u.value = JS_UNDEFINED; - if (JS_IsException(val)) - return -1; - pr->u.value = val; - return 0; -} - -JSValue JS_GetPropertyInternal2(JSContext *ctx, JSValue obj, - JSAtom prop, JSValue this_obj, - JSInlineCache* ic, BOOL throw_ref_error) -{ - JSObject *p; - JSProperty *pr; - JSShapeProperty *prs; - uint32_t tag, offset, proto_depth; - - offset = proto_depth = 0; - tag = JS_VALUE_GET_TAG(obj); - if (unlikely(tag != JS_TAG_OBJECT)) { - switch(tag) { - case JS_TAG_NULL: - return JS_ThrowTypeErrorAtom(ctx, "cannot read property '%s' of null", prop); - case JS_TAG_UNDEFINED: - return JS_ThrowTypeErrorAtom(ctx, "cannot read property '%s' of undefined", prop); - case JS_TAG_EXCEPTION: - return JS_EXCEPTION; - case JS_TAG_STRING: - { - JSString *p1 = JS_VALUE_GET_STRING(obj); - if (__JS_AtomIsTaggedInt(prop)) { - uint32_t idx, ch; - idx = __JS_AtomToUInt32(prop); - if (idx < p1->len) { - if (p1->is_wide_char) - ch = p1->u.str16[idx]; - else - ch = p1->u.str8[idx]; - return js_new_string_char(ctx, ch); - } - } else if (prop == JS_ATOM_length) { - return js_int32(p1->len); - } - } - break; - default: - break; - } - /* cannot raise an exception */ - p = JS_VALUE_GET_OBJ(JS_GetPrototypePrimitive(ctx, obj)); - if (!p) - return JS_UNDEFINED; - } else { - p = JS_VALUE_GET_OBJ(obj); - } - - for(;;) { - prs = find_own_property_ic(&pr, p, prop, &offset); - if (prs) { - /* found */ - if (unlikely(prs->flags & JS_PROP_TMASK)) { - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - if (unlikely(!pr->u.getset.getter)) { - return JS_UNDEFINED; - } else { - JSValue func = JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.getter); - /* Note: the field could be removed in the getter */ - func = js_dup(func); - return JS_CallFree(ctx, func, this_obj, 0, NULL); - } - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - JSValue val = *pr->u.var_ref->pvalue; - if (unlikely(JS_IsUninitialized(val))) - return JS_ThrowReferenceErrorUninitialized(ctx, prs->atom); - return js_dup(val); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - /* Instantiate property and retry */ - if (JS_AutoInitProperty(ctx, p, prop, pr, prs)) - return JS_EXCEPTION; - continue; - } - } else { - if (ic && proto_depth == 0 && p->shape->is_hashed) { - ic->updated = TRUE; - ic->updated_offset = add_ic_slot(ctx, ic, prop, p, offset); - } - return js_dup(pr->u.value); - } - } - if (unlikely(p->is_exotic)) { - /* exotic behaviors */ - if (p->fast_array) { - if (__JS_AtomIsTaggedInt(prop)) { - uint32_t idx = __JS_AtomToUInt32(prop); - if (idx < p->u.array.count) { - /* we avoid duplicating the code */ - return JS_GetPropertyUint32(ctx, JS_MKPTR(JS_TAG_OBJECT, p), idx); - } else if (p->class_id >= JS_CLASS_UINT8C_ARRAY && - p->class_id <= JS_CLASS_FLOAT64_ARRAY) { - return JS_UNDEFINED; - } - } else if (p->class_id >= JS_CLASS_UINT8C_ARRAY && - p->class_id <= JS_CLASS_FLOAT64_ARRAY) { - int ret; - ret = JS_AtomIsNumericIndex(ctx, prop); - if (ret != 0) { - if (ret < 0) - return JS_EXCEPTION; - return JS_UNDEFINED; - } - } - } else { - const JSClassExoticMethods *em = ctx->rt->class_array[p->class_id].exotic; - if (em) { - if (em->get_property) { - JSValue obj1, retval; - /* XXX: should pass throw_ref_error */ - /* Note: if 'p' is a prototype, it can be - freed in the called function */ - obj1 = js_dup(JS_MKPTR(JS_TAG_OBJECT, p)); - retval = em->get_property(ctx, obj1, prop, this_obj); - JS_FreeValue(ctx, obj1); - return retval; - } - if (em->get_own_property) { - JSPropertyDescriptor desc; - int ret; - JSValue obj1; - - /* Note: if 'p' is a prototype, it can be - freed in the called function */ - obj1 = js_dup(JS_MKPTR(JS_TAG_OBJECT, p)); - ret = em->get_own_property(ctx, &desc, obj1, prop); - JS_FreeValue(ctx, obj1); - if (ret < 0) - return JS_EXCEPTION; - if (ret) { - if (desc.flags & JS_PROP_GETSET) { - JS_FreeValue(ctx, desc.setter); - return JS_CallFree(ctx, desc.getter, this_obj, 0, NULL); - } else { - return desc.value; - } - } - } - } - } - } - proto_depth++; - p = p->shape->proto; - if (!p) - break; - } - if (unlikely(throw_ref_error)) { - return JS_ThrowReferenceErrorNotDefined(ctx, prop); - } else { - return JS_UNDEFINED; - } -} - -JSValue JS_GetPropertyInternal(JSContext *ctx, JSValue obj, - JSAtom prop, JSValue this_obj, - BOOL throw_ref_error) -{ - return JS_GetPropertyInternal2(ctx, obj, prop, this_obj, NULL, throw_ref_error); -} - - -static JSValue JS_GetPropertyInternalWithIC(JSContext *ctx, JSValue obj, - JSAtom prop, JSValue this_obj, - JSInlineCache *ic, int32_t offset, - BOOL throw_ref_error) -{ - uint32_t tag; - JSObject *p; - tag = JS_VALUE_GET_TAG(obj); - if (unlikely(tag != JS_TAG_OBJECT)) - goto slow_path; - p = JS_VALUE_GET_OBJ(obj); - offset = get_ic_prop_offset(ic, offset, p->shape); - if (likely(offset >= 0)) - return js_dup(p->prop[offset].u.value); -slow_path: - return JS_GetPropertyInternal2(ctx, obj, prop, this_obj, ic, throw_ref_error); -} - -static JSValue JS_ThrowTypeErrorPrivateNotFound(JSContext *ctx, JSAtom atom) -{ - return JS_ThrowTypeErrorAtom(ctx, "private class field '%s' does not exist", - atom); -} - -/* Private fields can be added even on non extensible objects or - Proxies */ -static int JS_DefinePrivateField(JSContext *ctx, JSValue obj, - JSValue name, JSValue val) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - JSAtom prop; - - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) { - JS_ThrowTypeErrorNotAnObject(ctx); - goto fail; - } - /* safety check */ - if (unlikely(JS_VALUE_GET_TAG(name) != JS_TAG_SYMBOL)) { - JS_ThrowTypeErrorNotASymbol(ctx); - goto fail; - } - prop = js_symbol_to_atom(ctx, name); - p = JS_VALUE_GET_OBJ(obj); - prs = find_own_property(&pr, p, prop); - if (prs) { - JS_ThrowTypeErrorAtom(ctx, "private class field '%s' already exists", - prop); - goto fail; - } - pr = add_property(ctx, p, prop, JS_PROP_C_W_E); - if (unlikely(!pr)) { - fail: - JS_FreeValue(ctx, val); - return -1; - } - pr->u.value = val; - return 0; -} - -static JSValue JS_GetPrivateField(JSContext *ctx, JSValue obj, - JSValue name) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - JSAtom prop; - - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) - return JS_ThrowTypeErrorNotAnObject(ctx); - /* safety check */ - if (unlikely(JS_VALUE_GET_TAG(name) != JS_TAG_SYMBOL)) - return JS_ThrowTypeErrorNotASymbol(ctx); - prop = js_symbol_to_atom(ctx, name); - p = JS_VALUE_GET_OBJ(obj); - prs = find_own_property(&pr, p, prop); - if (!prs) { - JS_ThrowTypeErrorPrivateNotFound(ctx, prop); - return JS_EXCEPTION; - } - return js_dup(pr->u.value); -} - -static int JS_SetPrivateField(JSContext *ctx, JSValue obj, - JSValue name, JSValue val) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - JSAtom prop; - - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) { - JS_ThrowTypeErrorNotAnObject(ctx); - goto fail; - } - /* safety check */ - if (unlikely(JS_VALUE_GET_TAG(name) != JS_TAG_SYMBOL)) { - JS_ThrowTypeErrorNotASymbol(ctx); - goto fail; - } - prop = js_symbol_to_atom(ctx, name); - p = JS_VALUE_GET_OBJ(obj); - prs = find_own_property(&pr, p, prop); - if (!prs) { - JS_ThrowTypeErrorPrivateNotFound(ctx, prop); - fail: - JS_FreeValue(ctx, val); - return -1; - } - set_value(ctx, &pr->u.value, val); - return 0; -} - -static int JS_AddBrand(JSContext *ctx, JSValue obj, JSValue home_obj) -{ - JSObject *p, *p1; - JSShapeProperty *prs; - JSProperty *pr; - JSValue brand; - JSAtom brand_atom; - - if (unlikely(JS_VALUE_GET_TAG(home_obj) != JS_TAG_OBJECT)) { - JS_ThrowTypeErrorNotAnObject(ctx); - return -1; - } - p = JS_VALUE_GET_OBJ(home_obj); - prs = find_own_property(&pr, p, JS_ATOM_Private_brand); - if (!prs) { - brand = JS_NewSymbolFromAtom(ctx, JS_ATOM_brand, JS_ATOM_TYPE_PRIVATE); - if (JS_IsException(brand)) - return -1; - /* if the brand is not present, add it */ - pr = add_property(ctx, p, JS_ATOM_Private_brand, JS_PROP_C_W_E); - if (!pr) { - JS_FreeValue(ctx, brand); - return -1; - } - pr->u.value = js_dup(brand); - } else { - brand = js_dup(pr->u.value); - } - brand_atom = js_symbol_to_atom(ctx, brand); - - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) { - JS_ThrowTypeErrorNotAnObject(ctx); - JS_FreeAtom(ctx, brand_atom); - return -1; - } - p1 = JS_VALUE_GET_OBJ(obj); - prs = find_own_property(&pr, p1, brand_atom); - if (unlikely(prs)) { - JS_FreeAtom(ctx, brand_atom); - JS_ThrowTypeError(ctx, "private method is already present"); - return -1; - } - pr = add_property(ctx, p1, brand_atom, JS_PROP_C_W_E); - JS_FreeAtom(ctx, brand_atom); - if (!pr) - return -1; - pr->u.value = JS_UNDEFINED; - return 0; -} - -static int JS_CheckBrand(JSContext *ctx, JSValue obj, JSValue func) -{ - JSObject *p, *p1, *home_obj; - JSShapeProperty *prs; - JSProperty *pr; - JSValue brand; - - /* get the home object of 'func' */ - if (unlikely(JS_VALUE_GET_TAG(func) != JS_TAG_OBJECT)) { - not_obj: - JS_ThrowTypeErrorNotAnObject(ctx); - return -1; - } - p1 = JS_VALUE_GET_OBJ(func); - if (!js_class_has_bytecode(p1->class_id)) - goto not_obj; - home_obj = p1->u.func.home_object; - if (!home_obj) - goto not_obj; - prs = find_own_property(&pr, home_obj, JS_ATOM_Private_brand); - if (!prs) { - JS_ThrowTypeError(ctx, "expecting private field"); - return -1; - } - brand = pr->u.value; - /* safety check */ - if (unlikely(JS_VALUE_GET_TAG(brand) != JS_TAG_SYMBOL)) - goto not_obj; - - /* get the brand array of 'obj' */ - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) - goto not_obj; - p = JS_VALUE_GET_OBJ(obj); - prs = find_own_property(&pr, p, js_symbol_to_atom(ctx, brand)); - if (!prs) { - JS_ThrowTypeError(ctx, "invalid brand on object"); - return -1; - } - return 0; -} - -static uint32_t js_string_obj_get_length(JSContext *ctx, - JSValue obj) -{ - JSObject *p; - JSString *p1; - uint32_t len = 0; - - /* This is a class exotic method: obj class_id is JS_CLASS_STRING */ - p = JS_VALUE_GET_OBJ(obj); - if (JS_VALUE_GET_TAG(p->u.object_data) == JS_TAG_STRING) { - p1 = JS_VALUE_GET_STRING(p->u.object_data); - len = p1->len; - } - return len; -} - -static int num_keys_cmp(const void *p1, const void *p2, void *opaque) -{ - JSContext *ctx = opaque; - JSAtom atom1 = ((const JSPropertyEnum *)p1)->atom; - JSAtom atom2 = ((const JSPropertyEnum *)p2)->atom; - uint32_t v1, v2; - BOOL atom1_is_integer, atom2_is_integer; - - atom1_is_integer = JS_AtomIsArrayIndex(ctx, &v1, atom1); - atom2_is_integer = JS_AtomIsArrayIndex(ctx, &v2, atom2); - assert(atom1_is_integer && atom2_is_integer); - if (v1 < v2) - return -1; - else if (v1 == v2) - return 0; - else - return 1; -} - -static void js_free_prop_enum(JSContext *ctx, JSPropertyEnum *tab, uint32_t len) -{ - uint32_t i; - if (tab) { - for(i = 0; i < len; i++) - JS_FreeAtom(ctx, tab[i].atom); - js_free(ctx, tab); - } -} - -/* return < 0 in case if exception, 0 if OK. ptab and its atoms must - be freed by the user. */ -static int __exception JS_GetOwnPropertyNamesInternal(JSContext *ctx, - JSPropertyEnum **ptab, - uint32_t *plen, - JSObject *p, int flags) -{ - int i, j; - JSShape *sh; - JSShapeProperty *prs; - JSPropertyEnum *tab_atom, *tab_exotic; - JSAtom atom; - uint32_t num_keys_count, str_keys_count, sym_keys_count, atom_count; - uint32_t num_index, str_index, sym_index, exotic_count, exotic_keys_count; - BOOL is_enumerable, num_sorted; - uint32_t num_key; - JSAtomKindEnum kind; - - /* clear pointer for consistency in case of failure */ - *ptab = NULL; - *plen = 0; - - /* compute the number of returned properties */ - num_keys_count = 0; - str_keys_count = 0; - sym_keys_count = 0; - exotic_keys_count = 0; - exotic_count = 0; - tab_exotic = NULL; - sh = p->shape; - for(i = 0, prs = get_shape_prop(sh); i < sh->prop_count; i++, prs++) { - atom = prs->atom; - if (atom != JS_ATOM_NULL) { - is_enumerable = ((prs->flags & JS_PROP_ENUMERABLE) != 0); - kind = JS_AtomGetKind(ctx, atom); - if ((!(flags & JS_GPN_ENUM_ONLY) || is_enumerable) && - ((flags >> kind) & 1) != 0) { - /* need to raise an exception in case of the module - name space (implicit GetOwnProperty) */ - if (unlikely((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) && - (flags & (JS_GPN_SET_ENUM | JS_GPN_ENUM_ONLY))) { - JSVarRef *var_ref = p->prop[i].u.var_ref; - if (unlikely(JS_IsUninitialized(*var_ref->pvalue))) { - JS_ThrowReferenceErrorUninitialized(ctx, prs->atom); - return -1; - } - } - if (JS_AtomIsArrayIndex(ctx, &num_key, atom)) { - num_keys_count++; - } else if (kind == JS_ATOM_KIND_STRING) { - str_keys_count++; - } else { - sym_keys_count++; - } - } - } - } - - if (p->is_exotic) { - if (p->fast_array) { - if (flags & JS_GPN_STRING_MASK) { - num_keys_count += p->u.array.count; - } - } else if (p->class_id == JS_CLASS_STRING) { - if (flags & JS_GPN_STRING_MASK) { - num_keys_count += js_string_obj_get_length(ctx, JS_MKPTR(JS_TAG_OBJECT, p)); - } - } else { - const JSClassExoticMethods *em = ctx->rt->class_array[p->class_id].exotic; - if (em && em->get_own_property_names) { - if (em->get_own_property_names(ctx, &tab_exotic, &exotic_count, - JS_MKPTR(JS_TAG_OBJECT, p))) - return -1; - for(i = 0; i < exotic_count; i++) { - atom = tab_exotic[i].atom; - kind = JS_AtomGetKind(ctx, atom); - if (((flags >> kind) & 1) != 0) { - is_enumerable = FALSE; - if (flags & (JS_GPN_SET_ENUM | JS_GPN_ENUM_ONLY)) { - JSPropertyDescriptor desc; - int res; - /* set the "is_enumerable" field if necessary */ - res = JS_GetOwnPropertyInternal(ctx, &desc, p, atom); - if (res < 0) { - js_free_prop_enum(ctx, tab_exotic, exotic_count); - return -1; - } - if (res) { - is_enumerable = - ((desc.flags & JS_PROP_ENUMERABLE) != 0); - js_free_desc(ctx, &desc); - } - tab_exotic[i].is_enumerable = is_enumerable; - } - if (!(flags & JS_GPN_ENUM_ONLY) || is_enumerable) { - exotic_keys_count++; - } - } - } - } - } - } - - /* fill them */ - - atom_count = num_keys_count + str_keys_count + sym_keys_count + exotic_keys_count; - /* avoid allocating 0 bytes */ - tab_atom = js_malloc(ctx, sizeof(tab_atom[0]) * max_int(atom_count, 1)); - if (!tab_atom) { - js_free_prop_enum(ctx, tab_exotic, exotic_count); - return -1; - } - - num_index = 0; - str_index = num_keys_count; - sym_index = str_index + str_keys_count; - - num_sorted = TRUE; - sh = p->shape; - for(i = 0, prs = get_shape_prop(sh); i < sh->prop_count; i++, prs++) { - atom = prs->atom; - if (atom != JS_ATOM_NULL) { - is_enumerable = ((prs->flags & JS_PROP_ENUMERABLE) != 0); - kind = JS_AtomGetKind(ctx, atom); - if ((!(flags & JS_GPN_ENUM_ONLY) || is_enumerable) && - ((flags >> kind) & 1) != 0) { - if (JS_AtomIsArrayIndex(ctx, &num_key, atom)) { - j = num_index++; - num_sorted = FALSE; - } else if (kind == JS_ATOM_KIND_STRING) { - j = str_index++; - } else { - j = sym_index++; - } - tab_atom[j].atom = JS_DupAtom(ctx, atom); - tab_atom[j].is_enumerable = is_enumerable; - } - } - } - - if (p->is_exotic) { - int len; - if (p->fast_array) { - if (flags & JS_GPN_STRING_MASK) { - len = p->u.array.count; - goto add_array_keys; - } - } else if (p->class_id == JS_CLASS_STRING) { - if (flags & JS_GPN_STRING_MASK) { - len = js_string_obj_get_length(ctx, JS_MKPTR(JS_TAG_OBJECT, p)); - add_array_keys: - for(i = 0; i < len; i++) { - tab_atom[num_index].atom = __JS_AtomFromUInt32(i); - if (tab_atom[num_index].atom == JS_ATOM_NULL) { - js_free_prop_enum(ctx, tab_atom, num_index); - return -1; - } - tab_atom[num_index].is_enumerable = TRUE; - num_index++; - } - } - } else { - /* Note: exotic keys are not reordered and comes after the object own properties. */ - for(i = 0; i < exotic_count; i++) { - atom = tab_exotic[i].atom; - is_enumerable = tab_exotic[i].is_enumerable; - kind = JS_AtomGetKind(ctx, atom); - if ((!(flags & JS_GPN_ENUM_ONLY) || is_enumerable) && - ((flags >> kind) & 1) != 0) { - tab_atom[sym_index].atom = atom; - tab_atom[sym_index].is_enumerable = is_enumerable; - sym_index++; - } else { - JS_FreeAtom(ctx, atom); - } - } - js_free(ctx, tab_exotic); - } - } - - assert(num_index == num_keys_count); - assert(str_index == num_keys_count + str_keys_count); - assert(sym_index == atom_count); - - if (num_keys_count != 0 && !num_sorted) { - rqsort(tab_atom, num_keys_count, sizeof(tab_atom[0]), num_keys_cmp, - ctx); - } - *ptab = tab_atom; - *plen = atom_count; - return 0; -} - -int JS_GetOwnPropertyNames(JSContext *ctx, JSPropertyEnum **ptab, - uint32_t *plen, JSValue obj, int flags) -{ - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) { - JS_ThrowTypeErrorNotAnObject(ctx); - return -1; - } - return JS_GetOwnPropertyNamesInternal(ctx, ptab, plen, - JS_VALUE_GET_OBJ(obj), flags); -} - -/* Return -1 if exception, - FALSE if the property does not exist, TRUE if it exists. If TRUE is - returned, the property descriptor 'desc' is filled present. */ -static int JS_GetOwnPropertyInternal(JSContext *ctx, JSPropertyDescriptor *desc, - JSObject *p, JSAtom prop) -{ - JSShapeProperty *prs; - JSProperty *pr; - -retry: - prs = find_own_property(&pr, p, prop); - if (prs) { - if (desc) { - desc->flags = prs->flags & JS_PROP_C_W_E; - desc->getter = JS_UNDEFINED; - desc->setter = JS_UNDEFINED; - desc->value = JS_UNDEFINED; - if (unlikely(prs->flags & JS_PROP_TMASK)) { - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - desc->flags |= JS_PROP_GETSET; - if (pr->u.getset.getter) - desc->getter = js_dup(JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.getter)); - if (pr->u.getset.setter) - desc->setter = js_dup(JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.setter)); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - JSValue val = *pr->u.var_ref->pvalue; - if (unlikely(JS_IsUninitialized(val))) { - JS_ThrowReferenceErrorUninitialized(ctx, prs->atom); - return -1; - } - desc->value = js_dup(val); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - /* Instantiate property and retry */ - if (JS_AutoInitProperty(ctx, p, prop, pr, prs)) - return -1; - goto retry; - } - } else { - desc->value = js_dup(pr->u.value); - } - } else { - /* for consistency, send the exception even if desc is NULL */ - if (unlikely((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF)) { - if (unlikely(JS_IsUninitialized(*pr->u.var_ref->pvalue))) { - JS_ThrowReferenceErrorUninitialized(ctx, prs->atom); - return -1; - } - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - /* nothing to do: delay instantiation until actual value and/or attributes are read */ - } - } - return TRUE; - } - if (p->is_exotic) { - if (p->fast_array) { - /* specific case for fast arrays */ - if (__JS_AtomIsTaggedInt(prop)) { - uint32_t idx; - idx = __JS_AtomToUInt32(prop); - if (idx < p->u.array.count) { - if (desc) { - desc->flags = JS_PROP_WRITABLE | JS_PROP_ENUMERABLE | - JS_PROP_CONFIGURABLE; - desc->getter = JS_UNDEFINED; - desc->setter = JS_UNDEFINED; - desc->value = JS_GetPropertyUint32(ctx, JS_MKPTR(JS_TAG_OBJECT, p), idx); - } - return TRUE; - } - } - } else { - const JSClassExoticMethods *em = ctx->rt->class_array[p->class_id].exotic; - if (em && em->get_own_property) { - return em->get_own_property(ctx, desc, - JS_MKPTR(JS_TAG_OBJECT, p), prop); - } - } - } - return FALSE; -} - -int JS_GetOwnProperty(JSContext *ctx, JSPropertyDescriptor *desc, - JSValue obj, JSAtom prop) -{ - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) { - JS_ThrowTypeErrorNotAnObject(ctx); - return -1; - } - return JS_GetOwnPropertyInternal(ctx, desc, JS_VALUE_GET_OBJ(obj), prop); -} - -/* return -1 if exception (Proxy object only) or TRUE/FALSE */ -int JS_IsExtensible(JSContext *ctx, JSValue obj) -{ - JSObject *p; - - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) - return FALSE; - p = JS_VALUE_GET_OBJ(obj); - if (unlikely(p->class_id == JS_CLASS_PROXY)) - return js_proxy_isExtensible(ctx, obj); - else - return p->extensible; -} - -/* return -1 if exception (Proxy object only) or TRUE/FALSE */ -int JS_PreventExtensions(JSContext *ctx, JSValue obj) -{ - JSObject *p; - - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) - return FALSE; - p = JS_VALUE_GET_OBJ(obj); - if (unlikely(p->class_id == JS_CLASS_PROXY)) - return js_proxy_preventExtensions(ctx, obj); - p->extensible = FALSE; - return TRUE; -} - -/* return -1 if exception otherwise TRUE or FALSE */ -int JS_HasProperty(JSContext *ctx, JSValue obj, JSAtom prop) -{ - JSObject *p; - int ret; - JSValue obj1; - - if (unlikely(JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)) - return FALSE; - p = JS_VALUE_GET_OBJ(obj); - for(;;) { - if (p->is_exotic) { - const JSClassExoticMethods *em = ctx->rt->class_array[p->class_id].exotic; - if (em && em->has_property) { - /* has_property can free the prototype */ - obj1 = js_dup(JS_MKPTR(JS_TAG_OBJECT, p)); - ret = em->has_property(ctx, obj1, prop); - JS_FreeValue(ctx, obj1); - return ret; - } - } - /* JS_GetOwnPropertyInternal can free the prototype */ - js_dup(JS_MKPTR(JS_TAG_OBJECT, p)); - ret = JS_GetOwnPropertyInternal(ctx, NULL, p, prop); - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_OBJECT, p)); - if (ret != 0) - return ret; - if (p->class_id >= JS_CLASS_UINT8C_ARRAY && - p->class_id <= JS_CLASS_FLOAT64_ARRAY) { - ret = JS_AtomIsNumericIndex(ctx, prop); - if (ret != 0) { - if (ret < 0) - return -1; - return FALSE; - } - } - p = p->shape->proto; - if (!p) - break; - } - return FALSE; -} - -/* val must be a symbol */ -static JSAtom js_symbol_to_atom(JSContext *ctx, JSValue val) -{ - JSAtomStruct *p = JS_VALUE_GET_PTR(val); - return js_get_atom_index(ctx->rt, p); -} - -/* return JS_ATOM_NULL in case of exception */ -JSAtom JS_ValueToAtom(JSContext *ctx, JSValue val) -{ - JSAtom atom; - uint32_t tag; - tag = JS_VALUE_GET_TAG(val); - if (tag == JS_TAG_INT && - (uint32_t)JS_VALUE_GET_INT(val) <= JS_ATOM_MAX_INT) { - /* fast path for integer values */ - atom = __JS_AtomFromUInt32(JS_VALUE_GET_INT(val)); - } else if (tag == JS_TAG_SYMBOL) { - JSAtomStruct *p = JS_VALUE_GET_PTR(val); - atom = JS_DupAtom(ctx, js_get_atom_index(ctx->rt, p)); - } else { - JSValue str; - str = JS_ToPropertyKey(ctx, val); - if (JS_IsException(str)) - return JS_ATOM_NULL; - if (JS_VALUE_GET_TAG(str) == JS_TAG_SYMBOL) { - atom = js_symbol_to_atom(ctx, str); - } else { - atom = JS_NewAtomStr(ctx, JS_VALUE_GET_STRING(str)); - } - } - return atom; -} - -static JSValue JS_GetPropertyValue(JSContext *ctx, JSValue this_obj, - JSValue prop) -{ - JSAtom atom; - JSValue ret; - - if (likely(JS_VALUE_GET_TAG(this_obj) == JS_TAG_OBJECT && - JS_VALUE_GET_TAG(prop) == JS_TAG_INT)) { - JSObject *p; - uint32_t idx; - /* fast path for array access */ - p = JS_VALUE_GET_OBJ(this_obj); - idx = JS_VALUE_GET_INT(prop); - switch(p->class_id) { - case JS_CLASS_ARRAY: - case JS_CLASS_ARGUMENTS: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return js_dup(p->u.array.u.values[idx]); - case JS_CLASS_INT8_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return js_int32(p->u.array.u.int8_ptr[idx]); - case JS_CLASS_UINT8C_ARRAY: - case JS_CLASS_UINT8_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return js_int32(p->u.array.u.uint8_ptr[idx]); - case JS_CLASS_INT16_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return js_int32(p->u.array.u.int16_ptr[idx]); - case JS_CLASS_UINT16_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return js_int32(p->u.array.u.uint16_ptr[idx]); - case JS_CLASS_INT32_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return js_int32(p->u.array.u.int32_ptr[idx]); - case JS_CLASS_UINT32_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return js_uint32(p->u.array.u.uint32_ptr[idx]); - case JS_CLASS_BIG_INT64_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return JS_NewBigInt64(ctx, p->u.array.u.int64_ptr[idx]); - case JS_CLASS_BIG_UINT64_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return JS_NewBigUint64(ctx, p->u.array.u.uint64_ptr[idx]); - case JS_CLASS_FLOAT32_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return __JS_NewFloat64(p->u.array.u.float_ptr[idx]); - case JS_CLASS_FLOAT64_ARRAY: - if (unlikely(idx >= p->u.array.count)) goto slow_path; - return __JS_NewFloat64(p->u.array.u.double_ptr[idx]); - default: - goto slow_path; - } - } else { - slow_path: - atom = JS_ValueToAtom(ctx, prop); - JS_FreeValue(ctx, prop); - if (unlikely(atom == JS_ATOM_NULL)) - return JS_EXCEPTION; - ret = JS_GetProperty(ctx, this_obj, atom); - JS_FreeAtom(ctx, atom); - return ret; - } -} - -JSValue JS_GetPropertyUint32(JSContext *ctx, JSValue this_obj, - uint32_t idx) -{ - return JS_GetPropertyValue(ctx, this_obj, js_uint32(idx)); -} - -/* Check if an object has a generalized numeric property. Return value: - -1 for exception, - TRUE if property exists, stored into *pval, - FALSE if proprty does not exist. - */ -static int JS_TryGetPropertyInt64(JSContext *ctx, JSValue obj, int64_t idx, JSValue *pval) -{ - JSValue val = JS_UNDEFINED; - JSAtom prop; - int present; - - if (likely((uint64_t)idx <= JS_ATOM_MAX_INT)) { - /* fast path */ - present = JS_HasProperty(ctx, obj, __JS_AtomFromUInt32(idx)); - if (present > 0) { - val = JS_GetPropertyValue(ctx, obj, js_int32(idx)); - if (unlikely(JS_IsException(val))) - present = -1; - } - } else { - prop = JS_NewAtomInt64(ctx, idx); - present = -1; - if (likely(prop != JS_ATOM_NULL)) { - present = JS_HasProperty(ctx, obj, prop); - if (present > 0) { - val = JS_GetProperty(ctx, obj, prop); - if (unlikely(JS_IsException(val))) - present = -1; - } - JS_FreeAtom(ctx, prop); - } - } - *pval = val; - return present; -} - -static JSValue JS_GetPropertyInt64(JSContext *ctx, JSValue obj, int64_t idx) -{ - JSAtom prop; - JSValue val; - - if ((uint64_t)idx <= INT32_MAX) { - /* fast path for fast arrays */ - return JS_GetPropertyValue(ctx, obj, js_int32(idx)); - } - prop = JS_NewAtomInt64(ctx, idx); - if (prop == JS_ATOM_NULL) - return JS_EXCEPTION; - - val = JS_GetProperty(ctx, obj, prop); - JS_FreeAtom(ctx, prop); - return val; -} - -JSValue JS_GetPropertyStr(JSContext *ctx, JSValue this_obj, - const char *prop) -{ - JSAtom atom; - JSValue ret; - atom = JS_NewAtom(ctx, prop); - ret = JS_GetProperty(ctx, this_obj, atom); - JS_FreeAtom(ctx, atom); - return ret; -} - -/* Note: the property value is not initialized. Return NULL if memory - error. */ -static JSProperty *add_property(JSContext *ctx, - JSObject *p, JSAtom prop, int prop_flags) -{ - JSShape *sh, *new_sh; - - sh = p->shape; - if (sh->is_hashed) { - /* try to find an existing shape */ - new_sh = find_hashed_shape_prop(ctx->rt, sh, prop, prop_flags); - if (new_sh) { - /* matching shape found: use it */ - /* the property array may need to be resized */ - if (new_sh->prop_size != sh->prop_size) { - JSProperty *new_prop; - new_prop = js_realloc(ctx, p->prop, sizeof(p->prop[0]) * - new_sh->prop_size); - if (!new_prop) - return NULL; - p->prop = new_prop; - } - p->shape = js_dup_shape(new_sh); - js_free_shape(ctx->rt, sh); - return &p->prop[new_sh->prop_count - 1]; - } else if (sh->header.ref_count != 1) { - /* if the shape is shared, clone it */ - new_sh = js_clone_shape(ctx, sh); - if (!new_sh) - return NULL; - /* hash the cloned shape */ - new_sh->is_hashed = TRUE; - js_shape_hash_link(ctx->rt, new_sh); - js_free_shape(ctx->rt, p->shape); - p->shape = new_sh; - } - } - assert(p->shape->header.ref_count == 1); - if (add_shape_property(ctx, &p->shape, p, prop, prop_flags)) - return NULL; - return &p->prop[p->shape->prop_count - 1]; -} - -/* can be called on Array or Arguments objects. return < 0 if - memory alloc error. */ -static no_inline __exception int convert_fast_array_to_array(JSContext *ctx, - JSObject *p) -{ - JSProperty *pr; - JSShape *sh; - JSValue *tab; - uint32_t i, len, new_count; - - if (js_shape_prepare_update(ctx, p, NULL)) - return -1; - len = p->u.array.count; - /* resize the properties once to simplify the error handling */ - sh = p->shape; - new_count = sh->prop_count + len; - if (new_count > sh->prop_size) { - if (resize_properties(ctx, &p->shape, p, new_count)) - return -1; - } - - tab = p->u.array.u.values; - for(i = 0; i < len; i++) { - /* add_property cannot fail here but - __JS_AtomFromUInt32(i) fails for i > INT32_MAX */ - pr = add_property(ctx, p, __JS_AtomFromUInt32(i), JS_PROP_C_W_E); - pr->u.value = *tab++; - } - js_free(ctx, p->u.array.u.values); - p->u.array.count = 0; - p->u.array.u.values = NULL; /* fail safe */ - p->u.array.u1.size = 0; - p->fast_array = 0; - return 0; -} - -static int delete_property(JSContext *ctx, JSObject *p, JSAtom atom) -{ - JSShape *sh; - JSShapeProperty *pr, *lpr, *prop; - JSProperty *pr1; - uint32_t lpr_idx; - intptr_t h, h1; - - redo: - sh = p->shape; - h1 = atom & sh->prop_hash_mask; - h = prop_hash_end(sh)[-h1 - 1]; - prop = get_shape_prop(sh); - lpr = NULL; - lpr_idx = 0; /* prevent warning */ - while (h != 0) { - pr = &prop[h - 1]; - if (likely(pr->atom == atom)) { - /* found ! */ - if (!(pr->flags & JS_PROP_CONFIGURABLE)) - return FALSE; - /* realloc the shape if needed */ - if (lpr) - lpr_idx = lpr - get_shape_prop(sh); - if (js_shape_prepare_update(ctx, p, &pr)) - return -1; - sh = p->shape; - /* remove property */ - if (lpr) { - lpr = get_shape_prop(sh) + lpr_idx; - lpr->hash_next = pr->hash_next; - } else { - prop_hash_end(sh)[-h1 - 1] = pr->hash_next; - } - sh->deleted_prop_count++; - /* free the entry */ - pr1 = &p->prop[h - 1]; - free_property(ctx->rt, pr1, pr->flags); - JS_FreeAtom(ctx, pr->atom); - /* put default values */ - pr->flags = 0; - pr->atom = JS_ATOM_NULL; - pr1->u.value = JS_UNDEFINED; - - /* compact the properties if too many deleted properties */ - if (sh->deleted_prop_count >= 8 && - sh->deleted_prop_count >= ((unsigned)sh->prop_count / 2)) { - compact_properties(ctx, p); - } - return TRUE; - } - lpr = pr; - h = pr->hash_next; - } - - if (p->is_exotic) { - if (p->fast_array) { - uint32_t idx; - if (JS_AtomIsArrayIndex(ctx, &idx, atom) && - idx < p->u.array.count) { - if (p->class_id == JS_CLASS_ARRAY || - p->class_id == JS_CLASS_ARGUMENTS) { - /* Special case deleting the last element of a fast Array */ - if (idx == p->u.array.count - 1) { - JS_FreeValue(ctx, p->u.array.u.values[idx]); - p->u.array.count = idx; - return TRUE; - } - if (convert_fast_array_to_array(ctx, p)) - return -1; - goto redo; - } else { - return FALSE; - } - } - } else { - const JSClassExoticMethods *em = ctx->rt->class_array[p->class_id].exotic; - if (em && em->delete_property) { - return em->delete_property(ctx, JS_MKPTR(JS_TAG_OBJECT, p), atom); - } - } - } - /* not found */ - return TRUE; -} - -static int call_setter(JSContext *ctx, JSObject *setter, - JSValue this_obj, JSValue val, int flags) -{ - JSValue ret, func; - if (likely(setter)) { - func = JS_MKPTR(JS_TAG_OBJECT, setter); - /* Note: the field could be removed in the setter */ - func = js_dup(func); - ret = JS_CallFree(ctx, func, this_obj, 1, &val); - JS_FreeValue(ctx, val); - if (JS_IsException(ret)) - return -1; - JS_FreeValue(ctx, ret); - return TRUE; - } else { - JS_FreeValue(ctx, val); - if ((flags & JS_PROP_THROW) || - ((flags & JS_PROP_THROW_STRICT) && is_strict_mode(ctx))) { - JS_ThrowTypeError(ctx, "no setter for property"); - return -1; - } - return FALSE; - } -} - -/* set the array length and remove the array elements if necessary. */ -static int set_array_length(JSContext *ctx, JSObject *p, JSValue val, - int flags) -{ - uint32_t len, idx, cur_len; - int i, ret; - - /* Note: this call can reallocate the properties of 'p' */ - ret = JS_ToArrayLengthFree(ctx, &len, val, FALSE); - if (ret) - return -1; - /* JS_ToArrayLengthFree() must be done before the read-only test */ - if (unlikely(!(p->shape->prop[0].flags & JS_PROP_WRITABLE))) - return JS_ThrowTypeErrorReadOnly(ctx, flags, JS_ATOM_length); - - if (likely(p->fast_array)) { - uint32_t old_len = p->u.array.count; - if (len < old_len) { - for(i = len; i < old_len; i++) { - JS_FreeValue(ctx, p->u.array.u.values[i]); - } - p->u.array.count = len; - } - p->prop[0].u.value = js_uint32(len); - } else { - /* Note: length is always a uint32 because the object is an - array */ - JS_ToUint32(ctx, &cur_len, p->prop[0].u.value); - if (len < cur_len) { - uint32_t d; - JSShape *sh; - JSShapeProperty *pr; - - d = cur_len - len; - sh = p->shape; - if (d <= sh->prop_count) { - JSAtom atom; - - /* faster to iterate */ - while (cur_len > len) { - atom = JS_NewAtomUInt32(ctx, cur_len - 1); - ret = delete_property(ctx, p, atom); - JS_FreeAtom(ctx, atom); - if (unlikely(!ret)) { - /* unlikely case: property is not - configurable */ - break; - } - cur_len--; - } - } else { - /* faster to iterate thru all the properties. Need two - passes in case one of the property is not - configurable */ - cur_len = len; - for(i = 0, pr = get_shape_prop(sh); i < sh->prop_count; - i++, pr++) { - if (pr->atom != JS_ATOM_NULL && - JS_AtomIsArrayIndex(ctx, &idx, pr->atom)) { - if (idx >= cur_len && - !(pr->flags & JS_PROP_CONFIGURABLE)) { - cur_len = idx + 1; - } - } - } - - for(i = 0, pr = get_shape_prop(sh); i < sh->prop_count; - i++, pr++) { - if (pr->atom != JS_ATOM_NULL && - JS_AtomIsArrayIndex(ctx, &idx, pr->atom)) { - if (idx >= cur_len) { - /* remove the property */ - delete_property(ctx, p, pr->atom); - /* WARNING: the shape may have been modified */ - sh = p->shape; - pr = get_shape_prop(sh) + i; - } - } - } - } - } else { - cur_len = len; - } - set_value(ctx, &p->prop[0].u.value, js_uint32(cur_len)); - if (unlikely(cur_len > len)) { - return JS_ThrowTypeErrorOrFalse(ctx, flags, "not configurable"); - } - } - return TRUE; -} - -/* return -1 if exception */ -static int expand_fast_array(JSContext *ctx, JSObject *p, uint32_t new_len) -{ - uint32_t new_size; - size_t slack; - JSValue *new_array_prop; - /* XXX: potential arithmetic overflow */ - new_size = max_int(new_len, p->u.array.u1.size * 3 / 2); - new_array_prop = js_realloc2(ctx, p->u.array.u.values, sizeof(JSValue) * new_size, &slack); - if (!new_array_prop) - return -1; - new_size += slack / sizeof(*new_array_prop); - p->u.array.u.values = new_array_prop; - p->u.array.u1.size = new_size; - return 0; -} - -/* Preconditions: 'p' must be of class JS_CLASS_ARRAY, p->fast_array = - TRUE and p->extensible = TRUE */ -static int add_fast_array_element(JSContext *ctx, JSObject *p, - JSValue val, int flags) -{ - uint32_t new_len, array_len; - /* extend the array by one */ - /* XXX: convert to slow array if new_len > 2^31-1 elements */ - new_len = p->u.array.count + 1; - /* update the length if necessary. We assume that if the length is - not an integer, then if it >= 2^31. */ - if (likely(JS_VALUE_GET_TAG(p->prop[0].u.value) == JS_TAG_INT)) { - array_len = JS_VALUE_GET_INT(p->prop[0].u.value); - if (new_len > array_len) { - if (unlikely(!(get_shape_prop(p->shape)->flags & JS_PROP_WRITABLE))) { - JS_FreeValue(ctx, val); - return JS_ThrowTypeErrorReadOnly(ctx, flags, JS_ATOM_length); - } - p->prop[0].u.value = js_int32(new_len); - } - } - if (unlikely(new_len > p->u.array.u1.size)) { - if (expand_fast_array(ctx, p, new_len)) { - JS_FreeValue(ctx, val); - return -1; - } - } - p->u.array.u.values[new_len - 1] = val; - p->u.array.count = new_len; - return TRUE; -} - -static void js_free_desc(JSContext *ctx, JSPropertyDescriptor *desc) -{ - JS_FreeValue(ctx, desc->getter); - JS_FreeValue(ctx, desc->setter); - JS_FreeValue(ctx, desc->value); -} - -/* return -1 in case of exception or TRUE or FALSE. Warning: 'val' is - freed by the function. 'flags' is a bitmask of JS_PROP_NO_ADD, - JS_PROP_THROW or JS_PROP_THROW_STRICT. If JS_PROP_NO_ADD is set, - the new property is not added and an error is raised. - 'obj' must be an object when obj != this_obj. - */ -int JS_SetPropertyInternal2(JSContext *ctx, JSValue obj, - JSAtom prop, JSValue val, JSValue this_obj, - int flags, JSInlineCache *ic) -{ - JSObject *p, *p1; - JSShapeProperty *prs; - JSProperty *pr; - JSPropertyDescriptor desc; - int ret; - uint32_t offset = 0; - - switch(JS_VALUE_GET_TAG(this_obj)) { - case JS_TAG_NULL: - JS_ThrowTypeErrorAtom(ctx, "cannot set property '%s' of null", prop); - goto fail; - case JS_TAG_UNDEFINED: - JS_ThrowTypeErrorAtom(ctx, "cannot set property '%s' of undefined", prop); - goto fail; - case JS_TAG_OBJECT: - p = JS_VALUE_GET_OBJ(this_obj); - p1 = JS_VALUE_GET_OBJ(obj); - if (p == p1) - break; - goto retry2; - default: - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) - obj = JS_GetPrototypePrimitive(ctx, obj); - p = NULL; - p1 = JS_VALUE_GET_OBJ(obj); - goto prototype_lookup; - } - -retry: - prs = find_own_property_ic(&pr, p1, prop, &offset); - if (prs) { - if (likely((prs->flags & (JS_PROP_TMASK | JS_PROP_WRITABLE | - JS_PROP_LENGTH)) == JS_PROP_WRITABLE)) { - /* fast case */ - if (ic && p->shape->is_hashed) { - ic->updated = TRUE; - ic->updated_offset = add_ic_slot(ctx, ic, prop, p, offset); - } - set_value(ctx, &pr->u.value, val); - return TRUE; - } else if (prs->flags & JS_PROP_LENGTH) { - assert(p->class_id == JS_CLASS_ARRAY); - assert(prop == JS_ATOM_length); - return set_array_length(ctx, p, val, flags); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - return call_setter(ctx, pr->u.getset.setter, this_obj, val, flags); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - /* JS_PROP_WRITABLE is always true for variable - references, but they are write protected in module name - spaces. */ - if (p->class_id == JS_CLASS_MODULE_NS) - goto read_only_prop; - set_value(ctx, pr->u.var_ref->pvalue, val); - return TRUE; - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - /* Instantiate property and retry (potentially useless) */ - if (JS_AutoInitProperty(ctx, p, prop, pr, prs)) - goto fail; - goto retry; - } else { - goto read_only_prop; - } - } - - for(;;) { - if (p1->is_exotic) { - if (p1->fast_array) { - if (__JS_AtomIsTaggedInt(prop)) { - uint32_t idx = __JS_AtomToUInt32(prop); - if (idx < p1->u.array.count) { - if (unlikely(p == p1)) - return JS_SetPropertyValue(ctx, this_obj, js_int32(idx), val, flags); - else - break; - } else if (p1->class_id >= JS_CLASS_UINT8C_ARRAY && - p1->class_id <= JS_CLASS_FLOAT64_ARRAY) { - goto typed_array_oob; - } - } else if (p1->class_id >= JS_CLASS_UINT8C_ARRAY && - p1->class_id <= JS_CLASS_FLOAT64_ARRAY) { - ret = JS_AtomIsNumericIndex(ctx, prop); - if (ret != 0) { - if (ret < 0) - goto fail; - typed_array_oob: - // per spec: evaluate value for side effects - if (p1->class_id == JS_CLASS_BIG_INT64_ARRAY || - p1->class_id == JS_CLASS_BIG_UINT64_ARRAY) { - int64_t v; - if (JS_ToBigInt64Free(ctx, &v, val)) - return -1; - } else { - val = JS_ToNumberFree(ctx, val); - JS_FreeValue(ctx, val); - if (JS_IsException(val)) - return -1; - } - return TRUE; - } - } - } else { - const JSClassExoticMethods *em = ctx->rt->class_array[p1->class_id].exotic; - if (em) { - JSValue obj1; - if (em->set_property) { - /* set_property can free the prototype */ - obj1 = js_dup(JS_MKPTR(JS_TAG_OBJECT, p1)); - ret = em->set_property(ctx, obj1, prop, - val, this_obj, flags); - JS_FreeValue(ctx, obj1); - JS_FreeValue(ctx, val); - return ret; - } - if (em->get_own_property) { - /* get_own_property can free the prototype */ - obj1 = js_dup(JS_MKPTR(JS_TAG_OBJECT, p1)); - ret = em->get_own_property(ctx, &desc, - obj1, prop); - JS_FreeValue(ctx, obj1); - if (ret < 0) - goto fail; - if (ret) { - if (desc.flags & JS_PROP_GETSET) { - JSObject *setter; - if (JS_IsUndefined(desc.setter)) - setter = NULL; - else - setter = JS_VALUE_GET_OBJ(desc.setter); - ret = call_setter(ctx, setter, this_obj, val, flags); - JS_FreeValue(ctx, desc.getter); - JS_FreeValue(ctx, desc.setter); - return ret; - } else { - JS_FreeValue(ctx, desc.value); - if (!(desc.flags & JS_PROP_WRITABLE)) - goto read_only_prop; - if (likely(p == p1)) { - ret = JS_DefineProperty(ctx, this_obj, prop, val, - JS_UNDEFINED, JS_UNDEFINED, - JS_PROP_HAS_VALUE); - JS_FreeValue(ctx, val); - return ret; - } else { - break; - } - } - } - } - } - } - } - p1 = p1->shape->proto; - prototype_lookup: - if (!p1) - break; - - retry2: - prs = find_own_property(&pr, p1, prop); - if (prs) { - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - return call_setter(ctx, pr->u.getset.setter, this_obj, val, flags); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - /* Instantiate property and retry (potentially useless) */ - if (JS_AutoInitProperty(ctx, p1, prop, pr, prs)) - return -1; - goto retry2; - } else if (!(prs->flags & JS_PROP_WRITABLE)) { - goto read_only_prop; - } - } - } - - if (unlikely(flags & JS_PROP_NO_ADD)) { - JS_ThrowReferenceErrorNotDefined(ctx, prop); - goto fail; - } - - if (unlikely(!p)) { - ret = JS_ThrowTypeErrorOrFalse(ctx, flags, "not an object"); - goto done; - } - - if (unlikely(!p->extensible)) { - ret = JS_ThrowTypeErrorOrFalse(ctx, flags, "object is not extensible"); - goto done; - } - - if (p == JS_VALUE_GET_OBJ(obj)) { - if (p->is_exotic) { - if (p->class_id == JS_CLASS_ARRAY && p->fast_array && - __JS_AtomIsTaggedInt(prop)) { - uint32_t idx = __JS_AtomToUInt32(prop); - if (idx == p->u.array.count) { - /* fast case */ - return add_fast_array_element(ctx, p, val, flags); - } - } - goto generic_create_prop; - } else { - pr = add_property(ctx, p, prop, JS_PROP_C_W_E); - if (!pr) - goto fail; - pr->u.value = val; - return TRUE; - } - } - - // TODO(bnoordhuis) return JSProperty slot and update in place - // when plain property (not is_exotic/setter/etc.) to avoid - // calling find_own_property() thrice? - ret = JS_GetOwnPropertyInternal(ctx, &desc, p, prop); - if (ret < 0) - goto fail; - - if (ret) { - JS_FreeValue(ctx, desc.value); - if (desc.flags & JS_PROP_GETSET) { - JS_FreeValue(ctx, desc.getter); - JS_FreeValue(ctx, desc.setter); - ret = JS_ThrowTypeErrorOrFalse(ctx, flags, "setter is forbidden"); - goto done; - } else if (!(desc.flags & JS_PROP_WRITABLE) || - p->class_id == JS_CLASS_MODULE_NS) { - read_only_prop: - ret = JS_ThrowTypeErrorReadOnly(ctx, flags, prop); - goto done; - } - ret = JS_DefineProperty(ctx, this_obj, prop, val, - JS_UNDEFINED, JS_UNDEFINED, - JS_PROP_HAS_VALUE); - } else { - generic_create_prop: - ret = JS_CreateProperty(ctx, p, prop, val, JS_UNDEFINED, JS_UNDEFINED, - flags | - JS_PROP_HAS_VALUE | - JS_PROP_HAS_ENUMERABLE | - JS_PROP_HAS_WRITABLE | - JS_PROP_HAS_CONFIGURABLE | - JS_PROP_C_W_E); - } - -done: - JS_FreeValue(ctx, val); - return ret; -fail: - JS_FreeValue(ctx, val); - return -1; -} - -int JS_SetPropertyInternal(JSContext *ctx, JSValue this_obj, - JSAtom prop, JSValue val, int flags) -{ - return JS_SetPropertyInternal2(ctx, this_obj, prop, val, this_obj, - flags, NULL); -} - -static int JS_SetPropertyInternalWithIC(JSContext *ctx, JSValue this_obj, - JSAtom prop, JSValue val, int flags, - JSInlineCache *ic, int32_t offset) { - uint32_t tag; - JSObject *p; - tag = JS_VALUE_GET_TAG(this_obj); - if (unlikely(tag != JS_TAG_OBJECT)) - goto slow_path; - p = JS_VALUE_GET_OBJ(this_obj); - offset = get_ic_prop_offset(ic, offset, p->shape); - if (likely(offset >= 0)) { - set_value(ctx, &p->prop[offset].u.value, val); - return TRUE; - } -slow_path: - return JS_SetPropertyInternal2(ctx, this_obj, prop, val, this_obj, - flags, ic); -} - -/* flags can be JS_PROP_THROW or JS_PROP_THROW_STRICT */ -static int JS_SetPropertyValue(JSContext *ctx, JSValue this_obj, - JSValue prop, JSValue val, int flags) -{ - if (likely(JS_VALUE_GET_TAG(this_obj) == JS_TAG_OBJECT && - JS_VALUE_GET_TAG(prop) == JS_TAG_INT)) { - JSObject *p; - uint32_t idx; - double d; - int32_t v; - - /* fast path for array access */ - p = JS_VALUE_GET_OBJ(this_obj); - idx = JS_VALUE_GET_INT(prop); - switch(p->class_id) { - case JS_CLASS_ARRAY: - if (unlikely(idx >= (uint32_t)p->u.array.count)) { - JSObject *p1; - JSShape *sh1; - - /* fast path to add an element to the array */ - if (idx != (uint32_t)p->u.array.count || - !p->fast_array || !p->extensible) - goto slow_path; - /* check if prototype chain has a numeric property */ - p1 = p->shape->proto; - while (p1 != NULL) { - sh1 = p1->shape; - if (p1->class_id == JS_CLASS_ARRAY) { - if (unlikely(!p1->fast_array)) - goto slow_path; - } else if (p1->class_id == JS_CLASS_OBJECT) { - if (unlikely(sh1->has_small_array_index)) - goto slow_path; - } else { - goto slow_path; - } - p1 = sh1->proto; - } - /* add element */ - return add_fast_array_element(ctx, p, val, flags); - } - set_value(ctx, &p->u.array.u.values[idx], val); - break; - case JS_CLASS_ARGUMENTS: - if (unlikely(idx >= (uint32_t)p->u.array.count)) - goto slow_path; - set_value(ctx, &p->u.array.u.values[idx], val); - break; - case JS_CLASS_UINT8C_ARRAY: - if (JS_ToUint8ClampFree(ctx, &v, val)) - goto ta_cvt_fail; - /* Note: the conversion can detach the typed array, so the - array bound check must be done after */ - if (unlikely(idx >= (uint32_t)p->u.array.count)) - goto ta_out_of_bound; - p->u.array.u.uint8_ptr[idx] = v; - break; - case JS_CLASS_INT8_ARRAY: - case JS_CLASS_UINT8_ARRAY: - if (JS_ToInt32Free(ctx, &v, val)) - goto ta_cvt_fail; - if (unlikely(idx >= (uint32_t)p->u.array.count)) - goto ta_out_of_bound; - p->u.array.u.uint8_ptr[idx] = v; - break; - case JS_CLASS_INT16_ARRAY: - case JS_CLASS_UINT16_ARRAY: - if (JS_ToInt32Free(ctx, &v, val)) - goto ta_cvt_fail; - if (unlikely(idx >= (uint32_t)p->u.array.count)) - goto ta_out_of_bound; - p->u.array.u.uint16_ptr[idx] = v; - break; - case JS_CLASS_INT32_ARRAY: - case JS_CLASS_UINT32_ARRAY: - if (JS_ToInt32Free(ctx, &v, val)) - goto ta_cvt_fail; - if (unlikely(idx >= (uint32_t)p->u.array.count)) - goto ta_out_of_bound; - p->u.array.u.uint32_ptr[idx] = v; - break; - case JS_CLASS_BIG_INT64_ARRAY: - case JS_CLASS_BIG_UINT64_ARRAY: - /* XXX: need specific conversion function */ - { - int64_t v; - if (JS_ToBigInt64Free(ctx, &v, val)) - goto ta_cvt_fail; - if (unlikely(idx >= (uint32_t)p->u.array.count)) - goto ta_out_of_bound; - p->u.array.u.uint64_ptr[idx] = v; - } - break; - case JS_CLASS_FLOAT32_ARRAY: - if (JS_ToFloat64Free(ctx, &d, val)) - goto ta_cvt_fail; - if (unlikely(idx >= (uint32_t)p->u.array.count)) - goto ta_out_of_bound; - p->u.array.u.float_ptr[idx] = d; - break; - case JS_CLASS_FLOAT64_ARRAY: - if (JS_ToFloat64Free(ctx, &d, val)) { - ta_cvt_fail: - if (flags & JS_PROP_REFLECT_DEFINE_PROPERTY) { - JS_FreeValue(ctx, JS_GetException(ctx)); - return FALSE; - } - return -1; - } - if (unlikely(idx >= (uint32_t)p->u.array.count)) { - ta_out_of_bound: - if (typed_array_is_detached(ctx, p)) - if (!(flags & JS_PROP_DEFINE_PROPERTY)) - return TRUE; // per spec: no OOB exception - return JS_ThrowTypeErrorOrFalse(ctx, flags, "out-of-bound numeric index"); - } - p->u.array.u.double_ptr[idx] = d; - break; - default: - goto slow_path; - } - return TRUE; - } else { - JSAtom atom; - int ret; - slow_path: - atom = JS_ValueToAtom(ctx, prop); - JS_FreeValue(ctx, prop); - if (unlikely(atom == JS_ATOM_NULL)) { - JS_FreeValue(ctx, val); - return -1; - } - ret = JS_SetPropertyInternal(ctx, this_obj, atom, val, flags); - JS_FreeAtom(ctx, atom); - return ret; - } -} - -int JS_SetPropertyUint32(JSContext *ctx, JSValue this_obj, - uint32_t idx, JSValue val) -{ - return JS_SetPropertyValue(ctx, this_obj, js_uint32(idx), val, - JS_PROP_THROW); -} - -int JS_SetPropertyInt64(JSContext *ctx, JSValue this_obj, - int64_t idx, JSValue val) -{ - JSAtom prop; - int res; - - if ((uint64_t)idx <= INT32_MAX) { - /* fast path for fast arrays */ - return JS_SetPropertyValue(ctx, this_obj, js_int32(idx), val, - JS_PROP_THROW); - } - prop = JS_NewAtomInt64(ctx, idx); - if (prop == JS_ATOM_NULL) { - JS_FreeValue(ctx, val); - return -1; - } - res = JS_SetProperty(ctx, this_obj, prop, val); - JS_FreeAtom(ctx, prop); - return res; -} - -int JS_SetPropertyStr(JSContext *ctx, JSValue this_obj, - const char *prop, JSValue val) -{ - JSAtom atom; - int ret; - atom = JS_NewAtom(ctx, prop); - ret = JS_SetPropertyInternal(ctx, this_obj, atom, val, JS_PROP_THROW); - JS_FreeAtom(ctx, atom); - return ret; -} - -/* compute the property flags. For each flag: (JS_PROP_HAS_x forces - it, otherwise def_flags is used) - Note: makes assumption about the bit pattern of the flags -*/ -static int get_prop_flags(int flags, int def_flags) -{ - int mask; - mask = (flags >> JS_PROP_HAS_SHIFT) & JS_PROP_C_W_E; - return (flags & mask) | (def_flags & ~mask); -} - -static int JS_CreateProperty(JSContext *ctx, JSObject *p, - JSAtom prop, JSValue val, - JSValue getter, JSValue setter, - int flags) -{ - JSProperty *pr; - int ret, prop_flags; - - /* add a new property or modify an existing exotic one */ - if (p->is_exotic) { - if (p->class_id == JS_CLASS_ARRAY) { - uint32_t idx, len; - - if (p->fast_array) { - if (__JS_AtomIsTaggedInt(prop)) { - idx = __JS_AtomToUInt32(prop); - if (idx == p->u.array.count) { - if (!p->extensible) - goto not_extensible; - if (flags & (JS_PROP_HAS_GET | JS_PROP_HAS_SET)) - goto convert_to_array; - prop_flags = get_prop_flags(flags, 0); - if (prop_flags != JS_PROP_C_W_E) - goto convert_to_array; - return add_fast_array_element(ctx, p, - js_dup(val), flags); - } else { - goto convert_to_array; - } - } else if (JS_AtomIsArrayIndex(ctx, &idx, prop)) { - /* convert the fast array to normal array */ - convert_to_array: - if (convert_fast_array_to_array(ctx, p)) - return -1; - goto generic_array; - } - } else if (JS_AtomIsArrayIndex(ctx, &idx, prop)) { - JSProperty *plen; - JSShapeProperty *pslen; - generic_array: - /* update the length field */ - plen = &p->prop[0]; - JS_ToUint32(ctx, &len, plen->u.value); - if ((idx + 1) > len) { - pslen = get_shape_prop(p->shape); - if (unlikely(!(pslen->flags & JS_PROP_WRITABLE))) - return JS_ThrowTypeErrorReadOnly(ctx, flags, JS_ATOM_length); - /* XXX: should update the length after defining - the property */ - len = idx + 1; - set_value(ctx, &plen->u.value, js_uint32(len)); - } - } - } else if (p->class_id >= JS_CLASS_UINT8C_ARRAY && - p->class_id <= JS_CLASS_FLOAT64_ARRAY) { - ret = JS_AtomIsNumericIndex(ctx, prop); - if (ret != 0) { - if (ret < 0) - return -1; - return JS_ThrowTypeErrorOrFalse(ctx, flags, "cannot create numeric index in typed array"); - } - } else if (!(flags & JS_PROP_NO_EXOTIC)) { - const JSClassExoticMethods *em = ctx->rt->class_array[p->class_id].exotic; - if (em) { - if (em->define_own_property) { - return em->define_own_property(ctx, JS_MKPTR(JS_TAG_OBJECT, p), - prop, val, getter, setter, flags); - } - ret = JS_IsExtensible(ctx, JS_MKPTR(JS_TAG_OBJECT, p)); - if (ret < 0) - return -1; - if (!ret) - goto not_extensible; - } - } - } - - if (!p->extensible) { - not_extensible: - return JS_ThrowTypeErrorOrFalse(ctx, flags, "object is not extensible"); - } - - if (flags & (JS_PROP_HAS_GET | JS_PROP_HAS_SET)) { - prop_flags = (flags & (JS_PROP_CONFIGURABLE | JS_PROP_ENUMERABLE)) | - JS_PROP_GETSET; - } else { - prop_flags = flags & JS_PROP_C_W_E; - } - pr = add_property(ctx, p, prop, prop_flags); - if (unlikely(!pr)) - return -1; - if (flags & (JS_PROP_HAS_GET | JS_PROP_HAS_SET)) { - pr->u.getset.getter = NULL; - if ((flags & JS_PROP_HAS_GET) && JS_IsFunction(ctx, getter)) { - pr->u.getset.getter = - JS_VALUE_GET_OBJ(js_dup(getter)); - } - pr->u.getset.setter = NULL; - if ((flags & JS_PROP_HAS_SET) && JS_IsFunction(ctx, setter)) { - pr->u.getset.setter = - JS_VALUE_GET_OBJ(js_dup(setter)); - } - } else { - if (flags & JS_PROP_HAS_VALUE) { - pr->u.value = js_dup(val); - } else { - pr->u.value = JS_UNDEFINED; - } - } - return TRUE; -} - -/* return FALSE if not OK */ -static BOOL check_define_prop_flags(int prop_flags, int flags) -{ - BOOL has_accessor, is_getset; - - if (!(prop_flags & JS_PROP_CONFIGURABLE)) { - if ((flags & (JS_PROP_HAS_CONFIGURABLE | JS_PROP_CONFIGURABLE)) == - (JS_PROP_HAS_CONFIGURABLE | JS_PROP_CONFIGURABLE)) { - return FALSE; - } - if ((flags & JS_PROP_HAS_ENUMERABLE) && - (flags & JS_PROP_ENUMERABLE) != (prop_flags & JS_PROP_ENUMERABLE)) - return FALSE; - } - if (flags & (JS_PROP_HAS_VALUE | JS_PROP_HAS_WRITABLE | - JS_PROP_HAS_GET | JS_PROP_HAS_SET)) { - if (!(prop_flags & JS_PROP_CONFIGURABLE)) { - has_accessor = ((flags & (JS_PROP_HAS_GET | JS_PROP_HAS_SET)) != 0); - is_getset = ((prop_flags & JS_PROP_TMASK) == JS_PROP_GETSET); - if (has_accessor != is_getset) - return FALSE; - if (!has_accessor && !is_getset && !(prop_flags & JS_PROP_WRITABLE)) { - /* not writable: cannot set the writable bit */ - if ((flags & (JS_PROP_HAS_WRITABLE | JS_PROP_WRITABLE)) == - (JS_PROP_HAS_WRITABLE | JS_PROP_WRITABLE)) - return FALSE; - } - } - } - return TRUE; -} - -/* ensure that the shape can be safely modified */ -static int js_shape_prepare_update(JSContext *ctx, JSObject *p, - JSShapeProperty **pprs) -{ - JSShape *sh; - uint32_t idx = 0; /* prevent warning */ - - sh = p->shape; - if (sh->is_hashed) { - if (sh->header.ref_count != 1) { - if (pprs) - idx = *pprs - get_shape_prop(sh); - /* clone the shape (the resulting one is no longer hashed) */ - sh = js_clone_shape(ctx, sh); - if (!sh) - return -1; - js_free_shape(ctx->rt, p->shape); - p->shape = sh; - if (pprs) - *pprs = get_shape_prop(sh) + idx; - } else { - js_shape_hash_unlink(ctx->rt, sh); - sh->is_hashed = FALSE; - } - } - return 0; -} - -static int js_update_property_flags(JSContext *ctx, JSObject *p, - JSShapeProperty **pprs, int flags) -{ - if (flags != (*pprs)->flags) { - if (js_shape_prepare_update(ctx, p, pprs)) - return -1; - (*pprs)->flags = flags; - } - return 0; -} - -/* allowed flags: - JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE - JS_PROP_HAS_GET, JS_PROP_HAS_SET, JS_PROP_HAS_VALUE, - JS_PROP_HAS_CONFIGURABLE, JS_PROP_HAS_WRITABLE, JS_PROP_HAS_ENUMERABLE, - JS_PROP_THROW, JS_PROP_NO_EXOTIC. - If JS_PROP_THROW is set, return an exception instead of FALSE. - if JS_PROP_NO_EXOTIC is set, do not call the exotic - define_own_property callback. - return -1 (exception), FALSE or TRUE. -*/ -int JS_DefineProperty(JSContext *ctx, JSValue this_obj, - JSAtom prop, JSValue val, - JSValue getter, JSValue setter, int flags) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - int mask, res; - - if (JS_VALUE_GET_TAG(this_obj) != JS_TAG_OBJECT) { - JS_ThrowTypeErrorNotAnObject(ctx); - return -1; - } - p = JS_VALUE_GET_OBJ(this_obj); - - redo_prop_update: - prs = find_own_property(&pr, p, prop); - if (prs) { - /* the range of the Array length property is always tested before */ - if ((prs->flags & JS_PROP_LENGTH) && (flags & JS_PROP_HAS_VALUE)) { - uint32_t array_length; - if (JS_ToArrayLengthFree(ctx, &array_length, - js_dup(val), FALSE)) { - return -1; - } - /* this code relies on the fact that Uint32 are never allocated */ - val = js_uint32(array_length); - /* prs may have been modified */ - prs = find_own_property(&pr, p, prop); - assert(prs != NULL); - } - /* property already exists */ - if (!check_define_prop_flags(prs->flags, flags)) { - not_configurable: - return JS_ThrowTypeErrorOrFalse(ctx, flags, "property is not configurable"); - } - - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - /* Instantiate property and retry */ - if (JS_AutoInitProperty(ctx, p, prop, pr, prs)) - return -1; - goto redo_prop_update; - } - - if (flags & (JS_PROP_HAS_VALUE | JS_PROP_HAS_WRITABLE | - JS_PROP_HAS_GET | JS_PROP_HAS_SET)) { - if (flags & (JS_PROP_HAS_GET | JS_PROP_HAS_SET)) { - JSObject *new_getter, *new_setter; - - if (JS_IsFunction(ctx, getter)) { - new_getter = JS_VALUE_GET_OBJ(getter); - } else { - new_getter = NULL; - } - if (JS_IsFunction(ctx, setter)) { - new_setter = JS_VALUE_GET_OBJ(setter); - } else { - new_setter = NULL; - } - - if ((prs->flags & JS_PROP_TMASK) != JS_PROP_GETSET) { - if (js_shape_prepare_update(ctx, p, &prs)) - return -1; - /* convert to getset */ - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - free_var_ref(ctx->rt, pr->u.var_ref); - } else { - JS_FreeValue(ctx, pr->u.value); - } - prs->flags = (prs->flags & - (JS_PROP_CONFIGURABLE | JS_PROP_ENUMERABLE)) | - JS_PROP_GETSET; - pr->u.getset.getter = NULL; - pr->u.getset.setter = NULL; - } else { - if (!(prs->flags & JS_PROP_CONFIGURABLE)) { - if ((flags & JS_PROP_HAS_GET) && - new_getter != pr->u.getset.getter) { - goto not_configurable; - } - if ((flags & JS_PROP_HAS_SET) && - new_setter != pr->u.getset.setter) { - goto not_configurable; - } - } - } - if (flags & JS_PROP_HAS_GET) { - if (pr->u.getset.getter) - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.getter)); - if (new_getter) - js_dup(getter); - pr->u.getset.getter = new_getter; - } - if (flags & JS_PROP_HAS_SET) { - if (pr->u.getset.setter) - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.setter)); - if (new_setter) - js_dup(setter); - pr->u.getset.setter = new_setter; - } - } else { - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - /* convert to data descriptor */ - if (js_shape_prepare_update(ctx, p, &prs)) - return -1; - if (pr->u.getset.getter) - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.getter)); - if (pr->u.getset.setter) - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_OBJECT, pr->u.getset.setter)); - prs->flags &= ~(JS_PROP_TMASK | JS_PROP_WRITABLE); - pr->u.value = JS_UNDEFINED; - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - /* Note: JS_PROP_VARREF is always writable */ - } else { - if ((prs->flags & (JS_PROP_CONFIGURABLE | JS_PROP_WRITABLE)) == 0 && - (flags & JS_PROP_HAS_VALUE)) { - if (!js_same_value(ctx, val, pr->u.value)) { - goto not_configurable; - } else { - return TRUE; - } - } - } - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - if (flags & JS_PROP_HAS_VALUE) { - if (p->class_id == JS_CLASS_MODULE_NS) { - /* JS_PROP_WRITABLE is always true for variable - references, but they are write protected in module name - spaces. */ - if (!js_same_value(ctx, val, *pr->u.var_ref->pvalue)) - goto not_configurable; - } - /* update the reference */ - set_value(ctx, pr->u.var_ref->pvalue, - js_dup(val)); - } - /* if writable is set to false, no longer a - reference (for mapped arguments) */ - if ((flags & (JS_PROP_HAS_WRITABLE | JS_PROP_WRITABLE)) == JS_PROP_HAS_WRITABLE) { - JSValue val1; - if (js_shape_prepare_update(ctx, p, &prs)) - return -1; - val1 = js_dup(*pr->u.var_ref->pvalue); - free_var_ref(ctx->rt, pr->u.var_ref); - pr->u.value = val1; - prs->flags &= ~(JS_PROP_TMASK | JS_PROP_WRITABLE); - } - } else if (prs->flags & JS_PROP_LENGTH) { - if (flags & JS_PROP_HAS_VALUE) { - /* Note: no JS code is executable because - 'val' is guaranted to be a Uint32 */ - res = set_array_length(ctx, p, js_dup(val), - flags); - } else { - res = TRUE; - } - /* still need to reset the writable flag if - needed. The JS_PROP_LENGTH is kept because the - Uint32 test is still done if the length - property is read-only. */ - if ((flags & (JS_PROP_HAS_WRITABLE | JS_PROP_WRITABLE)) == - JS_PROP_HAS_WRITABLE) { - prs = get_shape_prop(p->shape); - if (js_update_property_flags(ctx, p, &prs, - prs->flags & ~JS_PROP_WRITABLE)) - return -1; - } - return res; - } else { - if (flags & JS_PROP_HAS_VALUE) { - JS_FreeValue(ctx, pr->u.value); - pr->u.value = js_dup(val); - } - if (flags & JS_PROP_HAS_WRITABLE) { - if (js_update_property_flags(ctx, p, &prs, - (prs->flags & ~JS_PROP_WRITABLE) | - (flags & JS_PROP_WRITABLE))) - return -1; - } - } - } - } - mask = 0; - if (flags & JS_PROP_HAS_CONFIGURABLE) - mask |= JS_PROP_CONFIGURABLE; - if (flags & JS_PROP_HAS_ENUMERABLE) - mask |= JS_PROP_ENUMERABLE; - if (js_update_property_flags(ctx, p, &prs, - (prs->flags & ~mask) | (flags & mask))) - return -1; - return TRUE; - } - - /* handle modification of fast array elements */ - if (p->fast_array) { - uint32_t idx; - uint32_t prop_flags; - if (p->class_id == JS_CLASS_ARRAY) { - if (__JS_AtomIsTaggedInt(prop)) { - idx = __JS_AtomToUInt32(prop); - if (idx < p->u.array.count) { - prop_flags = get_prop_flags(flags, JS_PROP_C_W_E); - if (prop_flags != JS_PROP_C_W_E) - goto convert_to_slow_array; - if (flags & (JS_PROP_HAS_GET | JS_PROP_HAS_SET)) { - convert_to_slow_array: - if (convert_fast_array_to_array(ctx, p)) - return -1; - else - goto redo_prop_update; - } - if (flags & JS_PROP_HAS_VALUE) { - set_value(ctx, &p->u.array.u.values[idx], js_dup(val)); - } - return TRUE; - } - } - } else if (p->class_id >= JS_CLASS_UINT8C_ARRAY && - p->class_id <= JS_CLASS_FLOAT64_ARRAY) { - JSValue num; - int ret; - - if (!__JS_AtomIsTaggedInt(prop)) { - /* slow path with to handle all numeric indexes */ - num = JS_AtomIsNumericIndex1(ctx, prop); - if (JS_IsUndefined(num)) - goto typed_array_done; - if (JS_IsException(num)) - return -1; - ret = JS_NumberIsInteger(ctx, num); - if (ret < 0) { - JS_FreeValue(ctx, num); - return -1; - } - if (!ret) { - JS_FreeValue(ctx, num); - return JS_ThrowTypeErrorOrFalse(ctx, flags, "non integer index in typed array"); - } - ret = JS_NumberIsNegativeOrMinusZero(ctx, num); - JS_FreeValue(ctx, num); - if (ret) { - return JS_ThrowTypeErrorOrFalse(ctx, flags, "negative index in typed array"); - } - if (!__JS_AtomIsTaggedInt(prop)) - goto typed_array_oob; - } - idx = __JS_AtomToUInt32(prop); - /* if the typed array is detached, p->u.array.count = 0 */ - if (idx >= typed_array_get_length(ctx, p)) { - typed_array_oob: - return JS_ThrowTypeErrorOrFalse(ctx, flags, "out-of-bound index in typed array"); - } - prop_flags = get_prop_flags(flags, JS_PROP_ENUMERABLE | JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); - if (flags & (JS_PROP_HAS_GET | JS_PROP_HAS_SET) || - prop_flags != (JS_PROP_ENUMERABLE | JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE)) { - return JS_ThrowTypeErrorOrFalse(ctx, flags, "invalid descriptor flags"); - } - if (flags & JS_PROP_HAS_VALUE) { - return JS_SetPropertyValue(ctx, this_obj, js_int32(idx), js_dup(val), flags); - } - return TRUE; - typed_array_done: ; - } - } - - return JS_CreateProperty(ctx, p, prop, val, getter, setter, flags); -} - -static int JS_DefineAutoInitProperty(JSContext *ctx, JSValue this_obj, - JSAtom prop, JSAutoInitIDEnum id, - void *opaque, int flags) -{ - JSObject *p; - JSProperty *pr; - - if (JS_VALUE_GET_TAG(this_obj) != JS_TAG_OBJECT) - return FALSE; - - p = JS_VALUE_GET_OBJ(this_obj); - - if (find_own_property(&pr, p, prop)) { - /* property already exists */ - abort(); - return FALSE; - } - - /* Specialized CreateProperty */ - pr = add_property(ctx, p, prop, (flags & JS_PROP_C_W_E) | JS_PROP_AUTOINIT); - if (unlikely(!pr)) - return -1; - pr->u.init.realm_and_id = (uintptr_t)JS_DupContext(ctx); - assert((pr->u.init.realm_and_id & 3) == 0); - assert(id <= 3); - pr->u.init.realm_and_id |= id; - pr->u.init.opaque = opaque; - return TRUE; -} - -/* shortcut to add or redefine a new property value */ -int JS_DefinePropertyValue(JSContext *ctx, JSValue this_obj, - JSAtom prop, JSValue val, int flags) -{ - int ret; - ret = JS_DefineProperty(ctx, this_obj, prop, val, JS_UNDEFINED, JS_UNDEFINED, - flags | JS_PROP_HAS_VALUE | JS_PROP_HAS_CONFIGURABLE | JS_PROP_HAS_WRITABLE | JS_PROP_HAS_ENUMERABLE); - JS_FreeValue(ctx, val); - return ret; -} - -int JS_DefinePropertyValueValue(JSContext *ctx, JSValue this_obj, - JSValue prop, JSValue val, int flags) -{ - JSAtom atom; - int ret; - atom = JS_ValueToAtom(ctx, prop); - JS_FreeValue(ctx, prop); - if (unlikely(atom == JS_ATOM_NULL)) { - JS_FreeValue(ctx, val); - return -1; - } - ret = JS_DefinePropertyValue(ctx, this_obj, atom, val, flags); - JS_FreeAtom(ctx, atom); - return ret; -} - -int JS_DefinePropertyValueUint32(JSContext *ctx, JSValue this_obj, - uint32_t idx, JSValue val, int flags) -{ - return JS_DefinePropertyValueValue(ctx, this_obj, js_uint32(idx), - val, flags); -} - -int JS_DefinePropertyValueInt64(JSContext *ctx, JSValue this_obj, - int64_t idx, JSValue val, int flags) -{ - return JS_DefinePropertyValueValue(ctx, this_obj, JS_NewInt64(ctx, idx), - val, flags); -} - -int JS_DefinePropertyValueStr(JSContext *ctx, JSValue this_obj, - const char *prop, JSValue val, int flags) -{ - JSAtom atom; - int ret; - atom = JS_NewAtom(ctx, prop); - ret = JS_DefinePropertyValue(ctx, this_obj, atom, val, flags); - JS_FreeAtom(ctx, atom); - return ret; -} - -/* shortcut to add getter & setter */ -int JS_DefinePropertyGetSet(JSContext *ctx, JSValue this_obj, - JSAtom prop, JSValue getter, JSValue setter, - int flags) -{ - int ret; - ret = JS_DefineProperty(ctx, this_obj, prop, JS_UNDEFINED, getter, setter, - flags | JS_PROP_HAS_GET | JS_PROP_HAS_SET | - JS_PROP_HAS_CONFIGURABLE | JS_PROP_HAS_ENUMERABLE); - JS_FreeValue(ctx, getter); - JS_FreeValue(ctx, setter); - return ret; -} - -static int JS_CreateDataPropertyUint32(JSContext *ctx, JSValue this_obj, - int64_t idx, JSValue val, int flags) -{ - return JS_DefinePropertyValueValue(ctx, this_obj, JS_NewInt64(ctx, idx), - val, flags | JS_PROP_CONFIGURABLE | - JS_PROP_ENUMERABLE | JS_PROP_WRITABLE); -} - - -/* return TRUE if 'obj' has a non empty 'name' string */ -static BOOL js_object_has_name(JSContext *ctx, JSValue obj) -{ - JSProperty *pr; - JSShapeProperty *prs; - JSValue val; - JSString *p; - - prs = find_own_property(&pr, JS_VALUE_GET_OBJ(obj), JS_ATOM_name); - if (!prs) - return FALSE; - if ((prs->flags & JS_PROP_TMASK) != JS_PROP_NORMAL) - return TRUE; - val = pr->u.value; - if (JS_VALUE_GET_TAG(val) != JS_TAG_STRING) - return TRUE; - p = JS_VALUE_GET_STRING(val); - return (p->len != 0); -} - -static int JS_DefineObjectName(JSContext *ctx, JSValue obj, - JSAtom name, int flags) -{ - if (name != JS_ATOM_NULL - && JS_IsObject(obj) - && !js_object_has_name(ctx, obj) - && JS_DefinePropertyValue(ctx, obj, JS_ATOM_name, JS_AtomToString(ctx, name), flags) < 0) { - return -1; - } - return 0; -} - -static int JS_DefineObjectNameComputed(JSContext *ctx, JSValue obj, - JSValue str, int flags) -{ - if (JS_IsObject(obj) && - !js_object_has_name(ctx, obj)) { - JSAtom prop; - JSValue name_str; - prop = JS_ValueToAtom(ctx, str); - if (prop == JS_ATOM_NULL) - return -1; - name_str = js_get_function_name(ctx, prop); - JS_FreeAtom(ctx, prop); - if (JS_IsException(name_str)) - return -1; - if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_name, name_str, flags) < 0) - return -1; - } - return 0; -} - -#define DEFINE_GLOBAL_LEX_VAR (1 << 7) -#define DEFINE_GLOBAL_FUNC_VAR (1 << 6) - -static JSValue JS_ThrowSyntaxErrorVarRedeclaration(JSContext *ctx, JSAtom prop) -{ - return JS_ThrowSyntaxErrorAtom(ctx, "redeclaration of '%s'", prop); -} - -/* flags is 0, DEFINE_GLOBAL_LEX_VAR or DEFINE_GLOBAL_FUNC_VAR */ -/* XXX: could support exotic global object. */ -static int JS_CheckDefineGlobalVar(JSContext *ctx, JSAtom prop, int flags) -{ - JSObject *p; - JSShapeProperty *prs; - - p = JS_VALUE_GET_OBJ(ctx->global_obj); - prs = find_own_property1(p, prop); - /* XXX: should handle JS_PROP_AUTOINIT */ - if (flags & DEFINE_GLOBAL_LEX_VAR) { - if (prs && !(prs->flags & JS_PROP_CONFIGURABLE)) - goto fail_redeclaration; - } else { - if (!prs && !p->extensible) - goto define_error; - if (flags & DEFINE_GLOBAL_FUNC_VAR) { - if (prs) { - if (!(prs->flags & JS_PROP_CONFIGURABLE) && - ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET || - ((prs->flags & (JS_PROP_WRITABLE | JS_PROP_ENUMERABLE)) != - (JS_PROP_WRITABLE | JS_PROP_ENUMERABLE)))) { - define_error: - JS_ThrowTypeErrorAtom(ctx, "cannot define variable '%s'", - prop); - return -1; - } - } - } - } - /* check if there already is a lexical declaration */ - p = JS_VALUE_GET_OBJ(ctx->global_var_obj); - prs = find_own_property1(p, prop); - if (prs) { - fail_redeclaration: - JS_ThrowSyntaxErrorVarRedeclaration(ctx, prop); - return -1; - } - return 0; -} - -/* def_flags is (0, DEFINE_GLOBAL_LEX_VAR) | - JS_PROP_CONFIGURABLE | JS_PROP_WRITABLE */ -/* XXX: could support exotic global object. */ -static int JS_DefineGlobalVar(JSContext *ctx, JSAtom prop, int def_flags) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - JSValue val; - int flags; - - if (def_flags & DEFINE_GLOBAL_LEX_VAR) { - p = JS_VALUE_GET_OBJ(ctx->global_var_obj); - flags = JS_PROP_ENUMERABLE | (def_flags & JS_PROP_WRITABLE) | - JS_PROP_CONFIGURABLE; - val = JS_UNINITIALIZED; - } else { - p = JS_VALUE_GET_OBJ(ctx->global_obj); - flags = JS_PROP_ENUMERABLE | JS_PROP_WRITABLE | - (def_flags & JS_PROP_CONFIGURABLE); - val = JS_UNDEFINED; - } - prs = find_own_property1(p, prop); - if (prs) - return 0; - if (!p->extensible) - return 0; - pr = add_property(ctx, p, prop, flags); - if (unlikely(!pr)) - return -1; - pr->u.value = val; - return 0; -} - -/* 'def_flags' is 0 or JS_PROP_CONFIGURABLE. */ -/* XXX: could support exotic global object. */ -static int JS_DefineGlobalFunction(JSContext *ctx, JSAtom prop, - JSValue func, int def_flags) -{ - - JSObject *p; - JSShapeProperty *prs; - int flags; - - p = JS_VALUE_GET_OBJ(ctx->global_obj); - prs = find_own_property1(p, prop); - flags = JS_PROP_HAS_VALUE | JS_PROP_THROW; - if (!prs || (prs->flags & JS_PROP_CONFIGURABLE)) { - flags |= JS_PROP_ENUMERABLE | JS_PROP_WRITABLE | def_flags | - JS_PROP_HAS_CONFIGURABLE | JS_PROP_HAS_WRITABLE | JS_PROP_HAS_ENUMERABLE; - } - if (JS_DefineProperty(ctx, ctx->global_obj, prop, func, - JS_UNDEFINED, JS_UNDEFINED, flags) < 0) - return -1; - return 0; -} - -static JSValue JS_GetGlobalVar(JSContext *ctx, JSAtom prop, - BOOL throw_ref_error) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - - /* no exotic behavior is possible in global_var_obj */ - p = JS_VALUE_GET_OBJ(ctx->global_var_obj); - prs = find_own_property(&pr, p, prop); - if (prs) { - /* XXX: should handle JS_PROP_TMASK properties */ - if (unlikely(JS_IsUninitialized(pr->u.value))) - return JS_ThrowReferenceErrorUninitialized(ctx, prs->atom); - return js_dup(pr->u.value); - } - return JS_GetPropertyInternal(ctx, ctx->global_obj, prop, - ctx->global_obj, throw_ref_error); -} - -/* construct a reference to a global variable */ -static int JS_GetGlobalVarRef(JSContext *ctx, JSAtom prop, JSValue *sp) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - - /* no exotic behavior is possible in global_var_obj */ - p = JS_VALUE_GET_OBJ(ctx->global_var_obj); - prs = find_own_property(&pr, p, prop); - if (prs) { - /* XXX: should handle JS_PROP_AUTOINIT properties? */ - /* XXX: conformance: do these tests in - OP_put_var_ref/OP_get_var_ref ? */ - if (unlikely(JS_IsUninitialized(pr->u.value))) { - JS_ThrowReferenceErrorUninitialized(ctx, prs->atom); - return -1; - } - if (unlikely(!(prs->flags & JS_PROP_WRITABLE))) { - return JS_ThrowTypeErrorReadOnly(ctx, JS_PROP_THROW, prop); - } - sp[0] = js_dup(ctx->global_var_obj); - } else { - int ret; - ret = JS_HasProperty(ctx, ctx->global_obj, prop); - if (ret < 0) - return -1; - if (ret) { - sp[0] = js_dup(ctx->global_obj); - } else { - sp[0] = JS_UNDEFINED; - } - } - sp[1] = JS_AtomToValue(ctx, prop); - return 0; -} - -/* use for strict variable access: test if the variable exists */ -static int JS_CheckGlobalVar(JSContext *ctx, JSAtom prop) -{ - JSObject *p; - JSShapeProperty *prs; - int ret; - - /* no exotic behavior is possible in global_var_obj */ - p = JS_VALUE_GET_OBJ(ctx->global_var_obj); - prs = find_own_property1(p, prop); - if (prs) { - ret = TRUE; - } else { - ret = JS_HasProperty(ctx, ctx->global_obj, prop); - if (ret < 0) - return -1; - } - return ret; -} - -/* flag = 0: normal variable write - flag = 1: initialize lexical variable - flag = 2: normal variable write, strict check was done before -*/ -static int JS_SetGlobalVar(JSContext *ctx, JSAtom prop, JSValue val, - int flag) -{ - JSObject *p; - JSShapeProperty *prs; - JSProperty *pr; - int flags; - - /* no exotic behavior is possible in global_var_obj */ - p = JS_VALUE_GET_OBJ(ctx->global_var_obj); - prs = find_own_property(&pr, p, prop); - if (prs) { - /* XXX: should handle JS_PROP_AUTOINIT properties? */ - if (flag != 1) { - if (unlikely(JS_IsUninitialized(pr->u.value))) { - JS_FreeValue(ctx, val); - JS_ThrowReferenceErrorUninitialized(ctx, prs->atom); - return -1; - } - if (unlikely(!(prs->flags & JS_PROP_WRITABLE))) { - JS_FreeValue(ctx, val); - return JS_ThrowTypeErrorReadOnly(ctx, JS_PROP_THROW, prop); - } - } - set_value(ctx, &pr->u.value, val); - return 0; - } - flags = JS_PROP_THROW_STRICT; - if (is_strict_mode(ctx)) - flags |= JS_PROP_NO_ADD; - return JS_SetPropertyInternal(ctx, ctx->global_obj, prop, val, flags); -} - -/* return -1, FALSE or TRUE. return FALSE if not configurable or - invalid object. return -1 in case of exception. - flags can be 0, JS_PROP_THROW or JS_PROP_THROW_STRICT */ -int JS_DeleteProperty(JSContext *ctx, JSValue obj, JSAtom prop, int flags) -{ - JSValue obj1; - JSObject *p; - int res; - - obj1 = JS_ToObject(ctx, obj); - if (JS_IsException(obj1)) - return -1; - p = JS_VALUE_GET_OBJ(obj1); - res = delete_property(ctx, p, prop); - JS_FreeValue(ctx, obj1); - if (res != FALSE) - return res; - if ((flags & JS_PROP_THROW) || - ((flags & JS_PROP_THROW_STRICT) && is_strict_mode(ctx))) { - JS_ThrowTypeError(ctx, "could not delete property"); - return -1; - } - return FALSE; -} - -int JS_DeletePropertyInt64(JSContext *ctx, JSValue obj, int64_t idx, int flags) -{ - JSAtom prop; - int res; - - if ((uint64_t)idx <= JS_ATOM_MAX_INT) { - /* fast path for fast arrays */ - return JS_DeleteProperty(ctx, obj, __JS_AtomFromUInt32(idx), flags); - } - prop = JS_NewAtomInt64(ctx, idx); - if (prop == JS_ATOM_NULL) - return -1; - res = JS_DeleteProperty(ctx, obj, prop, flags); - JS_FreeAtom(ctx, prop); - return res; -} - -BOOL JS_IsFunction(JSContext *ctx, JSValue val) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(val); - switch(p->class_id) { - case JS_CLASS_BYTECODE_FUNCTION: - return TRUE; - case JS_CLASS_PROXY: - return p->u.proxy_data->is_func; - default: - return (ctx->rt->class_array[p->class_id].call != NULL); - } -} - -BOOL JS_IsCFunction(JSContext *ctx, JSValue val, JSCFunction *func, int magic) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(val); - if (p->class_id == JS_CLASS_C_FUNCTION) - return (p->u.cfunc.c_function.generic == func && p->u.cfunc.magic == magic); - else - return FALSE; -} - -BOOL JS_IsConstructor(JSContext *ctx, JSValue val) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(val); - return p->is_constructor; -} - -BOOL JS_SetConstructorBit(JSContext *ctx, JSValue func_obj, BOOL val) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(func_obj) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(func_obj); - p->is_constructor = val; - return TRUE; -} - -BOOL JS_IsError(JSContext *ctx, JSValue val) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(val); - return (p->class_id == JS_CLASS_ERROR); -} - -/* used to avoid catching interrupt exceptions */ -BOOL JS_IsUncatchableError(JSContext *ctx, JSValue val) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(val); - return p->class_id == JS_CLASS_ERROR && p->is_uncatchable_error; -} - -void JS_SetUncatchableError(JSContext *ctx, JSValue val, BOOL flag) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return; - p = JS_VALUE_GET_OBJ(val); - if (p->class_id == JS_CLASS_ERROR) - p->is_uncatchable_error = flag; -} - -void JS_ResetUncatchableError(JSContext *ctx) -{ - JS_SetUncatchableError(ctx, ctx->rt->current_exception, FALSE); -} - -void JS_SetOpaque(JSValue obj, void *opaque) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { - p = JS_VALUE_GET_OBJ(obj); - p->u.opaque = opaque; - } -} - -/* return NULL if not an object of class class_id */ -void *JS_GetOpaque(JSValue obj, JSClassID class_id) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) - return NULL; - p = JS_VALUE_GET_OBJ(obj); - if (p->class_id != class_id) - return NULL; - return p->u.opaque; -} - -void *JS_GetOpaque2(JSContext *ctx, JSValue obj, JSClassID class_id) -{ - void *p = JS_GetOpaque(obj, class_id); - if (unlikely(!p)) { - JS_ThrowTypeErrorInvalidClass(ctx, class_id); - } - return p; -} - -void *JS_GetAnyOpaque(JSValue obj, JSClassID *class_id) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) { - *class_id = 0; - return NULL; - } - p = JS_VALUE_GET_OBJ(obj); - *class_id = p->class_id; - return p->u.opaque; -} - -static JSValue JS_ToPrimitiveFree(JSContext *ctx, JSValue val, int hint) -{ - int i; - BOOL force_ordinary; - - JSAtom method_name; - JSValue method, ret; - if (JS_VALUE_GET_TAG(val) != JS_TAG_OBJECT) - return val; - force_ordinary = hint & HINT_FORCE_ORDINARY; - hint &= ~HINT_FORCE_ORDINARY; - if (!force_ordinary) { - method = JS_GetProperty(ctx, val, JS_ATOM_Symbol_toPrimitive); - if (JS_IsException(method)) - goto exception; - /* ECMA says *If exoticToPrim is not undefined* but tests in - test262 use null as a non callable converter */ - if (!JS_IsUndefined(method) && !JS_IsNull(method)) { - JSAtom atom; - JSValue arg; - switch(hint) { - case HINT_STRING: - atom = JS_ATOM_string; - break; - case HINT_NUMBER: - atom = JS_ATOM_number; - break; - default: - case HINT_NONE: - atom = JS_ATOM_default; - break; - } - arg = JS_AtomToString(ctx, atom); - ret = JS_CallFree(ctx, method, val, 1, &arg); - JS_FreeValue(ctx, arg); - if (JS_IsException(ret)) - goto exception; - JS_FreeValue(ctx, val); - if (JS_VALUE_GET_TAG(ret) != JS_TAG_OBJECT) - return ret; - JS_FreeValue(ctx, ret); - return JS_ThrowTypeError(ctx, "toPrimitive"); - } - } - if (hint != HINT_STRING) - hint = HINT_NUMBER; - for(i = 0; i < 2; i++) { - if ((i ^ hint) == 0) { - method_name = JS_ATOM_toString; - } else { - method_name = JS_ATOM_valueOf; - } - method = JS_GetProperty(ctx, val, method_name); - if (JS_IsException(method)) - goto exception; - if (JS_IsFunction(ctx, method)) { - ret = JS_CallFree(ctx, method, val, 0, NULL); - if (JS_IsException(ret)) - goto exception; - if (JS_VALUE_GET_TAG(ret) != JS_TAG_OBJECT) { - JS_FreeValue(ctx, val); - return ret; - } - JS_FreeValue(ctx, ret); - } else { - JS_FreeValue(ctx, method); - } - } - JS_ThrowTypeError(ctx, "toPrimitive"); -exception: - JS_FreeValue(ctx, val); - return JS_EXCEPTION; -} - -static JSValue JS_ToPrimitive(JSContext *ctx, JSValue val, int hint) -{ - return JS_ToPrimitiveFree(ctx, js_dup(val), hint); -} - -void JS_SetIsHTMLDDA(JSContext *ctx, JSValue obj) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) - return; - p = JS_VALUE_GET_OBJ(obj); - p->is_HTMLDDA = TRUE; -} - -static inline BOOL JS_IsHTMLDDA(JSContext *ctx, JSValue obj) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT) - return FALSE; - p = JS_VALUE_GET_OBJ(obj); - return p->is_HTMLDDA; -} - -static int JS_ToBoolFree(JSContext *ctx, JSValue val) -{ - uint32_t tag = JS_VALUE_GET_TAG(val); - switch(tag) { - case JS_TAG_INT: - return JS_VALUE_GET_INT(val) != 0; - case JS_TAG_BOOL: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - return JS_VALUE_GET_INT(val); - case JS_TAG_EXCEPTION: - return -1; - case JS_TAG_STRING: - { - BOOL ret = JS_VALUE_GET_STRING(val)->len != 0; - JS_FreeValue(ctx, val); - return ret; - } - case JS_TAG_BIG_INT: - { - JSBigInt *p = JS_VALUE_GET_PTR(val); - BOOL ret; - ret = p->num.expn != BF_EXP_ZERO && p->num.expn != BF_EXP_NAN; - JS_FreeValue(ctx, val); - return ret; - } - case JS_TAG_OBJECT: - { - JSObject *p = JS_VALUE_GET_OBJ(val); - BOOL ret; - ret = !p->is_HTMLDDA; - JS_FreeValue(ctx, val); - return ret; - } - break; - default: - if (JS_TAG_IS_FLOAT64(tag)) { - double d = JS_VALUE_GET_FLOAT64(val); - return !isnan(d) && d != 0; - } else { - JS_FreeValue(ctx, val); - return TRUE; - } - } -} - -int JS_ToBool(JSContext *ctx, JSValue val) -{ - return JS_ToBoolFree(ctx, js_dup(val)); -} - -static int skip_spaces(const char *pc) -{ - const uint8_t *p, *p_next, *p_start; - uint32_t c; - - p = p_start = (const uint8_t *)pc; - for (;;) { - c = *p; - if (c < 128) { - if (!((c >= 0x09 && c <= 0x0d) || (c == 0x20))) - break; - p++; - } else { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p_next); - if (!lre_is_space(c)) - break; - p = p_next; - } - } - return p - p_start; -} - -static inline int to_digit(int c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - else if (c >= 'A' && c <= 'Z') - return c - 'A' + 10; - else if (c >= 'a' && c <= 'z') - return c - 'a' + 10; - else - return 36; -} - -/* XXX: remove */ -static double js_strtod(const char *str, int radix, BOOL is_float) -{ - double d; - int c; - - if (!is_float || radix != 10) { - const char *p = str; - uint64_t n_max, n; - int int_exp, is_neg; - - is_neg = 0; - if (*p == '-') { - is_neg = 1; - p++; - } - - /* skip leading zeros */ - while (*p == '0') - p++; - n = 0; - if (radix == 10) - n_max = ((uint64_t)-1 - 9) / 10; /* most common case */ - else - n_max = ((uint64_t)-1 - (radix - 1)) / radix; - /* XXX: could be more precise */ - int_exp = 0; - while (*p != '\0') { - c = to_digit((uint8_t)*p); - if (c >= radix) - break; - if (n <= n_max) { - n = n * radix + c; - } else { - if (radix == 10) - goto strtod_case; - int_exp++; - } - p++; - } - d = n; - if (int_exp != 0) { - d *= pow(radix, int_exp); - } - if (is_neg) - d = -d; - } else { - strtod_case: - d = strtod(str, NULL); - } - return d; -} - -#define ATOD_INT_ONLY (1 << 0) -/* accept Oo and Ob prefixes in addition to 0x prefix if radix = 0 */ -#define ATOD_ACCEPT_BIN_OCT (1 << 2) -/* accept O prefix as octal if radix == 0 and properly formed (Annex B) */ -#define ATOD_ACCEPT_LEGACY_OCTAL (1 << 4) -/* accept _ between digits as a digit separator */ -#define ATOD_ACCEPT_UNDERSCORES (1 << 5) -/* allow a suffix to override the type */ -#define ATOD_ACCEPT_SUFFIX (1 << 6) -/* default type */ -#define ATOD_TYPE_MASK (1 << 7) -#define ATOD_TYPE_FLOAT64 (0 << 7) -#define ATOD_TYPE_BIG_INT (1 << 7) -/* accept -0x1 */ -#define ATOD_ACCEPT_PREFIX_AFTER_SIGN (1 << 10) - -static JSValue js_string_to_bigint(JSContext *ctx, const char *buf, - int radix, int flags, slimb_t *pexponent) -{ - bf_t a_s, *a = &a_s; - int ret; - JSValue val; - val = JS_NewBigInt(ctx); - if (JS_IsException(val)) - return val; - a = JS_GetBigInt(val); - ret = bf_atof(a, buf, NULL, radix, BF_PREC_INF, BF_RNDZ); - if (ret & BF_ST_MEM_ERROR) { - JS_FreeValue(ctx, val); - return JS_ThrowOutOfMemory(ctx); - } - val = JS_CompactBigInt1(ctx, val); - return val; -} - -/* return an exception in case of memory error. Return JS_NAN if - invalid syntax */ -static JSValue js_atof2(JSContext *ctx, const char *str, const char **pp, - int radix, int flags, slimb_t *pexponent) -{ - const char *p, *p_start; - int sep, is_neg; - BOOL is_float, has_legacy_octal; - int atod_type = flags & ATOD_TYPE_MASK; - char buf1[64], *buf; - int i, j, len; - BOOL buf_allocated = FALSE; - JSValue val; - - /* optional separator between digits */ - sep = (flags & ATOD_ACCEPT_UNDERSCORES) ? '_' : 256; - has_legacy_octal = FALSE; - - p = str; - p_start = p; - is_neg = 0; - if (p[0] == '+') { - p++; - p_start++; - if (!(flags & ATOD_ACCEPT_PREFIX_AFTER_SIGN)) - goto no_radix_prefix; - } else if (p[0] == '-') { - p++; - p_start++; - is_neg = 1; - if (!(flags & ATOD_ACCEPT_PREFIX_AFTER_SIGN)) - goto no_radix_prefix; - } - if (p[0] == '0') { - if ((p[1] == 'x' || p[1] == 'X') && - (radix == 0 || radix == 16)) { - p += 2; - radix = 16; - } else if ((p[1] == 'o' || p[1] == 'O') && - radix == 0 && (flags & ATOD_ACCEPT_BIN_OCT)) { - p += 2; - radix = 8; - } else if ((p[1] == 'b' || p[1] == 'B') && - radix == 0 && (flags & ATOD_ACCEPT_BIN_OCT)) { - p += 2; - radix = 2; - } else if ((p[1] >= '0' && p[1] <= '9') && - radix == 0 && (flags & ATOD_ACCEPT_LEGACY_OCTAL)) { - int i; - has_legacy_octal = TRUE; - sep = 256; - for (i = 1; (p[i] >= '0' && p[i] <= '7'); i++) - continue; - if (p[i] == '8' || p[i] == '9') - goto no_prefix; - p += 1; - radix = 8; - } else { - goto no_prefix; - } - /* there must be a digit after the prefix */ - if (to_digit((uint8_t)*p) >= radix) - goto fail; - no_prefix: ; - } else { - no_radix_prefix: - if (!(flags & ATOD_INT_ONLY) && - atod_type == ATOD_TYPE_FLOAT64 && - strstart(p, "Infinity", &p)) { - double d = INF; - if (is_neg) - d = -d; - val = js_float64(d); - goto done; - } - } - if (radix == 0) - radix = 10; - is_float = FALSE; - p_start = p; - while (to_digit((uint8_t)*p) < radix - || (*p == sep && (radix != 10 || - p != p_start + 1 || p[-1] != '0') && - to_digit((uint8_t)p[1]) < radix)) { - p++; - } - if (!(flags & ATOD_INT_ONLY)) { - if (*p == '.' && (p > p_start || to_digit((uint8_t)p[1]) < radix)) { - is_float = TRUE; - p++; - if (*p == sep) - goto fail; - while (to_digit((uint8_t)*p) < radix || - (*p == sep && to_digit((uint8_t)p[1]) < radix)) - p++; - } - if (p > p_start && - (((*p == 'e' || *p == 'E') && radix == 10) || - ((*p == 'p' || *p == 'P') && (radix == 2 || radix == 8 || radix == 16)))) { - const char *p1 = p + 1; - is_float = TRUE; - if (*p1 == '+') { - p1++; - } else if (*p1 == '-') { - p1++; - } - if (is_digit((uint8_t)*p1)) { - p = p1 + 1; - while (is_digit((uint8_t)*p) || (*p == sep && is_digit((uint8_t)p[1]))) - p++; - } - } - } - if (p == p_start) - goto fail; - - buf = buf1; - buf_allocated = FALSE; - len = p - p_start; - if (unlikely((len + 2) > sizeof(buf1))) { - buf = js_malloc_rt(ctx->rt, len + 2); /* no exception raised */ - if (!buf) - goto mem_error; - buf_allocated = TRUE; - } - /* remove the separators and the radix prefixes */ - j = 0; - if (is_neg) - buf[j++] = '-'; - for (i = 0; i < len; i++) { - if (p_start[i] != '_') - buf[j++] = p_start[i]; - } - buf[j] = '\0'; - - if (flags & ATOD_ACCEPT_SUFFIX) { - if (*p == 'n') { - p++; - atod_type = ATOD_TYPE_BIG_INT; - } else if (is_float && radix != 10) { - goto fail; - } - } else if ((atod_type == ATOD_TYPE_FLOAT64) && is_float && radix != 10) { - goto fail; - } - - switch(atod_type) { - case ATOD_TYPE_FLOAT64: - { - double d; - d = js_strtod(buf, radix, is_float); - /* return int or float64 */ - val = js_float64(d); - } - break; - case ATOD_TYPE_BIG_INT: - if (has_legacy_octal || is_float) - goto fail; - val = js_string_to_bigint(ctx, buf, radix, flags, NULL); - break; - default: - abort(); - } - -done: - if (buf_allocated) - js_free_rt(ctx->rt, buf); - if (pp) - *pp = p; - return val; - fail: - val = JS_NAN; - goto done; - mem_error: - val = JS_ThrowOutOfMemory(ctx); - goto done; -} - -static JSValue js_atof(JSContext *ctx, const char *str, const char **pp, - int radix, int flags) -{ - return js_atof2(ctx, str, pp, radix, flags, NULL); -} - -typedef enum JSToNumberHintEnum { - TON_FLAG_NUMBER, - TON_FLAG_NUMERIC, -} JSToNumberHintEnum; - -static JSValue JS_ToNumberHintFree(JSContext *ctx, JSValue val, - JSToNumberHintEnum flag) -{ - uint32_t tag; - JSValue ret; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_BIG_INT: - if (flag != TON_FLAG_NUMERIC) { - JS_FreeValue(ctx, val); - return JS_ThrowTypeError(ctx, "cannot convert bigint to number"); - } - ret = val; - break; - case JS_TAG_FLOAT64: - case JS_TAG_INT: - case JS_TAG_EXCEPTION: - ret = val; - break; - case JS_TAG_BOOL: - case JS_TAG_NULL: - ret = js_int32(JS_VALUE_GET_INT(val)); - break; - case JS_TAG_UNDEFINED: - ret = JS_NAN; - break; - case JS_TAG_OBJECT: - val = JS_ToPrimitiveFree(ctx, val, HINT_NUMBER); - if (JS_IsException(val)) - return JS_EXCEPTION; - goto redo; - case JS_TAG_STRING: - { - const char *str; - const char *p; - size_t len; - - str = JS_ToCStringLen(ctx, &len, val); - JS_FreeValue(ctx, val); - if (!str) - return JS_EXCEPTION; - p = str; - p += skip_spaces(p); - if ((p - str) == len) { - ret = js_int32(0); - } else { - int flags = ATOD_ACCEPT_BIN_OCT; - ret = js_atof(ctx, p, &p, 0, flags); - if (!JS_IsException(ret)) { - p += skip_spaces(p); - if ((p - str) != len) { - JS_FreeValue(ctx, ret); - ret = JS_NAN; - } - } - } - JS_FreeCString(ctx, str); - } - break; - case JS_TAG_SYMBOL: - JS_FreeValue(ctx, val); - return JS_ThrowTypeError(ctx, "cannot convert symbol to number"); - default: - JS_FreeValue(ctx, val); - ret = JS_NAN; - break; - } - return ret; -} - -static JSValue JS_ToNumberFree(JSContext *ctx, JSValue val) -{ - return JS_ToNumberHintFree(ctx, val, TON_FLAG_NUMBER); -} - -static JSValue JS_ToNumericFree(JSContext *ctx, JSValue val) -{ - return JS_ToNumberHintFree(ctx, val, TON_FLAG_NUMERIC); -} - -static JSValue JS_ToNumeric(JSContext *ctx, JSValue val) -{ - return JS_ToNumericFree(ctx, js_dup(val)); -} - -static __exception int __JS_ToFloat64Free(JSContext *ctx, double *pres, - JSValue val) -{ - double d; - uint32_t tag; - - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) { - *pres = JS_FLOAT64_NAN; - return -1; - } - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - d = JS_VALUE_GET_INT(val); - break; - case JS_TAG_FLOAT64: - d = JS_VALUE_GET_FLOAT64(val); - break; - case JS_TAG_BIG_INT: - { - JSBigInt *p = JS_VALUE_GET_PTR(val); - /* XXX: there can be a double rounding issue with some - primitives (such as JS_ToUint8ClampFree()), but it is - not critical to fix it. */ - bf_get_float64(&p->num, &d, BF_RNDN); - JS_FreeValue(ctx, val); - } - break; - default: - abort(); - } - *pres = d; - return 0; -} - -static inline int JS_ToFloat64Free(JSContext *ctx, double *pres, JSValue val) -{ - uint32_t tag; - - tag = JS_VALUE_GET_TAG(val); - if (tag <= JS_TAG_NULL) { - *pres = JS_VALUE_GET_INT(val); - return 0; - } else if (JS_TAG_IS_FLOAT64(tag)) { - *pres = JS_VALUE_GET_FLOAT64(val); - return 0; - } else { - return __JS_ToFloat64Free(ctx, pres, val); - } -} - -int JS_ToFloat64(JSContext *ctx, double *pres, JSValue val) -{ - return JS_ToFloat64Free(ctx, pres, js_dup(val)); -} - -static JSValue JS_ToNumber(JSContext *ctx, JSValue val) -{ - return JS_ToNumberFree(ctx, js_dup(val)); -} - -/* same as JS_ToNumber() but return 0 in case of NaN/Undefined */ -static __maybe_unused JSValue JS_ToIntegerFree(JSContext *ctx, JSValue val) -{ - uint32_t tag; - JSValue ret; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - ret = js_int32(JS_VALUE_GET_INT(val)); - break; - case JS_TAG_FLOAT64: - { - double d = JS_VALUE_GET_FLOAT64(val); - if (isnan(d)) { - ret = js_int32(0); - } else { - /* convert -0 to +0 */ - d = trunc(d) + 0.0; - ret = js_float64(d); - } - } - break; - default: - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) - return val; - goto redo; - } - return ret; -} - -/* Note: the integer value is satured to 32 bits */ -static int JS_ToInt32SatFree(JSContext *ctx, int *pres, JSValue val) -{ - uint32_t tag; - int ret; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - ret = JS_VALUE_GET_INT(val); - break; - case JS_TAG_EXCEPTION: - *pres = 0; - return -1; - case JS_TAG_FLOAT64: - { - double d = JS_VALUE_GET_FLOAT64(val); - if (isnan(d)) { - ret = 0; - } else { - if (d < INT32_MIN) - ret = INT32_MIN; - else if (d > INT32_MAX) - ret = INT32_MAX; - else - ret = (int)d; - } - } - break; - default: - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) { - *pres = 0; - return -1; - } - goto redo; - } - *pres = ret; - return 0; -} - -int JS_ToInt32Sat(JSContext *ctx, int *pres, JSValue val) -{ - return JS_ToInt32SatFree(ctx, pres, js_dup(val)); -} - -int JS_ToInt32Clamp(JSContext *ctx, int *pres, JSValue val, - int min, int max, int min_offset) -{ - int res = JS_ToInt32SatFree(ctx, pres, js_dup(val)); - if (res == 0) { - if (*pres < min) { - *pres += min_offset; - if (*pres < min) - *pres = min; - } else { - if (*pres > max) - *pres = max; - } - } - return res; -} - -static int JS_ToInt64SatFree(JSContext *ctx, int64_t *pres, JSValue val) -{ - uint32_t tag; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - *pres = JS_VALUE_GET_INT(val); - return 0; - case JS_TAG_EXCEPTION: - *pres = 0; - return -1; - case JS_TAG_FLOAT64: - { - double d = JS_VALUE_GET_FLOAT64(val); - if (isnan(d)) { - *pres = 0; - } else { - if (d < INT64_MIN) - *pres = INT64_MIN; - else if (d >= 0x1p63) - *pres = INT64_MAX; - else - *pres = (int64_t)d; - } - } - return 0; - default: - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) { - *pres = 0; - return -1; - } - goto redo; - } -} - -int JS_ToInt64Sat(JSContext *ctx, int64_t *pres, JSValue val) -{ - return JS_ToInt64SatFree(ctx, pres, js_dup(val)); -} - -int JS_ToInt64Clamp(JSContext *ctx, int64_t *pres, JSValue val, - int64_t min, int64_t max, int64_t neg_offset) -{ - int res = JS_ToInt64SatFree(ctx, pres, js_dup(val)); - if (res == 0) { - if (*pres < 0) - *pres += neg_offset; - if (*pres < min) - *pres = min; - else if (*pres > max) - *pres = max; - } - return res; -} - -/* Same as JS_ToInt32Free() but with a 64 bit result. Return (<0, 0) - in case of exception */ -static int JS_ToInt64Free(JSContext *ctx, int64_t *pres, JSValue val) -{ - uint32_t tag; - int64_t ret; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - ret = JS_VALUE_GET_INT(val); - break; - case JS_TAG_FLOAT64: - { - JSFloat64Union u; - double d; - int e; - d = JS_VALUE_GET_FLOAT64(val); - u.d = d; - /* we avoid doing fmod(x, 2^64) */ - e = (u.u64 >> 52) & 0x7ff; - if (likely(e <= (1023 + 62))) { - /* fast case */ - ret = (int64_t)d; - } else if (e <= (1023 + 62 + 53)) { - uint64_t v; - /* remainder modulo 2^64 */ - v = (u.u64 & (((uint64_t)1 << 52) - 1)) | ((uint64_t)1 << 52); - ret = v << ((e - 1023) - 52); - /* take the sign into account */ - if (u.u64 >> 63) - if (ret != INT64_MIN) - ret = -ret; - } else { - ret = 0; /* also handles NaN and +inf */ - } - } - break; - default: - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) { - *pres = 0; - return -1; - } - goto redo; - } - *pres = ret; - return 0; -} - -int JS_ToInt64(JSContext *ctx, int64_t *pres, JSValue val) -{ - return JS_ToInt64Free(ctx, pres, js_dup(val)); -} - -int JS_ToInt64Ext(JSContext *ctx, int64_t *pres, JSValue val) -{ - if (JS_IsBigInt(ctx, val)) - return JS_ToBigInt64(ctx, pres, val); - else - return JS_ToInt64(ctx, pres, val); -} - -/* return (<0, 0) in case of exception */ -static int JS_ToInt32Free(JSContext *ctx, int32_t *pres, JSValue val) -{ - uint32_t tag; - int32_t ret; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - ret = JS_VALUE_GET_INT(val); - break; - case JS_TAG_FLOAT64: - { - JSFloat64Union u; - double d; - int e; - d = JS_VALUE_GET_FLOAT64(val); - u.d = d; - /* we avoid doing fmod(x, 2^32) */ - e = (u.u64 >> 52) & 0x7ff; - if (likely(e <= (1023 + 30))) { - /* fast case */ - ret = (int32_t)d; - } else if (e <= (1023 + 30 + 53)) { - uint64_t v; - /* remainder modulo 2^32 */ - v = (u.u64 & (((uint64_t)1 << 52) - 1)) | ((uint64_t)1 << 52); - v = v << ((e - 1023) - 52 + 32); - ret = v >> 32; - /* take the sign into account */ - if (u.u64 >> 63) - if (ret != INT32_MIN) - ret = -ret; - } else { - ret = 0; /* also handles NaN and +inf */ - } - } - break; - default: - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) { - *pres = 0; - return -1; - } - goto redo; - } - *pres = ret; - return 0; -} - -int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValue val) -{ - return JS_ToInt32Free(ctx, pres, js_dup(val)); -} - -static inline int JS_ToUint32Free(JSContext *ctx, uint32_t *pres, JSValue val) -{ - return JS_ToInt32Free(ctx, (int32_t *)pres, val); -} - -static int JS_ToUint8ClampFree(JSContext *ctx, int32_t *pres, JSValue val) -{ - uint32_t tag; - int res; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - res = JS_VALUE_GET_INT(val); - res = max_int(0, min_int(255, res)); - break; - case JS_TAG_FLOAT64: - { - double d = JS_VALUE_GET_FLOAT64(val); - if (isnan(d)) { - res = 0; - } else { - if (d < 0) - res = 0; - else if (d > 255) - res = 255; - else - res = lrint(d); - } - } - break; - default: - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) { - *pres = 0; - return -1; - } - goto redo; - } - *pres = res; - return 0; -} - -static __exception int JS_ToArrayLengthFree(JSContext *ctx, uint32_t *plen, - JSValue val, BOOL is_array_ctor) -{ - uint32_t tag, len; - - tag = JS_VALUE_GET_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - { - int v; - v = JS_VALUE_GET_INT(val); - if (v < 0) - goto fail; - len = v; - } - break; - case JS_TAG_BIG_INT: - { - JSBigInt *p = JS_VALUE_GET_PTR(val); - bf_t a; - BOOL res; - bf_get_int32((int32_t *)&len, &p->num, BF_GET_INT_MOD); - bf_init(ctx->bf_ctx, &a); - bf_set_ui(&a, len); - res = bf_cmp_eq(&a, &p->num); - bf_delete(&a); - JS_FreeValue(ctx, val); - if (!res) - goto fail; - } - break; - default: - if (JS_TAG_IS_FLOAT64(tag)) { - double d; - d = JS_VALUE_GET_FLOAT64(val); - len = (uint32_t)d; - if (len != d) - goto fail; - } else { - uint32_t len1; - - if (is_array_ctor) { - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) - return -1; - /* cannot recurse because val is a number */ - if (JS_ToArrayLengthFree(ctx, &len, val, TRUE)) - return -1; - } else { - /* legacy behavior: must do the conversion twice and compare */ - if (JS_ToUint32(ctx, &len, val)) { - JS_FreeValue(ctx, val); - return -1; - } - val = JS_ToNumberFree(ctx, val); - if (JS_IsException(val)) - return -1; - /* cannot recurse because val is a number */ - if (JS_ToArrayLengthFree(ctx, &len1, val, FALSE)) - return -1; - if (len1 != len) { - fail: - JS_ThrowRangeError(ctx, "invalid array length"); - return -1; - } - } - } - break; - } - *plen = len; - return 0; -} - -#define MAX_SAFE_INTEGER (((int64_t)1 << 53) - 1) - -static BOOL is_safe_integer(double d) -{ - return isfinite(d) && floor(d) == d && - fabs(d) <= (double)MAX_SAFE_INTEGER; -} - -int JS_ToIndex(JSContext *ctx, uint64_t *plen, JSValue val) -{ - int64_t v; - if (JS_ToInt64Sat(ctx, &v, val)) - return -1; - if (v < 0 || v > MAX_SAFE_INTEGER) { - JS_ThrowRangeError(ctx, "invalid array index"); - *plen = 0; - return -1; - } - *plen = v; - return 0; -} - -/* convert a value to a length between 0 and MAX_SAFE_INTEGER. - return -1 for exception */ -static __exception int JS_ToLengthFree(JSContext *ctx, int64_t *plen, - JSValue val) -{ - int res = JS_ToInt64Clamp(ctx, plen, val, 0, MAX_SAFE_INTEGER, 0); - JS_FreeValue(ctx, val); - return res; -} - -/* Note: can return an exception */ -static int JS_NumberIsInteger(JSContext *ctx, JSValue val) -{ - double d; - if (!JS_IsNumber(val)) - return FALSE; - if (unlikely(JS_ToFloat64(ctx, &d, val))) - return -1; - return isfinite(d) && floor(d) == d; -} - -static BOOL JS_NumberIsNegativeOrMinusZero(JSContext *ctx, JSValue val) -{ - uint32_t tag; - - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - { - int v; - v = JS_VALUE_GET_INT(val); - return (v < 0); - } - case JS_TAG_FLOAT64: - { - JSFloat64Union u; - u.d = JS_VALUE_GET_FLOAT64(val); - return (u.u64 >> 63); - } - case JS_TAG_BIG_INT: - { - JSBigInt *p = JS_VALUE_GET_PTR(val); - /* Note: integer zeros are not necessarily positive */ - return p->num.sign && !bf_is_zero(&p->num); - } - default: - return FALSE; - } -} - -static JSValue js_bigint_to_string1(JSContext *ctx, JSValue val, int radix) -{ - JSValue ret; - bf_t a_s, *a; - char *str; - int saved_sign; - - a = JS_ToBigInt(ctx, &a_s, val); - if (!a) - return JS_EXCEPTION; - saved_sign = a->sign; - if (a->expn == BF_EXP_ZERO) - a->sign = 0; - str = bf_ftoa(NULL, a, radix, 0, BF_RNDZ | BF_FTOA_FORMAT_FRAC | - BF_FTOA_JS_QUIRKS); - a->sign = saved_sign; - JS_FreeBigInt(ctx, a, &a_s); - if (!str) - return JS_ThrowOutOfMemory(ctx); - ret = JS_NewString(ctx, str); - bf_free(ctx->bf_ctx, str); - return ret; -} - -static JSValue js_bigint_to_string(JSContext *ctx, JSValue val) -{ - return js_bigint_to_string1(ctx, val, 10); -} - -/* 2 <= base <= 36 */ -static char *i64toa(char *buf_end, int64_t n, unsigned int base) -{ - char *q = buf_end; - int digit, is_neg; - - is_neg = 0; - if (n < 0) { - is_neg = 1; - n = -n; - } - *--q = '\0'; - do { - digit = (uint64_t)n % base; - n = (uint64_t)n / base; - if (digit < 10) - digit += '0'; - else - digit += 'a' - 10; - *--q = digit; - } while (n != 0); - if (is_neg) - *--q = '-'; - return q; -} - -/* buf1 contains the printf result */ -static void js_ecvt1(double d, int n_digits, int *decpt, int *sign, char *buf, - int rounding_mode, char *buf1, int buf1_size) -{ - if (rounding_mode != FE_TONEAREST) - fesetround(rounding_mode); - snprintf(buf1, buf1_size, "%+.*e", n_digits - 1, d); - if (rounding_mode != FE_TONEAREST) - fesetround(FE_TONEAREST); - *sign = (buf1[0] == '-'); - /* mantissa */ - buf[0] = buf1[1]; - if (n_digits > 1) - memcpy(buf + 1, buf1 + 3, n_digits - 1); - buf[n_digits] = '\0'; - /* exponent */ - *decpt = atoi(buf1 + n_digits + 2 + (n_digits > 1)) + 1; -} - -/* maximum buffer size for js_dtoa */ -#define JS_DTOA_BUF_SIZE 128 - -/* needed because ecvt usually limits the number of digits to - 17. Return the number of digits. */ -static int js_ecvt(double d, int n_digits, int *decpt, int *sign, char *buf, - BOOL is_fixed) -{ - int rounding_mode; - char buf_tmp[JS_DTOA_BUF_SIZE]; - - if (!is_fixed) { - unsigned int n_digits_min, n_digits_max; - /* find the minimum amount of digits (XXX: inefficient but simple) */ - n_digits_min = 1; - n_digits_max = 17; - while (n_digits_min < n_digits_max) { - n_digits = (n_digits_min + n_digits_max) / 2; - js_ecvt1(d, n_digits, decpt, sign, buf, FE_TONEAREST, - buf_tmp, sizeof(buf_tmp)); - if (strtod(buf_tmp, NULL) == d) { - /* no need to keep the trailing zeros */ - while (n_digits >= 2 && buf[n_digits - 1] == '0') - n_digits--; - n_digits_max = n_digits; - } else { - n_digits_min = n_digits + 1; - } - } - n_digits = n_digits_max; - rounding_mode = FE_TONEAREST; - } else { - rounding_mode = FE_TONEAREST; -#ifdef CONFIG_PRINTF_RNDN - { - char buf1[JS_DTOA_BUF_SIZE], buf2[JS_DTOA_BUF_SIZE]; - int decpt1, sign1, decpt2, sign2; - /* The JS rounding is specified as round to nearest ties away - from zero (RNDNA), but in printf the "ties" case is not - specified (for example it is RNDN for glibc, RNDNA for - Windows), so we must round manually. */ - js_ecvt1(d, n_digits + 1, &decpt1, &sign1, buf1, FE_TONEAREST, - buf_tmp, sizeof(buf_tmp)); - /* XXX: could use 2 digits to reduce the average running time */ - if (buf1[n_digits] == '5') { - js_ecvt1(d, n_digits + 1, &decpt1, &sign1, buf1, FE_DOWNWARD, - buf_tmp, sizeof(buf_tmp)); - js_ecvt1(d, n_digits + 1, &decpt2, &sign2, buf2, FE_UPWARD, - buf_tmp, sizeof(buf_tmp)); - if (memcmp(buf1, buf2, n_digits + 1) == 0 && decpt1 == decpt2) { - /* exact result: round away from zero */ - if (sign1) - rounding_mode = FE_DOWNWARD; - else - rounding_mode = FE_UPWARD; - } - } - } -#endif /* CONFIG_PRINTF_RNDN */ - } - js_ecvt1(d, n_digits, decpt, sign, buf, rounding_mode, - buf_tmp, sizeof(buf_tmp)); - return n_digits; -} - -static int js_fcvt1(char (*buf)[JS_DTOA_BUF_SIZE], double d, int n_digits, - int rounding_mode) -{ - int n; - if (rounding_mode != FE_TONEAREST) - fesetround(rounding_mode); - n = snprintf(*buf, sizeof(*buf), "%.*f", n_digits, d); - if (rounding_mode != FE_TONEAREST) - fesetround(FE_TONEAREST); - assert(n < sizeof(*buf)); - return n; -} - -static void js_fcvt(char (*buf)[JS_DTOA_BUF_SIZE], double d, int n_digits) -{ - int rounding_mode; - rounding_mode = FE_TONEAREST; -#ifdef CONFIG_PRINTF_RNDN - { - int n1, n2; - char buf1[JS_DTOA_BUF_SIZE]; - char buf2[JS_DTOA_BUF_SIZE]; - - /* The JS rounding is specified as round to nearest ties away from - zero (RNDNA), but in printf the "ties" case is not specified - (for example it is RNDN for glibc, RNDNA for Windows), so we - must round manually. */ - n1 = js_fcvt1(&buf1, d, n_digits + 1, FE_TONEAREST); - rounding_mode = FE_TONEAREST; - /* XXX: could use 2 digits to reduce the average running time */ - if (buf1[n1 - 1] == '5') { - n1 = js_fcvt1(&buf1, d, n_digits + 1, FE_DOWNWARD); - n2 = js_fcvt1(&buf2, d, n_digits + 1, FE_UPWARD); - if (n1 == n2 && memcmp(buf1, buf2, n1) == 0) { - /* exact result: round away from zero */ - if (buf1[0] == '-') - rounding_mode = FE_DOWNWARD; - else - rounding_mode = FE_UPWARD; - } - } - } -#endif /* CONFIG_PRINTF_RNDN */ - js_fcvt1(buf, d, n_digits, rounding_mode); -} - -/* radix != 10 is only supported with flags = JS_DTOA_VAR_FORMAT */ -/* use as many digits as necessary */ -#define JS_DTOA_VAR_FORMAT (0 << 0) -/* use n_digits significant digits (1 <= n_digits <= 101) */ -#define JS_DTOA_FIXED_FORMAT (1 << 0) -/* force fractional format: [-]dd.dd with n_digits fractional digits */ -#define JS_DTOA_FRAC_FORMAT (2 << 0) -/* force exponential notation either in fixed or variable format */ -#define JS_DTOA_FORCE_EXP (1 << 2) - -/* XXX: slow and maybe not fully correct. Use libbf when it is fast enough. - XXX: radix != 10 is only supported for small integers -*/ -static void js_dtoa1(char (*buf)[JS_DTOA_BUF_SIZE], double d, - int radix, int n_digits, int flags) -{ - char *q; - - if (!isfinite(d)) { - if (isnan(d)) { - pstrcpy(*buf, sizeof(*buf), "NaN"); - } else if (d < 0) { - pstrcpy(*buf, sizeof(*buf), "-Infinity"); - } else { - pstrcpy(*buf, sizeof(*buf), "Infinity"); - } - } else if (flags == JS_DTOA_VAR_FORMAT) { - int64_t i64; - char buf1[70], *ptr; - if (d > (double)MAX_SAFE_INTEGER || d < (double)-MAX_SAFE_INTEGER) - goto generic_conv; - i64 = (int64_t)d; - if (d != i64) - goto generic_conv; - /* fast path for integers */ - ptr = i64toa(buf1 + sizeof(buf1), i64, radix); - pstrcpy(*buf, sizeof(*buf), ptr); - } else { - if (d == 0.0) - d = 0.0; /* convert -0 to 0 */ - if (flags == JS_DTOA_FRAC_FORMAT) { - js_fcvt(buf, d, n_digits); - } else { - char buf1[JS_DTOA_BUF_SIZE]; - int sign, decpt, k, n, i, p, n_max; - BOOL is_fixed; - generic_conv: - is_fixed = ((flags & 3) == JS_DTOA_FIXED_FORMAT); - if (is_fixed) { - n_max = n_digits; - } else { - n_max = 21; - } - /* the number has k digits (k >= 1) */ - k = js_ecvt(d, n_digits, &decpt, &sign, buf1, is_fixed); - n = decpt; /* d=10^(n-k)*(buf1) i.e. d= < x.yyyy 10^(n-1) */ - q = *buf; - if (sign) - *q++ = '-'; - if (flags & JS_DTOA_FORCE_EXP) - goto force_exp; - if (n >= 1 && n <= n_max) { - if (k <= n) { - memcpy(q, buf1, k); - q += k; - for(i = 0; i < (n - k); i++) - *q++ = '0'; - *q = '\0'; - } else { - /* k > n */ - memcpy(q, buf1, n); - q += n; - *q++ = '.'; - for(i = 0; i < (k - n); i++) - *q++ = buf1[n + i]; - *q = '\0'; - } - } else if (n >= -5 && n <= 0) { - *q++ = '0'; - *q++ = '.'; - for(i = 0; i < -n; i++) - *q++ = '0'; - memcpy(q, buf1, k); - q += k; - *q = '\0'; - } else { - force_exp: - /* exponential notation */ - *q++ = buf1[0]; - if (k > 1) { - *q++ = '.'; - for(i = 1; i < k; i++) - *q++ = buf1[i]; - } - *q++ = 'e'; - p = n - 1; - if (p >= 0) - *q++ = '+'; - snprintf(q, *buf + sizeof(*buf) - q, "%d", p); - } - } - } -} - -static JSValue js_dtoa(JSContext *ctx, - double d, int radix, int n_digits, int flags) -{ - char buf[JS_DTOA_BUF_SIZE]; - js_dtoa1(&buf, d, radix, n_digits, flags); - return JS_NewString(ctx, buf); -} - -JSValue JS_ToStringInternal(JSContext *ctx, JSValue val, BOOL is_ToPropertyKey) -{ - uint32_t tag; - const char *str; - char buf[32]; - - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_STRING: - return js_dup(val); - case JS_TAG_INT: - snprintf(buf, sizeof(buf), "%d", JS_VALUE_GET_INT(val)); - str = buf; - goto new_string; - case JS_TAG_BOOL: - return JS_AtomToString(ctx, JS_VALUE_GET_BOOL(val) ? - JS_ATOM_true : JS_ATOM_false); - case JS_TAG_NULL: - return JS_AtomToString(ctx, JS_ATOM_null); - case JS_TAG_UNDEFINED: - return JS_AtomToString(ctx, JS_ATOM_undefined); - case JS_TAG_EXCEPTION: - return JS_EXCEPTION; - case JS_TAG_OBJECT: - { - JSValue val1, ret; - val1 = JS_ToPrimitive(ctx, val, HINT_STRING); - if (JS_IsException(val1)) - return val1; - ret = JS_ToStringInternal(ctx, val1, is_ToPropertyKey); - JS_FreeValue(ctx, val1); - return ret; - } - break; - case JS_TAG_FUNCTION_BYTECODE: - str = "[function bytecode]"; - goto new_string; - case JS_TAG_SYMBOL: - if (is_ToPropertyKey) { - return js_dup(val); - } else { - return JS_ThrowTypeError(ctx, "cannot convert symbol to string"); - } - case JS_TAG_FLOAT64: - return js_dtoa(ctx, JS_VALUE_GET_FLOAT64(val), 10, 0, - JS_DTOA_VAR_FORMAT); - case JS_TAG_BIG_INT: - return js_bigint_to_string(ctx, val); - default: - str = "[unsupported type]"; - new_string: - return JS_NewString(ctx, str); - } -} - -JSValue JS_ToString(JSContext *ctx, JSValue val) -{ - return JS_ToStringInternal(ctx, val, FALSE); -} - -static JSValue JS_ToStringFree(JSContext *ctx, JSValue val) -{ - JSValue ret; - ret = JS_ToString(ctx, val); - JS_FreeValue(ctx, val); - return ret; -} - -static JSValue JS_ToLocaleStringFree(JSContext *ctx, JSValue val) -{ - if (JS_IsUndefined(val) || JS_IsNull(val)) - return JS_ToStringFree(ctx, val); - return JS_InvokeFree(ctx, val, JS_ATOM_toLocaleString, 0, NULL); -} - -JSValue JS_ToPropertyKey(JSContext *ctx, JSValue val) -{ - return JS_ToStringInternal(ctx, val, TRUE); -} - -static JSValue JS_ToStringCheckObject(JSContext *ctx, JSValue val) -{ - uint32_t tag = JS_VALUE_GET_TAG(val); - if (tag == JS_TAG_NULL || tag == JS_TAG_UNDEFINED) - return JS_ThrowTypeError(ctx, "null or undefined are forbidden"); - return JS_ToString(ctx, val); -} - -static JSValue JS_ToQuotedString(JSContext *ctx, JSValue val1) -{ - JSValue val; - JSString *p; - int i; - uint32_t c; - StringBuffer b_s, *b = &b_s; - char buf[16]; - - val = JS_ToStringCheckObject(ctx, val1); - if (JS_IsException(val)) - return val; - p = JS_VALUE_GET_STRING(val); - - if (string_buffer_init(ctx, b, p->len + 2)) - goto fail; - - if (string_buffer_putc8(b, '\"')) - goto fail; - for(i = 0; i < p->len; ) { - c = string_getc(p, &i); - switch(c) { - case '\t': - c = 't'; - goto quote; - case '\r': - c = 'r'; - goto quote; - case '\n': - c = 'n'; - goto quote; - case '\b': - c = 'b'; - goto quote; - case '\f': - c = 'f'; - goto quote; - case '\"': - case '\\': - quote: - if (string_buffer_putc8(b, '\\')) - goto fail; - if (string_buffer_putc8(b, c)) - goto fail; - break; - default: - if (c < 32 || is_hi_surrogate(c) || is_lo_surrogate(c)) { - snprintf(buf, sizeof(buf), "\\u%04x", c); - if (string_buffer_puts8(b, buf)) - goto fail; - } else { - if (string_buffer_putc(b, c)) - goto fail; - } - break; - } - } - if (string_buffer_putc8(b, '\"')) - goto fail; - JS_FreeValue(ctx, val); - return string_buffer_end(b); - fail: - JS_FreeValue(ctx, val); - string_buffer_free(b); - return JS_EXCEPTION; -} - -static __maybe_unused void JS_DumpObjectHeader(JSRuntime *rt) -{ - printf("%14s %4s %4s %14s %10s %s\n", - "ADDRESS", "REFS", "SHRF", "PROTO", "CLASS", "PROPS"); -} - -/* for debug only: dump an object without side effect */ -static __maybe_unused void JS_DumpObject(JSRuntime *rt, JSObject *p) -{ - uint32_t i; - char atom_buf[ATOM_GET_STR_BUF_SIZE]; - JSShape *sh; - JSShapeProperty *prs; - JSProperty *pr; - BOOL is_first = TRUE; - - /* XXX: should encode atoms with special characters */ - sh = p->shape; /* the shape can be NULL while freeing an object */ - printf("%14p %4d ", - (void *)p, - p->header.ref_count); - if (sh) { - printf("%3d%c %14p ", - sh->header.ref_count, - " *"[sh->is_hashed], - (void *)sh->proto); - } else { - printf("%3s %14s ", "-", "-"); - } - printf("%10s ", - JS_AtomGetStrRT(rt, atom_buf, sizeof(atom_buf), rt->class_array[p->class_id].class_name)); - if (p->is_exotic && p->fast_array) { - printf("[ "); - for(i = 0; i < p->u.array.count; i++) { - if (i != 0) - printf(", "); - switch (p->class_id) { - case JS_CLASS_ARRAY: - case JS_CLASS_ARGUMENTS: - JS_DumpValueShort(rt, p->u.array.u.values[i]); - break; - case JS_CLASS_UINT8C_ARRAY: - case JS_CLASS_INT8_ARRAY: - case JS_CLASS_UINT8_ARRAY: - case JS_CLASS_INT16_ARRAY: - case JS_CLASS_UINT16_ARRAY: - case JS_CLASS_INT32_ARRAY: - case JS_CLASS_UINT32_ARRAY: - case JS_CLASS_BIG_INT64_ARRAY: - case JS_CLASS_BIG_UINT64_ARRAY: - case JS_CLASS_FLOAT32_ARRAY: - case JS_CLASS_FLOAT64_ARRAY: - { - int size = 1 << typed_array_size_log2(p->class_id); - const uint8_t *b = p->u.array.u.uint8_ptr + i * size; - while (size-- > 0) - printf("%02X", *b++); - } - break; - } - } - printf(" ] "); - } - - if (sh) { - printf("{ "); - for(i = 0, prs = get_shape_prop(sh); i < sh->prop_count; i++, prs++) { - if (prs->atom != JS_ATOM_NULL) { - pr = &p->prop[i]; - if (!is_first) - printf(", "); - printf("%s: ", - JS_AtomGetStrRT(rt, atom_buf, sizeof(atom_buf), prs->atom)); - if ((prs->flags & JS_PROP_TMASK) == JS_PROP_GETSET) { - printf("[getset %p %p]", (void *)pr->u.getset.getter, - (void *)pr->u.getset.setter); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_VARREF) { - printf("[varref %p]", (void *)pr->u.var_ref); - } else if ((prs->flags & JS_PROP_TMASK) == JS_PROP_AUTOINIT) { - printf("[autoinit %p %d %p]", - (void *)js_autoinit_get_realm(pr), - js_autoinit_get_id(pr), - (void *)pr->u.init.opaque); - } else { - JS_DumpValueShort(rt, pr->u.value); - } - is_first = FALSE; - } - } - printf(" }"); - } - - if (js_class_has_bytecode(p->class_id)) { - JSFunctionBytecode *b = p->u.func.function_bytecode; - JSVarRef **var_refs; - if (b->closure_var_count) { - var_refs = p->u.func.var_refs; - printf(" Closure:"); - for(i = 0; i < b->closure_var_count; i++) { - printf(" "); - JS_DumpValueShort(rt, var_refs[i]->value); - } - if (p->u.func.home_object) { - printf(" HomeObject: "); - JS_DumpValueShort(rt, JS_MKPTR(JS_TAG_OBJECT, p->u.func.home_object)); - } - } - } - printf("\n"); -} - -static __maybe_unused void JS_DumpGCObject(JSRuntime *rt, JSGCObjectHeader *p) -{ - if (p->gc_obj_type == JS_GC_OBJ_TYPE_JS_OBJECT) { - JS_DumpObject(rt, (JSObject *)p); - } else { - printf("%14p %4d ", - (void *)p, - p->ref_count); - switch(p->gc_obj_type) { - case JS_GC_OBJ_TYPE_FUNCTION_BYTECODE: - printf("[function bytecode]"); - break; - case JS_GC_OBJ_TYPE_SHAPE: - printf("[shape]"); - break; - case JS_GC_OBJ_TYPE_VAR_REF: - printf("[var_ref]"); - break; - case JS_GC_OBJ_TYPE_ASYNC_FUNCTION: - printf("[async_function]"); - break; - case JS_GC_OBJ_TYPE_JS_CONTEXT: - printf("[js_context]"); - break; - default: - printf("[unknown %d]", p->gc_obj_type); - break; - } - printf("\n"); - } -} - -static __maybe_unused void JS_DumpValueShort(JSRuntime *rt, - JSValue val) -{ - uint32_t tag = JS_VALUE_GET_NORM_TAG(val); - const char *str; - - switch(tag) { - case JS_TAG_INT: - printf("%d", JS_VALUE_GET_INT(val)); - break; - case JS_TAG_BOOL: - if (JS_VALUE_GET_BOOL(val)) - str = "true"; - else - str = "false"; - goto print_str; - case JS_TAG_NULL: - str = "null"; - goto print_str; - case JS_TAG_EXCEPTION: - str = "exception"; - goto print_str; - case JS_TAG_UNINITIALIZED: - str = "uninitialized"; - goto print_str; - case JS_TAG_UNDEFINED: - str = "undefined"; - print_str: - printf("%s", str); - break; - case JS_TAG_FLOAT64: - printf("%.14g", JS_VALUE_GET_FLOAT64(val)); - break; - case JS_TAG_BIG_INT: - { - JSBigInt *p = JS_VALUE_GET_PTR(val); - char *str; - str = bf_ftoa(NULL, &p->num, 10, 0, - BF_RNDZ | BF_FTOA_FORMAT_FRAC); - printf("%sn", str); - bf_realloc(&rt->bf_ctx, str, 0); - } - break; - case JS_TAG_STRING: - { - JSString *p; - p = JS_VALUE_GET_STRING(val); - JS_DumpString(rt, p); - } - break; - case JS_TAG_FUNCTION_BYTECODE: - { - JSFunctionBytecode *b = JS_VALUE_GET_PTR(val); - char buf[ATOM_GET_STR_BUF_SIZE]; - printf("[bytecode %s]", JS_AtomGetStrRT(rt, buf, sizeof(buf), b->func_name)); - } - break; - case JS_TAG_OBJECT: - { - JSObject *p = JS_VALUE_GET_OBJ(val); - JSAtom atom = rt->class_array[p->class_id].class_name; - char atom_buf[ATOM_GET_STR_BUF_SIZE]; - printf("[%s %p]", - JS_AtomGetStrRT(rt, atom_buf, sizeof(atom_buf), atom), (void *)p); - } - break; - case JS_TAG_SYMBOL: - { - JSAtomStruct *p = JS_VALUE_GET_PTR(val); - char atom_buf[ATOM_GET_STR_BUF_SIZE]; - printf("Symbol(%s)", - JS_AtomGetStrRT(rt, atom_buf, sizeof(atom_buf), js_get_atom_index(rt, p))); - } - break; - case JS_TAG_MODULE: - printf("[module]"); - break; - default: - printf("[unknown tag %d]", tag); - break; - } -} - -static __maybe_unused void JS_DumpValue(JSContext *ctx, - JSValue val) -{ - JS_DumpValueShort(ctx->rt, val); -} - -static __maybe_unused void JS_PrintValue(JSContext *ctx, - const char *str, - JSValue val) -{ - printf("%s=", str); - JS_DumpValueShort(ctx->rt, val); - printf("\n"); -} - -/* return -1 if exception (proxy case) or TRUE/FALSE */ -int JS_IsArray(JSContext *ctx, JSValue val) -{ - JSObject *p; - if (JS_VALUE_GET_TAG(val) == JS_TAG_OBJECT) { - p = JS_VALUE_GET_OBJ(val); - if (unlikely(p->class_id == JS_CLASS_PROXY)) - return js_proxy_isArray(ctx, val); - else - return p->class_id == JS_CLASS_ARRAY; - } else { - return FALSE; - } -} - -static double js_pow(double a, double b) -{ - if (unlikely(!isfinite(b)) && fabs(a) == 1) { - /* not compatible with IEEE 754 */ - return JS_FLOAT64_NAN; - } else { - return pow(a, b); - } -} - -JSValue JS_NewFloat64(JSContext *ctx, double d) -{ - return js_float64(d); -} - -JSValue JS_NewBigInt64_1(JSContext *ctx, int64_t v) -{ - JSValue val; - bf_t *a; - val = JS_NewBigInt(ctx); - if (JS_IsException(val)) - return val; - a = JS_GetBigInt(val); - if (bf_set_si(a, v)) { - JS_FreeValue(ctx, val); - return JS_ThrowOutOfMemory(ctx); - } - return val; -} - -JSValue JS_NewBigInt64(JSContext *ctx, int64_t v) -{ - return JS_NewBigInt64_1(ctx, v); -} - -JSValue JS_NewBigUint64(JSContext *ctx, uint64_t v) -{ - JSValue val; - bf_t *a; - val = JS_NewBigInt(ctx); - if (JS_IsException(val)) - return val; - a = JS_GetBigInt(val); - if (bf_set_ui(a, v)) { - JS_FreeValue(ctx, val); - return JS_ThrowOutOfMemory(ctx); - } - - return val; -} - -/* if the returned bigint is allocated it is equal to - 'buf'. Otherwise it is a pointer to the bigint in 'val'. Return - NULL in case of error. */ -// TODO(bnoordhuis) Merge with JS_ToBigInt() -static bf_t *JS_ToBigInt1(JSContext *ctx, bf_t *buf, JSValue val) -{ - uint32_t tag; - bf_t *r; - JSBigInt *p; - - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: - r = buf; - bf_init(ctx->bf_ctx, r); - if (bf_set_si(r, JS_VALUE_GET_INT(val))) - goto fail; - break; - case JS_TAG_FLOAT64: - r = buf; - bf_init(ctx->bf_ctx, r); - if (bf_set_float64(r, JS_VALUE_GET_FLOAT64(val))) { - fail: - bf_delete(r); - return NULL; - } - break; - case JS_TAG_BIG_INT: - p = JS_VALUE_GET_PTR(val); - r = &p->num; - break; - case JS_TAG_UNDEFINED: - default: - r = buf; - bf_init(ctx->bf_ctx, r); - bf_set_nan(r); - break; - } - return r; -} - -/* return NaN if bad bigint literal */ -static JSValue JS_StringToBigInt(JSContext *ctx, JSValue val) -{ - const char *str, *p; - size_t len; - int flags; - - str = JS_ToCStringLen(ctx, &len, val); - JS_FreeValue(ctx, val); - if (!str) - return JS_EXCEPTION; - p = str; - p += skip_spaces(p); - if ((p - str) == len) { - val = JS_NewBigInt64(ctx, 0); - } else { - flags = ATOD_INT_ONLY | ATOD_ACCEPT_BIN_OCT | ATOD_TYPE_BIG_INT; - val = js_atof(ctx, p, &p, 0, flags); - p += skip_spaces(p); - if (!JS_IsException(val)) { - if ((p - str) != len) { - JS_FreeValue(ctx, val); - val = JS_NAN; - } - } - } - JS_FreeCString(ctx, str); - return val; -} - -static JSValue JS_StringToBigIntErr(JSContext *ctx, JSValue val) -{ - val = JS_StringToBigInt(ctx, val); - if (JS_VALUE_IS_NAN(val)) - return JS_ThrowSyntaxError(ctx, "invalid bigint literal"); - return val; -} - -/* if the returned bigint is allocated it is equal to - 'buf'. Otherwise it is a pointer to the bigint in 'val'. */ -static bf_t *JS_ToBigIntFree(JSContext *ctx, bf_t *buf, JSValue val) -{ - uint32_t tag; - bf_t *r; - JSBigInt *p; - - redo: - tag = JS_VALUE_GET_NORM_TAG(val); - switch(tag) { - case JS_TAG_INT: - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - case JS_TAG_FLOAT64: - goto fail; - case JS_TAG_BOOL: - r = buf; - bf_init(ctx->bf_ctx, r); - bf_set_si(r, JS_VALUE_GET_INT(val)); - break; - case JS_TAG_BIG_INT: - p = JS_VALUE_GET_PTR(val); - r = &p->num; - break; - case JS_TAG_STRING: - val = JS_StringToBigIntErr(ctx, val); - if (JS_IsException(val)) - return NULL; - goto redo; - case JS_TAG_OBJECT: - val = JS_ToPrimitiveFree(ctx, val, HINT_NUMBER); - if (JS_IsException(val)) - return NULL; - goto redo; - default: - fail: - JS_FreeValue(ctx, val); - JS_ThrowTypeError(ctx, "cannot convert to bigint"); - return NULL; - } - return r; -} - -static bf_t *JS_ToBigInt(JSContext *ctx, bf_t *buf, JSValue val) -{ - return JS_ToBigIntFree(ctx, buf, js_dup(val)); -} - -static __maybe_unused JSValue JS_ToBigIntValueFree(JSContext *ctx, JSValue val) -{ - if (JS_VALUE_GET_TAG(val) == JS_TAG_BIG_INT) { - return val; - } else { - bf_t a_s, *a, *r; - int ret; - JSValue res; - - res = JS_NewBigInt(ctx); - if (JS_IsException(res)) - return JS_EXCEPTION; - a = JS_ToBigIntFree(ctx, &a_s, val); - if (!a) { - JS_FreeValue(ctx, res); - return JS_EXCEPTION; - } - r = JS_GetBigInt(res); - ret = bf_set(r, a); - JS_FreeBigInt(ctx, a, &a_s); - if (ret) { - JS_FreeValue(ctx, res); - return JS_ThrowOutOfMemory(ctx); - } - return JS_CompactBigInt(ctx, res); - } -} - -/* free the bf_t allocated by JS_ToBigInt */ -static void JS_FreeBigInt(JSContext *ctx, bf_t *a, bf_t *buf) -{ - if (a == buf) { - bf_delete(a); - } else { - JSBigInt *p = (JSBigInt *)((uint8_t *)a - offsetof(JSBigInt, num)); - JS_FreeValue(ctx, JS_MKPTR(JS_TAG_BIG_INT, p)); - } -} - -/* XXX: merge with JS_ToInt64Free with a specific flag */ -static int JS_ToBigInt64Free(JSContext *ctx, int64_t *pres, JSValue val) -{ - bf_t a_s, *a; - - a = JS_ToBigIntFree(ctx, &a_s, val); - if (!a) { - *pres = 0; - return -1; - } - bf_get_int64(pres, a, BF_GET_INT_MOD); - JS_FreeBigInt(ctx, a, &a_s); - return 0; -} - -int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValue val) -{ - return JS_ToBigInt64Free(ctx, pres, js_dup(val)); -} - -static JSValue JS_NewBigInt(JSContext *ctx) -{ - JSBigInt *p; - p = js_malloc(ctx, sizeof(*p)); - if (!p) - return JS_EXCEPTION; - p->header.ref_count = 1; - bf_init(ctx->bf_ctx, &p->num); - return JS_MKPTR(JS_TAG_BIG_INT, p); -} - -static JSValue JS_CompactBigInt1(JSContext *ctx, JSValue val) -{ - if (JS_VALUE_GET_TAG(val) != JS_TAG_BIG_INT) - return val; /* fail safe */ - bf_t *a = JS_GetBigInt(val); - if (a->expn == BF_EXP_ZERO && a->sign) { - JSBigInt *p = JS_VALUE_GET_PTR(val); - assert(p->header.ref_count == 1); - a->sign = 0; - } - return val; -} - -/* Nnormalize the zero representation. Could also be used to convert the bigint - to a short bigint value. The reference count of the value must be - 1. Cannot fail */ -static JSValue JS_CompactBigInt(JSContext *ctx, JSValue val) -{ - return JS_CompactBigInt1(ctx, val); -} - -static JSValue throw_bf_exception(JSContext *ctx, int status) -{ - const char *str; - if (status & BF_ST_MEM_ERROR) - return JS_ThrowOutOfMemory(ctx); - if (status & BF_ST_DIVIDE_ZERO) { - str = "division by zero"; - } else if (status & BF_ST_INVALID_OP) { - str = "invalid operation"; - } else { - str = "integer overflow"; - } - return JS_ThrowRangeError(ctx, "%s", str); -} - -static int js_unary_arith_bigint(JSContext *ctx, - JSValue *pres, OPCodeEnum op, JSValue op1) -{ - bf_t a_s, *r, *a; - int ret, v; - JSValue res; - - if (op == OP_plus) { - JS_ThrowTypeError(ctx, "bigint argument with unary +"); - JS_FreeValue(ctx, op1); - return -1; - } - res = JS_NewBigInt(ctx); - if (JS_IsException(res)) { - JS_FreeValue(ctx, op1); - return -1; - } - r = JS_GetBigInt(res); - a = JS_ToBigIntFree(ctx, &a_s, op1); // infallible, always a bigint - ret = 0; - switch(op) { - case OP_inc: - case OP_dec: - v = 2 * (op - OP_dec) - 1; - ret = bf_add_si(r, a, v, BF_PREC_INF, BF_RNDZ); - break; - case OP_plus: - ret = bf_set(r, a); - break; - case OP_neg: - ret = bf_set(r, a); - bf_neg(r); - break; - case OP_not: - ret = bf_add_si(r, a, 1, BF_PREC_INF, BF_RNDZ); - bf_neg(r); - break; - default: - abort(); - } - JS_FreeBigInt(ctx, a, &a_s); - if (unlikely(ret)) { - JS_FreeValue(ctx, res); - throw_bf_exception(ctx, ret); - return -1; - } - res = JS_CompactBigInt(ctx, res); - *pres = res; - return 0; -} - -static no_inline __exception int js_unary_arith_slow(JSContext *ctx, - JSValue *sp, - OPCodeEnum op) -{ - JSValue op1; - int v; - uint32_t tag; - - op1 = sp[-1]; - /* fast path for float64 */ - if (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(op1))) - goto handle_float64; - - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) - goto exception; - tag = JS_VALUE_GET_TAG(op1); - switch(tag) { - case JS_TAG_INT: - { - int64_t v64; - v64 = JS_VALUE_GET_INT(op1); - switch(op) { - case OP_inc: - case OP_dec: - v = 2 * (op - OP_dec) - 1; - v64 += v; - break; - case OP_plus: - break; - case OP_neg: - if (v64 == 0) { - sp[-1] = __JS_NewFloat64(-0.0); - return 0; - } else { - v64 = -v64; - } - break; - default: - abort(); - } - sp[-1] = JS_NewInt64(ctx, v64); - } - break; - case JS_TAG_BIG_INT: - if (js_unary_arith_bigint(ctx, sp - 1, op, op1)) - goto exception; - break; - default: - handle_float64: - { - double d = JS_VALUE_GET_FLOAT64(op1); - switch(op) { - case OP_inc: - case OP_dec: - v = 2 * (op - OP_dec) - 1; - d += v; - break; - case OP_plus: - break; - case OP_neg: - d = -d; - break; - default: - abort(); - } - sp[-1] = __JS_NewFloat64(d); - } - break; - } - return 0; - exception: - sp[-1] = JS_UNDEFINED; - return -1; -} - -static __exception int js_post_inc_slow(JSContext *ctx, - JSValue *sp, OPCodeEnum op) -{ - JSValue op1; - - /* XXX: allow custom operators */ - op1 = sp[-1]; - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) { - sp[-1] = JS_UNDEFINED; - return -1; - } - sp[-1] = op1; - sp[0] = js_dup(op1); - return js_unary_arith_slow(ctx, sp + 1, op - OP_post_dec + OP_dec); -} - -static no_inline int js_not_slow(JSContext *ctx, JSValue *sp) -{ - JSValue op1; - - op1 = JS_ToNumericFree(ctx, sp[-1]); - if (JS_IsException(op1)) - goto exception; - if (JS_VALUE_GET_TAG(op1) == JS_TAG_BIG_INT) { - if (js_unary_arith_bigint(ctx, sp - 1, OP_not, op1)) - goto exception; - } else { - int32_t v1; - if (unlikely(JS_ToInt32Free(ctx, &v1, op1))) - goto exception; - sp[-1] = js_int32(~v1); - } - return 0; - exception: - sp[-1] = JS_UNDEFINED; - return -1; -} - -static int js_binary_arith_bigint(JSContext *ctx, OPCodeEnum op, - JSValue *pres, JSValue op1, JSValue op2) -{ - bf_t a_s, b_s, *r, *a, *b; - int ret; - JSValue res; - - a = JS_ToBigIntFree(ctx, &a_s, op1); - if (!a) { - JS_FreeValue(ctx, op2); - return -1; - } - b = JS_ToBigIntFree(ctx, &b_s, op2); - if (!b) { - JS_FreeBigInt(ctx, a, &a_s); - return -1; - } - res = JS_NewBigInt(ctx); - if (JS_IsException(res)) { - JS_FreeBigInt(ctx, a, &a_s); - JS_FreeBigInt(ctx, b, &b_s); - return -1; - } - r = JS_GetBigInt(res); - ret = 0; - switch(op) { - case OP_add: - ret = bf_add(r, a, b, BF_PREC_INF, BF_RNDZ); - break; - case OP_sub: - ret = bf_sub(r, a, b, BF_PREC_INF, BF_RNDZ); - break; - case OP_mul: - ret = bf_mul(r, a, b, BF_PREC_INF, BF_RNDZ); - break; - case OP_div: - { - bf_t rem_s, *rem = &rem_s; - bf_init(ctx->bf_ctx, rem); - ret = bf_divrem(r, rem, a, b, BF_PREC_INF, BF_RNDZ, BF_RNDZ); - bf_delete(rem); - } - break; - case OP_mod: - ret = bf_rem(r, a, b, BF_PREC_INF, BF_RNDZ, - BF_RNDZ) & BF_ST_INVALID_OP; - break; - case OP_pow: - if (b->sign) { - ret = BF_ST_INVALID_OP; - } else { - ret = bf_pow(r, a, b, BF_PREC_INF, BF_RNDZ | BF_POW_JS_QUIRKS); - } - break; - - /* logical operations */ - case OP_shl: - case OP_sar: - { - slimb_t v2; -#if LIMB_BITS == 32 - bf_get_int32(&v2, b, 0); - if (v2 == INT32_MIN) - v2 = INT32_MIN + 1; -#else - bf_get_int64(&v2, b, 0); - if (v2 == INT64_MIN) - v2 = INT64_MIN + 1; -#endif - if (op == OP_sar) - v2 = -v2; - ret = bf_set(r, a); - ret |= bf_mul_2exp(r, v2, BF_PREC_INF, BF_RNDZ); - if (v2 < 0) { - ret |= bf_rint(r, BF_RNDD) & (BF_ST_OVERFLOW | BF_ST_MEM_ERROR); - } - } - break; - case OP_and: - ret = bf_logic_and(r, a, b); - break; - case OP_or: - ret = bf_logic_or(r, a, b); - break; - case OP_xor: - ret = bf_logic_xor(r, a, b); - break; - default: - abort(); - } - JS_FreeBigInt(ctx, a, &a_s); - JS_FreeBigInt(ctx, b, &b_s); - if (unlikely(ret)) { - JS_FreeValue(ctx, res); - throw_bf_exception(ctx, ret); - return -1; - } - *pres = JS_CompactBigInt(ctx, res); - return 0; -} - -static no_inline __exception int js_binary_arith_slow(JSContext *ctx, JSValue *sp, - OPCodeEnum op) -{ - JSValue op1, op2; - uint32_t tag1, tag2; - double d1, d2; - - op1 = sp[-2]; - op2 = sp[-1]; - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - /* fast path for float operations */ - if (tag1 == JS_TAG_FLOAT64 && tag2 == JS_TAG_FLOAT64) { - d1 = JS_VALUE_GET_FLOAT64(op1); - d2 = JS_VALUE_GET_FLOAT64(op2); - goto handle_float64; - } - - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToNumericFree(ctx, op2); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - - if (tag1 == JS_TAG_INT && tag2 == JS_TAG_INT) { - int32_t v1, v2; - int64_t v; - v1 = JS_VALUE_GET_INT(op1); - v2 = JS_VALUE_GET_INT(op2); - switch(op) { - case OP_sub: - v = (int64_t)v1 - (int64_t)v2; - break; - case OP_mul: - v = (int64_t)v1 * (int64_t)v2; - if (v == 0 && (v1 | v2) < 0) { - sp[-2] = __JS_NewFloat64(-0.0); - return 0; - } - break; - case OP_div: - sp[-2] = __JS_NewFloat64((double)v1 / (double)v2); - return 0; - case OP_mod: - if (v1 < 0 || v2 <= 0) { - sp[-2] = js_float64(fmod(v1, v2)); - return 0; - } else { - v = (int64_t)v1 % (int64_t)v2; - } - break; - case OP_pow: - sp[-2] = js_float64(js_pow(v1, v2)); - return 0; - default: - abort(); - } - sp[-2] = JS_NewInt64(ctx, v); - } else if (tag1 == JS_TAG_BIG_INT || tag2 == JS_TAG_BIG_INT) { - if (js_binary_arith_bigint(ctx, op, sp - 2, op1, op2)) - goto exception; - } else { - double dr; - /* float64 result */ - if (JS_ToFloat64Free(ctx, &d1, op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - if (JS_ToFloat64Free(ctx, &d2, op2)) - goto exception; - handle_float64: - switch(op) { - case OP_sub: - dr = d1 - d2; - break; - case OP_mul: - dr = d1 * d2; - break; - case OP_div: - dr = d1 / d2; - break; - case OP_mod: - dr = fmod(d1, d2); - break; - case OP_pow: - dr = js_pow(d1, d2); - break; - default: - abort(); - } - sp[-2] = __JS_NewFloat64(dr); - } - return 0; - exception: - sp[-2] = JS_UNDEFINED; - sp[-1] = JS_UNDEFINED; - return -1; -} - -static no_inline __exception int js_add_slow(JSContext *ctx, JSValue *sp) -{ - JSValue op1, op2; - uint32_t tag1, tag2; - - op1 = sp[-2]; - op2 = sp[-1]; - - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - /* fast path for float64 */ - if (tag1 == JS_TAG_FLOAT64 && tag2 == JS_TAG_FLOAT64) { - double d1, d2; - d1 = JS_VALUE_GET_FLOAT64(op1); - d2 = JS_VALUE_GET_FLOAT64(op2); - sp[-2] = __JS_NewFloat64(d1 + d2); - return 0; - } - - if (tag1 == JS_TAG_OBJECT || tag2 == JS_TAG_OBJECT) { - op1 = JS_ToPrimitiveFree(ctx, op1, HINT_NONE); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - - op2 = JS_ToPrimitiveFree(ctx, op2, HINT_NONE); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - } - - if (tag1 == JS_TAG_STRING || tag2 == JS_TAG_STRING) { - sp[-2] = JS_ConcatString(ctx, op1, op2); - if (JS_IsException(sp[-2])) - goto exception; - return 0; - } - - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToNumericFree(ctx, op2); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - - if (tag1 == JS_TAG_INT && tag2 == JS_TAG_INT) { - int32_t v1, v2; - int64_t v; - v1 = JS_VALUE_GET_INT(op1); - v2 = JS_VALUE_GET_INT(op2); - v = (int64_t)v1 + (int64_t)v2; - sp[-2] = JS_NewInt64(ctx, v); - } else if (tag1 == JS_TAG_BIG_INT || tag2 == JS_TAG_BIG_INT) { - if (js_binary_arith_bigint(ctx, OP_add, sp - 2, op1, op2)) - goto exception; - } else { - double d1, d2; - /* float64 result */ - if (JS_ToFloat64Free(ctx, &d1, op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - if (JS_ToFloat64Free(ctx, &d2, op2)) - goto exception; - sp[-2] = __JS_NewFloat64(d1 + d2); - } - return 0; - exception: - sp[-2] = JS_UNDEFINED; - sp[-1] = JS_UNDEFINED; - return -1; -} - -static no_inline __exception int js_binary_logic_slow(JSContext *ctx, - JSValue *sp, - OPCodeEnum op) -{ - JSValue op1, op2; - uint32_t tag1, tag2; - uint32_t v1, v2, r; - - op1 = sp[-2]; - op2 = sp[-1]; - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToNumericFree(ctx, op2); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - - tag1 = JS_VALUE_GET_TAG(op1); - tag2 = JS_VALUE_GET_TAG(op2); - if (tag1 == JS_TAG_BIG_INT || tag2 == JS_TAG_BIG_INT) { - if (tag1 != tag2) { - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - JS_ThrowTypeError(ctx, "both operands must be bigint"); - goto exception; - } else if (js_binary_arith_bigint(ctx, op, sp - 2, op1, op2)) { - goto exception; - } - } else { - if (unlikely(JS_ToInt32Free(ctx, (int32_t *)&v1, op1))) { - JS_FreeValue(ctx, op2); - goto exception; - } - if (unlikely(JS_ToInt32Free(ctx, (int32_t *)&v2, op2))) - goto exception; - switch(op) { - case OP_shl: - r = v1 << (v2 & 0x1f); - break; - case OP_sar: - r = (int)v1 >> (v2 & 0x1f); - break; - case OP_and: - r = v1 & v2; - break; - case OP_or: - r = v1 | v2; - break; - case OP_xor: - r = v1 ^ v2; - break; - default: - abort(); - } - sp[-2] = js_int32(r); - } - return 0; - exception: - sp[-2] = JS_UNDEFINED; - sp[-1] = JS_UNDEFINED; - return -1; -} - -static int js_compare_bigint(JSContext *ctx, OPCodeEnum op, - JSValue op1, JSValue op2) -{ - bf_t a_s, b_s, *a, *b; - int res; - - a = JS_ToBigInt1(ctx, &a_s, op1); - if (!a) { - JS_FreeValue(ctx, op2); - return -1; - } - b = JS_ToBigInt1(ctx, &b_s, op2); - if (!b) { - if (a == &a_s) - bf_delete(a); - JS_FreeValue(ctx, op1); - return -1; - } - switch(op) { - case OP_lt: - res = bf_cmp_lt(a, b); /* if NaN return false */ - break; - case OP_lte: - res = bf_cmp_le(a, b); /* if NaN return false */ - break; - case OP_gt: - res = bf_cmp_lt(b, a); /* if NaN return false */ - break; - case OP_gte: - res = bf_cmp_le(b, a); /* if NaN return false */ - break; - case OP_eq: - res = bf_cmp_eq(a, b); /* if NaN return false */ - break; - default: - abort(); - } - if (a == &a_s) - bf_delete(a); - if (b == &b_s) - bf_delete(b); - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - return res; -} - -static no_inline int js_relational_slow(JSContext *ctx, JSValue *sp, - OPCodeEnum op) -{ - JSValue op1, op2; - int res; - uint32_t tag1, tag2; - - op1 = sp[-2]; - op2 = sp[-1]; - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - - op1 = JS_ToPrimitiveFree(ctx, op1, HINT_NUMBER); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToPrimitiveFree(ctx, op2, HINT_NUMBER); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - - if (tag1 == JS_TAG_STRING && tag2 == JS_TAG_STRING) { - JSString *p1, *p2; - p1 = JS_VALUE_GET_STRING(op1); - p2 = JS_VALUE_GET_STRING(op2); - res = js_string_compare(ctx, p1, p2); - switch(op) { - case OP_lt: - res = (res < 0); - break; - case OP_lte: - res = (res <= 0); - break; - case OP_gt: - res = (res > 0); - break; - default: - case OP_gte: - res = (res >= 0); - break; - } - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - } else if ((tag1 <= JS_TAG_NULL || tag1 == JS_TAG_FLOAT64) && - (tag2 <= JS_TAG_NULL || tag2 == JS_TAG_FLOAT64)) { - /* fast path for float64/int */ - goto float64_compare; - } else { - if (((tag1 == JS_TAG_BIG_INT && tag2 == JS_TAG_STRING) || - (tag2 == JS_TAG_BIG_INT && tag1 == JS_TAG_STRING))) { - if (tag1 == JS_TAG_STRING) { - op1 = JS_StringToBigInt(ctx, op1); - if (JS_VALUE_GET_TAG(op1) != JS_TAG_BIG_INT) - goto invalid_bigint_string; - } - if (tag2 == JS_TAG_STRING) { - op2 = JS_StringToBigInt(ctx, op2); - if (JS_VALUE_GET_TAG(op2) != JS_TAG_BIG_INT) { - invalid_bigint_string: - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - res = FALSE; - goto done; - } - } - } else { - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToNumericFree(ctx, op2); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - } - - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - - if (tag1 == JS_TAG_BIG_INT || tag2 == JS_TAG_BIG_INT) { - res = js_compare_bigint(ctx, op, op1, op2); - if (res < 0) - goto exception; - } else { - double d1, d2; - - float64_compare: - /* can use floating point comparison */ - if (tag1 == JS_TAG_FLOAT64) { - d1 = JS_VALUE_GET_FLOAT64(op1); - } else { - d1 = JS_VALUE_GET_INT(op1); - } - if (tag2 == JS_TAG_FLOAT64) { - d2 = JS_VALUE_GET_FLOAT64(op2); - } else { - d2 = JS_VALUE_GET_INT(op2); - } - switch(op) { - case OP_lt: - res = (d1 < d2); /* if NaN return false */ - break; - case OP_lte: - res = (d1 <= d2); /* if NaN return false */ - break; - case OP_gt: - res = (d1 > d2); /* if NaN return false */ - break; - default: - case OP_gte: - res = (d1 >= d2); /* if NaN return false */ - break; - } - } - } - done: - sp[-2] = js_bool(res); - return 0; - exception: - sp[-2] = JS_UNDEFINED; - sp[-1] = JS_UNDEFINED; - return -1; -} - -static BOOL tag_is_number(uint32_t tag) -{ - return (tag == JS_TAG_INT || tag == JS_TAG_BIG_INT || - tag == JS_TAG_FLOAT64); -} - -static no_inline __exception int js_eq_slow(JSContext *ctx, JSValue *sp, - BOOL is_neq) -{ - JSValue op1, op2; - int res; - uint32_t tag1, tag2; - - op1 = sp[-2]; - op2 = sp[-1]; - redo: - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - if (tag_is_number(tag1) && tag_is_number(tag2)) { - if (tag1 == JS_TAG_INT && tag2 == JS_TAG_INT) { - res = JS_VALUE_GET_INT(op1) == JS_VALUE_GET_INT(op2); - } else if ((tag1 == JS_TAG_FLOAT64 && - (tag2 == JS_TAG_INT || tag2 == JS_TAG_FLOAT64)) || - (tag2 == JS_TAG_FLOAT64 && - (tag1 == JS_TAG_INT || tag1 == JS_TAG_FLOAT64))) { - double d1, d2; - if (tag1 == JS_TAG_FLOAT64) { - d1 = JS_VALUE_GET_FLOAT64(op1); - } else { - d1 = JS_VALUE_GET_INT(op1); - } - if (tag2 == JS_TAG_FLOAT64) { - d2 = JS_VALUE_GET_FLOAT64(op2); - } else { - d2 = JS_VALUE_GET_INT(op2); - } - res = (d1 == d2); - } else { - res = js_compare_bigint(ctx, OP_eq, op1, op2); - if (res < 0) - goto exception; - } - } else if (tag1 == tag2) { - res = js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT); - } else if ((tag1 == JS_TAG_NULL && tag2 == JS_TAG_UNDEFINED) || - (tag2 == JS_TAG_NULL && tag1 == JS_TAG_UNDEFINED)) { - res = TRUE; - } else if ((tag1 == JS_TAG_STRING && tag_is_number(tag2)) || - (tag2 == JS_TAG_STRING && tag_is_number(tag1))) { - - if ((tag1 == JS_TAG_BIG_INT || tag2 == JS_TAG_BIG_INT)) { - if (tag1 == JS_TAG_STRING) { - op1 = JS_StringToBigInt(ctx, op1); - if (JS_VALUE_GET_TAG(op1) != JS_TAG_BIG_INT) - goto invalid_bigint_string; - } - if (tag2 == JS_TAG_STRING) { - op2 = JS_StringToBigInt(ctx, op2); - if (JS_VALUE_GET_TAG(op2) != JS_TAG_BIG_INT) { - invalid_bigint_string: - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - res = FALSE; - goto done; - } - } - } else { - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToNumericFree(ctx, op2); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - } - res = js_strict_eq(ctx, op1, op2); - } else if (tag1 == JS_TAG_BOOL) { - op1 = js_int32(JS_VALUE_GET_INT(op1)); - goto redo; - } else if (tag2 == JS_TAG_BOOL) { - op2 = js_int32(JS_VALUE_GET_INT(op2)); - goto redo; - } else if ((tag1 == JS_TAG_OBJECT && - (tag_is_number(tag2) || tag2 == JS_TAG_STRING || tag2 == JS_TAG_SYMBOL)) || - (tag2 == JS_TAG_OBJECT && - (tag_is_number(tag1) || tag1 == JS_TAG_STRING || tag1 == JS_TAG_SYMBOL))) { - op1 = JS_ToPrimitiveFree(ctx, op1, HINT_NONE); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToPrimitiveFree(ctx, op2, HINT_NONE); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - goto redo; - } else { - /* IsHTMLDDA object is equivalent to undefined for '==' and '!=' */ - if ((JS_IsHTMLDDA(ctx, op1) && - (tag2 == JS_TAG_NULL || tag2 == JS_TAG_UNDEFINED)) || - (JS_IsHTMLDDA(ctx, op2) && - (tag1 == JS_TAG_NULL || tag1 == JS_TAG_UNDEFINED))) { - res = TRUE; - } else { - res = FALSE; - } - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - } - done: - sp[-2] = js_bool(res ^ is_neq); - return 0; - exception: - sp[-2] = JS_UNDEFINED; - sp[-1] = JS_UNDEFINED; - return -1; -} - -static no_inline int js_shr_slow(JSContext *ctx, JSValue *sp) -{ - JSValue op1, op2; - uint32_t v1, v2, r; - - op1 = sp[-2]; - op2 = sp[-1]; - op1 = JS_ToNumericFree(ctx, op1); - if (JS_IsException(op1)) { - JS_FreeValue(ctx, op2); - goto exception; - } - op2 = JS_ToNumericFree(ctx, op2); - if (JS_IsException(op2)) { - JS_FreeValue(ctx, op1); - goto exception; - } - - if ((JS_VALUE_GET_TAG(op1) == JS_TAG_BIG_INT || - JS_VALUE_GET_TAG(op2) == JS_TAG_BIG_INT)) { - JS_ThrowTypeError(ctx, "bigint operands are forbidden for >>>"); - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - goto exception; - } - /* cannot give an exception */ - JS_ToUint32Free(ctx, &v1, op1); - JS_ToUint32Free(ctx, &v2, op2); - r = v1 >> (v2 & 0x1f); - sp[-2] = js_uint32(r); - return 0; - exception: - sp[-2] = JS_UNDEFINED; - sp[-1] = JS_UNDEFINED; - return -1; -} - -/* XXX: Should take JSValue arguments */ -static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2, - JSStrictEqModeEnum eq_mode) -{ - BOOL res; - int tag1, tag2; - double d1, d2; - - tag1 = JS_VALUE_GET_NORM_TAG(op1); - tag2 = JS_VALUE_GET_NORM_TAG(op2); - switch(tag1) { - case JS_TAG_BOOL: - if (tag1 != tag2) { - res = FALSE; - } else { - res = JS_VALUE_GET_INT(op1) == JS_VALUE_GET_INT(op2); - goto done_no_free; - } - break; - case JS_TAG_NULL: - case JS_TAG_UNDEFINED: - res = (tag1 == tag2); - break; - case JS_TAG_STRING: - { - JSString *p1, *p2; - if (tag1 != tag2) { - res = FALSE; - } else { - p1 = JS_VALUE_GET_STRING(op1); - p2 = JS_VALUE_GET_STRING(op2); - res = (js_string_compare(ctx, p1, p2) == 0); - } - } - break; - case JS_TAG_SYMBOL: - { - JSAtomStruct *p1, *p2; - if (tag1 != tag2) { - res = FALSE; - } else { - p1 = JS_VALUE_GET_PTR(op1); - p2 = JS_VALUE_GET_PTR(op2); - res = (p1 == p2); - } - } - break; - case JS_TAG_OBJECT: - if (tag1 != tag2) - res = FALSE; - else - res = JS_VALUE_GET_OBJ(op1) == JS_VALUE_GET_OBJ(op2); - break; - case JS_TAG_INT: - d1 = JS_VALUE_GET_INT(op1); - if (tag2 == JS_TAG_INT) { - d2 = JS_VALUE_GET_INT(op2); - goto number_test; - } else if (tag2 == JS_TAG_FLOAT64) { - d2 = JS_VALUE_GET_FLOAT64(op2); - goto number_test; - } else { - res = FALSE; - } - break; - case JS_TAG_FLOAT64: - d1 = JS_VALUE_GET_FLOAT64(op1); - if (tag2 == JS_TAG_FLOAT64) { - d2 = JS_VALUE_GET_FLOAT64(op2); - } else if (tag2 == JS_TAG_INT) { - d2 = JS_VALUE_GET_INT(op2); - } else { - res = FALSE; - break; - } - number_test: - if (unlikely(eq_mode >= JS_EQ_SAME_VALUE)) { - JSFloat64Union u1, u2; - /* NaN is not always normalized, so this test is necessary */ - if (isnan(d1) || isnan(d2)) { - res = isnan(d1) == isnan(d2); - } else if (eq_mode == JS_EQ_SAME_VALUE_ZERO) { - res = (d1 == d2); /* +0 == -0 */ - } else { - u1.d = d1; - u2.d = d2; - res = (u1.u64 == u2.u64); /* +0 != -0 */ - } - } else { - res = (d1 == d2); /* if NaN return false and +0 == -0 */ - } - goto done_no_free; - case JS_TAG_BIG_INT: - { - bf_t a_s, *a, b_s, *b; - if (tag1 != tag2) { - res = FALSE; - break; - } - a = JS_ToBigInt1(ctx, &a_s, op1); - b = JS_ToBigInt1(ctx, &b_s, op2); - res = bf_cmp_eq(a, b); - if (a == &a_s) - bf_delete(a); - if (b == &b_s) - bf_delete(b); - } - break; - default: - res = FALSE; - break; - } - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - done_no_free: - return res; -} - -static BOOL js_strict_eq(JSContext *ctx, JSValue op1, JSValue op2) -{ - return js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT); -} - -static BOOL js_same_value(JSContext *ctx, JSValue op1, JSValue op2) -{ - return js_strict_eq2(ctx, js_dup(op1), js_dup(op2), JS_EQ_SAME_VALUE); -} - -static BOOL js_same_value_zero(JSContext *ctx, JSValue op1, JSValue op2) -{ - return js_strict_eq2(ctx, js_dup(op1), js_dup(op2), JS_EQ_SAME_VALUE_ZERO); -} - -static no_inline int js_strict_eq_slow(JSContext *ctx, JSValue *sp, - BOOL is_neq) -{ - BOOL res; - res = js_strict_eq(ctx, sp[-2], sp[-1]); - sp[-2] = js_bool(res ^ is_neq); - return 0; -} - -static __exception int js_operator_in(JSContext *ctx, JSValue *sp) -{ - JSValue op1, op2; - JSAtom atom; - int ret; - - op1 = sp[-2]; - op2 = sp[-1]; - - if (JS_VALUE_GET_TAG(op2) != JS_TAG_OBJECT) { - JS_ThrowTypeError(ctx, "invalid 'in' operand"); - return -1; - } - atom = JS_ValueToAtom(ctx, op1); - if (unlikely(atom == JS_ATOM_NULL)) - return -1; - ret = JS_HasProperty(ctx, op2, atom); - JS_FreeAtom(ctx, atom); - if (ret < 0) - return -1; - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - sp[-2] = js_bool(ret); - return 0; -} - -static __exception int js_has_unscopable(JSContext *ctx, JSValue obj, - JSAtom atom) -{ - JSValue arr, val; - int ret; - - arr = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_unscopables); - if (JS_IsException(arr)) - return -1; - ret = 0; - if (JS_IsObject(arr)) { - val = JS_GetProperty(ctx, arr, atom); - ret = JS_ToBoolFree(ctx, val); - } - JS_FreeValue(ctx, arr); - return ret; -} - -static __exception int js_operator_instanceof(JSContext *ctx, JSValue *sp) -{ - JSValue op1, op2; - BOOL ret; - - op1 = sp[-2]; - op2 = sp[-1]; - ret = JS_IsInstanceOf(ctx, op1, op2); - if (ret < 0) - return ret; - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - sp[-2] = js_bool(ret); - return 0; -} - -static __exception int js_operator_typeof(JSContext *ctx, JSValue op1) -{ - JSAtom atom; - uint32_t tag; - - tag = JS_VALUE_GET_NORM_TAG(op1); - switch(tag) { - case JS_TAG_BIG_INT: - atom = JS_ATOM_bigint; - break; - case JS_TAG_INT: - case JS_TAG_FLOAT64: - atom = JS_ATOM_number; - break; - case JS_TAG_UNDEFINED: - atom = JS_ATOM_undefined; - break; - case JS_TAG_BOOL: - atom = JS_ATOM_boolean; - break; - case JS_TAG_STRING: - atom = JS_ATOM_string; - break; - case JS_TAG_OBJECT: - { - JSObject *p; - p = JS_VALUE_GET_OBJ(op1); - if (unlikely(p->is_HTMLDDA)) - atom = JS_ATOM_undefined; - else if (JS_IsFunction(ctx, op1)) - atom = JS_ATOM_function; - else - goto obj_type; - } - break; - case JS_TAG_NULL: - obj_type: - atom = JS_ATOM_object; - break; - case JS_TAG_SYMBOL: - atom = JS_ATOM_symbol; - break; - default: - atom = JS_ATOM_unknown; - break; - } - return atom; -} - -static __exception int js_operator_delete(JSContext *ctx, JSValue *sp) -{ - JSValue op1, op2; - JSAtom atom; - int ret; - - op1 = sp[-2]; - op2 = sp[-1]; - atom = JS_ValueToAtom(ctx, op2); - if (unlikely(atom == JS_ATOM_NULL)) - return -1; - ret = JS_DeleteProperty(ctx, op1, atom, JS_PROP_THROW_STRICT); - JS_FreeAtom(ctx, atom); - if (unlikely(ret < 0)) - return -1; - JS_FreeValue(ctx, op1); - JS_FreeValue(ctx, op2); - sp[-2] = js_bool(ret); - return 0; -} - -static JSValue js_throw_type_error(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - return JS_ThrowTypeError(ctx, "invalid property access"); -} - -/* XXX: not 100% compatible, but mozilla seems to use a similar - implementation to ensure that caller in non strict mode does not - throw (ES5 compatibility) */ -static JSValue js_function_proto_caller(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - JSFunctionBytecode *b = JS_GetFunctionBytecode(this_val); - if (!b || (b->js_mode & JS_MODE_STRICT) || !b->has_prototype) { - return js_throw_type_error(ctx, this_val, 0, NULL); - } - return JS_UNDEFINED; -} - -static JSValue js_function_proto_fileName(JSContext *ctx, - JSValue this_val) -{ - JSFunctionBytecode *b = JS_GetFunctionBytecode(this_val); - if (b) { - return JS_AtomToString(ctx, b->filename); - } - return JS_UNDEFINED; -} - -static JSValue js_function_proto_int32(JSContext *ctx, - JSValue this_val, - int magic) -{ - JSFunctionBytecode *b = JS_GetFunctionBytecode(this_val); - if (b) { - int *field = (int *) ((char *)b + magic); - return js_int32(*field); - } - return JS_UNDEFINED; -} - -static int js_arguments_define_own_property(JSContext *ctx, - JSValue this_obj, - JSAtom prop, JSValue val, - JSValue getter, JSValue setter, int flags) -{ - JSObject *p; - uint32_t idx; - p = JS_VALUE_GET_OBJ(this_obj); - /* convert to normal array when redefining an existing numeric field */ - if (p->fast_array && JS_AtomIsArrayIndex(ctx, &idx, prop) && - idx < p->u.array.count) { - if (convert_fast_array_to_array(ctx, p)) - return -1; - } - /* run the default define own property */ - return JS_DefineProperty(ctx, this_obj, prop, val, getter, setter, - flags | JS_PROP_NO_EXOTIC); -} - -static const JSClassExoticMethods js_arguments_exotic_methods = { - .define_own_property = js_arguments_define_own_property, -}; - -static JSValue js_build_arguments(JSContext *ctx, int argc, JSValue *argv) -{ - JSValue val, *tab; - JSProperty *pr; - JSObject *p; - int i; - - val = JS_NewObjectProtoClass(ctx, ctx->class_proto[JS_CLASS_OBJECT], - JS_CLASS_ARGUMENTS); - if (JS_IsException(val)) - return val; - p = JS_VALUE_GET_OBJ(val); - - /* add the length field (cannot fail) */ - pr = add_property(ctx, p, JS_ATOM_length, - JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); - pr->u.value = js_int32(argc); - - /* initialize the fast array part */ - tab = NULL; - if (argc > 0) { - tab = js_malloc(ctx, sizeof(tab[0]) * argc); - if (!tab) { - JS_FreeValue(ctx, val); - return JS_EXCEPTION; - } - for(i = 0; i < argc; i++) { - tab[i] = js_dup(argv[i]); - } - } - p->u.array.u.values = tab; - p->u.array.count = argc; - - JS_DefinePropertyValue(ctx, val, JS_ATOM_Symbol_iterator, - js_dup(ctx->array_proto_values), - JS_PROP_CONFIGURABLE | JS_PROP_WRITABLE); - /* add callee property to throw a TypeError in strict mode */ - JS_DefineProperty(ctx, val, JS_ATOM_callee, JS_UNDEFINED, - ctx->throw_type_error, ctx->throw_type_error, - JS_PROP_HAS_GET | JS_PROP_HAS_SET); - return val; -} - -#define GLOBAL_VAR_OFFSET 0x40000000 -#define ARGUMENT_VAR_OFFSET 0x20000000 - -/* legacy arguments object: add references to the function arguments */ -static JSValue js_build_mapped_arguments(JSContext *ctx, int argc, - JSValue *argv, - JSStackFrame *sf, int arg_count) -{ - JSValue val; - JSProperty *pr; - JSObject *p; - int i; - - val = JS_NewObjectProtoClass(ctx, ctx->class_proto[JS_CLASS_OBJECT], - JS_CLASS_MAPPED_ARGUMENTS); - if (JS_IsException(val)) - return val; - p = JS_VALUE_GET_OBJ(val); - p->u.array.u.values = NULL; - p->u.array.count = 0; - - /* add the length field (cannot fail) */ - pr = add_property(ctx, p, JS_ATOM_length, - JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); - pr->u.value = js_int32(argc); - - for(i = 0; i < arg_count; i++) { - JSVarRef *var_ref; - var_ref = get_var_ref(ctx, sf, i, TRUE); - if (!var_ref) - goto fail; - pr = add_property(ctx, p, __JS_AtomFromUInt32(i), JS_PROP_C_W_E | JS_PROP_VARREF); - if (!pr) { - free_var_ref(ctx->rt, var_ref); - goto fail; - } - pr->u.var_ref = var_ref; - } - - /* the arguments not mapped to the arguments of the function can - be normal properties */ - for(i = arg_count; i < argc; i++) { - if (JS_DefinePropertyValueUint32(ctx, val, i, - js_dup(argv[i]), - JS_PROP_C_W_E) < 0) - goto fail; - } - - JS_DefinePropertyValue(ctx, val, JS_ATOM_Symbol_iterator, - js_dup(ctx->array_proto_values), - JS_PROP_CONFIGURABLE | JS_PROP_WRITABLE); - /* callee returns this function in non strict mode */ - JS_DefinePropertyValue(ctx, val, JS_ATOM_callee, - js_dup(ctx->rt->current_stack_frame->cur_func), - JS_PROP_CONFIGURABLE | JS_PROP_WRITABLE); - return val; - fail: - JS_FreeValue(ctx, val); - return JS_EXCEPTION; -} - -static JSValue js_build_rest(JSContext *ctx, int first, int argc, JSValue *argv) -{ - JSValue val; - int i, ret; - - val = JS_NewArray(ctx); - if (JS_IsException(val)) - return val; - for (i = first; i < argc; i++) { - ret = JS_DefinePropertyValueUint32(ctx, val, i - first, - js_dup(argv[i]), - JS_PROP_C_W_E); - if (ret < 0) { - JS_FreeValue(ctx, val); - return JS_EXCEPTION; - } - } - return val; -} - -static JSValue build_for_in_iterator(JSContext *ctx, JSValue obj) -{ - JSObject *p; - JSPropertyEnum *tab_atom; - int i; - JSValue enum_obj, obj1; - JSForInIterator *it; - uint32_t tag, tab_atom_count; - - tag = JS_VALUE_GET_TAG(obj); - if (tag != JS_TAG_OBJECT && tag != JS_TAG_NULL && tag != JS_TAG_UNDEFINED) { - obj = JS_ToObjectFree(ctx, obj); - } - - it = js_malloc(ctx, sizeof(*it)); - if (!it) { - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } - enum_obj = JS_NewObjectProtoClass(ctx, JS_NULL, JS_CLASS_FOR_IN_ITERATOR); - if (JS_IsException(enum_obj)) { - js_free(ctx, it); - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } - it->is_array = FALSE; - it->obj = obj; - it->idx = 0; - p = JS_VALUE_GET_OBJ(enum_obj); - p->u.for_in_iterator = it; - - if (tag == JS_TAG_NULL || tag == JS_TAG_UNDEFINED) - return enum_obj; - - /* fast path: assume no enumerable properties in the prototype chain */ - obj1 = js_dup(obj); - for(;;) { - obj1 = JS_GetPrototypeFree(ctx, obj1); - if (JS_IsNull(obj1)) - break; - if (JS_IsException(obj1)) - goto fail; - if (JS_GetOwnPropertyNamesInternal(ctx, &tab_atom, &tab_atom_count, - JS_VALUE_GET_OBJ(obj1), - JS_GPN_STRING_MASK | JS_GPN_ENUM_ONLY)) { - JS_FreeValue(ctx, obj1); - goto fail; - } - js_free_prop_enum(ctx, tab_atom, tab_atom_count); - if (tab_atom_count != 0) { - JS_FreeValue(ctx, obj1); - goto slow_path; - } - /* must check for timeout to avoid infinite loop */ - if (js_poll_interrupts(ctx)) { - JS_FreeValue(ctx, obj1); - goto fail; - } - } - - p = JS_VALUE_GET_OBJ(obj); - - if (p->fast_array) { - JSShape *sh; - JSShapeProperty *prs; - /* check that there are no enumerable normal fields */ - sh = p->shape; - for(i = 0, prs = get_shape_prop(sh); i < sh->prop_count; i++, prs++) { - if (prs->flags & JS_PROP_ENUMERABLE) - goto normal_case; - } - /* for fast arrays, we only store the number of elements */ - it->is_array = TRUE; - it->array_length = p->u.array.count; - } else { - normal_case: - if (JS_GetOwnPropertyNamesInternal(ctx, &tab_atom, &tab_atom_count, p, - JS_GPN_STRING_MASK | JS_GPN_ENUM_ONLY)) - goto fail; - for(i = 0; i < tab_atom_count; i++) { - JS_SetPropertyInternal(ctx, enum_obj, tab_atom[i].atom, JS_NULL, 0); - } - js_free_prop_enum(ctx, tab_atom, tab_atom_count); - } - return enum_obj; - - slow_path: - /* non enumerable properties hide the enumerables ones in the - prototype chain */ - obj1 = js_dup(obj); - for(;;) { - if (JS_GetOwnPropertyNamesInternal(ctx, &tab_atom, &tab_atom_count, - JS_VALUE_GET_OBJ(obj1), - JS_GPN_STRING_MASK | JS_GPN_SET_ENUM)) { - JS_FreeValue(ctx, obj1); - goto fail; - } - for(i = 0; i < tab_atom_count; i++) { - JS_DefinePropertyValue(ctx, enum_obj, tab_atom[i].atom, JS_NULL, - (tab_atom[i].is_enumerable ? - JS_PROP_ENUMERABLE : 0)); - } - js_free_prop_enum(ctx, tab_atom, tab_atom_count); - obj1 = JS_GetPrototypeFree(ctx, obj1); - if (JS_IsNull(obj1)) - break; - if (JS_IsException(obj1)) - goto fail; - /* must check for timeout to avoid infinite loop */ - if (js_poll_interrupts(ctx)) { - JS_FreeValue(ctx, obj1); - goto fail; - } - } - return enum_obj; - - fail: - JS_FreeValue(ctx, enum_obj); - return JS_EXCEPTION; -} - -/* obj -> enum_obj */ -static __exception int js_for_in_start(JSContext *ctx, JSValue *sp) -{ - sp[-1] = build_for_in_iterator(ctx, sp[-1]); - if (JS_IsException(sp[-1])) - return -1; - return 0; -} - -/* enum_obj -> enum_obj value done */ -static __exception int js_for_in_next(JSContext *ctx, JSValue *sp) -{ - JSValue enum_obj; - JSObject *p; - JSAtom prop; - JSForInIterator *it; - int ret; - - enum_obj = sp[-1]; - /* fail safe */ - if (JS_VALUE_GET_TAG(enum_obj) != JS_TAG_OBJECT) - goto done; - p = JS_VALUE_GET_OBJ(enum_obj); - if (p->class_id != JS_CLASS_FOR_IN_ITERATOR) - goto done; - it = p->u.for_in_iterator; - - for(;;) { - if (it->is_array) { - if (it->idx >= it->array_length) - goto done; - prop = __JS_AtomFromUInt32(it->idx); - it->idx++; - } else { - JSShape *sh = p->shape; - JSShapeProperty *prs; - if (it->idx >= sh->prop_count) - goto done; - prs = get_shape_prop(sh) + it->idx; - prop = prs->atom; - it->idx++; - if (prop == JS_ATOM_NULL || !(prs->flags & JS_PROP_ENUMERABLE)) - continue; - } - // check if the property was deleted unless we're dealing with a proxy - JSValue obj = it->obj; - if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { - JSObject *p = JS_VALUE_GET_OBJ(obj); - if (p->class_id == JS_CLASS_PROXY) - break; - } - ret = JS_HasProperty(ctx, obj, prop); - if (ret < 0) - return ret; - if (ret) - break; - } - /* return the property */ - sp[0] = JS_AtomToValue(ctx, prop); - sp[1] = JS_FALSE; - return 0; - done: - /* return the end */ - sp[0] = JS_UNDEFINED; - sp[1] = JS_TRUE; - return 0; -} - -static JSValue JS_GetIterator2(JSContext *ctx, JSValue obj, - JSValue method) -{ - JSValue enum_obj; - - enum_obj = JS_Call(ctx, method, obj, 0, NULL); - if (JS_IsException(enum_obj)) - return enum_obj; - if (!JS_IsObject(enum_obj)) { - JS_FreeValue(ctx, enum_obj); - return JS_ThrowTypeErrorNotAnObject(ctx); - } - return enum_obj; -} - -static JSValue JS_GetIterator(JSContext *ctx, JSValue obj, BOOL is_async) -{ - JSValue method, ret, sync_iter; - - if (is_async) { - method = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_asyncIterator); - if (JS_IsException(method)) - return method; - if (JS_IsUndefined(method) || JS_IsNull(method)) { - method = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_iterator); - if (JS_IsException(method)) - return method; - sync_iter = JS_GetIterator2(ctx, obj, method); - JS_FreeValue(ctx, method); - if (JS_IsException(sync_iter)) - return sync_iter; - ret = JS_CreateAsyncFromSyncIterator(ctx, sync_iter); - JS_FreeValue(ctx, sync_iter); - return ret; - } - } else { - method = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_iterator); - if (JS_IsException(method)) - return method; - } - if (!JS_IsFunction(ctx, method)) { - JS_FreeValue(ctx, method); - return JS_ThrowTypeError(ctx, "value is not iterable"); - } - ret = JS_GetIterator2(ctx, obj, method); - JS_FreeValue(ctx, method); - return ret; -} - -/* return *pdone = 2 if the iterator object is not parsed */ -static JSValue JS_IteratorNext2(JSContext *ctx, JSValue enum_obj, - JSValue method, - int argc, JSValue *argv, int *pdone) -{ - JSValue obj; - - /* fast path for the built-in iterators (avoid creating the - intermediate result object) */ - if (JS_IsObject(method)) { - JSObject *p = JS_VALUE_GET_OBJ(method); - if (p->class_id == JS_CLASS_C_FUNCTION && - p->u.cfunc.cproto == JS_CFUNC_iterator_next) { - JSCFunctionType func; - JSValue args[1]; - - /* in case the function expects one argument */ - if (argc == 0) { - args[0] = JS_UNDEFINED; - argv = args; - } - func = p->u.cfunc.c_function; - return func.iterator_next(ctx, enum_obj, argc, argv, - pdone, p->u.cfunc.magic); - } - } - obj = JS_Call(ctx, method, enum_obj, argc, argv); - if (JS_IsException(obj)) - goto fail; - if (!JS_IsObject(obj)) { - JS_FreeValue(ctx, obj); - JS_ThrowTypeError(ctx, "iterator must return an object"); - goto fail; - } - *pdone = 2; - return obj; - fail: - *pdone = FALSE; - return JS_EXCEPTION; -} - -static JSValue JS_IteratorNext(JSContext *ctx, JSValue enum_obj, - JSValue method, - int argc, JSValue *argv, BOOL *pdone) -{ - JSValue obj, value, done_val; - int done; - - obj = JS_IteratorNext2(ctx, enum_obj, method, argc, argv, &done); - if (JS_IsException(obj)) - goto fail; - if (done != 2) { - *pdone = done; - return obj; - } else { - done_val = JS_GetProperty(ctx, obj, JS_ATOM_done); - if (JS_IsException(done_val)) - goto fail; - *pdone = JS_ToBoolFree(ctx, done_val); - value = JS_UNDEFINED; - if (!*pdone) { - value = JS_GetProperty(ctx, obj, JS_ATOM_value); - } - JS_FreeValue(ctx, obj); - return value; - } - fail: - JS_FreeValue(ctx, obj); - *pdone = FALSE; - return JS_EXCEPTION; -} - -/* return < 0 in case of exception */ -static int JS_IteratorClose(JSContext *ctx, JSValue enum_obj, - BOOL is_exception_pending) -{ - JSValue method, ret, ex_obj; - int res; - - if (is_exception_pending) { - ex_obj = ctx->rt->current_exception; - ctx->rt->current_exception = JS_NULL; - res = -1; - } else { - ex_obj = JS_UNDEFINED; - res = 0; - } - method = JS_GetProperty(ctx, enum_obj, JS_ATOM_return); - if (JS_IsException(method)) { - res = -1; - goto done; - } - if (JS_IsUndefined(method) || JS_IsNull(method)) { - goto done; - } - ret = JS_CallFree(ctx, method, enum_obj, 0, NULL); - if (!is_exception_pending) { - if (JS_IsException(ret)) { - res = -1; - } else if (!JS_IsObject(ret)) { - JS_ThrowTypeErrorNotAnObject(ctx); - res = -1; - } - } - JS_FreeValue(ctx, ret); - done: - if (is_exception_pending) { - JS_Throw(ctx, ex_obj); - } - return res; -} - -/* obj -> enum_rec (3 slots) */ -static __exception int js_for_of_start(JSContext *ctx, JSValue *sp, - BOOL is_async) -{ - JSValue op1, obj, method; - op1 = sp[-1]; - obj = JS_GetIterator(ctx, op1, is_async); - if (JS_IsException(obj)) - return -1; - JS_FreeValue(ctx, op1); - sp[-1] = obj; - method = JS_GetProperty(ctx, obj, JS_ATOM_next); - if (JS_IsException(method)) - return -1; - sp[0] = method; - return 0; -} - -/* enum_rec [objs] -> enum_rec [objs] value done. There are 'offset' - objs. If 'done' is true or in case of exception, 'enum_rec' is set - to undefined. If 'done' is true, 'value' is always set to - undefined. */ -static __exception int js_for_of_next(JSContext *ctx, JSValue *sp, int offset) -{ - JSValue value = JS_UNDEFINED; - int done = 1; - - if (likely(!JS_IsUndefined(sp[offset]))) { - value = JS_IteratorNext(ctx, sp[offset], sp[offset + 1], 0, NULL, &done); - if (JS_IsException(value)) - done = -1; - if (done) { - /* value is JS_UNDEFINED or JS_EXCEPTION */ - /* replace the iteration object with undefined */ - JS_FreeValue(ctx, sp[offset]); - sp[offset] = JS_UNDEFINED; - if (done < 0) { - return -1; - } else { - JS_FreeValue(ctx, value); - value = JS_UNDEFINED; - } - } - } - sp[0] = value; - sp[1] = js_bool(done); - return 0; -} - -static JSValue JS_IteratorGetCompleteValue(JSContext *ctx, JSValue obj, - BOOL *pdone) -{ - JSValue done_val, value; - BOOL done; - done_val = JS_GetProperty(ctx, obj, JS_ATOM_done); - if (JS_IsException(done_val)) - goto fail; - done = JS_ToBoolFree(ctx, done_val); - value = JS_GetProperty(ctx, obj, JS_ATOM_value); - if (JS_IsException(value)) - goto fail; - *pdone = done; - return value; - fail: - *pdone = FALSE; - return JS_EXCEPTION; -} - -static __exception int js_iterator_get_value_done(JSContext *ctx, JSValue *sp) -{ - JSValue obj, value; - BOOL done; - obj = sp[-1]; - if (!JS_IsObject(obj)) { - JS_ThrowTypeError(ctx, "iterator must return an object"); - return -1; - } - value = JS_IteratorGetCompleteValue(ctx, obj, &done); - if (JS_IsException(value)) - return -1; - JS_FreeValue(ctx, obj); - sp[-1] = value; - sp[0] = js_bool(done); - return 0; -} - -static JSValue js_create_iterator_result(JSContext *ctx, - JSValue val, - BOOL done) -{ - JSValue obj; - obj = JS_NewObject(ctx); - if (JS_IsException(obj)) { - JS_FreeValue(ctx, val); - return obj; - } - if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_value, - val, JS_PROP_C_W_E) < 0) { - goto fail; - } - if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_done, - js_bool(done), JS_PROP_C_W_E) < 0) { - fail: - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } - return obj; -} - -static JSValue js_array_iterator_next(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, - BOOL *pdone, int magic); - -static JSValue js_create_array_iterator(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, int magic); - -static BOOL js_is_fast_array(JSContext *ctx, JSValue obj) -{ - /* Try and handle fast arrays explicitly */ - if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { - JSObject *p = JS_VALUE_GET_OBJ(obj); - if (p->class_id == JS_CLASS_ARRAY && p->fast_array) { - return TRUE; - } - } - return FALSE; -} - -/* Access an Array's internal JSValue array if available */ -static BOOL js_get_fast_array(JSContext *ctx, JSValue obj, - JSValue **arrpp, uint32_t *countp) -{ - /* Try and handle fast arrays explicitly */ - if (JS_VALUE_GET_TAG(obj) == JS_TAG_OBJECT) { - JSObject *p = JS_VALUE_GET_OBJ(obj); - if (p->class_id == JS_CLASS_ARRAY && p->fast_array) { - *countp = p->u.array.count; - *arrpp = p->u.array.u.values; - return TRUE; - } - } - return FALSE; -} - -static __exception int js_append_enumerate(JSContext *ctx, JSValue *sp) -{ - JSValue iterator, enumobj, method, value; - int is_array_iterator; - JSValue *arrp; - uint32_t i, count32, pos; - - if (JS_VALUE_GET_TAG(sp[-2]) != JS_TAG_INT) { - JS_ThrowInternalError(ctx, "invalid index for append"); - return -1; - } - - pos = JS_VALUE_GET_INT(sp[-2]); - - /* XXX: further optimisations: - - use ctx->array_proto_values? - - check if array_iterator_prototype next method is built-in and - avoid constructing actual iterator object? - - build this into js_for_of_start and use in all `for (x of o)` loops - */ - iterator = JS_GetProperty(ctx, sp[-1], JS_ATOM_Symbol_iterator); - if (JS_IsException(iterator)) - return -1; - /* Used to squelch a -Wcast-function-type warning. */ - JSCFunctionType ft = { .generic_magic = js_create_array_iterator }; - is_array_iterator = JS_IsCFunction(ctx, iterator, - ft.generic, - JS_ITERATOR_KIND_VALUE); - JS_FreeValue(ctx, iterator); - - enumobj = JS_GetIterator(ctx, sp[-1], FALSE); - if (JS_IsException(enumobj)) - return -1; - method = JS_GetProperty(ctx, enumobj, JS_ATOM_next); - if (JS_IsException(method)) { - JS_FreeValue(ctx, enumobj); - return -1; - } - /* Used to squelch a -Wcast-function-type warning. */ - JSCFunctionType ft2 = { .iterator_next = js_array_iterator_next }; - if (is_array_iterator - && JS_IsCFunction(ctx, method, ft2.generic, 0) - && js_get_fast_array(ctx, sp[-1], &arrp, &count32)) { - uint32_t len; - if (js_get_length32(ctx, &len, sp[-1])) - goto exception; - /* if len > count32, the elements >= count32 might be read in - the prototypes and might have side effects */ - if (len != count32) - goto general_case; - /* Handle fast arrays explicitly */ - for (i = 0; i < count32; i++) { - if (JS_DefinePropertyValueUint32(ctx, sp[-3], pos++, - js_dup(arrp[i]), JS_PROP_C_W_E) < 0) - goto exception; - } - } else { - general_case: - for (;;) { - BOOL done; - value = JS_IteratorNext(ctx, enumobj, method, 0, NULL, &done); - if (JS_IsException(value)) - goto exception; - if (done) { - /* value is JS_UNDEFINED */ - break; - } - if (JS_DefinePropertyValueUint32(ctx, sp[-3], pos++, value, JS_PROP_C_W_E) < 0) - goto exception; - } - } - /* Note: could raise an error if too many elements */ - sp[-2] = js_int32(pos); - JS_FreeValue(ctx, enumobj); - JS_FreeValue(ctx, method); - return 0; - -exception: - JS_IteratorClose(ctx, enumobj, TRUE); - JS_FreeValue(ctx, enumobj); - JS_FreeValue(ctx, method); - return -1; -} - -static __exception int JS_CopyDataProperties(JSContext *ctx, - JSValue target, - JSValue source, - JSValue excluded, - BOOL setprop) -{ - JSPropertyEnum *tab_atom; - JSValue val; - uint32_t i, tab_atom_count; - JSObject *p; - JSObject *pexcl = NULL; - int ret, gpn_flags; - JSPropertyDescriptor desc; - BOOL is_enumerable; - - if (JS_VALUE_GET_TAG(source) != JS_TAG_OBJECT) - return 0; - - if (JS_VALUE_GET_TAG(excluded) == JS_TAG_OBJECT) - pexcl = JS_VALUE_GET_OBJ(excluded); - - p = JS_VALUE_GET_OBJ(source); - - gpn_flags = JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK | JS_GPN_ENUM_ONLY; - if (p->is_exotic) { - const JSClassExoticMethods *em = ctx->rt->class_array[p->class_id].exotic; - /* cannot use JS_GPN_ENUM_ONLY with e.g. proxies because it - introduces a visible change */ - if (em && em->get_own_property_names) { - gpn_flags &= ~JS_GPN_ENUM_ONLY; - } - } - if (JS_GetOwnPropertyNamesInternal(ctx, &tab_atom, &tab_atom_count, p, - gpn_flags)) - return -1; - - for (i = 0; i < tab_atom_count; i++) { - if (pexcl) { - ret = JS_GetOwnPropertyInternal(ctx, NULL, pexcl, tab_atom[i].atom); - if (ret) { - if (ret < 0) - goto exception; - continue; - } - } - if (!(gpn_flags & JS_GPN_ENUM_ONLY)) { - /* test if the property is enumerable */ - ret = JS_GetOwnPropertyInternal(ctx, &desc, p, tab_atom[i].atom); - if (ret < 0) - goto exception; - if (!ret) - continue; - is_enumerable = (desc.flags & JS_PROP_ENUMERABLE) != 0; - js_free_desc(ctx, &desc); - if (!is_enumerable) - continue; - } - val = JS_GetProperty(ctx, source, tab_atom[i].atom); - if (JS_IsException(val)) - goto exception; - if (setprop) - ret = JS_SetProperty(ctx, target, tab_atom[i].atom, val); - else - ret = JS_DefinePropertyValue(ctx, target, tab_atom[i].atom, val, - JS_PROP_C_W_E); - if (ret < 0) - goto exception; - } - js_free_prop_enum(ctx, tab_atom, tab_atom_count); - return 0; - exception: - js_free_prop_enum(ctx, tab_atom, tab_atom_count); - return -1; -} - -/* only valid inside C functions */ -static JSValue JS_GetActiveFunction(JSContext *ctx) -{ - return ctx->rt->current_stack_frame->cur_func; -} - -static JSVarRef *get_var_ref(JSContext *ctx, JSStackFrame *sf, - int var_idx, BOOL is_arg) -{ - JSVarRef *var_ref; - struct list_head *el; - - list_for_each(el, &sf->var_ref_list) { - var_ref = list_entry(el, JSVarRef, header.link); - if (var_ref->var_idx == var_idx && var_ref->is_arg == is_arg) { - var_ref->header.ref_count++; - return var_ref; - } - } - /* create a new one */ - var_ref = js_malloc(ctx, sizeof(JSVarRef)); - if (!var_ref) - return NULL; - var_ref->header.ref_count = 1; - var_ref->is_detached = FALSE; - var_ref->is_arg = is_arg; - var_ref->var_idx = var_idx; - list_add_tail(&var_ref->header.link, &sf->var_ref_list); - if (is_arg) - var_ref->pvalue = &sf->arg_buf[var_idx]; - else - var_ref->pvalue = &sf->var_buf[var_idx]; - var_ref->value = JS_UNDEFINED; - return var_ref; -} - -static JSValue js_closure2(JSContext *ctx, JSValue func_obj, - JSFunctionBytecode *b, - JSVarRef **cur_var_refs, - JSStackFrame *sf) -{ - JSObject *p; - JSVarRef **var_refs; - int i; - - p = JS_VALUE_GET_OBJ(func_obj); - p->u.func.function_bytecode = b; - p->u.func.home_object = NULL; - p->u.func.var_refs = NULL; - if (b->closure_var_count) { - var_refs = js_mallocz(ctx, sizeof(var_refs[0]) * b->closure_var_count); - if (!var_refs) - goto fail; - p->u.func.var_refs = var_refs; - for(i = 0; i < b->closure_var_count; i++) { - JSClosureVar *cv = &b->closure_var[i]; - JSVarRef *var_ref; - if (cv->is_local) { - /* reuse the existing variable reference if it already exists */ - var_ref = get_var_ref(ctx, sf, cv->var_idx, cv->is_arg); - if (!var_ref) - goto fail; - } else { - var_ref = cur_var_refs[cv->var_idx]; - var_ref->header.ref_count++; - } - var_refs[i] = var_ref; - } - } - return func_obj; - fail: - /* bfunc is freed when func_obj is freed */ - JS_FreeValue(ctx, func_obj); - return JS_EXCEPTION; -} - -static JSValue js_instantiate_prototype(JSContext *ctx, JSObject *p, JSAtom atom, void *opaque) -{ - JSValue obj, this_val; - int ret; - - this_val = JS_MKPTR(JS_TAG_OBJECT, p); - obj = JS_NewObject(ctx); - if (JS_IsException(obj)) - return JS_EXCEPTION; - set_cycle_flag(ctx, obj); - set_cycle_flag(ctx, this_val); - ret = JS_DefinePropertyValue(ctx, obj, JS_ATOM_constructor, - js_dup(this_val), - JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); - if (ret < 0) { - JS_FreeValue(ctx, obj); - return JS_EXCEPTION; - } - return obj; -} - -static const uint16_t func_kind_to_class_id[] = { - [JS_FUNC_NORMAL] = JS_CLASS_BYTECODE_FUNCTION, - [JS_FUNC_GENERATOR] = JS_CLASS_GENERATOR_FUNCTION, - [JS_FUNC_ASYNC] = JS_CLASS_ASYNC_FUNCTION, - [JS_FUNC_ASYNC_GENERATOR] = JS_CLASS_ASYNC_GENERATOR_FUNCTION, -}; - -static JSValue js_closure(JSContext *ctx, JSValue bfunc, - JSVarRef **cur_var_refs, - JSStackFrame *sf) -{ - JSFunctionBytecode *b; - JSValue func_obj; - JSAtom name_atom; - - b = JS_VALUE_GET_PTR(bfunc); - func_obj = JS_NewObjectClass(ctx, func_kind_to_class_id[b->func_kind]); - if (JS_IsException(func_obj)) { - JS_FreeValue(ctx, bfunc); - return JS_EXCEPTION; - } - func_obj = js_closure2(ctx, func_obj, b, cur_var_refs, sf); - if (JS_IsException(func_obj)) { - /* bfunc has been freed */ - goto fail; - } - name_atom = b->func_name; - if (name_atom == JS_ATOM_NULL) - name_atom = JS_ATOM_empty_string; - js_function_set_properties(ctx, func_obj, name_atom, - b->defined_arg_count); - - if (b->func_kind & JS_FUNC_GENERATOR) { - JSValue proto; - int proto_class_id; - /* generators have a prototype field which is used as - prototype for the generator object */ - if (b->func_kind == JS_FUNC_ASYNC_GENERATOR) - proto_class_id = JS_CLASS_ASYNC_GENERATOR; - else - proto_class_id = JS_CLASS_GENERATOR; - proto = JS_NewObjectProto(ctx, ctx->class_proto[proto_class_id]); - if (JS_IsException(proto)) - goto fail; - JS_DefinePropertyValue(ctx, func_obj, JS_ATOM_prototype, proto, - JS_PROP_WRITABLE); - } else if (b->has_prototype) { - /* add the 'prototype' property: delay instantiation to avoid - creating cycles for every javascript function. The prototype - object is created on the fly when first accessed */ - JS_SetConstructorBit(ctx, func_obj, TRUE); - JS_DefineAutoInitProperty(ctx, func_obj, JS_ATOM_prototype, - JS_AUTOINIT_ID_PROTOTYPE, NULL, - JS_PROP_WRITABLE); - } - return func_obj; - fail: - /* bfunc is freed when func_obj is freed */ - JS_FreeValue(ctx, func_obj); - return JS_EXCEPTION; -} - -#define JS_DEFINE_CLASS_HAS_HERITAGE (1 << 0) - -static int js_op_define_class(JSContext *ctx, JSValue *sp, - JSAtom class_name, int class_flags, - JSVarRef **cur_var_refs, - JSStackFrame *sf, BOOL is_computed_name) -{ - JSValue bfunc, parent_class, proto = JS_UNDEFINED; - JSValue ctor = JS_UNDEFINED, parent_proto = JS_UNDEFINED; - JSFunctionBytecode *b; - - parent_class = sp[-2]; - bfunc = sp[-1]; - - if (class_flags & JS_DEFINE_CLASS_HAS_HERITAGE) { - if (JS_IsNull(parent_class)) { - parent_proto = JS_NULL; - parent_class = js_dup(ctx->function_proto); - } else { - if (!JS_IsConstructor(ctx, parent_class)) { - JS_ThrowTypeError(ctx, "parent class must be constructor"); - goto fail; - } - parent_proto = JS_GetProperty(ctx, parent_class, JS_ATOM_prototype); - if (JS_IsException(parent_proto)) - goto fail; - if (!JS_IsNull(parent_proto) && !JS_IsObject(parent_proto)) { - JS_ThrowTypeError(ctx, "parent prototype must be an object or null"); - goto fail; - } - } - } else { - /* parent_class is JS_UNDEFINED in this case */ - parent_proto = js_dup(ctx->class_proto[JS_CLASS_OBJECT]); - parent_class = js_dup(ctx->function_proto); - } - proto = JS_NewObjectProto(ctx, parent_proto); - if (JS_IsException(proto)) - goto fail; - - b = JS_VALUE_GET_PTR(bfunc); - assert(b->func_kind == JS_FUNC_NORMAL); - ctor = JS_NewObjectProtoClass(ctx, parent_class, - JS_CLASS_BYTECODE_FUNCTION); - if (JS_IsException(ctor)) - goto fail; - ctor = js_closure2(ctx, ctor, b, cur_var_refs, sf); - bfunc = JS_UNDEFINED; - if (JS_IsException(ctor)) - goto fail; - js_method_set_home_object(ctx, ctor, proto); - JS_SetConstructorBit(ctx, ctor, TRUE); - - JS_DefinePropertyValue(ctx, ctor, JS_ATOM_length, - js_int32(b->defined_arg_count), - JS_PROP_CONFIGURABLE); - - if (is_computed_name) { - if (JS_DefineObjectNameComputed(ctx, ctor, sp[-3], - JS_PROP_CONFIGURABLE) < 0) - goto fail; - } else { - if (JS_DefineObjectName(ctx, ctor, class_name, JS_PROP_CONFIGURABLE) < 0) - goto fail; - } - - /* the constructor property must be first. It can be overriden by - computed property names */ - if (JS_DefinePropertyValue(ctx, proto, JS_ATOM_constructor, - js_dup(ctor), - JS_PROP_CONFIGURABLE | - JS_PROP_WRITABLE | JS_PROP_THROW) < 0) - goto fail; - /* set the prototype property */ - if (JS_DefinePropertyValue(ctx, ctor, JS_ATOM_prototype, - js_dup(proto), JS_PROP_THROW) < 0) - goto fail; - set_cycle_flag(ctx, ctor); - set_cycle_flag(ctx, proto); - - JS_FreeValue(ctx, parent_proto); - JS_FreeValue(ctx, parent_class); - - sp[-2] = ctor; - sp[-1] = proto; - return 0; - fail: - JS_FreeValue(ctx, parent_class); - JS_FreeValue(ctx, parent_proto); - JS_FreeValue(ctx, bfunc); - JS_FreeValue(ctx, proto); - JS_FreeValue(ctx, ctor); - sp[-2] = JS_UNDEFINED; - sp[-1] = JS_UNDEFINED; - return -1; -} - -static void close_var_refs(JSRuntime *rt, JSStackFrame *sf) -{ - struct list_head *el, *el1; - JSVarRef *var_ref; - int var_idx; - - list_for_each_safe(el, el1, &sf->var_ref_list) { - var_ref = list_entry(el, JSVarRef, header.link); - var_idx = var_ref->var_idx; - if (var_ref->is_arg) - var_ref->value = js_dup(sf->arg_buf[var_idx]); - else - var_ref->value = js_dup(sf->var_buf[var_idx]); - var_ref->pvalue = &var_ref->value; - /* the reference is no longer to a local variable */ - var_ref->is_detached = TRUE; - add_gc_object(rt, &var_ref->header, JS_GC_OBJ_TYPE_VAR_REF); - } -} - -static void close_lexical_var(JSContext *ctx, JSStackFrame *sf, int idx, int is_arg) -{ - struct list_head *el, *el1; - JSVarRef *var_ref; - int var_idx = idx; - - list_for_each_safe(el, el1, &sf->var_ref_list) { - var_ref = list_entry(el, JSVarRef, header.link); - if (var_idx == var_ref->var_idx && var_ref->is_arg == is_arg) { - var_ref->value = js_dup(sf->var_buf[var_idx]); - var_ref->pvalue = &var_ref->value; - list_del(&var_ref->header.link); - /* the reference is no longer to a local variable */ - var_ref->is_detached = TRUE; - add_gc_object(ctx->rt, &var_ref->header, JS_GC_OBJ_TYPE_VAR_REF); - } - } -} - -#define JS_CALL_FLAG_COPY_ARGV (1 << 1) -#define JS_CALL_FLAG_GENERATOR (1 << 2) - -static JSValue js_call_c_function(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, int flags) -{ - JSRuntime *rt = ctx->rt; - JSCFunctionType func; - JSObject *p; - JSStackFrame sf_s, *sf = &sf_s, *prev_sf; - JSValue ret_val; - JSValue *arg_buf; - int arg_count, i; - JSCFunctionEnum cproto; - - p = JS_VALUE_GET_OBJ(func_obj); - cproto = p->u.cfunc.cproto; - arg_count = p->u.cfunc.length; - - /* better to always check stack overflow */ - if (js_check_stack_overflow(rt, sizeof(arg_buf[0]) * arg_count)) - return JS_ThrowStackOverflow(ctx); - - prev_sf = rt->current_stack_frame; - sf->prev_frame = prev_sf; - rt->current_stack_frame = sf; - ctx = p->u.cfunc.realm; /* change the current realm */ - - sf->js_mode = 0; - sf->cur_func = func_obj; - sf->arg_count = argc; - arg_buf = argv; - - if (unlikely(argc < arg_count)) { - /* ensure that at least argc_count arguments are readable */ - arg_buf = alloca(sizeof(arg_buf[0]) * arg_count); - for(i = 0; i < argc; i++) - arg_buf[i] = argv[i]; - for(i = argc; i < arg_count; i++) - arg_buf[i] = JS_UNDEFINED; - sf->arg_count = arg_count; - } - sf->arg_buf = arg_buf; - - func = p->u.cfunc.c_function; - switch(cproto) { - case JS_CFUNC_constructor: - case JS_CFUNC_constructor_or_func: - if (!(flags & JS_CALL_FLAG_CONSTRUCTOR)) { - if (cproto == JS_CFUNC_constructor) { - not_a_constructor: - ret_val = JS_ThrowTypeError(ctx, "must be called with new"); - break; - } else { - this_obj = JS_UNDEFINED; - } - } - /* here this_obj is new_target */ - /* fall thru */ - case JS_CFUNC_generic: - ret_val = func.generic(ctx, this_obj, argc, arg_buf); - break; - case JS_CFUNC_constructor_magic: - case JS_CFUNC_constructor_or_func_magic: - if (!(flags & JS_CALL_FLAG_CONSTRUCTOR)) { - if (cproto == JS_CFUNC_constructor_magic) { - goto not_a_constructor; - } else { - this_obj = JS_UNDEFINED; - } - } - /* fall thru */ - case JS_CFUNC_generic_magic: - ret_val = func.generic_magic(ctx, this_obj, argc, arg_buf, - p->u.cfunc.magic); - break; - case JS_CFUNC_getter: - ret_val = func.getter(ctx, this_obj); - break; - case JS_CFUNC_setter: - ret_val = func.setter(ctx, this_obj, arg_buf[0]); - break; - case JS_CFUNC_getter_magic: - ret_val = func.getter_magic(ctx, this_obj, p->u.cfunc.magic); - break; - case JS_CFUNC_setter_magic: - ret_val = func.setter_magic(ctx, this_obj, arg_buf[0], p->u.cfunc.magic); - break; - case JS_CFUNC_f_f: - { - double d1; - - if (unlikely(JS_ToFloat64(ctx, &d1, arg_buf[0]))) { - ret_val = JS_EXCEPTION; - break; - } - ret_val = js_float64(func.f_f(d1)); - } - break; - case JS_CFUNC_f_f_f: - { - double d1, d2; - - if (unlikely(JS_ToFloat64(ctx, &d1, arg_buf[0]))) { - ret_val = JS_EXCEPTION; - break; - } - if (unlikely(JS_ToFloat64(ctx, &d2, arg_buf[1]))) { - ret_val = JS_EXCEPTION; - break; - } - ret_val = js_float64(func.f_f_f(d1, d2)); - } - break; - case JS_CFUNC_iterator_next: - { - int done; - ret_val = func.iterator_next(ctx, this_obj, argc, arg_buf, - &done, p->u.cfunc.magic); - if (!JS_IsException(ret_val) && done != 2) { - ret_val = js_create_iterator_result(ctx, ret_val, done); - } - } - break; - default: - abort(); - } - - rt->current_stack_frame = sf->prev_frame; - return ret_val; -} - -static JSValue js_call_bound_function(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, int flags) -{ - JSObject *p; - JSBoundFunction *bf; - JSValue *arg_buf, new_target; - int arg_count, i; - - p = JS_VALUE_GET_OBJ(func_obj); - bf = p->u.bound_function; - arg_count = bf->argc + argc; - if (js_check_stack_overflow(ctx->rt, sizeof(JSValue) * arg_count)) - return JS_ThrowStackOverflow(ctx); - arg_buf = alloca(sizeof(JSValue) * arg_count); - for(i = 0; i < bf->argc; i++) { - arg_buf[i] = bf->argv[i]; - } - for(i = 0; i < argc; i++) { - arg_buf[bf->argc + i] = argv[i]; - } - if (flags & JS_CALL_FLAG_CONSTRUCTOR) { - new_target = this_obj; - if (js_same_value(ctx, func_obj, new_target)) - new_target = bf->func_obj; - return JS_CallConstructor2(ctx, bf->func_obj, new_target, - arg_count, arg_buf); - } else { - return JS_Call(ctx, bf->func_obj, bf->this_val, - arg_count, arg_buf); - } -} - -/* argument of OP_special_object */ -typedef enum { - OP_SPECIAL_OBJECT_ARGUMENTS, - OP_SPECIAL_OBJECT_MAPPED_ARGUMENTS, - OP_SPECIAL_OBJECT_THIS_FUNC, - OP_SPECIAL_OBJECT_NEW_TARGET, - OP_SPECIAL_OBJECT_HOME_OBJECT, - OP_SPECIAL_OBJECT_VAR_OBJECT, - OP_SPECIAL_OBJECT_IMPORT_META, -} OPSpecialObjectEnum; - -#define FUNC_RET_AWAIT 0 -#define FUNC_RET_YIELD 1 -#define FUNC_RET_YIELD_STAR 2 - -#ifdef DUMP_BYTECODE -static void dump_single_byte_code(JSContext *ctx, const uint8_t *pc, - JSFunctionBytecode *b); -static void print_func_name(JSFunctionBytecode *b); -#endif - -/* argv[] is modified if (flags & JS_CALL_FLAG_COPY_ARGV) = 0. */ -static JSValue JS_CallInternal(JSContext *caller_ctx, JSValue func_obj, - JSValue this_obj, JSValue new_target, - int argc, JSValue *argv, int flags) -{ - JSRuntime *rt = caller_ctx->rt; - JSContext *ctx; - JSObject *p; - JSFunctionBytecode *b; - JSStackFrame sf_s, *sf = &sf_s; - uint8_t *pc; - int opcode, arg_allocated_size, i; - JSValue *local_buf, *stack_buf, *var_buf, *arg_buf, *sp, ret_val, *pval; - JSVarRef **var_refs; - size_t alloca_size; - JSInlineCache *ic; - -#if defined(DUMP_BYTECODE) && (DUMP_BYTECODE & 128) -#define DUMP_BYTECODE_OR_DONT(pc) dump_single_byte_code(ctx, pc, b); -#else -#define DUMP_BYTECODE_OR_DONT(pc) -#endif - -#if !DIRECT_DISPATCH -#define SWITCH(pc) DUMP_BYTECODE_OR_DONT(pc) switch (opcode = *pc++) -#define CASE(op) case op -#define DEFAULT default -#define BREAK break -#else - static const void * const dispatch_table[256] = { -#define DEF(id, size, n_pop, n_push, f) && case_OP_ ## id, -#define def(id, size, n_pop, n_push, f) -#include "quickjs-opcode.h" - [ OP_COUNT ... 255 ] = &&case_default - }; -#define SWITCH(pc) DUMP_BYTECODE_OR_DONT(pc) goto *dispatch_table[opcode = *pc++]; -#define CASE(op) case_ ## op -#define DEFAULT case_default -#define BREAK SWITCH(pc) -#endif - - if (js_poll_interrupts(caller_ctx)) - return JS_EXCEPTION; - if (unlikely(JS_VALUE_GET_TAG(func_obj) != JS_TAG_OBJECT)) { - if (flags & JS_CALL_FLAG_GENERATOR) { - JSAsyncFunctionState *s = JS_VALUE_GET_PTR(func_obj); - /* func_obj get contains a pointer to JSFuncAsyncState */ - /* the stack frame is already allocated */ - sf = &s->frame; - p = JS_VALUE_GET_OBJ(sf->cur_func); - b = p->u.func.function_bytecode; - ctx = b->realm; - var_refs = p->u.func.var_refs; - local_buf = arg_buf = sf->arg_buf; - var_buf = sf->var_buf; - stack_buf = sf->var_buf + b->var_count; - sp = sf->cur_sp; - sf->cur_sp = NULL; /* cur_sp is NULL if the function is running */ - pc = sf->cur_pc; - sf->prev_frame = rt->current_stack_frame; - rt->current_stack_frame = sf; - ic = b->ic; - if (s->throw_flag) - goto exception; - else - goto restart; - } else { - goto not_a_function; - } - } - p = JS_VALUE_GET_OBJ(func_obj); - if (unlikely(p->class_id != JS_CLASS_BYTECODE_FUNCTION)) { - JSClassCall *call_func; - call_func = rt->class_array[p->class_id].call; - if (!call_func) { - not_a_function: - return JS_ThrowTypeError(caller_ctx, "not a function"); - } - return call_func(caller_ctx, func_obj, this_obj, argc, - argv, flags); - } - b = p->u.func.function_bytecode; - - if (unlikely(argc < b->arg_count || (flags & JS_CALL_FLAG_COPY_ARGV))) { - arg_allocated_size = b->arg_count; - } else { - arg_allocated_size = 0; - } - - alloca_size = sizeof(JSValue) * (arg_allocated_size + b->var_count + - b->stack_size); - if (js_check_stack_overflow(rt, alloca_size)) - return JS_ThrowStackOverflow(caller_ctx); - - sf->js_mode = b->js_mode; - arg_buf = argv; - sf->arg_count = argc; - sf->cur_func = func_obj; - init_list_head(&sf->var_ref_list); - var_refs = p->u.func.var_refs; - - local_buf = alloca(alloca_size); - if (unlikely(arg_allocated_size)) { - int n = min_int(argc, b->arg_count); - arg_buf = local_buf; - for(i = 0; i < n; i++) - arg_buf[i] = JS_DupValue(caller_ctx, argv[i]); - for(; i < b->arg_count; i++) - arg_buf[i] = JS_UNDEFINED; - sf->arg_count = b->arg_count; - } - var_buf = local_buf + arg_allocated_size; - sf->var_buf = var_buf; - sf->arg_buf = arg_buf; - - for(i = 0; i < b->var_count; i++) - var_buf[i] = JS_UNDEFINED; - - stack_buf = var_buf + b->var_count; - sp = stack_buf; - pc = b->byte_code_buf; - sf->prev_frame = rt->current_stack_frame; - rt->current_stack_frame = sf; - ctx = b->realm; /* set the current realm */ - ic = b->ic; - -#if defined(DUMP_BYTECODE) && (DUMP_BYTECODE & 128) - print_func_name(b); -#endif - - restart: - for(;;) { - int call_argc; - JSValue *call_argv; - - SWITCH(pc) { - CASE(OP_push_i32): - *sp++ = js_int32(get_u32(pc)); - pc += 4; - BREAK; - CASE(OP_push_const): - *sp++ = js_dup(b->cpool[get_u32(pc)]); - pc += 4; - BREAK; - CASE(OP_push_minus1): - CASE(OP_push_0): - CASE(OP_push_1): - CASE(OP_push_2): - CASE(OP_push_3): - CASE(OP_push_4): - CASE(OP_push_5): - CASE(OP_push_6): - CASE(OP_push_7): - *sp++ = js_int32(opcode - OP_push_0); - BREAK; - CASE(OP_push_i8): - *sp++ = js_int32(get_i8(pc)); - pc += 1; - BREAK; - CASE(OP_push_i16): - *sp++ = js_int32(get_i16(pc)); - pc += 2; - BREAK; - CASE(OP_push_const8): - *sp++ = js_dup(b->cpool[*pc++]); - BREAK; - CASE(OP_fclosure8): - *sp++ = js_closure(ctx, js_dup(b->cpool[*pc++]), var_refs, sf); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - BREAK; - CASE(OP_push_empty_string): - *sp++ = JS_AtomToString(ctx, JS_ATOM_empty_string); - BREAK; - CASE(OP_get_length): - { - JSValue val; - - val = JS_GetProperty(ctx, sp[-1], JS_ATOM_length); - if (unlikely(JS_IsException(val))) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = val; - } - BREAK; - CASE(OP_push_atom_value): - *sp++ = JS_AtomToValue(ctx, get_u32(pc)); - pc += 4; - BREAK; - CASE(OP_undefined): - *sp++ = JS_UNDEFINED; - BREAK; - CASE(OP_null): - *sp++ = JS_NULL; - BREAK; - CASE(OP_push_this): - /* OP_push_this is only called at the start of a function */ - { - JSValue val; - if (!(b->js_mode & JS_MODE_STRICT)) { - uint32_t tag = JS_VALUE_GET_TAG(this_obj); - if (likely(tag == JS_TAG_OBJECT)) - goto normal_this; - if (tag == JS_TAG_NULL || tag == JS_TAG_UNDEFINED) { - val = js_dup(ctx->global_obj); - } else { - val = JS_ToObject(ctx, this_obj); - if (JS_IsException(val)) - goto exception; - } - } else { - normal_this: - val = js_dup(this_obj); - } - *sp++ = val; - } - BREAK; - CASE(OP_push_false): - *sp++ = JS_FALSE; - BREAK; - CASE(OP_push_true): - *sp++ = JS_TRUE; - BREAK; - CASE(OP_object): - *sp++ = JS_NewObject(ctx); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - BREAK; - CASE(OP_special_object): - { - int arg = *pc++; - switch(arg) { - case OP_SPECIAL_OBJECT_ARGUMENTS: - *sp++ = js_build_arguments(ctx, argc, argv); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - break; - case OP_SPECIAL_OBJECT_MAPPED_ARGUMENTS: - *sp++ = js_build_mapped_arguments(ctx, argc, argv, - sf, min_int(argc, b->arg_count)); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - break; - case OP_SPECIAL_OBJECT_THIS_FUNC: - *sp++ = js_dup(sf->cur_func); - break; - case OP_SPECIAL_OBJECT_NEW_TARGET: - *sp++ = js_dup(new_target); - break; - case OP_SPECIAL_OBJECT_HOME_OBJECT: - { - JSObject *p1; - p1 = p->u.func.home_object; - if (unlikely(!p1)) - *sp++ = JS_UNDEFINED; - else - *sp++ = js_dup(JS_MKPTR(JS_TAG_OBJECT, p1)); - } - break; - case OP_SPECIAL_OBJECT_VAR_OBJECT: - *sp++ = JS_NewObjectProto(ctx, JS_NULL); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - break; - case OP_SPECIAL_OBJECT_IMPORT_META: - *sp++ = js_import_meta(ctx); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - break; - default: - abort(); - } - } - BREAK; - CASE(OP_rest): - { - int first = get_u16(pc); - pc += 2; - *sp++ = js_build_rest(ctx, first, argc, argv); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - } - BREAK; - - CASE(OP_drop): - JS_FreeValue(ctx, sp[-1]); - sp--; - BREAK; - CASE(OP_nip): - JS_FreeValue(ctx, sp[-2]); - sp[-2] = sp[-1]; - sp--; - BREAK; - CASE(OP_nip1): /* a b c -> b c */ - JS_FreeValue(ctx, sp[-3]); - sp[-3] = sp[-2]; - sp[-2] = sp[-1]; - sp--; - BREAK; - CASE(OP_dup): - sp[0] = js_dup(sp[-1]); - sp++; - BREAK; - CASE(OP_dup2): /* a b -> a b a b */ - sp[0] = js_dup(sp[-2]); - sp[1] = js_dup(sp[-1]); - sp += 2; - BREAK; - CASE(OP_dup3): /* a b c -> a b c a b c */ - sp[0] = js_dup(sp[-3]); - sp[1] = js_dup(sp[-2]); - sp[2] = js_dup(sp[-1]); - sp += 3; - BREAK; - CASE(OP_dup1): /* a b -> a a b */ - sp[0] = sp[-1]; - sp[-1] = js_dup(sp[-2]); - sp++; - BREAK; - CASE(OP_insert2): /* obj a -> a obj a (dup_x1) */ - sp[0] = sp[-1]; - sp[-1] = sp[-2]; - sp[-2] = js_dup(sp[0]); - sp++; - BREAK; - CASE(OP_insert3): /* obj prop a -> a obj prop a (dup_x2) */ - sp[0] = sp[-1]; - sp[-1] = sp[-2]; - sp[-2] = sp[-3]; - sp[-3] = js_dup(sp[0]); - sp++; - BREAK; - CASE(OP_insert4): /* this obj prop a -> a this obj prop a */ - sp[0] = sp[-1]; - sp[-1] = sp[-2]; - sp[-2] = sp[-3]; - sp[-3] = sp[-4]; - sp[-4] = js_dup(sp[0]); - sp++; - BREAK; - CASE(OP_perm3): /* obj a b -> a obj b (213) */ - { - JSValue tmp; - tmp = sp[-2]; - sp[-2] = sp[-3]; - sp[-3] = tmp; - } - BREAK; - CASE(OP_rot3l): /* x a b -> a b x (231) */ - { - JSValue tmp; - tmp = sp[-3]; - sp[-3] = sp[-2]; - sp[-2] = sp[-1]; - sp[-1] = tmp; - } - BREAK; - CASE(OP_rot4l): /* x a b c -> a b c x */ - { - JSValue tmp; - tmp = sp[-4]; - sp[-4] = sp[-3]; - sp[-3] = sp[-2]; - sp[-2] = sp[-1]; - sp[-1] = tmp; - } - BREAK; - CASE(OP_rot5l): /* x a b c d -> a b c d x */ - { - JSValue tmp; - tmp = sp[-5]; - sp[-5] = sp[-4]; - sp[-4] = sp[-3]; - sp[-3] = sp[-2]; - sp[-2] = sp[-1]; - sp[-1] = tmp; - } - BREAK; - CASE(OP_rot3r): /* a b x -> x a b (312) */ - { - JSValue tmp; - tmp = sp[-1]; - sp[-1] = sp[-2]; - sp[-2] = sp[-3]; - sp[-3] = tmp; - } - BREAK; - CASE(OP_perm4): /* obj prop a b -> a obj prop b */ - { - JSValue tmp; - tmp = sp[-2]; - sp[-2] = sp[-3]; - sp[-3] = sp[-4]; - sp[-4] = tmp; - } - BREAK; - CASE(OP_perm5): /* this obj prop a b -> a this obj prop b */ - { - JSValue tmp; - tmp = sp[-2]; - sp[-2] = sp[-3]; - sp[-3] = sp[-4]; - sp[-4] = sp[-5]; - sp[-5] = tmp; - } - BREAK; - CASE(OP_swap): /* a b -> b a */ - { - JSValue tmp; - tmp = sp[-2]; - sp[-2] = sp[-1]; - sp[-1] = tmp; - } - BREAK; - CASE(OP_swap2): /* a b c d -> c d a b */ - { - JSValue tmp1, tmp2; - tmp1 = sp[-4]; - tmp2 = sp[-3]; - sp[-4] = sp[-2]; - sp[-3] = sp[-1]; - sp[-2] = tmp1; - sp[-1] = tmp2; - } - BREAK; - - CASE(OP_fclosure): - { - JSValue bfunc = js_dup(b->cpool[get_u32(pc)]); - pc += 4; - *sp++ = js_closure(ctx, bfunc, var_refs, sf); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - } - BREAK; - CASE(OP_call0): - CASE(OP_call1): - CASE(OP_call2): - CASE(OP_call3): - call_argc = opcode - OP_call0; - goto has_call_argc; - CASE(OP_call): - CASE(OP_tail_call): - { - call_argc = get_u16(pc); - pc += 2; - goto has_call_argc; - has_call_argc: - call_argv = sp - call_argc; - sf->cur_pc = pc; - ret_val = JS_CallInternal(ctx, call_argv[-1], JS_UNDEFINED, - JS_UNDEFINED, call_argc, call_argv, 0); - if (unlikely(JS_IsException(ret_val))) - goto exception; - if (opcode == OP_tail_call) - goto done; - for(i = -1; i < call_argc; i++) - JS_FreeValue(ctx, call_argv[i]); - sp -= call_argc + 1; - *sp++ = ret_val; - } - BREAK; - CASE(OP_call_constructor): - { - call_argc = get_u16(pc); - pc += 2; - call_argv = sp - call_argc; - sf->cur_pc = pc; - ret_val = JS_CallConstructorInternal(ctx, call_argv[-2], - call_argv[-1], - call_argc, call_argv, 0); - if (unlikely(JS_IsException(ret_val))) - goto exception; - for(i = -2; i < call_argc; i++) - JS_FreeValue(ctx, call_argv[i]); - sp -= call_argc + 2; - *sp++ = ret_val; - } - BREAK; - CASE(OP_call_method): - CASE(OP_tail_call_method): - { - call_argc = get_u16(pc); - pc += 2; - call_argv = sp - call_argc; - sf->cur_pc = pc; - ret_val = JS_CallInternal(ctx, call_argv[-1], call_argv[-2], - JS_UNDEFINED, call_argc, call_argv, 0); - if (unlikely(JS_IsException(ret_val))) - goto exception; - if (opcode == OP_tail_call_method) - goto done; - for(i = -2; i < call_argc; i++) - JS_FreeValue(ctx, call_argv[i]); - sp -= call_argc + 2; - *sp++ = ret_val; - } - BREAK; - CASE(OP_array_from): - { - int i, ret; - - call_argc = get_u16(pc); - pc += 2; - ret_val = JS_NewArray(ctx); - if (unlikely(JS_IsException(ret_val))) - goto exception; - call_argv = sp - call_argc; - for(i = 0; i < call_argc; i++) { - ret = JS_DefinePropertyValue(ctx, ret_val, __JS_AtomFromUInt32(i), call_argv[i], - JS_PROP_C_W_E | JS_PROP_THROW); - call_argv[i] = JS_UNDEFINED; - if (ret < 0) { - JS_FreeValue(ctx, ret_val); - goto exception; - } - } - sp -= call_argc; - *sp++ = ret_val; - } - BREAK; - - CASE(OP_apply): - { - int magic; - magic = get_u16(pc); - pc += 2; - - ret_val = js_function_apply(ctx, sp[-3], 2, &sp[-2], magic); - if (unlikely(JS_IsException(ret_val))) - goto exception; - JS_FreeValue(ctx, sp[-3]); - JS_FreeValue(ctx, sp[-2]); - JS_FreeValue(ctx, sp[-1]); - sp -= 3; - *sp++ = ret_val; - } - BREAK; - CASE(OP_return): - ret_val = *--sp; - goto done; - CASE(OP_return_undef): - ret_val = JS_UNDEFINED; - goto done; - - CASE(OP_check_ctor_return): - /* return TRUE if 'this' should be returned */ - if (!JS_IsObject(sp[-1])) { - if (!JS_IsUndefined(sp[-1])) { - JS_ThrowTypeError(caller_ctx, "derived class constructor must return an object or undefined"); - goto exception; - } - sp[0] = JS_TRUE; - } else { - sp[0] = JS_FALSE; - } - sp++; - BREAK; - CASE(OP_check_ctor): - if (JS_IsUndefined(new_target)) { - JS_ThrowTypeError(ctx, "class constructors must be invoked with 'new'"); - goto exception; - } - BREAK; - CASE(OP_check_brand): - if (JS_CheckBrand(ctx, sp[-2], sp[-1]) < 0) - goto exception; - BREAK; - CASE(OP_add_brand): - if (JS_AddBrand(ctx, sp[-2], sp[-1]) < 0) - goto exception; - JS_FreeValue(ctx, sp[-2]); - JS_FreeValue(ctx, sp[-1]); - sp -= 2; - BREAK; - - CASE(OP_throw): - JS_Throw(ctx, *--sp); - goto exception; - - CASE(OP_throw_error): -#define JS_THROW_VAR_RO 0 -#define JS_THROW_VAR_REDECL 1 -#define JS_THROW_VAR_UNINITIALIZED 2 -#define JS_THROW_ERROR_DELETE_SUPER 3 -#define JS_THROW_ERROR_ITERATOR_THROW 4 - { - JSAtom atom; - int type; - atom = get_u32(pc); - type = pc[4]; - pc += 5; - if (type == JS_THROW_VAR_RO) - JS_ThrowTypeErrorReadOnly(ctx, JS_PROP_THROW, atom); - else - if (type == JS_THROW_VAR_REDECL) - JS_ThrowSyntaxErrorVarRedeclaration(ctx, atom); - else - if (type == JS_THROW_VAR_UNINITIALIZED) - JS_ThrowReferenceErrorUninitialized(ctx, atom); - else - if (type == JS_THROW_ERROR_DELETE_SUPER) - JS_ThrowReferenceError(ctx, "unsupported reference to 'super'"); - else - if (type == JS_THROW_ERROR_ITERATOR_THROW) - JS_ThrowTypeError(ctx, "iterator does not have a throw method"); - else - JS_ThrowInternalError(ctx, "invalid throw var type %d", type); - } - goto exception; - - CASE(OP_eval): - { - JSValue obj; - int scope_idx; - call_argc = get_u16(pc); - scope_idx = get_u16(pc + 2) - 1; - pc += 4; - call_argv = sp - call_argc; - sf->cur_pc = pc; - if (js_same_value(ctx, call_argv[-1], ctx->eval_obj)) { - if (call_argc >= 1) - obj = call_argv[0]; - else - obj = JS_UNDEFINED; - ret_val = JS_EvalObject(ctx, JS_UNDEFINED, obj, - JS_EVAL_TYPE_DIRECT, scope_idx); - } else { - ret_val = JS_CallInternal(ctx, call_argv[-1], JS_UNDEFINED, - JS_UNDEFINED, call_argc, call_argv, 0); - } - if (unlikely(JS_IsException(ret_val))) - goto exception; - for(i = -1; i < call_argc; i++) - JS_FreeValue(ctx, call_argv[i]); - sp -= call_argc + 1; - *sp++ = ret_val; - } - BREAK; - /* could merge with OP_apply */ - CASE(OP_apply_eval): - { - int scope_idx; - uint32_t len; - JSValue *tab; - JSValue obj; - - scope_idx = get_u16(pc) - 1; - pc += 2; - tab = build_arg_list(ctx, &len, sp[-1]); - if (!tab) - goto exception; - if (js_same_value(ctx, sp[-2], ctx->eval_obj)) { - if (len >= 1) - obj = tab[0]; - else - obj = JS_UNDEFINED; - ret_val = JS_EvalObject(ctx, JS_UNDEFINED, obj, - JS_EVAL_TYPE_DIRECT, scope_idx); - } else { - ret_val = JS_Call(ctx, sp[-2], JS_UNDEFINED, len, - tab); - } - free_arg_list(ctx, tab, len); - if (unlikely(JS_IsException(ret_val))) - goto exception; - JS_FreeValue(ctx, sp[-2]); - JS_FreeValue(ctx, sp[-1]); - sp -= 2; - *sp++ = ret_val; - } - BREAK; - - CASE(OP_regexp): - { - sp[-2] = js_regexp_constructor_internal(ctx, JS_UNDEFINED, - sp[-2], sp[-1]); - sp--; - } - BREAK; - - CASE(OP_get_super): - { - JSValue proto; - proto = JS_GetPrototype(ctx, sp[-1]); - if (JS_IsException(proto)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = proto; - } - BREAK; - - CASE(OP_import): - { - JSValue val; - val = js_dynamic_import(ctx, sp[-1]); - if (JS_IsException(val)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = val; - } - BREAK; - - CASE(OP_check_var): - { - int ret; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - - ret = JS_CheckGlobalVar(ctx, atom); - if (ret < 0) - goto exception; - *sp++ = js_bool(ret); - } - BREAK; - - CASE(OP_get_var_undef): - CASE(OP_get_var): - { - JSValue val; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - - val = JS_GetGlobalVar(ctx, atom, opcode - OP_get_var_undef); - if (unlikely(JS_IsException(val))) - goto exception; - *sp++ = val; - } - BREAK; - - CASE(OP_put_var): - CASE(OP_put_var_init): - { - int ret; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - - ret = JS_SetGlobalVar(ctx, atom, sp[-1], opcode - OP_put_var); - sp--; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_put_var_strict): - { - int ret; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - - /* sp[-2] is JS_TRUE or JS_FALSE */ - if (unlikely(!JS_VALUE_GET_INT(sp[-2]))) { - JS_ThrowReferenceErrorNotDefined(ctx, atom); - goto exception; - } - ret = JS_SetGlobalVar(ctx, atom, sp[-1], 2); - sp -= 2; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_check_define_var): - { - JSAtom atom; - int flags; - atom = get_u32(pc); - flags = pc[4]; - pc += 5; - if (JS_CheckDefineGlobalVar(ctx, atom, flags)) - goto exception; - } - BREAK; - CASE(OP_define_var): - { - JSAtom atom; - int flags; - atom = get_u32(pc); - flags = pc[4]; - pc += 5; - if (JS_DefineGlobalVar(ctx, atom, flags)) - goto exception; - } - BREAK; - CASE(OP_define_func): - { - JSAtom atom; - int flags; - atom = get_u32(pc); - flags = pc[4]; - pc += 5; - if (JS_DefineGlobalFunction(ctx, atom, sp[-1], flags)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp--; - } - BREAK; - - CASE(OP_get_loc): - { - int idx; - idx = get_u16(pc); - pc += 2; - sp[0] = js_dup(var_buf[idx]); - sp++; - } - BREAK; - CASE(OP_put_loc): - { - int idx; - idx = get_u16(pc); - pc += 2; - set_value(ctx, &var_buf[idx], sp[-1]); - sp--; - } - BREAK; - CASE(OP_set_loc): - { - int idx; - idx = get_u16(pc); - pc += 2; - set_value(ctx, &var_buf[idx], js_dup(sp[-1])); - } - BREAK; - CASE(OP_get_arg): - { - int idx; - idx = get_u16(pc); - pc += 2; - sp[0] = js_dup(arg_buf[idx]); - sp++; - } - BREAK; - CASE(OP_put_arg): - { - int idx; - idx = get_u16(pc); - pc += 2; - set_value(ctx, &arg_buf[idx], sp[-1]); - sp--; - } - BREAK; - CASE(OP_set_arg): - { - int idx; - idx = get_u16(pc); - pc += 2; - set_value(ctx, &arg_buf[idx], js_dup(sp[-1])); - } - BREAK; - - CASE(OP_get_loc8): *sp++ = js_dup(var_buf[*pc++]); BREAK; - CASE(OP_put_loc8): set_value(ctx, &var_buf[*pc++], *--sp); BREAK; - CASE(OP_set_loc8): set_value(ctx, &var_buf[*pc++], js_dup(sp[-1])); BREAK; - - // Observation: get_loc0 and get_loc1 are individually very - // frequent opcodes _and_ they are very often paired together, - // making them ideal candidates for opcode fusion. - CASE(OP_get_loc0_loc1): - *sp++ = js_dup(var_buf[0]); - *sp++ = js_dup(var_buf[1]); - BREAK; - - CASE(OP_get_loc0): *sp++ = js_dup(var_buf[0]); BREAK; - CASE(OP_get_loc1): *sp++ = js_dup(var_buf[1]); BREAK; - CASE(OP_get_loc2): *sp++ = js_dup(var_buf[2]); BREAK; - CASE(OP_get_loc3): *sp++ = js_dup(var_buf[3]); BREAK; - CASE(OP_put_loc0): set_value(ctx, &var_buf[0], *--sp); BREAK; - CASE(OP_put_loc1): set_value(ctx, &var_buf[1], *--sp); BREAK; - CASE(OP_put_loc2): set_value(ctx, &var_buf[2], *--sp); BREAK; - CASE(OP_put_loc3): set_value(ctx, &var_buf[3], *--sp); BREAK; - CASE(OP_set_loc0): set_value(ctx, &var_buf[0], js_dup(sp[-1])); BREAK; - CASE(OP_set_loc1): set_value(ctx, &var_buf[1], js_dup(sp[-1])); BREAK; - CASE(OP_set_loc2): set_value(ctx, &var_buf[2], js_dup(sp[-1])); BREAK; - CASE(OP_set_loc3): set_value(ctx, &var_buf[3], js_dup(sp[-1])); BREAK; - CASE(OP_get_arg0): *sp++ = js_dup(arg_buf[0]); BREAK; - CASE(OP_get_arg1): *sp++ = js_dup(arg_buf[1]); BREAK; - CASE(OP_get_arg2): *sp++ = js_dup(arg_buf[2]); BREAK; - CASE(OP_get_arg3): *sp++ = js_dup(arg_buf[3]); BREAK; - CASE(OP_put_arg0): set_value(ctx, &arg_buf[0], *--sp); BREAK; - CASE(OP_put_arg1): set_value(ctx, &arg_buf[1], *--sp); BREAK; - CASE(OP_put_arg2): set_value(ctx, &arg_buf[2], *--sp); BREAK; - CASE(OP_put_arg3): set_value(ctx, &arg_buf[3], *--sp); BREAK; - CASE(OP_set_arg0): set_value(ctx, &arg_buf[0], js_dup(sp[-1])); BREAK; - CASE(OP_set_arg1): set_value(ctx, &arg_buf[1], js_dup(sp[-1])); BREAK; - CASE(OP_set_arg2): set_value(ctx, &arg_buf[2], js_dup(sp[-1])); BREAK; - CASE(OP_set_arg3): set_value(ctx, &arg_buf[3], js_dup(sp[-1])); BREAK; - CASE(OP_get_var_ref0): *sp++ = js_dup(*var_refs[0]->pvalue); BREAK; - CASE(OP_get_var_ref1): *sp++ = js_dup(*var_refs[1]->pvalue); BREAK; - CASE(OP_get_var_ref2): *sp++ = js_dup(*var_refs[2]->pvalue); BREAK; - CASE(OP_get_var_ref3): *sp++ = js_dup(*var_refs[3]->pvalue); BREAK; - CASE(OP_put_var_ref0): set_value(ctx, var_refs[0]->pvalue, *--sp); BREAK; - CASE(OP_put_var_ref1): set_value(ctx, var_refs[1]->pvalue, *--sp); BREAK; - CASE(OP_put_var_ref2): set_value(ctx, var_refs[2]->pvalue, *--sp); BREAK; - CASE(OP_put_var_ref3): set_value(ctx, var_refs[3]->pvalue, *--sp); BREAK; - CASE(OP_set_var_ref0): set_value(ctx, var_refs[0]->pvalue, js_dup(sp[-1])); BREAK; - CASE(OP_set_var_ref1): set_value(ctx, var_refs[1]->pvalue, js_dup(sp[-1])); BREAK; - CASE(OP_set_var_ref2): set_value(ctx, var_refs[2]->pvalue, js_dup(sp[-1])); BREAK; - CASE(OP_set_var_ref3): set_value(ctx, var_refs[3]->pvalue, js_dup(sp[-1])); BREAK; - - CASE(OP_get_var_ref): - { - int idx; - JSValue val; - idx = get_u16(pc); - pc += 2; - val = *var_refs[idx]->pvalue; - sp[0] = js_dup(val); - sp++; - } - BREAK; - CASE(OP_put_var_ref): - { - int idx; - idx = get_u16(pc); - pc += 2; - set_value(ctx, var_refs[idx]->pvalue, sp[-1]); - sp--; - } - BREAK; - CASE(OP_set_var_ref): - { - int idx; - idx = get_u16(pc); - pc += 2; - set_value(ctx, var_refs[idx]->pvalue, js_dup(sp[-1])); - } - BREAK; - CASE(OP_get_var_ref_check): - { - int idx; - JSValue val; - idx = get_u16(pc); - pc += 2; - val = *var_refs[idx]->pvalue; - if (unlikely(JS_IsUninitialized(val))) { - JS_ThrowReferenceErrorUninitialized2(ctx, b, idx, TRUE); - goto exception; - } - sp[0] = js_dup(val); - sp++; - } - BREAK; - CASE(OP_put_var_ref_check): - { - int idx; - idx = get_u16(pc); - pc += 2; - if (unlikely(JS_IsUninitialized(*var_refs[idx]->pvalue))) { - JS_ThrowReferenceErrorUninitialized2(ctx, b, idx, TRUE); - goto exception; - } - set_value(ctx, var_refs[idx]->pvalue, sp[-1]); - sp--; - } - BREAK; - CASE(OP_put_var_ref_check_init): - { - int idx; - idx = get_u16(pc); - pc += 2; - if (unlikely(!JS_IsUninitialized(*var_refs[idx]->pvalue))) { - JS_ThrowReferenceErrorUninitialized2(ctx, b, idx, TRUE); - goto exception; - } - set_value(ctx, var_refs[idx]->pvalue, sp[-1]); - sp--; - } - BREAK; - CASE(OP_set_loc_uninitialized): - { - int idx; - idx = get_u16(pc); - pc += 2; - set_value(ctx, &var_buf[idx], JS_UNINITIALIZED); - } - BREAK; - CASE(OP_get_loc_check): - { - int idx; - idx = get_u16(pc); - pc += 2; - if (unlikely(JS_IsUninitialized(var_buf[idx]))) { - JS_ThrowReferenceErrorUninitialized2(caller_ctx, b, idx, - FALSE); - goto exception; - } - sp[0] = js_dup(var_buf[idx]); - sp++; - } - BREAK; - CASE(OP_put_loc_check): - { - int idx; - idx = get_u16(pc); - pc += 2; - if (unlikely(JS_IsUninitialized(var_buf[idx]))) { - JS_ThrowReferenceErrorUninitialized2(caller_ctx, b, idx, - FALSE); - goto exception; - } - set_value(ctx, &var_buf[idx], sp[-1]); - sp--; - } - BREAK; - CASE(OP_put_loc_check_init): - { - int idx; - idx = get_u16(pc); - pc += 2; - if (unlikely(!JS_IsUninitialized(var_buf[idx]))) { - JS_ThrowReferenceError(caller_ctx, - "'this' can be initialized only once"); - goto exception; - } - set_value(ctx, &var_buf[idx], sp[-1]); - sp--; - } - BREAK; - CASE(OP_close_loc): - { - int idx; - idx = get_u16(pc); - pc += 2; - close_lexical_var(ctx, sf, idx, FALSE); - } - BREAK; - - CASE(OP_make_loc_ref): - CASE(OP_make_arg_ref): - CASE(OP_make_var_ref_ref): - { - JSVarRef *var_ref; - JSProperty *pr; - JSAtom atom; - int idx; - atom = get_u32(pc); - idx = get_u16(pc + 4); - pc += 6; - *sp++ = JS_NewObjectProto(ctx, JS_NULL); - if (unlikely(JS_IsException(sp[-1]))) - goto exception; - if (opcode == OP_make_var_ref_ref) { - var_ref = var_refs[idx]; - var_ref->header.ref_count++; - } else { - var_ref = get_var_ref(ctx, sf, idx, opcode == OP_make_arg_ref); - if (!var_ref) - goto exception; - } - pr = add_property(ctx, JS_VALUE_GET_OBJ(sp[-1]), atom, - JS_PROP_WRITABLE | JS_PROP_VARREF); - if (!pr) { - free_var_ref(rt, var_ref); - goto exception; - } - pr->u.var_ref = var_ref; - *sp++ = JS_AtomToValue(ctx, atom); - } - BREAK; - CASE(OP_make_var_ref): - { - JSAtom atom; - atom = get_u32(pc); - pc += 4; - - if (JS_GetGlobalVarRef(ctx, atom, sp)) - goto exception; - sp += 2; - } - BREAK; - - CASE(OP_goto): - pc += (int32_t)get_u32(pc); - if (unlikely(js_poll_interrupts(ctx))) - goto exception; - BREAK; - CASE(OP_goto16): - pc += (int16_t)get_u16(pc); - if (unlikely(js_poll_interrupts(ctx))) - goto exception; - BREAK; - CASE(OP_goto8): - pc += (int8_t)pc[0]; - if (unlikely(js_poll_interrupts(ctx))) - goto exception; - BREAK; - CASE(OP_if_true): - { - int res; - JSValue op1; - - op1 = sp[-1]; - pc += 4; - if ((uint32_t)JS_VALUE_GET_TAG(op1) <= JS_TAG_UNDEFINED) { - res = JS_VALUE_GET_INT(op1); - } else { - res = JS_ToBoolFree(ctx, op1); - } - sp--; - if (res) { - pc += (int32_t)get_u32(pc - 4) - 4; - } - if (unlikely(js_poll_interrupts(ctx))) - goto exception; - } - BREAK; - CASE(OP_if_false): - { - int res; - JSValue op1; - - op1 = sp[-1]; - pc += 4; - if ((uint32_t)JS_VALUE_GET_TAG(op1) <= JS_TAG_UNDEFINED) { - res = JS_VALUE_GET_INT(op1); - } else { - res = JS_ToBoolFree(ctx, op1); - } - sp--; - if (!res) { - pc += (int32_t)get_u32(pc - 4) - 4; - } - if (unlikely(js_poll_interrupts(ctx))) - goto exception; - } - BREAK; - CASE(OP_if_true8): - { - int res; - JSValue op1; - - op1 = sp[-1]; - pc += 1; - if ((uint32_t)JS_VALUE_GET_TAG(op1) <= JS_TAG_UNDEFINED) { - res = JS_VALUE_GET_INT(op1); - } else { - res = JS_ToBoolFree(ctx, op1); - } - sp--; - if (res) { - pc += (int8_t)pc[-1] - 1; - } - if (unlikely(js_poll_interrupts(ctx))) - goto exception; - } - BREAK; - CASE(OP_if_false8): - { - int res; - JSValue op1; - - op1 = sp[-1]; - pc += 1; - if ((uint32_t)JS_VALUE_GET_TAG(op1) <= JS_TAG_UNDEFINED) { - res = JS_VALUE_GET_INT(op1); - } else { - res = JS_ToBoolFree(ctx, op1); - } - sp--; - if (!res) { - pc += (int8_t)pc[-1] - 1; - } - if (unlikely(js_poll_interrupts(ctx))) - goto exception; - } - BREAK; - CASE(OP_catch): - { - int32_t diff; - diff = get_u32(pc); - sp[0] = JS_NewCatchOffset(ctx, pc + diff - b->byte_code_buf); - sp++; - pc += 4; - } - BREAK; - CASE(OP_gosub): - { - int32_t diff; - diff = get_u32(pc); - /* XXX: should have a different tag to avoid security flaw */ - sp[0] = js_int32(pc + 4 - b->byte_code_buf); - sp++; - pc += diff; - } - BREAK; - CASE(OP_ret): - { - JSValue op1; - uint32_t pos; - op1 = sp[-1]; - if (unlikely(JS_VALUE_GET_TAG(op1) != JS_TAG_INT)) - goto ret_fail; - pos = JS_VALUE_GET_INT(op1); - if (unlikely(pos >= b->byte_code_len)) { - ret_fail: - JS_ThrowInternalError(ctx, "invalid ret value"); - goto exception; - } - sp--; - pc = b->byte_code_buf + pos; - } - BREAK; - - CASE(OP_for_in_start): - if (js_for_in_start(ctx, sp)) - goto exception; - BREAK; - CASE(OP_for_in_next): - if (js_for_in_next(ctx, sp)) - goto exception; - sp += 2; - BREAK; - CASE(OP_for_of_start): - if (js_for_of_start(ctx, sp, FALSE)) - goto exception; - sp += 1; - *sp++ = JS_NewCatchOffset(ctx, 0); - BREAK; - CASE(OP_for_of_next): - { - int offset = -3 - pc[0]; - pc += 1; - if (js_for_of_next(ctx, sp, offset)) - goto exception; - sp += 2; - } - BREAK; - CASE(OP_for_await_of_start): - if (js_for_of_start(ctx, sp, TRUE)) - goto exception; - sp += 1; - *sp++ = JS_NewCatchOffset(ctx, 0); - BREAK; - CASE(OP_iterator_get_value_done): - if (js_iterator_get_value_done(ctx, sp)) - goto exception; - sp += 1; - BREAK; - CASE(OP_iterator_check_object): - if (unlikely(!JS_IsObject(sp[-1]))) { - JS_ThrowTypeError(ctx, "iterator must return an object"); - goto exception; - } - BREAK; - - CASE(OP_iterator_close): - /* iter_obj next catch_offset -> */ - sp--; /* drop the catch offset to avoid getting caught by exception */ - JS_FreeValue(ctx, sp[-1]); /* drop the next method */ - sp--; - if (!JS_IsUndefined(sp[-1])) { - if (JS_IteratorClose(ctx, sp[-1], FALSE)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - } - sp--; - BREAK; - CASE(OP_nip_catch): - { - JSValue ret_val; - /* catch_offset ... ret_val -> ret_eval */ - ret_val = *--sp; - while (sp > stack_buf && - JS_VALUE_GET_TAG(sp[-1]) != JS_TAG_CATCH_OFFSET) { - JS_FreeValue(ctx, *--sp); - } - if (unlikely(sp == stack_buf)) { - JS_ThrowInternalError(ctx, "nip_catch"); - JS_FreeValue(ctx, ret_val); - goto exception; - } - sp[-1] = ret_val; - } - BREAK; - - CASE(OP_iterator_next): - /* stack: iter_obj next catch_offset val */ - { - JSValue ret; - ret = JS_Call(ctx, sp[-3], sp[-4], - 1, (sp - 1)); - if (JS_IsException(ret)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = ret; - } - BREAK; - - CASE(OP_iterator_call): - /* stack: iter_obj next catch_offset val */ - { - JSValue method, ret; - BOOL ret_flag; - int flags; - flags = *pc++; - method = JS_GetProperty(ctx, sp[-4], (flags & 1) ? - JS_ATOM_throw : JS_ATOM_return); - if (JS_IsException(method)) - goto exception; - if (JS_IsUndefined(method) || JS_IsNull(method)) { - ret_flag = TRUE; - } else { - if (flags & 2) { - /* no argument */ - ret = JS_CallFree(ctx, method, sp[-4], - 0, NULL); - } else { - ret = JS_CallFree(ctx, method, sp[-4], - 1, (sp - 1)); - } - if (JS_IsException(ret)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = ret; - ret_flag = FALSE; - } - sp[0] = js_bool(ret_flag); - sp += 1; - } - BREAK; - - CASE(OP_lnot): - { - int res; - JSValue op1; - - op1 = sp[-1]; - if ((uint32_t)JS_VALUE_GET_TAG(op1) <= JS_TAG_UNDEFINED) { - res = JS_VALUE_GET_INT(op1) != 0; - } else { - res = JS_ToBoolFree(ctx, op1); - } - sp[-1] = js_bool(!res); - } - BREAK; - - CASE(OP_get_field): - { - JSValue val; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - val = JS_GetPropertyInternal2(ctx, sp[-1], atom, sp[-1], ic, FALSE); - if (unlikely(JS_IsException(val))) - goto exception; - if (ic && ic->updated == TRUE) { - ic->updated = FALSE; - put_u8(pc - 5, OP_get_field_ic); - put_u32(pc - 4, ic->updated_offset); - JS_FreeAtom(ctx, atom); - } - JS_FreeValue(ctx, sp[-1]); - sp[-1] = val; - } - BREAK; - - CASE(OP_get_field_ic): - { - JSValue val; - JSAtom atom; - int32_t ic_offset; - ic_offset = get_u32(pc); - atom = get_ic_atom(ic, ic_offset); - pc += 4; - val = JS_GetPropertyInternalWithIC(ctx, sp[-1], atom, sp[-1], ic, ic_offset, FALSE); - ic->updated = FALSE; - if (unlikely(JS_IsException(val))) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = val; - } - BREAK; - CASE(OP_get_field2): - { - JSValue val; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - val = JS_GetPropertyInternal2(ctx, sp[-1], atom, sp[-1], NULL, FALSE); - if (unlikely(JS_IsException(val))) - goto exception; - if (ic != NULL && ic->updated == TRUE) { - ic->updated = FALSE; - put_u8(pc - 5, OP_get_field2_ic); - put_u32(pc - 4, ic->updated_offset); - JS_FreeAtom(ctx, atom); - } - *sp++ = val; - } - BREAK; - - CASE(OP_get_field2_ic): - { - JSValue val; - JSAtom atom; - int32_t ic_offset; - ic_offset = get_u32(pc); - atom = get_ic_atom(ic, ic_offset); - pc += 4; - val = JS_GetPropertyInternalWithIC(ctx, sp[-1], atom, sp[-1], ic, ic_offset, FALSE); - ic->updated = FALSE; - if (unlikely(JS_IsException(val))) - goto exception; - *sp++ = val; - } - BREAK; - - CASE(OP_put_field): - { - int ret; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - ret = JS_SetPropertyInternal2(ctx, - sp[-2], atom, - sp[-1], sp[-2], - JS_PROP_THROW_STRICT, ic); - JS_FreeValue(ctx, sp[-2]); - sp -= 2; - if (unlikely(ret < 0)) - goto exception; - if (ic != NULL && ic->updated == TRUE) { - ic->updated = FALSE; - put_u8(pc - 5, OP_put_field_ic); - put_u32(pc - 4, ic->updated_offset); - JS_FreeAtom(ctx, atom); - } - } - BREAK; - - CASE(OP_put_field_ic): - { - int ret; - JSAtom atom; - int32_t ic_offset; - ic_offset = get_u32(pc); - atom = get_ic_atom(ic, ic_offset); - pc += 4; - ret = JS_SetPropertyInternalWithIC(ctx, sp[-2], atom, sp[-1], JS_PROP_THROW_STRICT, ic, ic_offset); - ic->updated = FALSE; - JS_FreeValue(ctx, sp[-2]); - sp -= 2; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_private_symbol): - { - JSAtom atom; - JSValue val; - - atom = get_u32(pc); - pc += 4; - val = JS_NewSymbolFromAtom(ctx, atom, JS_ATOM_TYPE_PRIVATE); - if (JS_IsException(val)) - goto exception; - *sp++ = val; - } - BREAK; - - CASE(OP_get_private_field): - { - JSValue val; - - val = JS_GetPrivateField(ctx, sp[-2], sp[-1]); - JS_FreeValue(ctx, sp[-1]); - JS_FreeValue(ctx, sp[-2]); - sp[-2] = val; - sp--; - if (unlikely(JS_IsException(val))) - goto exception; - } - BREAK; - - CASE(OP_put_private_field): - { - int ret; - ret = JS_SetPrivateField(ctx, sp[-3], sp[-1], sp[-2]); - JS_FreeValue(ctx, sp[-3]); - JS_FreeValue(ctx, sp[-1]); - sp -= 3; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_define_private_field): - { - int ret; - ret = JS_DefinePrivateField(ctx, sp[-3], sp[-2], sp[-1]); - JS_FreeValue(ctx, sp[-2]); - sp -= 2; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_define_field): - { - int ret; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - - ret = JS_DefinePropertyValue(ctx, sp[-2], atom, sp[-1], - JS_PROP_C_W_E | JS_PROP_THROW); - sp--; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_set_name): - { - int ret; - JSAtom atom; - atom = get_u32(pc); - pc += 4; - - ret = JS_DefineObjectName(ctx, sp[-1], atom, JS_PROP_CONFIGURABLE); - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - CASE(OP_set_name_computed): - { - int ret; - ret = JS_DefineObjectNameComputed(ctx, sp[-1], sp[-2], JS_PROP_CONFIGURABLE); - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - CASE(OP_set_proto): - { - JSValue proto; - proto = sp[-1]; - if (JS_IsObject(proto) || JS_IsNull(proto)) { - if (JS_SetPrototypeInternal(ctx, sp[-2], proto, TRUE) < 0) - goto exception; - } - JS_FreeValue(ctx, proto); - sp--; - } - BREAK; - CASE(OP_set_home_object): - js_method_set_home_object(ctx, sp[-1], sp[-2]); - BREAK; - CASE(OP_define_method): - CASE(OP_define_method_computed): - { - JSValue getter, setter, value; - JSValue obj; - JSAtom atom; - int flags, ret, op_flags; - BOOL is_computed; -#define OP_DEFINE_METHOD_METHOD 0 -#define OP_DEFINE_METHOD_GETTER 1 -#define OP_DEFINE_METHOD_SETTER 2 -#define OP_DEFINE_METHOD_ENUMERABLE 4 - - is_computed = (opcode == OP_define_method_computed); - if (is_computed) { - atom = JS_ValueToAtom(ctx, sp[-2]); - if (unlikely(atom == JS_ATOM_NULL)) - goto exception; - opcode += OP_define_method - OP_define_method_computed; - } else { - atom = get_u32(pc); - pc += 4; - } - op_flags = *pc++; - - obj = sp[-2 - is_computed]; - flags = JS_PROP_HAS_CONFIGURABLE | JS_PROP_CONFIGURABLE | - JS_PROP_HAS_ENUMERABLE | JS_PROP_THROW; - if (op_flags & OP_DEFINE_METHOD_ENUMERABLE) - flags |= JS_PROP_ENUMERABLE; - op_flags &= 3; - value = JS_UNDEFINED; - getter = JS_UNDEFINED; - setter = JS_UNDEFINED; - if (op_flags == OP_DEFINE_METHOD_METHOD) { - value = sp[-1]; - flags |= JS_PROP_HAS_VALUE | JS_PROP_HAS_WRITABLE | JS_PROP_WRITABLE; - } else if (op_flags == OP_DEFINE_METHOD_GETTER) { - getter = sp[-1]; - flags |= JS_PROP_HAS_GET; - } else { - setter = sp[-1]; - flags |= JS_PROP_HAS_SET; - } - ret = js_method_set_properties(ctx, sp[-1], atom, flags, obj); - if (ret >= 0) { - ret = JS_DefineProperty(ctx, obj, atom, value, - getter, setter, flags); - } - JS_FreeValue(ctx, sp[-1]); - if (is_computed) { - JS_FreeAtom(ctx, atom); - JS_FreeValue(ctx, sp[-2]); - } - sp -= 1 + is_computed; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_define_class): - CASE(OP_define_class_computed): - { - int class_flags; - JSAtom atom; - - atom = get_u32(pc); - class_flags = pc[4]; - pc += 5; - if (js_op_define_class(ctx, sp, atom, class_flags, - var_refs, sf, - (opcode == OP_define_class_computed)) < 0) - goto exception; - } - BREAK; - - CASE(OP_get_array_el): - { - JSValue val; - - val = JS_GetPropertyValue(ctx, sp[-2], sp[-1]); - JS_FreeValue(ctx, sp[-2]); - sp[-2] = val; - sp--; - if (unlikely(JS_IsException(val))) - goto exception; - } - BREAK; - - CASE(OP_get_array_el2): - { - JSValue val; - - val = JS_GetPropertyValue(ctx, sp[-2], sp[-1]); - sp[-1] = val; - if (unlikely(JS_IsException(val))) - goto exception; - } - BREAK; - - CASE(OP_get_ref_value): - { - JSValue val; - if (unlikely(JS_IsUndefined(sp[-2]))) { - JSAtom atom = JS_ValueToAtom(ctx, sp[-1]); - if (atom != JS_ATOM_NULL) { - JS_ThrowReferenceErrorNotDefined(ctx, atom); - JS_FreeAtom(ctx, atom); - } - goto exception; - } - val = JS_GetPropertyValue(ctx, sp[-2], - js_dup(sp[-1])); - if (unlikely(JS_IsException(val))) - goto exception; - sp[0] = val; - sp++; - } - BREAK; - - CASE(OP_get_super_value): - { - JSValue val; - JSAtom atom; - atom = JS_ValueToAtom(ctx, sp[-1]); - if (unlikely(atom == JS_ATOM_NULL)) - goto exception; - val = JS_GetPropertyInternal2(ctx, sp[-2], atom, sp[-3], NULL, FALSE); - JS_FreeAtom(ctx, atom); - if (unlikely(JS_IsException(val))) - goto exception; - JS_FreeValue(ctx, sp[-1]); - JS_FreeValue(ctx, sp[-2]); - JS_FreeValue(ctx, sp[-3]); - sp[-3] = val; - sp -= 2; - } - BREAK; - - CASE(OP_put_array_el): - { - int ret; - - ret = JS_SetPropertyValue(ctx, sp[-3], sp[-2], sp[-1], JS_PROP_THROW_STRICT); - JS_FreeValue(ctx, sp[-3]); - sp -= 3; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_put_ref_value): - { - int ret, flags; - flags = JS_PROP_THROW_STRICT; - if (unlikely(JS_IsUndefined(sp[-3]))) { - if (is_strict_mode(ctx)) { - JSAtom atom = JS_ValueToAtom(ctx, sp[-2]); - if (atom != JS_ATOM_NULL) { - JS_ThrowReferenceErrorNotDefined(ctx, atom); - JS_FreeAtom(ctx, atom); - } - goto exception; - } else { - sp[-3] = js_dup(ctx->global_obj); - } - } else { - if (is_strict_mode(ctx)) - flags |= JS_PROP_NO_ADD; - } - ret = JS_SetPropertyValue(ctx, sp[-3], sp[-2], sp[-1], flags); - JS_FreeValue(ctx, sp[-3]); - sp -= 3; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_put_super_value): - { - int ret; - JSAtom atom; - if (JS_VALUE_GET_TAG(sp[-3]) != JS_TAG_OBJECT) { - JS_ThrowTypeErrorNotAnObject(ctx); - goto exception; - } - atom = JS_ValueToAtom(ctx, sp[-2]); - if (unlikely(atom == JS_ATOM_NULL)) - goto exception; - ret = JS_SetPropertyInternal2(ctx, - sp[-3], atom, - sp[-1], sp[-4], - JS_PROP_THROW_STRICT, NULL); - JS_FreeAtom(ctx, atom); - JS_FreeValue(ctx, sp[-4]); - JS_FreeValue(ctx, sp[-3]); - JS_FreeValue(ctx, sp[-2]); - sp -= 4; - if (ret < 0) - goto exception; - } - BREAK; - - CASE(OP_define_array_el): - { - int ret; - ret = JS_DefinePropertyValueValue(ctx, sp[-3], js_dup(sp[-2]), sp[-1], - JS_PROP_C_W_E | JS_PROP_THROW); - sp -= 1; - if (unlikely(ret < 0)) - goto exception; - } - BREAK; - - CASE(OP_append): /* array pos enumobj -- array pos */ - { - if (js_append_enumerate(ctx, sp)) - goto exception; - JS_FreeValue(ctx, *--sp); - } - BREAK; - - CASE(OP_copy_data_properties): /* target source excludeList */ - { - /* stack offsets (-1 based): - 2 bits for target, - 3 bits for source, - 2 bits for exclusionList */ - int mask; - - mask = *pc++; - if (JS_CopyDataProperties(ctx, sp[-1 - (mask & 3)], - sp[-1 - ((mask >> 2) & 7)], - sp[-1 - ((mask >> 5) & 7)], 0)) - goto exception; - } - BREAK; - - CASE(OP_add): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - int64_t r; - r = (int64_t)JS_VALUE_GET_INT(op1) + JS_VALUE_GET_INT(op2); - if (unlikely((int)r != r)) - goto add_slow; - sp[-2] = js_int32(r); - sp--; - } else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2)) { - sp[-2] = __JS_NewFloat64(JS_VALUE_GET_FLOAT64(op1) + - JS_VALUE_GET_FLOAT64(op2)); - sp--; - } else { - add_slow: - if (js_add_slow(ctx, sp)) - goto exception; - sp--; - } - } - BREAK; - CASE(OP_add_loc): - { - JSValue *pv; - int idx; - idx = *pc; - pc += 1; - - pv = &var_buf[idx]; - if (likely(JS_VALUE_IS_BOTH_INT(*pv, sp[-1]))) { - int64_t r; - r = (int64_t)JS_VALUE_GET_INT(*pv) + - JS_VALUE_GET_INT(sp[-1]); - if (unlikely((int)r != r)) - goto add_loc_slow; - *pv = js_int32(r); - sp--; - } else if (JS_VALUE_GET_TAG(*pv) == JS_TAG_STRING) { - JSValue op1; - op1 = sp[-1]; - sp--; - op1 = JS_ToPrimitiveFree(ctx, op1, HINT_NONE); - if (JS_IsException(op1)) - goto exception; - op1 = JS_ConcatString(ctx, js_dup(*pv), op1); - if (JS_IsException(op1)) - goto exception; - set_value(ctx, pv, op1); - } else { - JSValue ops[2]; - add_loc_slow: - /* In case of exception, js_add_slow frees ops[0] - and ops[1], so we must duplicate *pv */ - ops[0] = js_dup(*pv); - ops[1] = sp[-1]; - sp--; - if (js_add_slow(ctx, ops + 2)) - goto exception; - set_value(ctx, pv, ops[0]); - } - } - BREAK; - CASE(OP_sub): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - int64_t r; - r = (int64_t)JS_VALUE_GET_INT(op1) - JS_VALUE_GET_INT(op2); - if (unlikely((int)r != r)) - goto binary_arith_slow; - sp[-2] = js_int32(r); - sp--; - } else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2)) { - sp[-2] = __JS_NewFloat64(JS_VALUE_GET_FLOAT64(op1) - - JS_VALUE_GET_FLOAT64(op2)); - sp--; - } else { - goto binary_arith_slow; - } - } - BREAK; - CASE(OP_mul): - { - JSValue op1, op2; - double d; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - int32_t v1, v2; - int64_t r; - v1 = JS_VALUE_GET_INT(op1); - v2 = JS_VALUE_GET_INT(op2); - r = (int64_t)v1 * v2; - if (unlikely((int)r != r)) { - d = (double)r; - goto mul_fp_res; - } - /* need to test zero case for -0 result */ - if (unlikely(r == 0 && (v1 | v2) < 0)) { - d = -0.0; - goto mul_fp_res; - } - sp[-2] = js_int32(r); - sp--; - } else if (JS_VALUE_IS_BOTH_FLOAT(op1, op2)) { - d = JS_VALUE_GET_FLOAT64(op1) * JS_VALUE_GET_FLOAT64(op2); - mul_fp_res: - sp[-2] = __JS_NewFloat64(d); - sp--; - } else { - goto binary_arith_slow; - } - } - BREAK; - CASE(OP_div): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - int v1, v2; - v1 = JS_VALUE_GET_INT(op1); - v2 = JS_VALUE_GET_INT(op2); - sp[-2] = js_float64((double)v1 / (double)v2); - sp--; - } else { - goto binary_arith_slow; - } - } - BREAK; - CASE(OP_mod): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - int v1, v2, r; - v1 = JS_VALUE_GET_INT(op1); - v2 = JS_VALUE_GET_INT(op2); - /* We must avoid v2 = 0, v1 = INT32_MIN and v2 = - -1 and the cases where the result is -0. */ - if (unlikely(v1 < 0 || v2 <= 0)) - goto binary_arith_slow; - r = v1 % v2; - sp[-2] = js_int32(r); - sp--; - } else { - goto binary_arith_slow; - } - } - BREAK; - CASE(OP_pow): - binary_arith_slow: - if (js_binary_arith_slow(ctx, sp, opcode)) - goto exception; - sp--; - BREAK; - - CASE(OP_plus): - { - JSValue op1; - uint32_t tag; - op1 = sp[-1]; - tag = JS_VALUE_GET_TAG(op1); - if (tag == JS_TAG_INT || JS_TAG_IS_FLOAT64(tag)) { - } else { - if (js_unary_arith_slow(ctx, sp, opcode)) - goto exception; - } - } - BREAK; - CASE(OP_neg): - { - JSValue op1; - uint32_t tag; - int val; - double d; - op1 = sp[-1]; - tag = JS_VALUE_GET_TAG(op1); - if (tag == JS_TAG_INT) { - val = JS_VALUE_GET_INT(op1); - /* Note: -0 cannot be expressed as integer */ - if (unlikely(val == 0)) { - d = -0.0; - goto neg_fp_res; - } - if (unlikely(val == INT32_MIN)) { - d = -(double)val; - goto neg_fp_res; - } - sp[-1] = js_int32(-val); - } else if (JS_TAG_IS_FLOAT64(tag)) { - d = -JS_VALUE_GET_FLOAT64(op1); - neg_fp_res: - sp[-1] = __JS_NewFloat64(d); - } else { - if (js_unary_arith_slow(ctx, sp, opcode)) - goto exception; - } - } - BREAK; - CASE(OP_inc): - { - JSValue op1; - int val; - op1 = sp[-1]; - if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { - val = JS_VALUE_GET_INT(op1); - if (unlikely(val == INT32_MAX)) - goto inc_slow; - sp[-1] = js_int32(val + 1); - } else { - inc_slow: - if (js_unary_arith_slow(ctx, sp, opcode)) - goto exception; - } - } - BREAK; - CASE(OP_dec): - { - JSValue op1; - int val; - op1 = sp[-1]; - if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { - val = JS_VALUE_GET_INT(op1); - if (unlikely(val == INT32_MIN)) - goto dec_slow; - sp[-1] = js_int32(val - 1); - } else { - dec_slow: - if (js_unary_arith_slow(ctx, sp, opcode)) - goto exception; - } - } - BREAK; - CASE(OP_post_inc): - CASE(OP_post_dec): - if (js_post_inc_slow(ctx, sp, opcode)) - goto exception; - sp++; - BREAK; - CASE(OP_inc_loc): - { - JSValue op1; - int val; - int idx; - idx = *pc; - pc += 1; - - op1 = var_buf[idx]; - if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { - val = JS_VALUE_GET_INT(op1); - if (unlikely(val == INT32_MAX)) - goto inc_loc_slow; - var_buf[idx] = js_int32(val + 1); - } else { - inc_loc_slow: - /* must duplicate otherwise the variable value may - be destroyed before JS code accesses it */ - op1 = js_dup(op1); - if (js_unary_arith_slow(ctx, &op1 + 1, OP_inc)) - goto exception; - set_value(ctx, &var_buf[idx], op1); - } - } - BREAK; - CASE(OP_dec_loc): - { - JSValue op1; - int val; - int idx; - idx = *pc; - pc += 1; - - op1 = var_buf[idx]; - if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { - val = JS_VALUE_GET_INT(op1); - if (unlikely(val == INT32_MIN)) - goto dec_loc_slow; - var_buf[idx] = js_int32(val - 1); - } else { - dec_loc_slow: - /* must duplicate otherwise the variable value may - be destroyed before JS code accesses it */ - op1 = js_dup(op1); - if (js_unary_arith_slow(ctx, &op1 + 1, OP_dec)) - goto exception; - set_value(ctx, &var_buf[idx], op1); - } - } - BREAK; - CASE(OP_not): - { - JSValue op1; - op1 = sp[-1]; - if (JS_VALUE_GET_TAG(op1) == JS_TAG_INT) { - sp[-1] = js_int32(~JS_VALUE_GET_INT(op1)); - } else { - if (js_not_slow(ctx, sp)) - goto exception; - } - } - BREAK; - - CASE(OP_shl): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - uint32_t v1, v2; - v1 = JS_VALUE_GET_INT(op1); - v2 = JS_VALUE_GET_INT(op2) & 0x1f; - sp[-2] = js_int32(v1 << v2); - sp--; - } else { - if (js_binary_logic_slow(ctx, sp, opcode)) - goto exception; - sp--; - } - } - BREAK; - CASE(OP_shr): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - uint32_t v2; - v2 = JS_VALUE_GET_INT(op2); - v2 &= 0x1f; - sp[-2] = js_uint32((uint32_t)JS_VALUE_GET_INT(op1) >> v2); - sp--; - } else { - if (js_shr_slow(ctx, sp)) - goto exception; - sp--; - } - } - BREAK; - CASE(OP_sar): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - uint32_t v2; - v2 = JS_VALUE_GET_INT(op2); - if (unlikely(v2 > 0x1f)) { - v2 &= 0x1f; - } - sp[-2] = js_int32((int)JS_VALUE_GET_INT(op1) >> v2); - sp--; - } else { - if (js_binary_logic_slow(ctx, sp, opcode)) - goto exception; - sp--; - } - } - BREAK; - CASE(OP_and): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - sp[-2] = js_int32(JS_VALUE_GET_INT(op1) & JS_VALUE_GET_INT(op2)); - sp--; - } else { - if (js_binary_logic_slow(ctx, sp, opcode)) - goto exception; - sp--; - } - } - BREAK; - CASE(OP_or): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - sp[-2] = js_int32(JS_VALUE_GET_INT(op1) | JS_VALUE_GET_INT(op2)); - sp--; - } else { - if (js_binary_logic_slow(ctx, sp, opcode)) - goto exception; - sp--; - } - } - BREAK; - CASE(OP_xor): - { - JSValue op1, op2; - op1 = sp[-2]; - op2 = sp[-1]; - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { - sp[-2] = js_int32(JS_VALUE_GET_INT(op1) ^ JS_VALUE_GET_INT(op2)); - sp--; - } else { - if (js_binary_logic_slow(ctx, sp, opcode)) - goto exception; - sp--; - } - } - BREAK; - - -#define OP_CMP(opcode, binary_op, slow_call) \ - CASE(opcode): \ - { \ - JSValue op1, op2; \ - op1 = sp[-2]; \ - op2 = sp[-1]; \ - if (likely(JS_VALUE_IS_BOTH_INT(op1, op2))) { \ - sp[-2] = js_bool(JS_VALUE_GET_INT(op1) binary_op JS_VALUE_GET_INT(op2)); \ - sp--; \ - } else { \ - if (slow_call) \ - goto exception; \ - sp--; \ - } \ - } \ - BREAK - - OP_CMP(OP_lt, <, js_relational_slow(ctx, sp, opcode)); - OP_CMP(OP_lte, <=, js_relational_slow(ctx, sp, opcode)); - OP_CMP(OP_gt, >, js_relational_slow(ctx, sp, opcode)); - OP_CMP(OP_gte, >=, js_relational_slow(ctx, sp, opcode)); - OP_CMP(OP_eq, ==, js_eq_slow(ctx, sp, 0)); - OP_CMP(OP_neq, !=, js_eq_slow(ctx, sp, 1)); - OP_CMP(OP_strict_eq, ==, js_strict_eq_slow(ctx, sp, 0)); - OP_CMP(OP_strict_neq, !=, js_strict_eq_slow(ctx, sp, 1)); - - CASE(OP_in): - if (js_operator_in(ctx, sp)) - goto exception; - sp--; - BREAK; - CASE(OP_instanceof): - if (js_operator_instanceof(ctx, sp)) - goto exception; - sp--; - BREAK; - CASE(OP_typeof): - { - JSValue op1; - JSAtom atom; - - op1 = sp[-1]; - atom = js_operator_typeof(ctx, op1); - JS_FreeValue(ctx, op1); - sp[-1] = JS_AtomToString(ctx, atom); - } - BREAK; - CASE(OP_delete): - if (js_operator_delete(ctx, sp)) - goto exception; - sp--; - BREAK; - CASE(OP_delete_var): - { - JSAtom atom; - int ret; - - atom = get_u32(pc); - pc += 4; - - ret = JS_DeleteProperty(ctx, ctx->global_obj, atom, 0); - if (unlikely(ret < 0)) - goto exception; - *sp++ = js_bool(ret); - } - BREAK; - - CASE(OP_to_object): - if (JS_VALUE_GET_TAG(sp[-1]) != JS_TAG_OBJECT) { - ret_val = JS_ToObject(ctx, sp[-1]); - if (JS_IsException(ret_val)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = ret_val; - } - BREAK; - - CASE(OP_to_propkey): - switch (JS_VALUE_GET_TAG(sp[-1])) { - case JS_TAG_INT: - case JS_TAG_STRING: - case JS_TAG_SYMBOL: - break; - default: - ret_val = JS_ToPropertyKey(ctx, sp[-1]); - if (JS_IsException(ret_val)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = ret_val; - break; - } - BREAK; - - CASE(OP_to_propkey2): - /* must be tested first */ - if (unlikely(JS_IsUndefined(sp[-2]) || JS_IsNull(sp[-2]))) { - JS_ThrowTypeError(ctx, "value has no property"); - goto exception; - } - switch (JS_VALUE_GET_TAG(sp[-1])) { - case JS_TAG_INT: - case JS_TAG_STRING: - case JS_TAG_SYMBOL: - break; - default: - ret_val = JS_ToPropertyKey(ctx, sp[-1]); - if (JS_IsException(ret_val)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = ret_val; - break; - } - BREAK; - CASE(OP_with_get_var): - CASE(OP_with_put_var): - CASE(OP_with_delete_var): - CASE(OP_with_make_ref): - CASE(OP_with_get_ref): - CASE(OP_with_get_ref_undef): - { - JSAtom atom; - int32_t diff; - JSValue obj, val; - int ret, is_with; - atom = get_u32(pc); - diff = get_u32(pc + 4); - is_with = pc[8]; - pc += 9; - - obj = sp[-1]; - ret = JS_HasProperty(ctx, obj, atom); - if (unlikely(ret < 0)) - goto exception; - if (ret) { - if (is_with) { - ret = js_has_unscopable(ctx, obj, atom); - if (unlikely(ret < 0)) - goto exception; - if (ret) - goto no_with; - } - switch (opcode) { - case OP_with_get_var: - val = JS_GetProperty(ctx, obj, atom); - if (unlikely(JS_IsException(val))) - goto exception; - set_value(ctx, &sp[-1], val); - break; - case OP_with_put_var: - /* XXX: check if strict mode */ - ret = JS_SetPropertyInternal(ctx, obj, atom, sp[-2], - JS_PROP_THROW_STRICT); - JS_FreeValue(ctx, sp[-1]); - sp -= 2; - if (unlikely(ret < 0)) - goto exception; - break; - case OP_with_delete_var: - ret = JS_DeleteProperty(ctx, obj, atom, 0); - if (unlikely(ret < 0)) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = js_bool(ret); - break; - case OP_with_make_ref: - /* produce a pair object/propname on the stack */ - *sp++ = JS_AtomToValue(ctx, atom); - break; - case OP_with_get_ref: - /* produce a pair object/method on the stack */ - val = JS_GetProperty(ctx, obj, atom); - if (unlikely(JS_IsException(val))) - goto exception; - *sp++ = val; - break; - case OP_with_get_ref_undef: - /* produce a pair undefined/function on the stack */ - val = JS_GetProperty(ctx, obj, atom); - if (unlikely(JS_IsException(val))) - goto exception; - JS_FreeValue(ctx, sp[-1]); - sp[-1] = JS_UNDEFINED; - *sp++ = val; - break; - } - pc += diff - 5; - } else { - no_with: - /* if not jumping, drop the object argument */ - JS_FreeValue(ctx, sp[-1]); - sp--; - } - } - BREAK; - - CASE(OP_await): - ret_val = js_int32(FUNC_RET_AWAIT); - goto done_generator; - CASE(OP_yield): - ret_val = js_int32(FUNC_RET_YIELD); - goto done_generator; - CASE(OP_yield_star): - CASE(OP_async_yield_star): - ret_val = js_int32(FUNC_RET_YIELD_STAR); - goto done_generator; - CASE(OP_return_async): - CASE(OP_initial_yield): - ret_val = JS_UNDEFINED; - goto done_generator; - - CASE(OP_nop): - BREAK; - CASE(OP_is_undefined_or_null): - if (JS_VALUE_GET_TAG(sp[-1]) == JS_TAG_UNDEFINED || - JS_VALUE_GET_TAG(sp[-1]) == JS_TAG_NULL) { - goto set_true; - } else { - goto free_and_set_false; - } - CASE(OP_is_undefined): - if (JS_VALUE_GET_TAG(sp[-1]) == JS_TAG_UNDEFINED) { - goto set_true; - } else { - goto free_and_set_false; - } - CASE(OP_is_null): - if (JS_VALUE_GET_TAG(sp[-1]) == JS_TAG_NULL) { - goto set_true; - } else { - goto free_and_set_false; - } - /* XXX: could merge to a single opcode */ - CASE(OP_typeof_is_undefined): - /* different from OP_is_undefined because of isHTMLDDA */ - if (js_operator_typeof(ctx, sp[-1]) == JS_ATOM_undefined) { - goto free_and_set_true; - } else { - goto free_and_set_false; - } - CASE(OP_typeof_is_function): - if (js_operator_typeof(ctx, sp[-1]) == JS_ATOM_function) { - goto free_and_set_true; - } else { - goto free_and_set_false; - } - free_and_set_true: - JS_FreeValue(ctx, sp[-1]); - set_true: - sp[-1] = JS_TRUE; - BREAK; - free_and_set_false: - JS_FreeValue(ctx, sp[-1]); - sp[-1] = JS_FALSE; - BREAK; - CASE(OP_invalid): - DEFAULT: - JS_ThrowInternalError(ctx, "invalid opcode: pc=%u opcode=0x%02x", - (int)(pc - b->byte_code_buf - 1), opcode); - goto exception; - } - } - exception: - if (is_backtrace_needed(ctx, rt->current_exception)) { - /* add the backtrace information now (it is not done - before if the exception happens in a bytecode - operation */ - sf->cur_pc = pc; - build_backtrace(ctx, rt->current_exception, NULL, 0, 0, 0); - } - if (!JS_IsUncatchableError(ctx, rt->current_exception)) { - while (sp > stack_buf) { - JSValue val = *--sp; - JS_FreeValue(ctx, val); - if (JS_VALUE_GET_TAG(val) == JS_TAG_CATCH_OFFSET) { - int pos = JS_VALUE_GET_INT(val); - if (pos == 0) { - /* enumerator: close it with a throw */ - JS_FreeValue(ctx, sp[-1]); /* drop the next method */ - sp--; - JS_IteratorClose(ctx, sp[-1], TRUE); - } else { - *sp++ = rt->current_exception; - rt->current_exception = JS_NULL; - pc = b->byte_code_buf + pos; - goto restart; - } - } - } - } - ret_val = JS_EXCEPTION; - /* the local variables are freed by the caller in the generator - case. Hence the label 'done' should never be reached in a - generator function. */ - if (b->func_kind != JS_FUNC_NORMAL) { - done_generator: - sf->cur_pc = pc; - sf->cur_sp = sp; - } else { - done: - if (unlikely(!list_empty(&sf->var_ref_list))) { - /* variable references reference the stack: must close them */ - close_var_refs(rt, sf); - } - /* free the local variables and stack */ - for(pval = local_buf; pval < sp; pval++) { - JS_FreeValue(ctx, *pval); - } - } - rt->current_stack_frame = sf->prev_frame; - return ret_val; -} - -JSValue JS_Call(JSContext *ctx, JSValue func_obj, JSValue this_obj, - int argc, JSValue *argv) -{ - return JS_CallInternal(ctx, func_obj, this_obj, JS_UNDEFINED, - argc, argv, JS_CALL_FLAG_COPY_ARGV); -} - -static JSValue JS_CallFree(JSContext *ctx, JSValue func_obj, JSValue this_obj, - int argc, JSValue *argv) -{ - JSValue res = JS_CallInternal(ctx, func_obj, this_obj, JS_UNDEFINED, - argc, argv, JS_CALL_FLAG_COPY_ARGV); - JS_FreeValue(ctx, func_obj); - return res; -} - -/* warning: the refcount of the context is not incremented. Return - NULL in case of exception (case of revoked proxy only) */ -static JSContext *JS_GetFunctionRealm(JSContext *ctx, JSValue func_obj) -{ - JSObject *p; - JSContext *realm; - - if (JS_VALUE_GET_TAG(func_obj) != JS_TAG_OBJECT) - return ctx; - p = JS_VALUE_GET_OBJ(func_obj); - switch(p->class_id) { - case JS_CLASS_C_FUNCTION: - realm = p->u.cfunc.realm; - break; - case JS_CLASS_BYTECODE_FUNCTION: - case JS_CLASS_GENERATOR_FUNCTION: - case JS_CLASS_ASYNC_FUNCTION: - case JS_CLASS_ASYNC_GENERATOR_FUNCTION: - { - JSFunctionBytecode *b; - b = p->u.func.function_bytecode; - realm = b->realm; - } - break; - case JS_CLASS_PROXY: - { - JSProxyData *s = p->u.opaque; - if (!s) - return ctx; - if (s->is_revoked) { - JS_ThrowTypeErrorRevokedProxy(ctx); - return NULL; - } else { - realm = JS_GetFunctionRealm(ctx, s->target); - } - } - break; - case JS_CLASS_BOUND_FUNCTION: - { - JSBoundFunction *bf = p->u.bound_function; - realm = JS_GetFunctionRealm(ctx, bf->func_obj); - } - break; - default: - realm = ctx; - break; - } - return realm; -} - -static JSValue js_create_from_ctor(JSContext *ctx, JSValue ctor, - int class_id) -{ - JSValue proto, obj; - JSContext *realm; - - if (JS_IsUndefined(ctor)) { - proto = js_dup(ctx->class_proto[class_id]); - } else { - proto = JS_GetProperty(ctx, ctor, JS_ATOM_prototype); - if (JS_IsException(proto)) - return proto; - if (!JS_IsObject(proto)) { - JS_FreeValue(ctx, proto); - realm = JS_GetFunctionRealm(ctx, ctor); - if (!realm) - return JS_EXCEPTION; - proto = js_dup(realm->class_proto[class_id]); - } - } - obj = JS_NewObjectProtoClass(ctx, proto, class_id); - JS_FreeValue(ctx, proto); - return obj; -} - -/* argv[] is modified if (flags & JS_CALL_FLAG_COPY_ARGV) = 0. */ -static JSValue JS_CallConstructorInternal(JSContext *ctx, - JSValue func_obj, - JSValue new_target, - int argc, JSValue *argv, int flags) -{ - JSObject *p; - JSFunctionBytecode *b; - - if (js_poll_interrupts(ctx)) - return JS_EXCEPTION; - flags |= JS_CALL_FLAG_CONSTRUCTOR; - if (unlikely(JS_VALUE_GET_TAG(func_obj) != JS_TAG_OBJECT)) - goto not_a_function; - p = JS_VALUE_GET_OBJ(func_obj); - if (unlikely(!p->is_constructor)) - return JS_ThrowTypeError(ctx, "not a constructor"); - if (unlikely(p->class_id != JS_CLASS_BYTECODE_FUNCTION)) { - JSClassCall *call_func; - call_func = ctx->rt->class_array[p->class_id].call; - if (!call_func) { - not_a_function: - return JS_ThrowTypeError(ctx, "not a function"); - } - return call_func(ctx, func_obj, new_target, argc, - argv, flags); - } - - b = p->u.func.function_bytecode; - if (b->is_derived_class_constructor) { - return JS_CallInternal(ctx, func_obj, JS_UNDEFINED, new_target, argc, argv, flags); - } else { - JSValue obj, ret; - /* legacy constructor behavior */ - obj = js_create_from_ctor(ctx, new_target, JS_CLASS_OBJECT); - if (JS_IsException(obj)) - return JS_EXCEPTION; - ret = JS_CallInternal(ctx, func_obj, obj, new_target, argc, argv, flags); - if (JS_VALUE_GET_TAG(ret) == JS_TAG_OBJECT || - JS_IsException(ret)) { - JS_FreeValue(ctx, obj); - return ret; - } else { - JS_FreeValue(ctx, ret); - return obj; - } - } -} - -JSValue JS_CallConstructor2(JSContext *ctx, JSValue func_obj, - JSValue new_target, - int argc, JSValue *argv) -{ - return JS_CallConstructorInternal(ctx, func_obj, new_target, - argc, argv, - JS_CALL_FLAG_COPY_ARGV); -} - -JSValue JS_CallConstructor(JSContext *ctx, JSValue func_obj, - int argc, JSValue *argv) -{ - return JS_CallConstructorInternal(ctx, func_obj, func_obj, - argc, argv, - JS_CALL_FLAG_COPY_ARGV); -} - -JSValue JS_Invoke(JSContext *ctx, JSValue this_val, JSAtom atom, - int argc, JSValue *argv) -{ - JSValue func_obj; - func_obj = JS_GetProperty(ctx, this_val, atom); - if (JS_IsException(func_obj)) - return func_obj; - return JS_CallFree(ctx, func_obj, this_val, argc, argv); -} - -static JSValue JS_InvokeFree(JSContext *ctx, JSValue this_val, JSAtom atom, - int argc, JSValue *argv) -{ - JSValue res = JS_Invoke(ctx, this_val, atom, argc, argv); - JS_FreeValue(ctx, this_val); - return res; -} - -/* JSAsyncFunctionState (used by generator and async functions) */ -static __exception int async_func_init(JSContext *ctx, JSAsyncFunctionState *s, - JSValue func_obj, JSValue this_obj, - int argc, JSValue *argv) -{ - JSObject *p; - JSFunctionBytecode *b; - JSStackFrame *sf; - int local_count, i, arg_buf_len, n; - - sf = &s->frame; - init_list_head(&sf->var_ref_list); - p = JS_VALUE_GET_OBJ(func_obj); - b = p->u.func.function_bytecode; - sf->js_mode = b->js_mode; - sf->cur_pc = b->byte_code_buf; - arg_buf_len = max_int(b->arg_count, argc); - local_count = arg_buf_len + b->var_count + b->stack_size; - sf->arg_buf = js_malloc(ctx, sizeof(JSValue) * max_int(local_count, 1)); - if (!sf->arg_buf) - return -1; - sf->cur_func = js_dup(func_obj); - s->this_val = js_dup(this_obj); - s->argc = argc; - sf->arg_count = arg_buf_len; - sf->var_buf = sf->arg_buf + arg_buf_len; - sf->cur_sp = sf->var_buf + b->var_count; - for(i = 0; i < argc; i++) - sf->arg_buf[i] = js_dup(argv[i]); - n = arg_buf_len + b->var_count; - for(i = argc; i < n; i++) - sf->arg_buf[i] = JS_UNDEFINED; - return 0; -} - -static void async_func_mark(JSRuntime *rt, JSAsyncFunctionState *s, - JS_MarkFunc *mark_func) -{ - JSStackFrame *sf; - JSValue *sp; - - sf = &s->frame; - JS_MarkValue(rt, sf->cur_func, mark_func); - JS_MarkValue(rt, s->this_val, mark_func); - if (sf->cur_sp) { - /* if the function is running, cur_sp is not known so we - cannot mark the stack. Marking the variables is not needed - because a running function cannot be part of a removable - cycle */ - for(sp = sf->arg_buf; sp < sf->cur_sp; sp++) - JS_MarkValue(rt, *sp, mark_func); - } -} - -static void async_func_free(JSRuntime *rt, JSAsyncFunctionState *s) -{ - JSStackFrame *sf; - JSValue *sp; - - sf = &s->frame; - - /* close the closure variables. */ - close_var_refs(rt, sf); - - if (sf->arg_buf) { - /* cannot free the function if it is running */ - assert(sf->cur_sp != NULL); - for(sp = sf->arg_buf; sp < sf->cur_sp; sp++) { - JS_FreeValueRT(rt, *sp); - } - js_free_rt(rt, sf->arg_buf); - } - JS_FreeValueRT(rt, sf->cur_func); - JS_FreeValueRT(rt, s->this_val); -} - -static JSValue async_func_resume(JSContext *ctx, JSAsyncFunctionState *s) -{ - JSValue func_obj; - - if (js_check_stack_overflow(ctx->rt, 0)) - return JS_ThrowStackOverflow(ctx); - - /* the tag does not matter provided it is not an object */ - func_obj = JS_MKPTR(JS_TAG_INT, s); - return JS_CallInternal(ctx, func_obj, s->this_val, JS_UNDEFINED, - s->argc, s->frame.arg_buf, JS_CALL_FLAG_GENERATOR); -} - - -/* Generators */ - -typedef enum JSGeneratorStateEnum { - JS_GENERATOR_STATE_SUSPENDED_START, - JS_GENERATOR_STATE_SUSPENDED_YIELD, - JS_GENERATOR_STATE_SUSPENDED_YIELD_STAR, - JS_GENERATOR_STATE_EXECUTING, - JS_GENERATOR_STATE_COMPLETED, -} JSGeneratorStateEnum; - -typedef struct JSGeneratorData { - JSGeneratorStateEnum state; - JSAsyncFunctionState func_state; -} JSGeneratorData; - -static void free_generator_stack_rt(JSRuntime *rt, JSGeneratorData *s) -{ - if (s->state == JS_GENERATOR_STATE_COMPLETED) - return; - async_func_free(rt, &s->func_state); - s->state = JS_GENERATOR_STATE_COMPLETED; -} - -static void js_generator_finalizer(JSRuntime *rt, JSValue obj) -{ - JSGeneratorData *s = JS_GetOpaque(obj, JS_CLASS_GENERATOR); - - if (s) { - free_generator_stack_rt(rt, s); - js_free_rt(rt, s); - } -} - -static void free_generator_stack(JSContext *ctx, JSGeneratorData *s) -{ - free_generator_stack_rt(ctx->rt, s); -} - -static void js_generator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSGeneratorData *s = p->u.generator_data; - - if (!s || s->state == JS_GENERATOR_STATE_COMPLETED) - return; - async_func_mark(rt, &s->func_state, mark_func); -} - -/* XXX: use enum */ -#define GEN_MAGIC_NEXT 0 -#define GEN_MAGIC_RETURN 1 -#define GEN_MAGIC_THROW 2 - -static JSValue js_generator_next(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, - BOOL *pdone, int magic) -{ - JSGeneratorData *s = JS_GetOpaque(this_val, JS_CLASS_GENERATOR); - JSStackFrame *sf; - JSValue ret, func_ret; - - *pdone = TRUE; - if (!s) - return JS_ThrowTypeError(ctx, "not a generator"); - sf = &s->func_state.frame; - switch(s->state) { - default: - case JS_GENERATOR_STATE_SUSPENDED_START: - if (magic == GEN_MAGIC_NEXT) { - goto exec_no_arg; - } else { - free_generator_stack(ctx, s); - goto done; - } - break; - case JS_GENERATOR_STATE_SUSPENDED_YIELD_STAR: - case JS_GENERATOR_STATE_SUSPENDED_YIELD: - /* cur_sp[-1] was set to JS_UNDEFINED in the previous call */ - ret = js_dup(argv[0]); - if (magic == GEN_MAGIC_THROW && - s->state == JS_GENERATOR_STATE_SUSPENDED_YIELD) { - JS_Throw(ctx, ret); - s->func_state.throw_flag = TRUE; - } else { - sf->cur_sp[-1] = ret; - sf->cur_sp[0] = js_int32(magic); - sf->cur_sp++; - exec_no_arg: - s->func_state.throw_flag = FALSE; - } - s->state = JS_GENERATOR_STATE_EXECUTING; - func_ret = async_func_resume(ctx, &s->func_state); - s->state = JS_GENERATOR_STATE_SUSPENDED_YIELD; - if (JS_IsException(func_ret)) { - /* finalize the execution in case of exception */ - free_generator_stack(ctx, s); - return func_ret; - } - if (JS_VALUE_GET_TAG(func_ret) == JS_TAG_INT) { - /* get the returned yield value at the top of the stack */ - ret = sf->cur_sp[-1]; - sf->cur_sp[-1] = JS_UNDEFINED; - if (JS_VALUE_GET_INT(func_ret) == FUNC_RET_YIELD_STAR) { - s->state = JS_GENERATOR_STATE_SUSPENDED_YIELD_STAR; - /* return (value, done) object */ - *pdone = 2; - } else { - *pdone = FALSE; - } - } else { - /* end of iterator */ - ret = sf->cur_sp[-1]; - sf->cur_sp[-1] = JS_UNDEFINED; - JS_FreeValue(ctx, func_ret); - free_generator_stack(ctx, s); - } - break; - case JS_GENERATOR_STATE_COMPLETED: - done: - /* execution is finished */ - switch(magic) { - default: - case GEN_MAGIC_NEXT: - ret = JS_UNDEFINED; - break; - case GEN_MAGIC_RETURN: - ret = js_dup(argv[0]); - break; - case GEN_MAGIC_THROW: - ret = JS_Throw(ctx, js_dup(argv[0])); - break; - } - break; - case JS_GENERATOR_STATE_EXECUTING: - ret = JS_ThrowTypeError(ctx, "cannot invoke a running generator"); - break; - } - return ret; -} - -static JSValue js_generator_function_call(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, - int flags) -{ - JSValue obj, func_ret; - JSGeneratorData *s; - - s = js_mallocz(ctx, sizeof(*s)); - if (!s) - return JS_EXCEPTION; - s->state = JS_GENERATOR_STATE_SUSPENDED_START; - if (async_func_init(ctx, &s->func_state, func_obj, this_obj, argc, argv)) { - s->state = JS_GENERATOR_STATE_COMPLETED; - goto fail; - } - - /* execute the function up to 'OP_initial_yield' */ - func_ret = async_func_resume(ctx, &s->func_state); - if (JS_IsException(func_ret)) - goto fail; - JS_FreeValue(ctx, func_ret); - - obj = js_create_from_ctor(ctx, func_obj, JS_CLASS_GENERATOR); - if (JS_IsException(obj)) - goto fail; - JS_SetOpaque(obj, s); - return obj; - fail: - free_generator_stack_rt(ctx->rt, s); - js_free(ctx, s); - return JS_EXCEPTION; -} - -/* AsyncFunction */ - -static void js_async_function_terminate(JSRuntime *rt, JSAsyncFunctionData *s) -{ - if (s->is_active) { - async_func_free(rt, &s->func_state); - s->is_active = FALSE; - } -} - -static void js_async_function_free0(JSRuntime *rt, JSAsyncFunctionData *s) -{ - js_async_function_terminate(rt, s); - JS_FreeValueRT(rt, s->resolving_funcs[0]); - JS_FreeValueRT(rt, s->resolving_funcs[1]); - remove_gc_object(&s->header); - js_free_rt(rt, s); -} - -static void js_async_function_free(JSRuntime *rt, JSAsyncFunctionData *s) -{ - if (--s->header.ref_count == 0) { - js_async_function_free0(rt, s); - } -} - -static void js_async_function_resolve_finalizer(JSRuntime *rt, JSValue val) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSAsyncFunctionData *s = p->u.async_function_data; - if (s) { - js_async_function_free(rt, s); - } -} - -static void js_async_function_resolve_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSObject *p = JS_VALUE_GET_OBJ(val); - JSAsyncFunctionData *s = p->u.async_function_data; - if (s) { - mark_func(rt, &s->header); - } -} - -static int js_async_function_resolve_create(JSContext *ctx, - JSAsyncFunctionData *s, - JSValue *resolving_funcs) -{ - int i; - JSObject *p; - - for(i = 0; i < 2; i++) { - resolving_funcs[i] = - JS_NewObjectProtoClass(ctx, ctx->function_proto, - JS_CLASS_ASYNC_FUNCTION_RESOLVE + i); - if (JS_IsException(resolving_funcs[i])) { - if (i == 1) - JS_FreeValue(ctx, resolving_funcs[0]); - return -1; - } - p = JS_VALUE_GET_OBJ(resolving_funcs[i]); - s->header.ref_count++; - p->u.async_function_data = s; - } - return 0; -} - -static void js_async_function_resume(JSContext *ctx, JSAsyncFunctionData *s) -{ - JSValue func_ret, ret2; - - func_ret = async_func_resume(ctx, &s->func_state); - if (JS_IsException(func_ret)) { - JSValue error; - fail: - error = JS_GetException(ctx); - ret2 = JS_Call(ctx, s->resolving_funcs[1], JS_UNDEFINED, - 1, &error); - JS_FreeValue(ctx, error); - js_async_function_terminate(ctx->rt, s); - JS_FreeValue(ctx, ret2); /* XXX: what to do if exception ? */ - } else { - JSValue value; - value = s->func_state.frame.cur_sp[-1]; - s->func_state.frame.cur_sp[-1] = JS_UNDEFINED; - if (JS_IsUndefined(func_ret)) { - /* function returned */ - ret2 = JS_Call(ctx, s->resolving_funcs[0], JS_UNDEFINED, - 1, &value); - JS_FreeValue(ctx, ret2); /* XXX: what to do if exception ? */ - JS_FreeValue(ctx, value); - js_async_function_terminate(ctx->rt, s); - } else { - JSValue promise, resolving_funcs[2], resolving_funcs1[2]; - int i, res; - - /* await */ - JS_FreeValue(ctx, func_ret); /* not used */ - promise = js_promise_resolve(ctx, ctx->promise_ctor, - 1, &value, 0); - JS_FreeValue(ctx, value); - if (JS_IsException(promise)) - goto fail; - if (js_async_function_resolve_create(ctx, s, resolving_funcs)) { - JS_FreeValue(ctx, promise); - goto fail; - } - - /* Note: no need to create 'thrownawayCapability' as in - the spec */ - for(i = 0; i < 2; i++) - resolving_funcs1[i] = JS_UNDEFINED; - res = perform_promise_then(ctx, promise, - resolving_funcs, - resolving_funcs1); - JS_FreeValue(ctx, promise); - for(i = 0; i < 2; i++) - JS_FreeValue(ctx, resolving_funcs[i]); - if (res) - goto fail; - } - } -} - -static JSValue js_async_function_resolve_call(JSContext *ctx, - JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, - int flags) -{ - JSObject *p = JS_VALUE_GET_OBJ(func_obj); - JSAsyncFunctionData *s = p->u.async_function_data; - BOOL is_reject = p->class_id - JS_CLASS_ASYNC_FUNCTION_RESOLVE; - JSValue arg; - - if (argc > 0) - arg = argv[0]; - else - arg = JS_UNDEFINED; - s->func_state.throw_flag = is_reject; - if (is_reject) { - JS_Throw(ctx, js_dup(arg)); - } else { - /* return value of await */ - s->func_state.frame.cur_sp[-1] = js_dup(arg); - } - js_async_function_resume(ctx, s); - return JS_UNDEFINED; -} - -static JSValue js_async_function_call(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, int flags) -{ - JSValue promise; - JSAsyncFunctionData *s; - - s = js_mallocz(ctx, sizeof(*s)); - if (!s) - return JS_EXCEPTION; - s->header.ref_count = 1; - add_gc_object(ctx->rt, &s->header, JS_GC_OBJ_TYPE_ASYNC_FUNCTION); - s->is_active = FALSE; - s->resolving_funcs[0] = JS_UNDEFINED; - s->resolving_funcs[1] = JS_UNDEFINED; - - promise = JS_NewPromiseCapability(ctx, s->resolving_funcs); - if (JS_IsException(promise)) - goto fail; - - if (async_func_init(ctx, &s->func_state, func_obj, this_obj, argc, argv)) { - fail: - JS_FreeValue(ctx, promise); - js_async_function_free(ctx->rt, s); - return JS_EXCEPTION; - } - s->is_active = TRUE; - - js_async_function_resume(ctx, s); - - js_async_function_free(ctx->rt, s); - - return promise; -} - -/* AsyncGenerator */ - -typedef enum JSAsyncGeneratorStateEnum { - JS_ASYNC_GENERATOR_STATE_SUSPENDED_START, - JS_ASYNC_GENERATOR_STATE_SUSPENDED_YIELD, - JS_ASYNC_GENERATOR_STATE_SUSPENDED_YIELD_STAR, - JS_ASYNC_GENERATOR_STATE_EXECUTING, - JS_ASYNC_GENERATOR_STATE_AWAITING_RETURN, - JS_ASYNC_GENERATOR_STATE_COMPLETED, -} JSAsyncGeneratorStateEnum; - -typedef struct JSAsyncGeneratorRequest { - struct list_head link; - /* completion */ - int completion_type; /* GEN_MAGIC_x */ - JSValue result; - /* promise capability */ - JSValue promise; - JSValue resolving_funcs[2]; -} JSAsyncGeneratorRequest; - -typedef struct JSAsyncGeneratorData { - JSObject *generator; /* back pointer to the object (const) */ - JSAsyncGeneratorStateEnum state; - JSAsyncFunctionState func_state; - struct list_head queue; /* list of JSAsyncGeneratorRequest.link */ -} JSAsyncGeneratorData; - -static void js_async_generator_free(JSRuntime *rt, - JSAsyncGeneratorData *s) -{ - struct list_head *el, *el1; - JSAsyncGeneratorRequest *req; - - list_for_each_safe(el, el1, &s->queue) { - req = list_entry(el, JSAsyncGeneratorRequest, link); - JS_FreeValueRT(rt, req->result); - JS_FreeValueRT(rt, req->promise); - JS_FreeValueRT(rt, req->resolving_funcs[0]); - JS_FreeValueRT(rt, req->resolving_funcs[1]); - js_free_rt(rt, req); - } - if (s->state != JS_ASYNC_GENERATOR_STATE_COMPLETED && - s->state != JS_ASYNC_GENERATOR_STATE_AWAITING_RETURN) { - async_func_free(rt, &s->func_state); - } - js_free_rt(rt, s); -} - -static void js_async_generator_finalizer(JSRuntime *rt, JSValue obj) -{ - JSAsyncGeneratorData *s = JS_GetOpaque(obj, JS_CLASS_ASYNC_GENERATOR); - - if (s) { - js_async_generator_free(rt, s); - } -} - -static void js_async_generator_mark(JSRuntime *rt, JSValue val, - JS_MarkFunc *mark_func) -{ - JSAsyncGeneratorData *s = JS_GetOpaque(val, JS_CLASS_ASYNC_GENERATOR); - struct list_head *el; - JSAsyncGeneratorRequest *req; - if (s) { - list_for_each(el, &s->queue) { - req = list_entry(el, JSAsyncGeneratorRequest, link); - JS_MarkValue(rt, req->result, mark_func); - JS_MarkValue(rt, req->promise, mark_func); - JS_MarkValue(rt, req->resolving_funcs[0], mark_func); - JS_MarkValue(rt, req->resolving_funcs[1], mark_func); - } - if (s->state != JS_ASYNC_GENERATOR_STATE_COMPLETED && - s->state != JS_ASYNC_GENERATOR_STATE_AWAITING_RETURN) { - async_func_mark(rt, &s->func_state, mark_func); - } - } -} - -static JSValue js_async_generator_resolve_function(JSContext *ctx, - JSValue this_obj, - int argc, JSValue *argv, - int magic, JSValue *func_data); - -static int js_async_generator_resolve_function_create(JSContext *ctx, - JSValue generator, - JSValue *resolving_funcs, - BOOL is_resume_next) -{ - int i; - JSValue func; - - for(i = 0; i < 2; i++) { - func = JS_NewCFunctionData(ctx, js_async_generator_resolve_function, 1, - i + is_resume_next * 2, 1, &generator); - if (JS_IsException(func)) { - if (i == 1) - JS_FreeValue(ctx, resolving_funcs[0]); - return -1; - } - resolving_funcs[i] = func; - } - return 0; -} - -static int js_async_generator_await(JSContext *ctx, - JSAsyncGeneratorData *s, - JSValue value) -{ - JSValue promise, resolving_funcs[2], resolving_funcs1[2]; - int i, res; - - promise = js_promise_resolve(ctx, ctx->promise_ctor, - 1, &value, 0); - if (JS_IsException(promise)) - goto fail; - - if (js_async_generator_resolve_function_create(ctx, JS_MKPTR(JS_TAG_OBJECT, s->generator), - resolving_funcs, FALSE)) { - JS_FreeValue(ctx, promise); - goto fail; - } - - /* Note: no need to create 'thrownawayCapability' as in - the spec */ - for(i = 0; i < 2; i++) - resolving_funcs1[i] = JS_UNDEFINED; - res = perform_promise_then(ctx, promise, - resolving_funcs, - resolving_funcs1); - JS_FreeValue(ctx, promise); - for(i = 0; i < 2; i++) - JS_FreeValue(ctx, resolving_funcs[i]); - if (res) - goto fail; - return 0; - fail: - return -1; -} - -static void js_async_generator_resolve_or_reject(JSContext *ctx, - JSAsyncGeneratorData *s, - JSValue result, - int is_reject) -{ - JSAsyncGeneratorRequest *next; - JSValue ret; - - next = list_entry(s->queue.next, JSAsyncGeneratorRequest, link); - list_del(&next->link); - ret = JS_Call(ctx, next->resolving_funcs[is_reject], JS_UNDEFINED, 1, - &result); - JS_FreeValue(ctx, ret); - JS_FreeValue(ctx, next->result); - JS_FreeValue(ctx, next->promise); - JS_FreeValue(ctx, next->resolving_funcs[0]); - JS_FreeValue(ctx, next->resolving_funcs[1]); - js_free(ctx, next); -} - -static void js_async_generator_resolve(JSContext *ctx, - JSAsyncGeneratorData *s, - JSValue value, - BOOL done) -{ - JSValue result; - result = js_create_iterator_result(ctx, js_dup(value), done); - /* XXX: better exception handling ? */ - js_async_generator_resolve_or_reject(ctx, s, result, 0); - JS_FreeValue(ctx, result); - } - -static void js_async_generator_reject(JSContext *ctx, - JSAsyncGeneratorData *s, - JSValue exception) -{ - js_async_generator_resolve_or_reject(ctx, s, exception, 1); -} - -static void js_async_generator_complete(JSContext *ctx, - JSAsyncGeneratorData *s) -{ - if (s->state != JS_ASYNC_GENERATOR_STATE_COMPLETED) { - s->state = JS_ASYNC_GENERATOR_STATE_COMPLETED; - async_func_free(ctx->rt, &s->func_state); - } -} - -static int js_async_generator_completed_return(JSContext *ctx, - JSAsyncGeneratorData *s, - JSValue value) -{ - JSValue promise, resolving_funcs[2], resolving_funcs1[2]; - int res; - - // Can fail looking up JS_ATOM_constructor when is_reject==0. - promise = js_promise_resolve(ctx, ctx->promise_ctor, 1, &value, - /*is_reject*/0); - // A poisoned .constructor property is observable and the resulting - // exception should be delivered to the catch handler. - if (JS_IsException(promise)) { - JSValue err = JS_GetException(ctx); - promise = js_promise_resolve(ctx, ctx->promise_ctor, 1, &err, - /*is_reject*/1); - JS_FreeValue(ctx, err); - if (JS_IsException(promise)) - return -1; - } - if (js_async_generator_resolve_function_create(ctx, - JS_MKPTR(JS_TAG_OBJECT, s->generator), - resolving_funcs1, - TRUE)) { - JS_FreeValue(ctx, promise); - return -1; - } - resolving_funcs[0] = JS_UNDEFINED; - resolving_funcs[1] = JS_UNDEFINED; - res = perform_promise_then(ctx, promise, - resolving_funcs1, - resolving_funcs); - JS_FreeValue(ctx, resolving_funcs1[0]); - JS_FreeValue(ctx, resolving_funcs1[1]); - JS_FreeValue(ctx, promise); - return res; -} - -static void js_async_generator_resume_next(JSContext *ctx, - JSAsyncGeneratorData *s) -{ - JSAsyncGeneratorRequest *next; - JSValue func_ret, value; - - for(;;) { - if (list_empty(&s->queue)) - break; - next = list_entry(s->queue.next, JSAsyncGeneratorRequest, link); - switch(s->state) { - case JS_ASYNC_GENERATOR_STATE_EXECUTING: - /* only happens when restarting execution after await() */ - goto resume_exec; - case JS_ASYNC_GENERATOR_STATE_AWAITING_RETURN: - goto done; - case JS_ASYNC_GENERATOR_STATE_SUSPENDED_START: - if (next->completion_type == GEN_MAGIC_NEXT) { - goto exec_no_arg; - } else { - js_async_generator_complete(ctx, s); - } - break; - case JS_ASYNC_GENERATOR_STATE_COMPLETED: - if (next->completion_type == GEN_MAGIC_NEXT) { - js_async_generator_resolve(ctx, s, JS_UNDEFINED, TRUE); - } else if (next->completion_type == GEN_MAGIC_RETURN) { - s->state = JS_ASYNC_GENERATOR_STATE_AWAITING_RETURN; - js_async_generator_completed_return(ctx, s, next->result); - } else { - js_async_generator_reject(ctx, s, next->result); - } - goto done; - case JS_ASYNC_GENERATOR_STATE_SUSPENDED_YIELD: - case JS_ASYNC_GENERATOR_STATE_SUSPENDED_YIELD_STAR: - value = js_dup(next->result); - if (next->completion_type == GEN_MAGIC_THROW && - s->state == JS_ASYNC_GENERATOR_STATE_SUSPENDED_YIELD) { - JS_Throw(ctx, value); - s->func_state.throw_flag = TRUE; - } else { - /* 'yield' returns a value. 'yield *' also returns a value - in case the 'throw' method is called */ - s->func_state.frame.cur_sp[-1] = value; - s->func_state.frame.cur_sp[0] = - js_int32(next->completion_type); - s->func_state.frame.cur_sp++; - exec_no_arg: - s->func_state.throw_flag = FALSE; - } - s->state = JS_ASYNC_GENERATOR_STATE_EXECUTING; - resume_exec: - func_ret = async_func_resume(ctx, &s->func_state); - if (JS_IsException(func_ret)) { - value = JS_GetException(ctx); - js_async_generator_complete(ctx, s); - js_async_generator_reject(ctx, s, value); - JS_FreeValue(ctx, value); - } else if (JS_VALUE_GET_TAG(func_ret) == JS_TAG_INT) { - int func_ret_code, ret; - value = s->func_state.frame.cur_sp[-1]; - s->func_state.frame.cur_sp[-1] = JS_UNDEFINED; - func_ret_code = JS_VALUE_GET_INT(func_ret); - switch(func_ret_code) { - case FUNC_RET_YIELD: - case FUNC_RET_YIELD_STAR: - if (func_ret_code == FUNC_RET_YIELD_STAR) - s->state = JS_ASYNC_GENERATOR_STATE_SUSPENDED_YIELD_STAR; - else - s->state = JS_ASYNC_GENERATOR_STATE_SUSPENDED_YIELD; - js_async_generator_resolve(ctx, s, value, FALSE); - JS_FreeValue(ctx, value); - break; - case FUNC_RET_AWAIT: - ret = js_async_generator_await(ctx, s, value); - JS_FreeValue(ctx, value); - if (ret < 0) { - /* exception: throw it */ - s->func_state.throw_flag = TRUE; - goto resume_exec; - } - goto done; - default: - abort(); - } - } else { - assert(JS_IsUndefined(func_ret)); - /* end of function */ - value = s->func_state.frame.cur_sp[-1]; - s->func_state.frame.cur_sp[-1] = JS_UNDEFINED; - js_async_generator_complete(ctx, s); - js_async_generator_resolve(ctx, s, value, TRUE); - JS_FreeValue(ctx, value); - } - break; - default: - abort(); - } - } - done: ; -} - -static JSValue js_async_generator_resolve_function(JSContext *ctx, - JSValue this_obj, - int argc, JSValue *argv, - int magic, JSValue *func_data) -{ - BOOL is_reject = magic & 1; - JSAsyncGeneratorData *s = JS_GetOpaque(func_data[0], JS_CLASS_ASYNC_GENERATOR); - JSValue arg = argv[0]; - - /* XXX: what if s == NULL */ - - if (magic >= 2) { - /* resume next case in AWAITING_RETURN state */ - assert(s->state == JS_ASYNC_GENERATOR_STATE_AWAITING_RETURN || - s->state == JS_ASYNC_GENERATOR_STATE_COMPLETED); - s->state = JS_ASYNC_GENERATOR_STATE_COMPLETED; - if (is_reject) { - js_async_generator_reject(ctx, s, arg); - } else { - js_async_generator_resolve(ctx, s, arg, TRUE); - } - } else { - /* restart function execution after await() */ - assert(s->state == JS_ASYNC_GENERATOR_STATE_EXECUTING); - s->func_state.throw_flag = is_reject; - if (is_reject) { - JS_Throw(ctx, js_dup(arg)); - } else { - /* return value of await */ - s->func_state.frame.cur_sp[-1] = js_dup(arg); - } - js_async_generator_resume_next(ctx, s); - } - return JS_UNDEFINED; -} - -/* magic = GEN_MAGIC_x */ -static JSValue js_async_generator_next(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv, - int magic) -{ - JSAsyncGeneratorData *s = JS_GetOpaque(this_val, JS_CLASS_ASYNC_GENERATOR); - JSValue promise, resolving_funcs[2]; - JSAsyncGeneratorRequest *req; - - promise = JS_NewPromiseCapability(ctx, resolving_funcs); - if (JS_IsException(promise)) - return JS_EXCEPTION; - if (!s) { - JSValue err, res2; - JS_ThrowTypeError(ctx, "not an AsyncGenerator object"); - err = JS_GetException(ctx); - res2 = JS_Call(ctx, resolving_funcs[1], JS_UNDEFINED, - 1, &err); - JS_FreeValue(ctx, err); - JS_FreeValue(ctx, res2); - JS_FreeValue(ctx, resolving_funcs[0]); - JS_FreeValue(ctx, resolving_funcs[1]); - return promise; - } - req = js_mallocz(ctx, sizeof(*req)); - if (!req) - goto fail; - req->completion_type = magic; - req->result = js_dup(argv[0]); - req->promise = js_dup(promise); - req->resolving_funcs[0] = resolving_funcs[0]; - req->resolving_funcs[1] = resolving_funcs[1]; - list_add_tail(&req->link, &s->queue); - if (s->state != JS_ASYNC_GENERATOR_STATE_EXECUTING) { - js_async_generator_resume_next(ctx, s); - } - return promise; - fail: - JS_FreeValue(ctx, resolving_funcs[0]); - JS_FreeValue(ctx, resolving_funcs[1]); - JS_FreeValue(ctx, promise); - return JS_EXCEPTION; -} - -static JSValue js_async_generator_function_call(JSContext *ctx, JSValue func_obj, - JSValue this_obj, - int argc, JSValue *argv, - int flags) -{ - JSValue obj, func_ret; - JSAsyncGeneratorData *s; - - s = js_mallocz(ctx, sizeof(*s)); - if (!s) - return JS_EXCEPTION; - s->state = JS_ASYNC_GENERATOR_STATE_SUSPENDED_START; - init_list_head(&s->queue); - if (async_func_init(ctx, &s->func_state, func_obj, this_obj, argc, argv)) { - s->state = JS_ASYNC_GENERATOR_STATE_COMPLETED; - goto fail; - } - - /* execute the function up to 'OP_initial_yield' (no yield nor - await are possible) */ - func_ret = async_func_resume(ctx, &s->func_state); - if (JS_IsException(func_ret)) - goto fail; - JS_FreeValue(ctx, func_ret); - - obj = js_create_from_ctor(ctx, func_obj, JS_CLASS_ASYNC_GENERATOR); - if (JS_IsException(obj)) - goto fail; - s->generator = JS_VALUE_GET_OBJ(obj); - JS_SetOpaque(obj, s); - return obj; - fail: - js_async_generator_free(ctx->rt, s); - return JS_EXCEPTION; -} - -/* JS parser */ - -enum { - TOK_NUMBER = -128, - TOK_STRING, - TOK_TEMPLATE, - TOK_IDENT, - TOK_REGEXP, - /* warning: order matters (see js_parse_assign_expr) */ - TOK_MUL_ASSIGN, - TOK_DIV_ASSIGN, - TOK_MOD_ASSIGN, - TOK_PLUS_ASSIGN, - TOK_MINUS_ASSIGN, - TOK_SHL_ASSIGN, - TOK_SAR_ASSIGN, - TOK_SHR_ASSIGN, - TOK_AND_ASSIGN, - TOK_XOR_ASSIGN, - TOK_OR_ASSIGN, - TOK_POW_ASSIGN, - TOK_LAND_ASSIGN, - TOK_LOR_ASSIGN, - TOK_DOUBLE_QUESTION_MARK_ASSIGN, - TOK_DEC, - TOK_INC, - TOK_SHL, - TOK_SAR, - TOK_SHR, - TOK_LT, - TOK_LTE, - TOK_GT, - TOK_GTE, - TOK_EQ, - TOK_STRICT_EQ, - TOK_NEQ, - TOK_STRICT_NEQ, - TOK_LAND, - TOK_LOR, - TOK_POW, - TOK_ARROW, - TOK_ELLIPSIS, - TOK_DOUBLE_QUESTION_MARK, - TOK_QUESTION_MARK_DOT, - TOK_ERROR, - TOK_PRIVATE_NAME, - TOK_EOF, - /* keywords: WARNING: same order as atoms */ - TOK_NULL, /* must be first */ - TOK_FALSE, - TOK_TRUE, - TOK_IF, - TOK_ELSE, - TOK_RETURN, - TOK_VAR, - TOK_THIS, - TOK_DELETE, - TOK_VOID, - TOK_TYPEOF, - TOK_NEW, - TOK_IN, - TOK_INSTANCEOF, - TOK_DO, - TOK_WHILE, - TOK_FOR, - TOK_BREAK, - TOK_CONTINUE, - TOK_SWITCH, - TOK_CASE, - TOK_DEFAULT, - TOK_THROW, - TOK_TRY, - TOK_CATCH, - TOK_FINALLY, - TOK_FUNCTION, - TOK_DEBUGGER, - TOK_WITH, - /* FutureReservedWord */ - TOK_CLASS, - TOK_CONST, - TOK_ENUM, - TOK_EXPORT, - TOK_EXTENDS, - TOK_IMPORT, - TOK_SUPER, - /* FutureReservedWords when parsing strict mode code */ - TOK_IMPLEMENTS, - TOK_INTERFACE, - TOK_LET, - TOK_PACKAGE, - TOK_PRIVATE, - TOK_PROTECTED, - TOK_PUBLIC, - TOK_STATIC, - TOK_YIELD, - TOK_AWAIT, /* must be last */ - TOK_OF, /* only used for js_parse_skip_parens_token() */ -}; - -#define TOK_FIRST_KEYWORD TOK_NULL -#define TOK_LAST_KEYWORD TOK_AWAIT - -/* unicode code points */ -#define CP_NBSP 0x00a0 -#define CP_BOM 0xfeff - -#define CP_LS 0x2028 -#define CP_PS 0x2029 - -typedef struct BlockEnv { - struct BlockEnv *prev; - JSAtom label_name; /* JS_ATOM_NULL if none */ - int label_break; /* -1 if none */ - int label_cont; /* -1 if none */ - int drop_count; /* number of stack elements to drop */ - int label_finally; /* -1 if none */ - int scope_level; - int has_iterator; -} BlockEnv; - -typedef struct JSGlobalVar { - int cpool_idx; /* if >= 0, index in the constant pool for hoisted - function defintion*/ - uint8_t force_init : 1; /* force initialization to undefined */ - uint8_t is_lexical : 1; /* global let/const definition */ - uint8_t is_const : 1; /* const definition */ - int scope_level; /* scope of definition */ - JSAtom var_name; /* variable name */ -} JSGlobalVar; - -typedef struct RelocEntry { - struct RelocEntry *next; - uint32_t addr; /* address to patch */ - int size; /* address size: 1, 2 or 4 bytes */ -} RelocEntry; - -typedef struct JumpSlot { - int op; - int size; - int pos; - int label; -} JumpSlot; - -typedef struct LabelSlot { - int ref_count; - int pos; /* phase 1 address, -1 means not resolved yet */ - int pos2; /* phase 2 address, -1 means not resolved yet */ - int addr; /* phase 3 address, -1 means not resolved yet */ - RelocEntry *first_reloc; -} LabelSlot; - -typedef struct SourceLocSlot { - uint32_t pc; - int line_num; - int col_num; -} SourceLocSlot; - -typedef enum JSParseFunctionEnum { - JS_PARSE_FUNC_STATEMENT, - JS_PARSE_FUNC_VAR, - JS_PARSE_FUNC_EXPR, - JS_PARSE_FUNC_ARROW, - JS_PARSE_FUNC_GETTER, - JS_PARSE_FUNC_SETTER, - JS_PARSE_FUNC_METHOD, - JS_PARSE_FUNC_CLASS_STATIC_INIT, - JS_PARSE_FUNC_CLASS_CONSTRUCTOR, - JS_PARSE_FUNC_DERIVED_CLASS_CONSTRUCTOR, -} JSParseFunctionEnum; - -typedef enum JSParseExportEnum { - JS_PARSE_EXPORT_NONE, - JS_PARSE_EXPORT_NAMED, - JS_PARSE_EXPORT_DEFAULT, -} JSParseExportEnum; - -typedef struct JSFunctionDef { - JSContext *ctx; - struct JSFunctionDef *parent; - int parent_cpool_idx; /* index in the constant pool of the parent - or -1 if none */ - int parent_scope_level; /* scope level in parent at point of definition */ - struct list_head child_list; /* list of JSFunctionDef.link */ - struct list_head link; - - BOOL is_eval; /* TRUE if eval code */ - int eval_type; /* only valid if is_eval = TRUE */ - BOOL is_global_var; /* TRUE if variables are not defined locally: - eval global, eval module or non strict eval */ - BOOL is_func_expr; /* TRUE if function expression */ - BOOL has_home_object; /* TRUE if the home object is available */ - BOOL has_prototype; /* true if a prototype field is necessary */ - BOOL has_simple_parameter_list; - BOOL has_parameter_expressions; /* if true, an argument scope is created */ - BOOL has_use_strict; /* to reject directive in special cases */ - BOOL has_eval_call; /* true if the function contains a call to eval() */ - BOOL has_arguments_binding; /* true if the 'arguments' binding is - available in the function */ - BOOL has_this_binding; /* true if the 'this' and new.target binding are - available in the function */ - BOOL new_target_allowed; /* true if the 'new.target' does not - throw a syntax error */ - BOOL super_call_allowed; /* true if super() is allowed */ - BOOL super_allowed; /* true if super. or super[] is allowed */ - BOOL arguments_allowed; /* true if the 'arguments' identifier is allowed */ - BOOL is_derived_class_constructor; - BOOL in_function_body; - BOOL backtrace_barrier; - JSFunctionKindEnum func_kind : 8; - JSParseFunctionEnum func_type : 8; - uint8_t js_mode; /* bitmap of JS_MODE_x */ - JSAtom func_name; /* JS_ATOM_NULL if no name */ - - JSVarDef *vars; - int var_size; /* allocated size for vars[] */ - int var_count; - JSVarDef *args; - int arg_size; /* allocated size for args[] */ - int arg_count; /* number of arguments */ - int defined_arg_count; - int var_object_idx; /* -1 if none */ - int arg_var_object_idx; /* -1 if none (var object for the argument scope) */ - int arguments_var_idx; /* -1 if none */ - int arguments_arg_idx; /* argument variable definition in argument scope, - -1 if none */ - int func_var_idx; /* variable containing the current function (-1 - if none, only used if is_func_expr is true) */ - int eval_ret_idx; /* variable containing the return value of the eval, -1 if none */ - int this_var_idx; /* variable containg the 'this' value, -1 if none */ - int new_target_var_idx; /* variable containg the 'new.target' value, -1 if none */ - int this_active_func_var_idx; /* variable containg the 'this.active_func' value, -1 if none */ - int home_object_var_idx; - BOOL need_home_object; - - int scope_level; /* index into fd->scopes if the current lexical scope */ - int scope_first; /* index into vd->vars of first lexically scoped variable */ - int scope_size; /* allocated size of fd->scopes array */ - int scope_count; /* number of entries used in the fd->scopes array */ - JSVarScope *scopes; - JSVarScope def_scope_array[4]; - int body_scope; /* scope of the body of the function or eval */ - - int global_var_count; - int global_var_size; - JSGlobalVar *global_vars; - - DynBuf byte_code; - int last_opcode_pos; /* -1 if no last opcode */ - int last_opcode_line_num; - int last_opcode_col_num; - BOOL use_short_opcodes; /* true if short opcodes are used in byte_code */ - - LabelSlot *label_slots; - int label_size; /* allocated size for label_slots[] */ - int label_count; - BlockEnv *top_break; /* break/continue label stack */ - - /* constant pool (strings, functions, numbers) */ - JSValue *cpool; - int cpool_count; - int cpool_size; - - /* list of variables in the closure */ - int closure_var_count; - int closure_var_size; - JSClosureVar *closure_var; - - JumpSlot *jump_slots; - int jump_size; - int jump_count; - - SourceLocSlot *source_loc_slots; - int source_loc_size; - int source_loc_count; - int line_number_last; - int line_number_last_pc; - int col_number_last; - - /* pc2line table */ - JSAtom filename; - int line_num; - int col_num; - DynBuf pc2line; - - char *source; /* raw source, utf-8 encoded */ - int source_len; - - JSModuleDef *module; /* != NULL when parsing a module */ - JSInlineCache *ic; /* inline cache for field op */ -} JSFunctionDef; - -typedef struct JSToken { - int val; - int line_num; /* line number of token start */ - int col_num; /* column number of token start */ - const uint8_t *ptr; - union { - struct { - JSValue str; - int sep; - } str; - struct { - JSValue val; - slimb_t exponent; /* may be != 0 only if val is a float */ - } num; - struct { - JSAtom atom; - BOOL has_escape; - BOOL is_reserved; - } ident; - struct { - JSValue body; - JSValue flags; - } regexp; - } u; -} JSToken; - -typedef struct JSParseState { - JSContext *ctx; - int last_line_num; /* line number of last token */ - int last_col_num; /* column number of last token */ - int line_num; /* line number of current offset */ - int col_num; /* column number of current offset */ - const char *filename; - JSToken token; - BOOL got_lf; /* true if got line feed before the current token */ - const uint8_t *last_ptr; - const uint8_t *buf_ptr; - const uint8_t *buf_end; - const uint8_t *eol; // most recently seen end-of-line character - const uint8_t *mark; // first token character, invariant: eol < mark - - /* current function code */ - JSFunctionDef *cur_func; - BOOL is_module; /* parsing a module */ - BOOL allow_html_comments; -} JSParseState; - -typedef struct JSOpCode { -#ifdef DUMP_BYTECODE - const char *name; -#endif - uint8_t size; /* in bytes */ - /* the opcodes remove n_pop items from the top of the stack, then - pushes n_push items */ - uint8_t n_pop; - uint8_t n_push; - uint8_t fmt; -} JSOpCode; - -static const JSOpCode opcode_info[OP_COUNT + (OP_TEMP_END - OP_TEMP_START)] = { -#define FMT(f) -#ifdef DUMP_BYTECODE -#define DEF(id, size, n_pop, n_push, f) { #id, size, n_pop, n_push, OP_FMT_ ## f }, -#else -#define DEF(id, size, n_pop, n_push, f) { size, n_pop, n_push, OP_FMT_ ## f }, -#endif -#include "quickjs-opcode.h" -#undef DEF -#undef FMT -}; - -/* After the final compilation pass, short opcodes are used. Their - opcodes overlap with the temporary opcodes which cannot appear in - the final bytecode. Their description is after the temporary - opcodes in opcode_info[]. */ -#define short_opcode_info(op) \ - opcode_info[(op) >= OP_TEMP_START ? \ - (op) + (OP_TEMP_END - OP_TEMP_START) : (op)] - -static __exception int next_token(JSParseState *s); - -static void free_token(JSParseState *s, JSToken *token) -{ - switch(token->val) { - case TOK_NUMBER: - JS_FreeValue(s->ctx, token->u.num.val); - break; - case TOK_STRING: - case TOK_TEMPLATE: - JS_FreeValue(s->ctx, token->u.str.str); - break; - case TOK_REGEXP: - JS_FreeValue(s->ctx, token->u.regexp.body); - JS_FreeValue(s->ctx, token->u.regexp.flags); - break; - case TOK_IDENT: - case TOK_PRIVATE_NAME: - JS_FreeAtom(s->ctx, token->u.ident.atom); - break; - default: - if (token->val >= TOK_FIRST_KEYWORD && - token->val <= TOK_LAST_KEYWORD) { - JS_FreeAtom(s->ctx, token->u.ident.atom); - } - break; - } -} - -static void __attribute((unused)) dump_token(JSParseState *s, - const JSToken *token) -{ - printf("%d:%d ", token->line_num, token->col_num); - switch(token->val) { - case TOK_NUMBER: - { - double d; - JS_ToFloat64(s->ctx, &d, token->u.num.val); /* no exception possible */ - printf("number: %.14g\n", d); - } - break; - case TOK_IDENT: - dump_atom: - { - char buf[ATOM_GET_STR_BUF_SIZE]; - printf("ident: '%s'\n", - JS_AtomGetStr(s->ctx, buf, sizeof(buf), token->u.ident.atom)); - } - break; - case TOK_STRING: - { - const char *str; - /* XXX: quote the string */ - str = JS_ToCString(s->ctx, token->u.str.str); - printf("string: '%s'\n", str); - JS_FreeCString(s->ctx, str); - } - break; - case TOK_TEMPLATE: - { - const char *str; - str = JS_ToCString(s->ctx, token->u.str.str); - printf("template: `%s`\n", str); - JS_FreeCString(s->ctx, str); - } - break; - case TOK_REGEXP: - { - const char *str, *str2; - str = JS_ToCString(s->ctx, token->u.regexp.body); - str2 = JS_ToCString(s->ctx, token->u.regexp.flags); - printf("regexp: '%s' '%s'\n", str, str2); - JS_FreeCString(s->ctx, str); - JS_FreeCString(s->ctx, str2); - } - break; - case TOK_EOF: - printf("eof\n"); - break; - default: - if (s->token.val >= TOK_NULL && s->token.val <= TOK_LAST_KEYWORD) { - goto dump_atom; - } else if (s->token.val >= 256) { - printf("token: %d\n", token->val); - } else { - printf("token: '%c'\n", token->val); - } - break; - } -} - -int __attribute__((format(printf, 2, 3))) js_parse_error(JSParseState *s, const char *fmt, ...) -{ - JSContext *ctx = s->ctx; - va_list ap; - int backtrace_flags; - - va_start(ap, fmt); - JS_ThrowError2(ctx, JS_SYNTAX_ERROR, fmt, ap, FALSE); - va_end(ap); - backtrace_flags = 0; - if (s->cur_func && s->cur_func->backtrace_barrier) - backtrace_flags = JS_BACKTRACE_FLAG_SINGLE_LEVEL; - build_backtrace(ctx, ctx->rt->current_exception, s->filename, - s->line_num, s->col_num, backtrace_flags); - return -1; -} - -static int js_parse_expect(JSParseState *s, int tok) -{ - if (s->token.val != tok) { - /* XXX: dump token correctly in all cases */ - return js_parse_error(s, "expecting '%c'", tok); - } - return next_token(s); -} - -static int js_parse_expect_semi(JSParseState *s) -{ - if (s->token.val != ';') { - /* automatic insertion of ';' */ - if (s->token.val == TOK_EOF || s->token.val == '}' || s->got_lf) { - return 0; - } - return js_parse_error(s, "expecting '%c'", ';'); - } - return next_token(s); -} - -static int js_parse_error_reserved_identifier(JSParseState *s) -{ - char buf1[ATOM_GET_STR_BUF_SIZE]; - return js_parse_error(s, "'%s' is a reserved identifier", - JS_AtomGetStr(s->ctx, buf1, sizeof(buf1), - s->token.u.ident.atom)); -} - -static __exception int js_parse_template_part(JSParseState *s, - const uint8_t *p) -{ - uint32_t c; - StringBuffer b_s, *b = &b_s; - - /* p points to the first byte of the template part */ - if (string_buffer_init(s->ctx, b, 32)) - goto fail; - for(;;) { - if (p >= s->buf_end) - goto unexpected_eof; - c = *p++; - if (c == '`') { - /* template end part */ - break; - } - if (c == '$' && *p == '{') { - /* template start or middle part */ - p++; - break; - } - if (c == '\\') { - if (string_buffer_putc8(b, c)) - goto fail; - if (p >= s->buf_end) - goto unexpected_eof; - c = *p++; - } - /* newline sequences are normalized as single '\n' bytes */ - if (c == '\r') { - if (*p == '\n') - p++; - c = '\n'; - } - if (c == '\n') { - s->line_num++; - s->eol = &p[-1]; - s->mark = p; - } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { - js_parse_error(s, "invalid UTF-8 sequence"); - goto fail; - } - p = p_next; - } - if (string_buffer_putc(b, c)) - goto fail; - } - s->token.val = TOK_TEMPLATE; - s->token.u.str.sep = c; - s->token.u.str.str = string_buffer_end(b); - s->buf_ptr = p; - return 0; - - unexpected_eof: - js_parse_error(s, "unexpected end of string"); - fail: - string_buffer_free(b); - return -1; -} - -static __exception int js_parse_string(JSParseState *s, int sep, - BOOL do_throw, const uint8_t *p, - JSToken *token, const uint8_t **pp) -{ - int ret; - uint32_t c; - StringBuffer b_s, *b = &b_s; - - /* string */ - if (string_buffer_init(s->ctx, b, 32)) - goto fail; - for(;;) { - if (p >= s->buf_end) - goto invalid_char; - c = *p; - if (c < 0x20) { - if (!s->cur_func) { - if (do_throw) - js_parse_error(s, "invalid character in a JSON string"); - goto fail; - } - if (sep == '`') { - if (c == '\r') { - if (p[1] == '\n') - p++; - c = '\n'; - } - /* do not update s->line_num */ - } else if (c == '\n' || c == '\r') - goto invalid_char; - } - p++; - if (c == sep) - break; - if (c == '$' && *p == '{' && sep == '`') { - /* template start or middle part */ - p++; - break; - } - if (c == '\\') { - c = *p; - /* XXX: need a specific JSON case to avoid - accepting invalid escapes */ - switch(c) { - case '\0': - if (p >= s->buf_end) - goto invalid_char; - p++; - break; - case '\'': - case '\"': - case '\\': - p++; - break; - case '\r': /* accept DOS and MAC newline sequences */ - if (p[1] == '\n') { - p++; - } - /* fall thru */ - case '\n': - /* ignore escaped newline sequence */ - p++; - if (sep != '`') { - s->line_num++; - s->eol = &p[-1]; - s->mark = p; - } - continue; - default: - if (c >= '0' && c <= '9') { - if (!s->cur_func) - goto invalid_escape; /* JSON case */ - if (!(s->cur_func->js_mode & JS_MODE_STRICT) && sep != '`') - goto parse_escape; - if (c == '0' && !(p[1] >= '0' && p[1] <= '9')) { - p++; - c = '\0'; - } else { - if (c >= '8' || sep == '`') { - /* Note: according to ES2021, \8 and \9 are not - accepted in strict mode or in templates. */ - goto invalid_escape; - } else { - if (do_throw) - js_parse_error(s, "octal escape sequences are not allowed in strict mode"); - } - goto fail; - } - } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { - goto invalid_utf8; - } - p = p_next; - /* LS or PS are skipped */ - if (c == CP_LS || c == CP_PS) - continue; - } else { - parse_escape: - ret = lre_parse_escape(&p, TRUE); - if (ret == -1) { - invalid_escape: - if (do_throw) - js_parse_error(s, "malformed escape sequence in string literal"); - goto fail; - } else if (ret < 0) { - /* ignore the '\' (could output a warning) */ - p++; - } else { - c = ret; - } - } - break; - } - } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) - goto invalid_utf8; - p = p_next; - } - if (string_buffer_putc(b, c)) - goto fail; - } - token->val = TOK_STRING; - token->u.str.sep = c; - token->u.str.str = string_buffer_end(b); - *pp = p; - return 0; - - invalid_utf8: - if (do_throw) - js_parse_error(s, "invalid UTF-8 sequence"); - goto fail; - invalid_char: - if (do_throw) - js_parse_error(s, "unexpected end of string"); - fail: - string_buffer_free(b); - return -1; -} - -static inline BOOL token_is_pseudo_keyword(JSParseState *s, JSAtom atom) { - return s->token.val == TOK_IDENT && s->token.u.ident.atom == atom && - !s->token.u.ident.has_escape; -} - -static __exception int js_parse_regexp(JSParseState *s) -{ - const uint8_t *p; - BOOL in_class; - StringBuffer b_s, *b = &b_s; - StringBuffer b2_s, *b2 = &b2_s; - uint32_t c; - - p = s->buf_ptr; - p++; - in_class = FALSE; - if (string_buffer_init(s->ctx, b, 32)) - return -1; - if (string_buffer_init(s->ctx, b2, 1)) - goto fail; - for(;;) { - if (p >= s->buf_end) { - eof_error: - js_parse_error(s, "unexpected end of regexp"); - goto fail; - } - c = *p++; - if (c == '\n' || c == '\r') { - goto eol_error; - } else if (c == '/') { - if (!in_class) - break; - } else if (c == '[') { - in_class = TRUE; - } else if (c == ']') { - /* XXX: incorrect as the first character in a class */ - in_class = FALSE; - } else if (c == '\\') { - if (string_buffer_putc8(b, c)) - goto fail; - c = *p++; - if (c == '\n' || c == '\r') - goto eol_error; - else if (c == '\0' && p >= s->buf_end) - goto eof_error; - else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { - goto invalid_utf8; - } - p = p_next; - if (c == CP_LS || c == CP_PS) - goto eol_error; - } - } else if (c >= 0x80) { - const uint8_t *p_next; - c = unicode_from_utf8(p - 1, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { - invalid_utf8: - js_parse_error(s, "invalid UTF-8 sequence"); - goto fail; - } - p = p_next; - /* LS or PS are considered as line terminator */ - if (c == CP_LS || c == CP_PS) { - eol_error: - js_parse_error(s, "unexpected line terminator in regexp"); - goto fail; - } - } - if (string_buffer_putc(b, c)) - goto fail; - } - - /* flags */ - for(;;) { - const uint8_t *p_next = p; - c = *p_next++; - if (c >= 0x80) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p_next); - if (c > 0x10FFFF) { - goto invalid_utf8; - } - } - if (!lre_js_is_ident_next(c)) - break; - if (string_buffer_putc(b2, c)) - goto fail; - p = p_next; - } - - s->token.val = TOK_REGEXP; - s->token.u.regexp.body = string_buffer_end(b); - s->token.u.regexp.flags = string_buffer_end(b2); - s->buf_ptr = p; - return 0; - fail: - string_buffer_free(b); - string_buffer_free(b2); - return -1; -} - -static __exception int ident_realloc(JSContext *ctx, char **pbuf, size_t *psize, - char *static_buf) -{ - char *buf, *new_buf; - size_t size, new_size; - - buf = *pbuf; - size = *psize; - if (size >= (SIZE_MAX / 3) * 2) - new_size = SIZE_MAX; - else - new_size = size + (size >> 1); - if (buf == static_buf) { - new_buf = js_malloc(ctx, new_size); - if (!new_buf) - return -1; - memcpy(new_buf, buf, size); - } else { - new_buf = js_realloc(ctx, buf, new_size); - if (!new_buf) - return -1; - } - *pbuf = new_buf; - *psize = new_size; - return 0; -} - -/* 'c' is the first character. Return JS_ATOM_NULL in case of error */ -static JSAtom parse_ident(JSParseState *s, const uint8_t **pp, - BOOL *pident_has_escape, int c, BOOL is_private) -{ - const uint8_t *p, *p1; - char ident_buf[128], *buf; - size_t ident_size, ident_pos; - JSAtom atom; - - p = *pp; - buf = ident_buf; - ident_size = sizeof(ident_buf); - ident_pos = 0; - if (is_private) - buf[ident_pos++] = '#'; - for(;;) { - p1 = p; - - if (c < 128) { - buf[ident_pos++] = c; - } else { - ident_pos += unicode_to_utf8((uint8_t*)buf + ident_pos, c); - } - c = *p1++; - if (c == '\\' && *p1 == 'u') { - c = lre_parse_escape(&p1, TRUE); - *pident_has_escape = TRUE; - } else if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1); - } - if (!lre_js_is_ident_next(c)) - break; - p = p1; - if (unlikely(ident_pos >= ident_size - UTF8_CHAR_LEN_MAX)) { - if (ident_realloc(s->ctx, &buf, &ident_size, ident_buf)) { - atom = JS_ATOM_NULL; - goto done; - } - } - } - atom = JS_NewAtomLen(s->ctx, buf, ident_pos); - done: - if (unlikely(buf != ident_buf)) - js_free(s->ctx, buf); - *pp = p; - return atom; -} - - -static __exception int next_token(JSParseState *s) -{ - const uint8_t *p; - int c; - BOOL ident_has_escape; - JSAtom atom; - - if (js_check_stack_overflow(s->ctx->rt, 0)) { - return js_parse_error(s, "stack overflow"); - } - - free_token(s, &s->token); - - p = s->last_ptr = s->buf_ptr; - s->got_lf = FALSE; - s->last_line_num = s->token.line_num; - s->last_col_num = s->token.col_num; - redo: - s->token.line_num = s->line_num; - s->token.col_num = s->col_num; - s->token.ptr = p; - c = *p; - switch(c) { - case 0: - if (p >= s->buf_end) { - s->token.val = TOK_EOF; - } else { - goto def_token; - } - break; - case '`': - if (js_parse_template_part(s, p + 1)) - goto fail; - p = s->buf_ptr; - break; - case '\'': - case '\"': - if (js_parse_string(s, c, TRUE, p + 1, &s->token, &p)) - goto fail; - break; - case '\r': /* accept DOS and MAC newline sequences */ - if (p[1] == '\n') { - p++; - } - /* fall thru */ - case '\n': - p++; - line_terminator: - s->eol = &p[-1]; - s->mark = p; - s->got_lf = TRUE; - s->line_num++; - goto redo; - case '\f': - case '\v': - case ' ': - case '\t': - s->mark = ++p; - goto redo; - case '/': - if (p[1] == '*') { - /* comment */ - p += 2; - for(;;) { - if (*p == '\0' && p >= s->buf_end) { - js_parse_error(s, "unexpected end of comment"); - goto fail; - } - if (p[0] == '*' && p[1] == '/') { - p += 2; - break; - } - if (*p == '\n') { - s->line_num++; - s->got_lf = TRUE; /* considered as LF for ASI */ - s->eol = p++; - s->mark = p; - } else if (*p == '\r') { - s->got_lf = TRUE; /* considered as LF for ASI */ - p++; - } else if (*p >= 0x80) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); - if (c == CP_LS || c == CP_PS) { - s->got_lf = TRUE; /* considered as LF for ASI */ - } else if (c == -1) { - p++; /* skip invalid UTF-8 */ - } - } else { - p++; - } - } - s->mark = p; - goto redo; - } else if (p[1] == '/') { - /* line comment */ - p += 2; - skip_line_comment: - for(;;) { - if (*p == '\0' && p >= s->buf_end) - break; - if (*p == '\r' || *p == '\n') - break; - if (*p >= 0x80) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p); - /* LS or PS are considered as line terminator */ - if (c == CP_LS || c == CP_PS) { - break; - } else if (c == -1) { - p++; /* skip invalid UTF-8 */ - } - } else { - p++; - } - } - s->mark = p; - goto redo; - } else if (p[1] == '=') { - p += 2; - s->token.val = TOK_DIV_ASSIGN; - } else { - p++; - s->token.val = c; - } - break; - case '\\': - if (p[1] == 'u') { - const uint8_t *p1 = p + 1; - int c1 = lre_parse_escape(&p1, TRUE); - if (c1 >= 0 && lre_js_is_ident_first(c1)) { - c = c1; - p = p1; - ident_has_escape = TRUE; - goto has_ident; - } else { - /* XXX: syntax error? */ - } - } - goto def_token; - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - case '_': - case '$': - /* identifier */ - p++; - ident_has_escape = FALSE; - has_ident: - atom = parse_ident(s, &p, &ident_has_escape, c, FALSE); - if (atom == JS_ATOM_NULL) - goto fail; - s->token.u.ident.atom = atom; - s->token.u.ident.has_escape = ident_has_escape; - s->token.u.ident.is_reserved = FALSE; - // TODO(bnoordhuis) accept await when used in a function expression - // inside the static initializer block - if (s->cur_func->func_type == JS_PARSE_FUNC_CLASS_STATIC_INIT && - (atom == JS_ATOM_arguments || atom == JS_ATOM_await)) { - s->token.u.ident.is_reserved = TRUE; - s->token.val = TOK_IDENT; - } else if (s->token.u.ident.atom <= JS_ATOM_LAST_KEYWORD || - (s->token.u.ident.atom <= JS_ATOM_LAST_STRICT_KEYWORD && - (s->cur_func->js_mode & JS_MODE_STRICT)) || - (s->token.u.ident.atom == JS_ATOM_yield && - ((s->cur_func->func_kind & JS_FUNC_GENERATOR) || - (s->cur_func->func_type == JS_PARSE_FUNC_ARROW && - !s->cur_func->in_function_body && s->cur_func->parent && - (s->cur_func->parent->func_kind & JS_FUNC_GENERATOR)))) || - (s->token.u.ident.atom == JS_ATOM_await && - (s->is_module || - (((s->cur_func->func_kind & JS_FUNC_ASYNC) || - (s->cur_func->func_type == JS_PARSE_FUNC_ARROW && - !s->cur_func->in_function_body && s->cur_func->parent && - (s->cur_func->parent->func_kind & JS_FUNC_ASYNC))))))) { - if (ident_has_escape) { - s->token.u.ident.is_reserved = TRUE; - s->token.val = TOK_IDENT; - } else { - /* The keywords atoms are pre allocated */ - s->token.val = s->token.u.ident.atom - 1 + TOK_FIRST_KEYWORD; - } - } else { - s->token.val = TOK_IDENT; - } - break; - case '#': - /* private name */ - { - const uint8_t *p1; - p++; - p1 = p; - c = *p1++; - if (c == '\\' && *p1 == 'u') { - c = lre_parse_escape(&p1, TRUE); - } else if (c >= 128) { - c = unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1); - } - if (!lre_js_is_ident_first(c)) { - js_parse_error(s, "invalid first character of private name"); - goto fail; - } - p = p1; - ident_has_escape = FALSE; /* not used */ - atom = parse_ident(s, &p, &ident_has_escape, c, TRUE); - if (atom == JS_ATOM_NULL) - goto fail; - s->token.u.ident.atom = atom; - s->token.val = TOK_PRIVATE_NAME; - } - break; - case '.': - if (p[1] == '.' && p[2] == '.') { - p += 3; - s->token.val = TOK_ELLIPSIS; - break; - } - if (p[1] >= '0' && p[1] <= '9') { - goto parse_number; - } else { - goto def_token; - } - break; - case '0': - /* in strict mode, octal literals are not accepted */ - if (is_digit(p[1]) && (s->cur_func->js_mode & JS_MODE_STRICT)) { - js_parse_error(s, "octal literals are deprecated in strict mode"); - goto fail; - } - goto parse_number; - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': - /* number */ - parse_number: - { - JSValue ret; - const uint8_t *p1; - int flags; - flags = ATOD_ACCEPT_BIN_OCT | ATOD_ACCEPT_LEGACY_OCTAL | - ATOD_ACCEPT_UNDERSCORES | ATOD_ACCEPT_SUFFIX; - s->token.u.num.exponent = 0; - ret = js_atof2(s->ctx, (const char *)p, (const char **)&p, 0, - flags, &s->token.u.num.exponent); - if (JS_IsException(ret)) - goto fail; - /* reject `10instanceof Number` */ - if (JS_VALUE_IS_NAN(ret) || - lre_js_is_ident_next(unicode_from_utf8(p, UTF8_CHAR_LEN_MAX, &p1))) { - JS_FreeValue(s->ctx, ret); - js_parse_error(s, "invalid number literal"); - goto fail; - } - s->token.val = TOK_NUMBER; - s->token.u.num.val = ret; - } - break; - case '*': - if (p[1] == '=') { - p += 2; - s->token.val = TOK_MUL_ASSIGN; - } else if (p[1] == '*') { - if (p[2] == '=') { - p += 3; - s->token.val = TOK_POW_ASSIGN; - } else { - p += 2; - s->token.val = TOK_POW; - } - } else { - goto def_token; - } - break; - case '%': - if (p[1] == '=') { - p += 2; - s->token.val = TOK_MOD_ASSIGN; - } else { - goto def_token; - } - break; - case '+': - if (p[1] == '=') { - p += 2; - s->token.val = TOK_PLUS_ASSIGN; - } else if (p[1] == '+') { - p += 2; - s->token.val = TOK_INC; - } else { - goto def_token; - } - break; - case '-': - if (p[1] == '=') { - p += 2; - s->token.val = TOK_MINUS_ASSIGN; - } else if (p[1] == '-') { - if (s->allow_html_comments && - p[2] == '>' && s->last_line_num != s->line_num) { - /* Annex B: `-->` at beginning of line is an html comment end. - It extends to the end of the line. - */ - goto skip_line_comment; - } - p += 2; - s->token.val = TOK_DEC; - } else { - goto def_token; - } - break; - case '<': - if (p[1] == '=') { - p += 2; - s->token.val = TOK_LTE; - } else if (p[1] == '<') { - if (p[2] == '=') { - p += 3; - s->token.val = TOK_SHL_ASSIGN; - } else { - p += 2; - s->token.val = TOK_SHL; - } - } else if (s->allow_html_comments && - p[1] == '!' && p[2] == '-' && p[3] == '-') { - /* Annex B: handle `