@g9tm/lynxcontrols-testing 0.0.0-stage → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,13 @@
1
- # Temporary Holding Version
1
+ # @g9tm/lynxcontrols-testing
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Test utilities for G9 consumers and this repo: Intl-free test mode, deterministic clock, fake providers.
4
+
5
+ Exports: `installNoIntl`, `withoutIntl`, `IntlUnavailableError` (root, any runtime) and the SQLite reference driver (`/sqlite`, Node only).
6
+
7
+ ## `@g9tm/lynxcontrols-testing/sqlite` (Node only)
8
+
9
+ `createNodeTestDriver()` is the reference `G9SqliteDriver` on `node:sqlite` (Node ≥ 22.18): the driver every native
10
+ and desktop driver is measured against with `runContractSuite(driver, cases)`. Facts it encodes (and other
11
+ `node:sqlite`-based drivers must copy): safe integers are bound as `BigInt` (node binds every JS number as REAL), a
12
+ zero-length BLOB is bound from a fresh `Uint8Array(0)` (a zero-length view over an `ArrayBuffer` binds as NULL), text
13
+ containing NUL is rejected (readers stop at the NUL), and opening with `create` makes parent directories.
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/@types/react/node_modules/csstype/index.d.ts","../../../node_modules/@types/prop-types/index.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/animation.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@lynx-js/types/types/common/csstype.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/animation.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/element.d.ts","../../../node_modules/@lynx-js/types/types/common/events.d.ts","../../../node_modules/@lynx-js/types/types/common/system-info.d.ts","../../../node_modules/@lynx-js/types/types/common/performance.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/lynx.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/events.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/index.d.ts","../../../node_modules/@lynx-js/types/types/common/lynx.d.ts","../../../node_modules/@lynx-js/types/types/common/global.d.ts","../../../node_modules/@lynx-js/types/types/common/props.d.ts","../../../node_modules/@lynx-js/types/types/common/element/component.d.ts","../../../node_modules/@lynx-js/types/types/common/element/filter-image.d.ts","../../../node_modules/@lynx-js/types/types/common/element/image.d.ts","../../../node_modules/@lynx-js/types/types/common/element/common.d.ts","../../../node_modules/@lynx-js/types/types/common/element/list.d.ts","../../../node_modules/@lynx-js/types/types/common/element/list-item.d.ts","../../../node_modules/@lynx-js/types/types/common/element/page.d.ts","../../../node_modules/@lynx-js/types/types/common/element/scroll-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/text.d.ts","../../../node_modules/@lynx-js/types/types/common/element/view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/input.d.ts","../../../node_modules/@lynx-js/types/types/common/element/textarea.d.ts","../../../node_modules/@lynx-js/types/types/common/element/title-bar-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/svg.d.ts","../../../node_modules/@lynx-js/types/types/common/element/refresh.d.ts","../../../node_modules/@lynx-js/types/types/common/element/scroll-coordinator.d.ts","../../../node_modules/@lynx-js/types/types/common/element/viewpager.d.ts","../../../node_modules/@lynx-js/types/types/common/element/blur-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/webview.d.ts","../../../node_modules/@lynx-js/types/types/common/element/markdown.d.ts","../../../node_modules/@lynx-js/types/types/common/element/video.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/lynx-performance-entry.d.ts","../../../node_modules/@lynx-js/types/types/common/element/frame.d.ts","../../../node_modules/@lynx-js/types/types/common/element/overlay.d.ts","../../../node_modules/@lynx-js/types/types/common/element/element.d.ts","../../../node_modules/@lynx-js/types/types/common/element/methods.d.ts","../../../node_modules/@lynx-js/types/types/common/element/attributes.d.ts","../../../node_modules/@lynx-js/types/types/common/element/index.d.ts","../../../node_modules/@lynx-js/types/types/common/console.d.ts","../../../node_modules/@lynx-js/types/types/common/index.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/event.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/nodes-ref.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/app.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/performance.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/fetch.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/lynx.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/native-modules.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/text-encoder-decoder.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/index.d.ts","../../../node_modules/@lynx-js/types/types/index.d.ts","../../../node_modules/@types/react/jsx-runtime.d.ts","../../../node_modules/@lynx-js/react/runtime/jsx-runtime/index.d.ts","../src/no-intl.ts","../src/index.ts","../../sqlite/dist/values/ids.d.ts","../../sqlite/dist/values/int64.d.ts","../../sqlite/dist/values/local-date-time.d.ts","../../sqlite/dist/values/sql-value.d.ts","../../sqlite/dist/codecs/codecs.d.ts","../../foundation/dist/collections.d.ts","../../foundation/dist/culture/digits.d.ts","../../foundation/dist/culture/culture.d.ts","../../foundation/dist/culture/calendar.d.ts","../../foundation/dist/culture/date-format.d.ts","../../foundation/dist/culture/duration.d.ts","../../foundation/dist/culture/numbers.d.ts","../../foundation/dist/culture/strings.d.ts","../../foundation/dist/culture/relative-time.d.ts","../../foundation/dist/culture/index.d.ts","../../foundation/dist/enums/index.d.ts","../../foundation/dist/errors.d.ts","../../foundation/dist/exec/diagnostics.d.ts","../../foundation/dist/services/abort.d.ts","../../foundation/dist/exec/options.d.ts","../../foundation/dist/services/clock.d.ts","../../foundation/dist/exec/trace.d.ts","../../foundation/dist/exec/safe-executor.d.ts","../../foundation/dist/exec/index.d.ts","../../foundation/dist/icons/generated/glyph-svg.d.ts","../../foundation/dist/icons/glyph.d.ts","../../foundation/dist/icons/icon.d.ts","../../foundation/dist/icons/glyph-slots.d.ts","../../foundation/dist/icons/icon-fonts.d.ts","../../foundation/dist/icons/svg.d.ts","../../foundation/dist/icons/index.d.ts","../../foundation/dist/services/preferences.d.ts","../../foundation/dist/services/contracts.d.ts","../../foundation/dist/services/index.d.ts","../../foundation/dist/theme/color.d.ts","../../foundation/dist/tokens/generated/palettes.d.ts","../../foundation/dist/theme/theme.d.ts","../../foundation/dist/theme/control-colors.d.ts","../../foundation/dist/theme/variants.d.ts","../../foundation/dist/theme/index.d.ts","../../foundation/dist/tokens/generated/metrics.d.ts","../../foundation/dist/tokens/layout-metrics.d.ts","../../foundation/dist/tokens/css-vars.d.ts","../../foundation/dist/tokens/index.d.ts","../../foundation/dist/index.d.ts","../../sqlite/dist/driver/types.d.ts","../../sqlite/dist/contract/run-contract.d.ts","../../sqlite/dist/errors.d.ts","../../sqlite/dist/schema/columns.d.ts","../../sqlite/dist/query/expr.d.ts","../../sqlite/dist/schema/policies.d.ts","../../sqlite/dist/schema/entity.d.ts","../../sqlite/dist/query/compile.d.ts","../../sqlite/dist/query/builders.d.ts","../../sqlite/dist/repo/audit.d.ts","../../sqlite/dist/session/ambient.d.ts","../../sqlite/dist/session/locator.d.ts","../../sqlite/dist/session/migrations.d.ts","../../sqlite/dist/session/mutex.d.ts","../../sqlite/dist/session/write-hooks.d.ts","../../sqlite/dist/session/database.d.ts","../../sqlite/dist/session/cache.d.ts","../../sqlite/dist/session/scope.d.ts","../../sqlite/dist/repo/repository.d.ts","../../sqlite/dist/session/schema-setup.d.ts","../../sqlite/dist/index.d.ts","../src/sqlite/node-driver.ts","../src/sqlite/index.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[61,115,116,193,243,260,261],[193,243,260,261],[62,105,106,107,193,243,260,261],[73,193,243,260,261],[62,97,106,107,108,109,111,112,113,193,243,260,261],[62,105,106,107,109,110,193,243,260,261],[105,107,193,243,260,261],[62,105,193,243,260,261],[69,97,193,243,260,261],[63,193,243,260,261],[64,193,243,260,261],[71,75,193,243,260,261],[67,193,243,260,261],[61,71,75,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,98,99,193,243,260,261],[67,71,75,97,193,243,260,261],[67,71,75,193,243,260,261],[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,98,99,100,101,102,193,243,260,261],[67,71,75,79,193,243,260,261],[67,80,83,193,243,260,261],[66,193,243,260,261],[68,72,73,114,193,243,260,261],[64,67,68,69,71,73,74,75,103,104,193,243,260,261],[64,67,193,243,260,261],[72,105,114,193,243,260,261],[65,105,193,243,260,261],[66,67,75,193,243,260,261],[65,66,70,71,193,243,260,261],[69,105,193,243,260,261],[193,240,241,243,260,261],[193,242,243,260,261],[243,260,261],[193,243,248,260,261,278],[193,243,244,249,254,260,261,263,275,286],[193,243,244,245,254,260,261,263],[188,189,190,193,243,260,261],[193,243,246,260,261,287],[193,243,247,248,255,260,261,264],[193,243,248,260,261,275,283],[193,243,249,251,254,260,261,263],[193,242,243,250,260,261],[193,243,251,252,260,261],[193,243,253,254,260,261],[193,242,243,254,260,261],[193,243,254,255,256,260,261,275,286],[193,243,254,255,256,260,261,270,275,278],[193,235,243,251,254,257,260,261,263,275,286],[193,243,254,255,257,258,260,261,263,275,283,286],[193,243,257,259,260,261,275,283,286],[191,192,193,194,195,196,197,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292],[193,243,254,260,261],[193,243,260,261,262,286],[193,243,251,254,260,261,263,275],[193,243,260,261,264],[193,243,260,261,265],[193,242,243,260,261,266],[193,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292],[193,243,260,261,268],[193,243,260,261,269],[193,243,254,260,261,270,271],[193,243,260,261,270,272,287,289],[193,243,255,260,261],[193,243,254,260,261,275,276,278],[193,243,260,261,277,278],[193,243,260,261,275,276],[193,243,260,261,278],[193,243,260,261,279],[193,240,243,260,261,275,280,286],[193,243,254,260,261,281,282],[193,243,260,261,281,282],[193,243,248,260,261,263,275,283],[193,243,260,261,284],[193,243,260,261,263,285],[193,243,257,260,261,269,286],[193,243,248,260,261,287],[193,243,260,261,275,288],[193,243,260,261,262,289],[193,243,260,261,290],[193,235,243,260,261],[193,235,243,254,256,260,261,266,275,278,286,288,289,291],[193,243,260,261,275,292],[58,59,60,193,243,260,261],[61,193,243,260,261],[193,207,211,243,260,261,286],[193,207,243,260,261,275,286],[193,202,243,260,261],[193,204,207,243,260,261,283,286],[193,243,260,261,263,283],[193,243,260,261,293],[193,202,243,260,261,293],[193,204,207,243,260,261,263,286],[193,199,200,203,206,243,254,260,261,275,286],[193,207,214,243,260,261],[193,199,205,243,260,261],[193,207,228,229,243,260,261],[193,203,207,243,260,261,278,286,293],[193,228,243,260,261,293],[193,201,202,243,260,261,293],[193,207,243,260,261],[193,201,202,203,204,205,206,207,208,209,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,243,260,261],[193,207,222,243,260,261],[193,207,214,215,243,260,261],[193,205,207,215,216,243,260,261],[193,206,243,260,261],[193,199,202,207,243,260,261],[193,207,211,215,216,243,260,261],[193,211,243,260,261],[193,205,207,210,243,260,261,286],[193,199,204,207,214,243,260,261],[193,243,260,261,275],[193,202,207,228,243,260,261,291,293],[127,193,243,260,261],[126,193,243,260,261],[126,127,128,193,243,260,261],[126,127,128,129,130,131,132,133,193,243,260,261],[132,193,243,260,261],[137,139,141,142,193,243,260,261],[138,193,243,260,261],[132,137,138,139,140,141,193,243,260,261],[137,140,193,243,260,261],[146,193,243,260,261],[145,193,243,260,261],[144,145,146,147,148,149,193,243,260,261],[125,134,135,136,143,150,153,159,163,193,243,260,261],[136,138,140,151,193,243,260,261],[138,140,151,152,193,243,260,261],[136,193,243,260,261],[154,156,193,243,260,261],[154,156,157,158,193,243,260,261],[154,155,193,243,260,261],[135,154,155,193,243,260,261],[155,160,161,193,243,260,261],[155,160,161,162,193,243,260,261],[120,121,122,123,193,243,260,261],[123,165,193,243,260,261],[123,164,193,243,260,261],[164,193,243,260,261],[120,121,122,123,124,165,166,167,168,169,170,171,172,173,174,175,176,177,179,180,181,182,183,184,193,243,260,261],[123,124,169,171,172,193,243,260,261],[123,124,169,193,243,260,261],[123,124,168,193,243,260,261],[120,122,171,193,243,260,261],[122,123,164,165,169,170,171,173,179,180,181,182,185,193,243,260,261],[121,122,124,193,243,260,261],[168,169,170,193,243,260,261],[169,193,243,260,261],[120,122,164,193,243,260,261],[170,171,180,193,243,260,261],[120,122,124,164,165,171,173,175,176,177,178,179,181,193,243,260,261],[164,171,193,243,260,261],[124,165,171,180,193,243,260,261],[165,170,171,173,179,180,181,183,193,243,260,261],[164,167,169,171,193,243,260,261],[121,193,243,260,261],[117,118,193,243,260,261],[117,193,243,260,261],[117,186,193,243,260,261],[117,185,193,243,255,260,261,265,274]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"035312d4945d13efa134ae482f6dc56a1a9346f7ac3be7ccbad5741058ce87f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"07b03f752ae52a7130e06c5a8399d3a0dde07a1a634f8430b80cd6236c56b5c8","impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"acbac4ca6cd4b2b459debc4a274535775cb6278a8315be383fafa623ab78f18e","impliedFormat":1},{"version":"e421d0b097c78304a2597c1f33da586630e1dc665ae381c0c36e5ebc4aaf4566","impliedFormat":1},{"version":"adf624c89a0d509a789f3c0bf522969d2c47033dbeb50920b37cd89be475a65e","impliedFormat":1},{"version":"8ff8dade82d215fba372ec8ca795cb433997a41287e049acf294dd50cba08cc4","impliedFormat":1},{"version":"b32b532dcbe0a91d71fd94cb780e94bdfdce10be21608d914c29fb4b8939b24a","impliedFormat":1},{"version":"eb2b64881998b562a4fe9330e55aa2466cd3a41a1a57e93feac6555218cec06f","impliedFormat":1},{"version":"6db1694d205177322d792d924335b046b80607445a45c0d2de1fcffd190b48c0","impliedFormat":1},{"version":"2b47193137d251e8a5d4cea2d67fe85a68199795ba019e41d635f7cf5f8a35c5","impliedFormat":1},{"version":"f7e5c3960dd9df65d83408b9be446f7119fa1db1dd8266dd343349d90c3bf2ce","impliedFormat":1},{"version":"09c6491ed74af89a4155feafedecaf77780f5751c66d4b65b18d30fc0e053a75","impliedFormat":1},{"version":"188b01044640e5ef65f6edf0dd6e6454f02dd19f4ead66b9e03ebe26cc7298ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"c2be64f223b024c0b70c5096a8c361c9e11c7644f3bd8325d19c2720ee7087cd","impliedFormat":1},{"version":"5bf51107315834a209b08395b141e262b7d143d14f6b4e4d403d8e020cef7e32","impliedFormat":1},{"version":"db0dcbe48d5cb38315083b412c8ab6995b0d42dc73b286833e296827feb0e5b4","impliedFormat":1},{"version":"b3e4a49a3ba19463662e7b821544948b953d2f6708370d42406bda558084000c","impliedFormat":1},{"version":"90bebc017d1c8408719f5a056813cce04e171a53469c263a136c35076121bab0","impliedFormat":1},{"version":"0675f9dddf11b81ec71825d5d97fdd789e445003506255513e0fc829ebfb795a","impliedFormat":1},{"version":"32d1e153cac16ca3a3f5f6b68fae76cddcda509950fa00d038c465776359db0c","impliedFormat":1},{"version":"0d85d0fa55dd433acf924675d7e976c025c8521c91a76079844cd15e52855ccf","impliedFormat":1},{"version":"89da6ea3ee9735e712691227b0e5ee74381779f9ad8b0f4fb7ced0247b16735a","impliedFormat":1},{"version":"37f90d8b4384dae49b873e620b7fff15655c706105104809114ba98df6373124","impliedFormat":1},{"version":"7618f7fdf0abf7f712cefe766ac1ab7fcd1f8e753c513e57d3ada9ada3a57257","impliedFormat":1},{"version":"759df9936f492afeacebec2cea4efafdb647951e0e5edfc4c677ce2441eac9d0","impliedFormat":1},{"version":"8d8848528b40a84ab42200e89d08f3d5cd83efa275de1bb70ae38cb9e6fd5911","impliedFormat":1},{"version":"0e323630cbfda771430e2720f6a2f02f257becd8fb9722aa975ae773fb572210","impliedFormat":1},{"version":"56dbc770513baae28f7cfbadeba5078bb13a37a13132a5292e98a8b103312b98","impliedFormat":1},{"version":"84ff906032fe12e816bfb7441cee6726243e5a7316c4f2d6b0a6c149f1a91a16","impliedFormat":1},{"version":"a8641f25f667160f356c504936576de22899e50ea575d7a4da47fe3b3704dd93","impliedFormat":1},{"version":"dcbbe1fb0f2c0efc12e29db8bbccb5b82513384d01d7a55342065cb0611da272","impliedFormat":1},{"version":"af209189a194cf5ad1f7b22dd680b52843fec2e30f1283be20b2977872fd4424","impliedFormat":1},{"version":"14745f699217e89ff1034f7be978bc28c195472a597b5f36442ef83d954d47b0","impliedFormat":1},{"version":"10c1feac0328f8f90a81f348b7f3c6d3c3b3454e46fc045ba1a706406c58fd8e","impliedFormat":1},{"version":"f64cd565aca17df45f4666473da75e4ce51a2610e2ed1c31198e9f9325747a24","impliedFormat":1},{"version":"e415a17ab6a413d6be640457231e045541405eab1f0f370c7dd1e5567aa25999","impliedFormat":1},{"version":"8c03a41d6dc701b6648db83d71a92dc27147d7677ab5d70f32675e7e37b3795a","impliedFormat":1},{"version":"09c18bc60888c58e8f4568b6ca973af72613a8a01e7b213aab778e910ae18b2f","impliedFormat":1},{"version":"5258d7af58615ea380d959cbcb6d83cb7b9841b8c8267f5a0fcb36c092dadbdb","impliedFormat":1},{"version":"b2d74af681f440a07e714ae9a33e3ea49c79870b9674058114c0404d2aa2f190","impliedFormat":1},{"version":"24f31e43eb3505e5d2946315e7b8ee8b426dfbe92c3031e435a4eb2d9dd8d69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"679f7b45a77210e6dd0d72a4b81fd177868d2eacfd8ee6919ce6babd7512562d","impliedFormat":1},{"version":"c669ee7ba01fa6a60b17c3535f96b65fa82dfd2a475a8760364f2f3952f9bcbd","impliedFormat":1},{"version":"a8b121f6a75d603075e62793ff0c109112e882dd6ca2b70bdccbd8d8f753429b","impliedFormat":1},{"version":"f378d7ed5e3ecbe382ade55127a9c98e826c76f786e06effad6fde91a7023d55","impliedFormat":1},{"version":"4e3e9539df72b3bfcc56fa13140070020dac72f1eff39237b11253482cb99847","impliedFormat":1},{"version":"5a47b3a2bbe2c9b015fe356462afe0abe391c592fffbe277126e2415e0811967","impliedFormat":1},{"version":"a3e797c70a421cda37cdea4349dced37dceb1611669652d9c4c5523467a55cbf","impliedFormat":1},{"version":"9164e652ff4e7cbd993ca20acd0e2ad7e1cb775a7aefc577b506cf588763ec42","impliedFormat":1},{"version":"e52840670587e82e129c9bfc6a2f42d9c2f2e1fd6ce176fea998383a8c941ea5","impliedFormat":1},{"version":"31ca1ee726f5d7c7709913b98be76fc40fdfaaca6ad7fafc222108981e11227c","impliedFormat":1},{"version":"556db73da59f5162cdf5c7ea1bc3b063b6ccb758078ef6517ad6f6e4ae7b199a","impliedFormat":1},{"version":"0a2c8ef08611f5a5f711c7b10ba70d10dc1c6af0c9dba8168cbbf34911b74188","impliedFormat":1},{"version":"1d6ef45145a9939a43062fe18188d4f7bdfdf4547978e1f6b7c9089fe53e81e5","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"509a86836776d5c821901abc16a2d21de674d2c8943ceb8d018049bf324bc56c","impliedFormat":99},{"version":"56e46db41f044589ed497f4a3e5d9c653cfc522e58417c824046c28f96766bd6","signature":"f008b7b466a72b0dddcdc382f514412032fa76419b1d22e88e2a6c0ad8a8c890"},"3af11d7509753753a89320a5474f411a8dc17ac9f8058e031bb48e43c86a2829","bbe47f7ebb177015803b69bad47ecf0e5987449cae5dd498664a9e4885d7cdff","4f260a074507a0065f3cd71d1adc1b361f5337b3db9e8d01589d5872e9387a4a","7674dcae15d29bcba5a7e8c26defdb06bf75297bfaa3025037bcc1e4df7b0ae1","fd99d077c946173acf9d955de97346ce70eee272fad895a7859cbf0846a9c16e","c93a8b906c128dec5e80e64404e21ea7a083f71c58de46d0b9b3c144a99a8f24","d533d1fe3018752aa47ee74ae5dbdca34377441b891176ad99bd33366a64372f","44b82e4f46178400732ea809a906f7ffb9dd38efab331ca23e7ca4586bf903ef","d3dcff003bac57338c3e60be409d0ff167ec1ff513539a5534c7679332dbc992","16d64c89cec74fa23e8cee7c72acc7549f117dcf7845051870c40366c7522d09","11f9f682c02d51de68eed569f8de1e91c56df296a78f3a6c520b93d52aac2308","28b43630d8d29a300e1e5b0f5efb04c8f994d372fff1b653ce8bb70d4e011e1a","b06c48902c3d127098839c1a6500f41d3e21b2f07f277ba7de23ec730df7275d","94659c94bb0ae17efde21aaf59f2beb05d286bea13f2d3b2b288a6df4faeac18","a7a0e658ca429cfb5268d4bf2e2e6e9fe871ffd06b6588d65424ba4eba35338f","ab4c80cb9cf211a7cd100429cb4a823c5bd9f3618bf981e6504c6606abf08656","e60dd3f69310681e28813b910da7d57f5cf0078feccfd683d22a29b45bb7a035","ccd708c3fff99b4ec315e14315dce6b9e85f4c96d10131e9fd219edb6efbdb26","abc924fce33b86b9f8588de3a5be04c609fafa6cb1dc42629b3e9e3e18f7d018","f919e3a8b2d274b631ee4fee0c50eba1d3f39ceaccba04dff915e9f61e9f153c","3ae17ae844491c7326d070c3e70a94a9239394e7a1e84eb203eb1d57470e752e","d1b2970d348eb9f89ef0f0c6730d27e9331067a28f21c8bd667ba1138d5d3e93","b2c4833e6308888c3947953770b3343deaf4276c803bb36148991a3fb90b4f6a","41b7c8204ea79a93e380a228f5c744e9c9a80183133ac62633a4c76e3fdbd7db","d0a441df587b0632c16a813117f110574d903ddd0bc4d28599cc82ff8af7c094","b24ac81f4fcff56ed9827736abcf2f92ea5f86e16d66eb2ee3ccfa0bb8143bc9","068309ff581d08c276c4a772ddf3ab9c8090e591fc9917fdc6cdffc12c95a5bf","5c1d368a451520260ebb6c06121201f18abf86d80540290df6e424d372c5d0ed","bb3ccaacf5c19a7170939b7f735c6a94537fd95ad16b4247a6ad572b23183e74","2c8b86d9d29c4ea62762c3815ffe4fdb0c5dbc0dd096b9703236010f4a17c255","9528dc401d1a2502393af70423c895c3df61ef62240c0dca429a7cd1bd535b82","eebf270ff516980678bf039e03e18a9461f196aee2825d4d65f7d8a1fa362bff","ee4e73f46ce2f6517e82434bd9fc63c8b6b2179d37d74525899f124a76d06669","b04de3a3cd10559130d898b36da5612fda5db2c31c95b502077cad9fe538ed6c","bc4c3476708a74ae09c06bcdbb9765baaa135592e1cf6e25f2ee9a942c6cd5ec","29e6e980f179ac2981d68954462dfd4a4545f73c021f6a4c8a5f442c0e16e56c","faa64d270fa523f80fd31bc7340ee7f6a21632c2ea0cea6535bf5a34bcc6adf7","cbd4ce7ee090549d836cbffac2e76a192ac5b1c5f15bcbe29c06d32dc7006f34","ea5a5d5873c239b97d846fb8c78437e08ffd731924764f746c0ebcb7731d7648","fb6b5b4592e0eca5b8dc2507432e621a18c16d488ae8a610e4d1ddba1edff667","df85ab12f80aced067959d43bd7744017fccb1eb95adcfa343f16cba7c9ef670","613df14d2c8c0ba78286705c4ed01ec701ed03189ca3803dd69bc7086b9c02ff","298f8d2584216932ea238927177ef343d0b8da735eb40a5ba96b1f92e3675e33","7251030d0662b66ffa03f1c75c81ea0e564c9f6c872b0658a25e64f35b68ce7a","c7aae030db999a44577cda213fc5d9b2cac4e55d8572ed5110fe6d187ba502c0","6f1302be2fa00d8a64e3bd48b4ccdf5d77a402441d7728d48c2ecee706c79127","ec5e4d7021c750ea1b5b29b6c5d40e3cdbc180762b0806f0d0cbe117327162b9","594145b6622d5b02a40942c1a17fa6bb4fdb13a277ec703ee38018fc22d45034","a244408662b901d15567a5bcff4b29cd13a2a6c9bb2c27329eec616c48c8f144","4445f683ff67d2a80f6cbb5ae52039753c899890ebc27086ad17ffd005a8330d","050e9264752c154aa4f2d64f89c66a6e53dbf13a829c462aaa88eecc6e2e64b7","7cd6162b58f9275f44dc4e2293e0b7965680c2c271f7a2f8cece0b90ec61627c","6c2207dbeb0be8f55f38992b4b780ec29a8a0a0787b7076d8460ea71a27d5187","da3481884a0bbe5a9dfb44c1819ca7ad109cc1712d8a793eeef8742d94322ac1","f007826b8993773396aea70f1ad8b3e812aa33ee356b4c4034125efbc727ebb4","d25b3f0682520845fa1a1f42cdc23fbf5c0f7f8dc9806ec74d47f075d29b06dd","0a9f595404a498a83031f74e28f9fb3218038195f032a83da72146b3f8b5fb8c","54f9c37e150e434622cff5d71fb87237c48497141cb379fc1ab4d019a4a43e2e","0a0bb371deaec9e4e6580408c196fe5f0b668764c7a774f3f3f8a1447df0316f","6f5878e8666a8abbb560dcc15b19c95ac5b0f4f85aabab2e804abb6a145030e4","42997ccaad776930cb3b67f9585e680fb600e60c4464004d79eb2811869d047b","f341bef577fe12a6a779c986f89598855b39fe27810f12b2a181df6182cfc986","ebb1f50c2d70bc6310ac7eb99218ae3c0aba56d532964aff7a6872c668345d06","e34992c536be7eba4356e76d29f0cea34c8ef825ebe5f7f57841e48c38a6db17","e4f379e50c84ebb1be3476e4318c27597a0fcd518d7afca038f43a7ba4798c3c","09a9cb77ae0718ba8ccac3503fad79a896f071a24a64f8d40414d9c4f49e1b31","09ecbb99c6068a330c19d3c2efba4061bc1f3f7c55c1ae792398cc072d8a0dee",{"version":"49b12e199634a500c17f384a7087eacbdfad53f634dc5895c25c042de0a297aa","signature":"82f1f915fb40fe3744ea2d58574227b4391e997a462f31c57fcc7229316335a8"},"1d17d818368302eb01fa08895b73c299b344370d25e6022d5e0bcba6db74ca2a",{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"913be43dad2a40e500104700aa26cfb5c51a976114bedf19624de43fdae7474f","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"208a6a0bfb227bdf8fb964799d0a206c75cf03ccd72e63bf5495c9331354c6d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"45479f65af737a3e5c26d8772bd8ab1aa8bebbd09c1a808c2b3faddb9b84afbb","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1}],"root":[118,119,186,187],"options":{"composite":true,"declaration":true,"declarationDir":"./","declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"jsx":4,"jsxImportSource":"@lynx-js/react","module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":6,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[117,1],[62,2],[108,3],[106,2],[110,4],[114,5],[97,2],[111,6],[112,7],[107,8],[109,9],[113,2],[104,2],[64,10],[102,11],[93,12],[79,13],[76,12],[100,14],[77,12],[98,15],[78,16],[103,17],[86,16],[81,12],[80,18],[95,16],[101,19],[99,16],[82,12],[90,16],[91,16],[83,18],[89,16],[84,16],[87,16],[88,12],[96,16],[85,12],[92,16],[94,16],[67,20],[74,21],[105,22],[73,2],[69,2],[75,23],[68,2],[115,24],[65,20],[66,25],[71,26],[72,27],[70,28],[240,29],[241,29],[242,30],[193,31],[243,32],[244,33],[245,34],[188,2],[191,35],[189,2],[190,2],[246,36],[247,37],[248,38],[249,39],[250,40],[251,41],[252,41],[253,42],[254,43],[255,44],[256,45],[194,2],[192,2],[257,46],[258,47],[259,48],[293,49],[260,50],[261,2],[262,51],[263,52],[264,53],[265,54],[266,55],[267,56],[268,57],[269,58],[270,59],[271,59],[272,60],[273,2],[274,61],[275,62],[277,63],[276,64],[278,65],[279,66],[280,67],[281,68],[282,69],[283,70],[284,71],[285,72],[286,73],[287,74],[288,75],[289,76],[290,77],[195,2],[196,2],[197,2],[236,78],[237,2],[238,2],[239,65],[291,79],[292,80],[60,2],[58,2],[61,81],[116,82],[59,2],[198,2],[63,2],[56,2],[57,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[20,2],[21,2],[4,2],[22,2],[26,2],[23,2],[24,2],[25,2],[27,2],[28,2],[29,2],[5,2],[30,2],[31,2],[32,2],[33,2],[6,2],[37,2],[34,2],[35,2],[36,2],[38,2],[7,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[8,2],[49,2],[46,2],[47,2],[48,2],[50,2],[9,2],[51,2],[52,2],[53,2],[55,2],[54,2],[1,2],[214,83],[224,84],[213,83],[234,85],[205,86],[204,87],[233,88],[227,89],[232,90],[207,91],[221,92],[206,93],[230,94],[202,95],[201,88],[231,96],[203,97],[208,98],[209,2],[212,98],[199,2],[235,99],[225,100],[216,101],[217,102],[219,103],[215,104],[218,105],[228,88],[210,106],[211,107],[220,108],[200,109],[223,100],[222,98],[226,2],[229,110],[125,2],[128,111],[127,112],[129,113],[126,2],[130,2],[134,114],[131,112],[133,115],[132,111],[135,2],[136,2],[137,2],[143,116],[139,117],[142,118],[141,119],[144,2],[147,120],[145,2],[148,120],[146,121],[150,122],[149,121],[164,123],[138,2],[140,2],[152,124],[153,125],[151,2],[154,126],[157,127],[159,128],[156,129],[158,130],[162,131],[160,2],[155,2],[163,132],[161,2],[124,133],[166,134],[165,135],[167,136],[185,137],[173,138],[172,139],[169,140],[174,141],[183,142],[168,143],[171,144],[170,145],[175,146],[181,147],[180,148],[176,2],[177,149],[178,2],[184,150],[182,151],[179,152],[120,2],[121,2],[122,2],[123,153],[119,154],[118,155],[187,156],[186,157]],"latestChangedDtsFile":"./sqlite/index.d.ts","version":"5.9.3"}
@@ -0,0 +1,2 @@
1
+ export { IntlUnavailableError, installNoIntl, withoutIntl } from './no-intl.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export { IntlUnavailableError, installNoIntl, withoutIntl } from "./no-intl.js";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Lynx has no `Intl` (https://lynxjs.org/next/guide/inclusion/internationalization.md) and no locale-aware
3
+ * `toLocale*` formatting behind it, but Node and jsdom have both. A port that leans on them passes every unit
4
+ * test and breaks on the device. `installNoIntl` removes them for the duration of a test run so that mistake
5
+ * fails here instead.
6
+ */
7
+ type Restore = () => void;
8
+ /** Thrown by every removed API, so a test failure names the culprit. */
9
+ export declare class IntlUnavailableError extends Error {
10
+ constructor(api: string);
11
+ }
12
+ /** Removes `Intl` and the locale-sensitive built-ins. Returns a function that puts them back. */
13
+ export declare function installNoIntl(target?: typeof globalThis): Restore;
14
+ /** Runs `fn` with Intl removed and always restores it, also when `fn` throws or rejects. */
15
+ export declare function withoutIntl<T>(fn: () => T | Promise<T>): Promise<T>;
16
+ export {};
17
+ //# sourceMappingURL=no-intl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-intl.d.ts","sourceRoot":"","sources":["../src/no-intl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,OAAO,GAAG,MAAM,IAAI,CAAC;AAa1B,wEAAwE;AACxE,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,GAAG,EAAE,MAAM;CAIxB;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,MAAM,GAAE,OAAO,UAAuB,GAAG,OAAO,CA0B7E;AAED,4FAA4F;AAC5F,wBAAsB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOzE"}
@@ -0,0 +1,76 @@
1
+ const LOCALE_METHODS = [
2
+ [
3
+ Number.prototype,
4
+ 'toLocaleString'
5
+ ],
6
+ [
7
+ Date.prototype,
8
+ 'toLocaleString'
9
+ ],
10
+ [
11
+ Date.prototype,
12
+ 'toLocaleDateString'
13
+ ],
14
+ [
15
+ Date.prototype,
16
+ 'toLocaleTimeString'
17
+ ],
18
+ [
19
+ Array.prototype,
20
+ 'toLocaleString'
21
+ ],
22
+ [
23
+ String.prototype,
24
+ 'localeCompare'
25
+ ],
26
+ [
27
+ String.prototype,
28
+ 'toLocaleUpperCase'
29
+ ],
30
+ [
31
+ String.prototype,
32
+ 'toLocaleLowerCase'
33
+ ]
34
+ ];
35
+ class IntlUnavailableError extends Error {
36
+ constructor(api){
37
+ super(`${api} is unavailable on Lynx (no Intl). Use the @g9tm/lynxcontrols-foundation culture tables instead.`);
38
+ this.name = 'IntlUnavailableError';
39
+ }
40
+ }
41
+ function installNoIntl(target = globalThis) {
42
+ const g = target;
43
+ const hadIntl = Object.hasOwn(g, 'Intl');
44
+ const intl = g.Intl;
45
+ const saved = LOCALE_METHODS.map(([proto, key])=>[
46
+ proto,
47
+ key,
48
+ Object.getOwnPropertyDescriptor(proto, key)
49
+ ]);
50
+ delete g.Intl;
51
+ for (const [proto, key] of LOCALE_METHODS){
52
+ const owner = proto.constructor.name;
53
+ Object.defineProperty(proto, key, {
54
+ configurable: true,
55
+ writable: true,
56
+ value: ()=>{
57
+ throw new IntlUnavailableError(`${owner}.prototype.${key}`);
58
+ }
59
+ });
60
+ }
61
+ return ()=>{
62
+ if (hadIntl) g.Intl = intl;
63
+ for (const [proto, key, descriptor] of saved)if (descriptor) Object.defineProperty(proto, key, descriptor);
64
+ };
65
+ }
66
+ async function withoutIntl(fn) {
67
+ const restore = installNoIntl();
68
+ try {
69
+ return await fn();
70
+ } finally{
71
+ restore();
72
+ }
73
+ }
74
+ export { IntlUnavailableError, installNoIntl, withoutIntl };
75
+
76
+ //# sourceMappingURL=no-intl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-intl.js","sources":["../src/no-intl.ts"],"sourcesContent":["/**\n * Lynx has no `Intl` (https://lynxjs.org/next/guide/inclusion/internationalization.md) and no locale-aware\n * `toLocale*` formatting behind it, but Node and jsdom have both. A port that leans on them passes every unit\n * test and breaks on the device. `installNoIntl` removes them for the duration of a test run so that mistake\n * fails here instead.\n */\n\ntype Restore = () => void;\n\nconst LOCALE_METHODS: ReadonlyArray<readonly [object, string]> = [\n [Number.prototype, 'toLocaleString'],\n [Date.prototype, 'toLocaleString'],\n [Date.prototype, 'toLocaleDateString'],\n [Date.prototype, 'toLocaleTimeString'],\n [Array.prototype, 'toLocaleString'],\n [String.prototype, 'localeCompare'],\n [String.prototype, 'toLocaleUpperCase'],\n [String.prototype, 'toLocaleLowerCase'],\n];\n\n/** Thrown by every removed API, so a test failure names the culprit. */\nexport class IntlUnavailableError extends Error {\n constructor(api: string) {\n super(`${api} is unavailable on Lynx (no Intl). Use the @g9tm/lynxcontrols-foundation culture tables instead.`);\n this.name = 'IntlUnavailableError';\n }\n}\n\n/** Removes `Intl` and the locale-sensitive built-ins. Returns a function that puts them back. */\nexport function installNoIntl(target: typeof globalThis = globalThis): Restore {\n const g = target as unknown as Record<string, unknown>;\n const hadIntl = Object.hasOwn(g, 'Intl');\n const intl = g.Intl;\n const saved = LOCALE_METHODS.map(\n ([proto, key]) => [proto, key, Object.getOwnPropertyDescriptor(proto, key)] as const,\n );\n\n delete g.Intl;\n for (const [proto, key] of LOCALE_METHODS) {\n const owner = proto.constructor.name;\n Object.defineProperty(proto, key, {\n configurable: true,\n writable: true,\n value: () => {\n throw new IntlUnavailableError(`${owner}.prototype.${key}`);\n },\n });\n }\n\n return () => {\n if (hadIntl) g.Intl = intl;\n for (const [proto, key, descriptor] of saved) {\n if (descriptor) Object.defineProperty(proto, key, descriptor);\n }\n };\n}\n\n/** Runs `fn` with Intl removed and always restores it, also when `fn` throws or rejects. */\nexport async function withoutIntl<T>(fn: () => T | Promise<T>): Promise<T> {\n const restore = installNoIntl();\n try {\n return await fn();\n } finally {\n restore();\n }\n}\n"],"names":["LOCALE_METHODS","Number","Date","Array","String","IntlUnavailableError","Error","api","installNoIntl","target","globalThis","g","hadIntl","Object","intl","saved","proto","key","owner","descriptor","withoutIntl","fn","restore"],"mappings":"AASA,MAAMA,iBAA2D;IAC/D;QAACC,OAAO,SAAS;QAAE;KAAiB;IACpC;QAACC,KAAK,SAAS;QAAE;KAAiB;IAClC;QAACA,KAAK,SAAS;QAAE;KAAqB;IACtC;QAACA,KAAK,SAAS;QAAE;KAAqB;IACtC;QAACC,MAAM,SAAS;QAAE;KAAiB;IACnC;QAACC,OAAO,SAAS;QAAE;KAAgB;IACnC;QAACA,OAAO,SAAS;QAAE;KAAoB;IACvC;QAACA,OAAO,SAAS;QAAE;KAAoB;CACxC;AAGM,MAAMC,6BAA6BC;IACxC,YAAYC,GAAW,CAAE;QACvB,KAAK,CAAC,GAAGA,IAAI,gGAAgG,CAAC;QAC9G,IAAI,CAAC,IAAI,GAAG;IACd;AACF;AAGO,SAASC,cAAcC,SAA4BC,UAAU;IAClE,MAAMC,IAAIF;IACV,MAAMG,UAAUC,OAAO,MAAM,CAACF,GAAG;IACjC,MAAMG,OAAOH,EAAE,IAAI;IACnB,MAAMI,QAAQf,eAAe,GAAG,CAC9B,CAAC,CAACgB,OAAOC,IAAI,GAAK;YAACD;YAAOC;YAAKJ,OAAO,wBAAwB,CAACG,OAAOC;SAAK;IAG7E,OAAON,EAAE,IAAI;IACb,KAAK,MAAM,CAACK,OAAOC,IAAI,IAAIjB,eAAgB;QACzC,MAAMkB,QAAQF,MAAM,WAAW,CAAC,IAAI;QACpCH,OAAO,cAAc,CAACG,OAAOC,KAAK;YAChC,cAAc;YACd,UAAU;YACV,OAAO;gBACL,MAAM,IAAIZ,qBAAqB,GAAGa,MAAM,WAAW,EAAED,KAAK;YAC5D;QACF;IACF;IAEA,OAAO;QACL,IAAIL,SAASD,EAAE,IAAI,GAAGG;QACtB,KAAK,MAAM,CAACE,OAAOC,KAAKE,WAAW,IAAIJ,MACrC,IAAII,YAAYN,OAAO,cAAc,CAACG,OAAOC,KAAKE;IAEtD;AACF;AAGO,eAAeC,YAAeC,EAAwB;IAC3D,MAAMC,UAAUd;IAChB,IAAI;QACF,OAAO,MAAMa;IACf,SAAU;QACRC;IACF;AACF"}
@@ -0,0 +1,2 @@
1
+ export { createNodeTestDriver, type G9NodeTestDriverOptions } from './node-driver.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ export { createNodeTestDriver } from "./node-driver.js";
@@ -0,0 +1,12 @@
1
+ import { type G9SqliteDriver } from '@g9tm/lynxcontrols-sqlite';
2
+ /** Options of {@link createNodeTestDriver}. */
3
+ export interface G9NodeTestDriverOptions {
4
+ /** Driver name reported to the session layer. Default `'node-test'`. */
5
+ readonly name?: string;
6
+ }
7
+ /**
8
+ * The reference {@link G9SqliteDriver}: `node:sqlite` in process (Node ≥ 22.18). It is the contract every native and
9
+ * desktop driver is measured against (`cases.json`), and what this repository's SQL tests run on. Node only.
10
+ */
11
+ export declare function createNodeTestDriver(options?: G9NodeTestDriverOptions): G9SqliteDriver;
12
+ //# sourceMappingURL=node-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-driver.d.ts","sourceRoot":"","sources":["../../src/sqlite/node-driver.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,cAAc,EAOpB,MAAM,2BAA2B,CAAC;AAEnC,+CAA+C;AAC/C,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAwED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,uBAA4B,GAAG,cAAc,CAiM1F"}
@@ -0,0 +1,240 @@
1
+ import { existsSync, mkdirSync } from "fs";
2
+ import { dirname } from "path";
3
+ import { DatabaseSync } from "node:sqlite";
4
+ import { G9SqliteError, pragmaStatements, sqliteErrorCodeFor } from "@g9tm/lynxcontrols-sqlite";
5
+ function toError(error, sql, completedStatements) {
6
+ var _ref;
7
+ if (error instanceof G9SqliteError) return error;
8
+ const e = error;
9
+ const sqliteCode = 'number' == typeof (null == e ? void 0 : e.errcode) ? e.errcode : void 0;
10
+ const code = void 0 !== sqliteCode ? sqliteErrorCodeFor(sqliteCode) : 'misuse';
11
+ return new G9SqliteError(code, null != (_ref = null == e ? void 0 : e.message) ? _ref : String(error), {
12
+ ...void 0 !== sqliteCode ? {
13
+ sqliteCode
14
+ } : {},
15
+ ...void 0 !== sql ? {
16
+ sql
17
+ } : {},
18
+ ...void 0 !== completedStatements ? {
19
+ completedStatements
20
+ } : {},
21
+ cause: error
22
+ });
23
+ }
24
+ function bind(value, sql, index) {
25
+ if (null === value) return value;
26
+ if ('string' == typeof value) {
27
+ if (value.indexOf('\u0000') >= 0) throw new G9SqliteError('misuse', `Parameter ${index + 1} is text containing NUL; use a BLOB.`, {
28
+ sql
29
+ });
30
+ return value;
31
+ }
32
+ if ('number' == typeof value) {
33
+ if (Number.isNaN(value)) throw new G9SqliteError('misuse', `Parameter ${index + 1} is NaN.`, {
34
+ sql
35
+ });
36
+ return Number.isSafeInteger(value) ? BigInt(value) : value;
37
+ }
38
+ if (value instanceof ArrayBuffer) return 0 === value.byteLength ? new Uint8Array(0) : new Uint8Array(value);
39
+ if ('object' == typeof value && 'string' == typeof value.int64) return BigInt(value.int64);
40
+ throw new G9SqliteError('misuse', `Parameter ${index + 1} is not a G9SqlValue (${typeof value}).`, {
41
+ sql
42
+ });
43
+ }
44
+ function read(value) {
45
+ if ('bigint' == typeof value) {
46
+ const n = Number(value);
47
+ return Number.isSafeInteger(n) ? n : {
48
+ int64: value.toString()
49
+ };
50
+ }
51
+ if (ArrayBuffer.isView(value)) {
52
+ const copy = new Uint8Array(value.byteLength);
53
+ copy.set(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));
54
+ return copy.buffer;
55
+ }
56
+ return value;
57
+ }
58
+ let tokenSeed = 0;
59
+ function createNodeTestDriver(options = {}) {
60
+ var _options_name;
61
+ const sessions = new Map();
62
+ const txOwner = new Map();
63
+ const session = (token)=>{
64
+ const s = sessions.get(token);
65
+ if (!s) throw new G9SqliteError('misuse', 'The database session is closed or unknown.');
66
+ return s;
67
+ };
68
+ const prepare = (s, sql)=>{
69
+ let stmt = s.statements.get(sql);
70
+ if (!stmt) {
71
+ stmt = s.db.prepare(sql);
72
+ stmt.setReadBigInts(true);
73
+ stmt.setReturnArrays(true);
74
+ s.statements.set(sql, stmt);
75
+ }
76
+ return stmt;
77
+ };
78
+ const execute = (s, statement, maxRows)=>{
79
+ if (statement.params.some((p)=>void 0 === p)) throw new G9SqliteError('misuse', 'undefined is not a SQL value (use null).', {
80
+ sql: statement.sql
81
+ });
82
+ const stmt = prepare(s, statement.sql);
83
+ const args = statement.params.map((p, i)=>bind(p, statement.sql, i));
84
+ const columns = stmt.columns().map((c)=>c.name);
85
+ if (columns.length > 0) {
86
+ const rows = [];
87
+ for (const row of stmt.iterate(...args)){
88
+ if (void 0 !== maxRows && rows.length >= maxRows) throw new G9SqliteError('too-many-rows', `The statement returned more than ${maxRows} rows.`, {
89
+ sql: statement.sql
90
+ });
91
+ rows.push(row.map(read));
92
+ }
93
+ return {
94
+ columns,
95
+ rows,
96
+ changes: 0,
97
+ lastInsertRowId: s.lastInsertRowId
98
+ };
99
+ }
100
+ const result = stmt.run(...args);
101
+ s.lastInsertRowId = read(result.lastInsertRowid);
102
+ return {
103
+ columns: [],
104
+ rows: [],
105
+ changes: Number(result.changes),
106
+ lastInsertRowId: s.lastInsertRowId
107
+ };
108
+ };
109
+ const applyPragmas = (db, openOptions)=>{
110
+ var _openOptions_pragmas;
111
+ const pragmas = null != (_openOptions_pragmas = openOptions.pragmas) ? _openOptions_pragmas : {};
112
+ for (const sql of pragmaStatements(pragmas, openOptions.durability))try {
113
+ db.exec(sql);
114
+ } catch (error) {
115
+ if (!sql.startsWith('PRAGMA journal_mode')) throw toError(error, sql);
116
+ }
117
+ };
118
+ return {
119
+ name: null != (_options_name = options.name) ? _options_name : 'node-test',
120
+ async capabilities () {
121
+ const db = new DatabaseSync(':memory:');
122
+ try {
123
+ const row = db.prepare('SELECT sqlite_version() AS v').get();
124
+ return Object.freeze({
125
+ sqliteVersion: row.v,
126
+ maxVariables: 32766,
127
+ json1: true,
128
+ returning: true,
129
+ upsert: true,
130
+ interrupt: false
131
+ });
132
+ } finally{
133
+ db.close();
134
+ }
135
+ },
136
+ async open (openOptions) {
137
+ const memory = ':memory:' === openOptions.path || '' === openOptions.path;
138
+ if (!memory && !openOptions.create && !existsSync(openOptions.path)) throw new G9SqliteError('not-found', `Database file does not exist: ${openOptions.path}`);
139
+ if (!memory && openOptions.create) mkdirSync(dirname(openOptions.path), {
140
+ recursive: true
141
+ });
142
+ let db;
143
+ try {
144
+ db = new DatabaseSync(openOptions.path || ':memory:', {
145
+ readOnly: true === openOptions.readOnly
146
+ });
147
+ } catch (error) {
148
+ throw toError(error);
149
+ }
150
+ try {
151
+ applyPragmas(db, openOptions);
152
+ } catch (error) {
153
+ db.close();
154
+ throw error;
155
+ }
156
+ const token = `node-session-${++tokenSeed}`;
157
+ sessions.set(token, {
158
+ token,
159
+ db,
160
+ statements: new Map(),
161
+ tx: null,
162
+ lastInsertRowId: 0
163
+ });
164
+ return token;
165
+ },
166
+ async run (token, statements, runOptions = {}) {
167
+ var _runOptions_signal;
168
+ const s = session(token);
169
+ if (void 0 !== runOptions.tx && s.tx !== runOptions.tx) throw new G9SqliteError('misuse', 'The transaction is finished or belongs to another session.');
170
+ if (void 0 === runOptions.tx && null !== s.tx) throw new G9SqliteError('misuse', 'A transaction is open on this session; pass its token (tx).');
171
+ if (null == (_runOptions_signal = runOptions.signal) ? void 0 : _runOptions_signal.aborted) throw new G9SqliteError('cancelled', 'Cancelled before the batch started.');
172
+ const atomic = true === runOptions.atomic && void 0 === runOptions.tx && statements.length > 0;
173
+ if (atomic) s.db.exec('BEGIN');
174
+ const results = [];
175
+ try {
176
+ for (const statement of statements){
177
+ var _runOptions_signal1;
178
+ if (null == (_runOptions_signal1 = runOptions.signal) ? void 0 : _runOptions_signal1.aborted) throw new G9SqliteError('cancelled', 'Cancelled; the remaining statements did not run.', {
179
+ completedStatements: results.length
180
+ });
181
+ try {
182
+ results.push(execute(s, statement, runOptions.maxRows));
183
+ } catch (error) {
184
+ throw toError(error, statement.sql, results.length);
185
+ }
186
+ }
187
+ if (atomic) s.db.exec('COMMIT');
188
+ } catch (error) {
189
+ if (atomic) try {
190
+ s.db.exec('ROLLBACK');
191
+ } catch {}
192
+ throw toError(error);
193
+ }
194
+ return results;
195
+ },
196
+ async begin (token, mode) {
197
+ const s = session(token);
198
+ if (null !== s.tx) throw new G9SqliteError('misuse', 'A transaction is already open on this session.');
199
+ try {
200
+ s.db.exec('immediate' === mode ? 'BEGIN IMMEDIATE' : 'BEGIN DEFERRED');
201
+ } catch (error) {
202
+ throw toError(error);
203
+ }
204
+ const tx = `node-tx-${++tokenSeed}`;
205
+ s.tx = tx;
206
+ txOwner.set(tx, s);
207
+ return tx;
208
+ },
209
+ async commit (tx) {
210
+ const s = txOwner.get(tx);
211
+ if (!s || s.tx !== tx || !sessions.has(s.token)) throw new G9SqliteError('misuse', 'The transaction is finished or unknown.');
212
+ try {
213
+ s.db.exec('COMMIT');
214
+ } catch (error) {
215
+ throw toError(error);
216
+ }
217
+ s.tx = null;
218
+ txOwner.delete(tx);
219
+ },
220
+ async rollback (tx) {
221
+ const s = txOwner.get(tx);
222
+ if (!s || s.tx !== tx || !sessions.has(s.token)) throw new G9SqliteError('misuse', 'The transaction is finished or unknown.');
223
+ s.tx = null;
224
+ txOwner.delete(tx);
225
+ try {
226
+ s.db.exec('ROLLBACK');
227
+ } catch {}
228
+ },
229
+ async close (token) {
230
+ const s = session(token);
231
+ sessions.delete(token);
232
+ if (s.tx) txOwner.delete(s.tx);
233
+ s.statements.clear();
234
+ s.db.close();
235
+ }
236
+ };
237
+ }
238
+ export { createNodeTestDriver };
239
+
240
+ //# sourceMappingURL=node-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite/node-driver.js","sources":["../../src/sqlite/node-driver.ts"],"sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { DatabaseSync, type StatementSync } from 'node:sqlite';\nimport {\n type G9ConnectionPragmas,\n type G9DriverCapabilities,\n type G9DriverStatement,\n type G9OpenOptions,\n type G9RunOptions,\n type G9SessionToken,\n type G9SqliteDriver,\n G9SqliteError,\n type G9SqlResult,\n type G9SqlValue,\n type G9TxToken,\n pragmaStatements,\n sqliteErrorCodeFor,\n} from '@g9tm/lynxcontrols-sqlite';\n\n/** Options of {@link createNodeTestDriver}. */\nexport interface G9NodeTestDriverOptions {\n /** Driver name reported to the session layer. Default `'node-test'`. */\n readonly name?: string;\n}\n\ninterface Session {\n readonly token: G9SessionToken;\n readonly db: DatabaseSync;\n readonly statements: Map<string, StatementSync>;\n tx: G9TxToken | null;\n lastInsertRowId: G9SqlValue;\n}\n\ninterface SqliteNodeError {\n readonly errcode?: number;\n readonly code?: string;\n readonly message?: string;\n}\n\nfunction toError(error: unknown, sql?: string, completedStatements?: number): G9SqliteError {\n if (error instanceof G9SqliteError) return error;\n const e = error as SqliteNodeError;\n const sqliteCode = typeof e?.errcode === 'number' ? e.errcode : undefined;\n const code = sqliteCode !== undefined ? sqliteErrorCodeFor(sqliteCode) : 'misuse';\n return new G9SqliteError(code, e?.message ?? String(error), {\n ...(sqliteCode !== undefined ? { sqliteCode } : {}),\n ...(sql !== undefined ? { sql } : {}),\n ...(completedStatements !== undefined ? { completedStatements } : {}),\n cause: error,\n });\n}\n\n/** G9 value → node:sqlite binding. Safe integers bind as BigInt: node binds every JS number as REAL. */\nfunction bind(value: G9SqlValue, sql: string, index: number): null | number | bigint | string | Uint8Array {\n if (value === null) return value;\n if (typeof value === 'string') {\n // SQLite stores it, but text readers (SQLite's own length(), node:sqlite, C strings) stop at the NUL: the value\n // would come back truncated. The contract rejects it on every driver; store bytes in a BLOB instead.\n if (value.indexOf('\\u0000') >= 0) {\n throw new G9SqliteError('misuse', `Parameter ${index + 1} is text containing NUL; use a BLOB.`, { sql });\n }\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) throw new G9SqliteError('misuse', `Parameter ${index + 1} is NaN.`, { sql });\n return Number.isSafeInteger(value) ? BigInt(value) : value;\n }\n if (value instanceof ArrayBuffer) {\n // node:sqlite binds a zero-length view over an ArrayBuffer as NULL; a fresh empty array binds as an empty BLOB.\n return value.byteLength === 0 ? new Uint8Array(0) : new Uint8Array(value);\n }\n if (typeof value === 'object' && typeof (value as { int64?: unknown }).int64 === 'string') {\n return BigInt((value as { int64: string }).int64);\n }\n throw new G9SqliteError('misuse', `Parameter ${index + 1} is not a G9SqlValue (${typeof value}).`, { sql });\n}\n\n/** node:sqlite value → G9 value (lossless: int64 beyond 2^53 as a tag, BLOB as ArrayBuffer). */\nfunction read(value: unknown): G9SqlValue {\n if (typeof value === 'bigint') {\n const n = Number(value);\n return Number.isSafeInteger(n) ? n : ({ int64: value.toString() } as G9SqlValue);\n }\n if (ArrayBuffer.isView(value)) {\n // Copied into this realm's ArrayBuffer (test environments run several realms; node:sqlite returns Node's).\n const copy = new Uint8Array(value.byteLength);\n copy.set(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));\n return copy.buffer;\n }\n // node:sqlite returns only null, number, string, bigint (setReadBigInts) and Uint8Array.\n return value as G9SqlValue;\n}\n\nlet tokenSeed = 0;\n\n/**\n * The reference {@link G9SqliteDriver}: `node:sqlite` in process (Node ≥ 22.18). It is the contract every native and\n * desktop driver is measured against (`cases.json`), and what this repository's SQL tests run on. Node only.\n */\nexport function createNodeTestDriver(options: G9NodeTestDriverOptions = {}): G9SqliteDriver {\n const sessions = new Map<string, Session>();\n const txOwner = new Map<string, Session>();\n\n const session = (token: G9SessionToken): Session => {\n const s = sessions.get(token);\n if (!s) throw new G9SqliteError('misuse', 'The database session is closed or unknown.');\n return s;\n };\n\n const prepare = (s: Session, sql: string): StatementSync => {\n let stmt = s.statements.get(sql);\n if (!stmt) {\n stmt = s.db.prepare(sql);\n stmt.setReadBigInts(true);\n stmt.setReturnArrays(true);\n s.statements.set(sql, stmt);\n }\n return stmt;\n };\n\n const execute = (s: Session, statement: G9DriverStatement, maxRows: number | undefined): G9SqlResult => {\n if (statement.params.some((p) => p === undefined)) {\n throw new G9SqliteError('misuse', 'undefined is not a SQL value (use null).', { sql: statement.sql });\n }\n const stmt = prepare(s, statement.sql);\n const args = statement.params.map((p, i) => bind(p, statement.sql, i));\n const columns = stmt.columns().map((c) => c.name);\n if (columns.length > 0) {\n const rows: G9SqlValue[][] = [];\n for (const row of stmt.iterate(...args) as Iterable<unknown[]>) {\n if (maxRows !== undefined && rows.length >= maxRows) {\n throw new G9SqliteError('too-many-rows', `The statement returned more than ${maxRows} rows.`, {\n sql: statement.sql,\n });\n }\n rows.push(row.map(read));\n }\n return { columns, rows, changes: 0, lastInsertRowId: s.lastInsertRowId };\n }\n const result = stmt.run(...args);\n s.lastInsertRowId = read(result.lastInsertRowid);\n return { columns: [], rows: [], changes: Number(result.changes), lastInsertRowId: s.lastInsertRowId };\n };\n\n const applyPragmas = (db: DatabaseSync, openOptions: G9OpenOptions) => {\n const pragmas: G9ConnectionPragmas = openOptions.pragmas ?? {};\n for (const sql of pragmaStatements(pragmas, openOptions.durability)) {\n try {\n db.exec(sql);\n } catch (error) {\n // journal_mode cannot change on a read-only or in-memory database; tuning never fails an open.\n if (!sql.startsWith('PRAGMA journal_mode')) throw toError(error, sql);\n }\n }\n };\n\n return {\n name: options.name ?? 'node-test',\n\n async capabilities(): Promise<G9DriverCapabilities> {\n const db = new DatabaseSync(':memory:');\n try {\n const row = db.prepare('SELECT sqlite_version() AS v').get() as { v: string };\n return Object.freeze({\n sqliteVersion: row.v,\n maxVariables: 32766,\n json1: true,\n returning: true,\n upsert: true,\n interrupt: false,\n });\n } finally {\n db.close();\n }\n },\n\n async open(openOptions: G9OpenOptions): Promise<G9SessionToken> {\n const memory = openOptions.path === ':memory:' || openOptions.path === '';\n if (!memory && !openOptions.create && !existsSync(openOptions.path)) {\n throw new G9SqliteError('not-found', `Database file does not exist: ${openOptions.path}`);\n }\n if (!memory && openOptions.create) {\n // The locator owns WHERE; opening with create owns making the directory exist (MAUI provider did too).\n mkdirSync(dirname(openOptions.path), { recursive: true });\n }\n let db: DatabaseSync;\n try {\n db = new DatabaseSync(openOptions.path || ':memory:', { readOnly: openOptions.readOnly === true });\n } catch (error) {\n throw toError(error);\n }\n try {\n applyPragmas(db, openOptions);\n } catch (error) {\n db.close();\n throw error;\n }\n const token = `node-session-${++tokenSeed}` as G9SessionToken;\n sessions.set(token, { token, db, statements: new Map(), tx: null, lastInsertRowId: 0 });\n return token;\n },\n\n async run(token, statements, runOptions: G9RunOptions = {}) {\n const s = session(token);\n if (runOptions.tx !== undefined && s.tx !== runOptions.tx) {\n throw new G9SqliteError('misuse', 'The transaction is finished or belongs to another session.');\n }\n if (runOptions.tx === undefined && s.tx !== null) {\n throw new G9SqliteError('misuse', 'A transaction is open on this session; pass its token (tx).');\n }\n if (runOptions.signal?.aborted) throw new G9SqliteError('cancelled', 'Cancelled before the batch started.');\n const atomic = runOptions.atomic === true && runOptions.tx === undefined && statements.length > 0;\n if (atomic) s.db.exec('BEGIN');\n const results: G9SqlResult[] = [];\n try {\n for (const statement of statements) {\n if (runOptions.signal?.aborted) {\n throw new G9SqliteError('cancelled', 'Cancelled; the remaining statements did not run.', {\n completedStatements: results.length,\n });\n }\n try {\n results.push(execute(s, statement, runOptions.maxRows));\n } catch (error) {\n throw toError(error, statement.sql, results.length);\n }\n }\n if (atomic) s.db.exec('COMMIT');\n } catch (error) {\n if (atomic) {\n try {\n s.db.exec('ROLLBACK');\n } catch {\n // SQLite already rolled back (e.g. after SQLITE_FULL); nothing left to undo.\n }\n }\n throw toError(error);\n }\n return results;\n },\n\n async begin(token, mode) {\n const s = session(token);\n if (s.tx !== null) throw new G9SqliteError('misuse', 'A transaction is already open on this session.');\n try {\n s.db.exec(mode === 'immediate' ? 'BEGIN IMMEDIATE' : 'BEGIN DEFERRED');\n } catch (error) {\n throw toError(error);\n }\n const tx = `node-tx-${++tokenSeed}` as G9TxToken;\n s.tx = tx;\n txOwner.set(tx, s);\n return tx;\n },\n\n async commit(tx) {\n const s = txOwner.get(tx);\n if (!s || s.tx !== tx || !sessions.has(s.token)) {\n throw new G9SqliteError('misuse', 'The transaction is finished or unknown.');\n }\n try {\n s.db.exec('COMMIT');\n } catch (error) {\n // A failed COMMIT (busy) leaves the transaction open: the caller may retry or roll back.\n throw toError(error);\n }\n s.tx = null;\n txOwner.delete(tx);\n },\n\n async rollback(tx) {\n const s = txOwner.get(tx);\n if (!s || s.tx !== tx || !sessions.has(s.token)) {\n throw new G9SqliteError('misuse', 'The transaction is finished or unknown.');\n }\n s.tx = null;\n txOwner.delete(tx);\n try {\n s.db.exec('ROLLBACK');\n } catch {\n // SQLite may already have rolled back on an error; the transaction is over either way.\n }\n },\n\n async close(token) {\n const s = session(token);\n sessions.delete(token);\n if (s.tx) txOwner.delete(s.tx);\n s.statements.clear();\n s.db.close();\n },\n };\n}\n"],"names":["toError","error","sql","completedStatements","G9SqliteError","e","sqliteCode","undefined","code","sqliteErrorCodeFor","String","bind","value","index","Number","BigInt","ArrayBuffer","Uint8Array","read","n","copy","tokenSeed","createNodeTestDriver","options","_options_name","sessions","Map","txOwner","session","token","s","prepare","stmt","execute","statement","maxRows","p","args","i","columns","c","rows","row","result","applyPragmas","db","openOptions","_openOptions_pragmas","pragmas","pragmaStatements","DatabaseSync","Object","memory","existsSync","mkdirSync","dirname","statements","runOptions","_runOptions_signal","atomic","results","_runOptions_signal1","mode","tx"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,30 @@
1
1
  {
2
2
  "name": "@g9tm/lynxcontrols-testing",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.4.0",
4
+ "description": "Test utilities for G9 consumers and this repo: Intl-free test mode, the node:sqlite reference driver (/sqlite, Node only), deterministic helpers.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "exports": {
9
+ ".": {
10
+ "source": "./src/index.ts",
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./sqlite": {
15
+ "source": "./src/sqlite/index.ts",
16
+ "types": "./dist/sqlite/index.d.ts",
17
+ "default": "./dist/sqlite/index.js"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "README.md"
23
+ ],
24
+ "scripts": {
25
+ "build": "rslib build"
26
+ },
27
+ "dependencies": {
28
+ "@g9tm/lynxcontrols-sqlite": "1.4.0"
29
+ }
30
+ }