@grest-ts/testkit-runtime 0.0.5 → 0.0.7

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Grest Games OÜ
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Grest Games OÜ
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ <!-- GREST-TS-BANNER-START -->
2
+ > Part of the [grest-ts](https://github.com/grest-ts/grest-ts) framework.
3
+ > [Documentation](https://github.com/grest-ts/grest-ts#readme) | [All packages](https://github.com/grest-ts/grest-ts#package-reference)
4
+ <!-- GREST-TS-BANNER-END -->
5
+
@@ -1 +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","../src/mockable.decorator.ts","../../../../packages/locator/src/gglocator.ts","../../../../packages/locator/src/gglocatorkey.ts","../../../../packages/locator/src/gglocatorscopedebug.ts","../../../../packages/locator/src/gglocatorscope.ts","../../../../packages/common/src/deepfreeze.ts","../../../../packages/common/src/deepclone.ts","../../../../packages/common/src/withtimeout.ts","../../../../packages/common/src/ggerror.ts","../../../../packages/common/src/unreachablecode.ts","../../../../packages/common/src/types.ts","../../../../packages/common/src/http.ts","../../../../packages/common/src/secret.ts","../../../../packages/common/src/sleep.ts","../../../../packages/common/src/environment.ts","../../../../packages/common/src/ggasyncstorage.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/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","../../../../node_modules/@nodelib/fs.stat/out/types/index.d.ts","../../../../node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts","../../../../node_modules/@nodelib/fs.stat/out/settings.d.ts","../../../../node_modules/@nodelib/fs.stat/out/providers/async.d.ts","../../../../node_modules/@nodelib/fs.stat/out/index.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/types/index.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/settings.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/providers/async.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/index.d.ts","../../../../node_modules/@nodelib/fs.walk/out/types/index.d.ts","../../../../node_modules/@nodelib/fs.walk/out/settings.d.ts","../../../../node_modules/@nodelib/fs.walk/out/readers/reader.d.ts","../../../../node_modules/@nodelib/fs.walk/out/readers/async.d.ts","../../../../node_modules/@nodelib/fs.walk/out/providers/async.d.ts","../../../../node_modules/@nodelib/fs.walk/out/index.d.ts","../../../../node_modules/fast-glob/out/types/index.d.ts","../../../../node_modules/fast-glob/out/settings.d.ts","../../../../node_modules/fast-glob/out/managers/tasks.d.ts","../../../../node_modules/fast-glob/out/index.d.ts","../../../../packages/common/src/ggextensiondiscovery.ts","../../../../packages/common/src/index-node.ts","../../../../packages/locator/src/gglocatorstorage.ts","../../../../packages/locator/src/index-node.ts","../src/testable.decorator.ts","../src/index.ts"],"fileIdsList":[[79,128,145,146,183,184],[79,128,145,146,184,185,186,187],[79,128,145,146,178,184,186],[79,128,145,146,183,185],[79,128,140,145,146,178],[79,128,140,145,146,178,179],[79,128,145,146,179,180,181,182],[79,128,145,146,179,181],[79,128,145,146,180],[79,128,145,146,160,178,188,189,190,193],[79,128,145,146,189,190,192],[79,128,139,145,146,178,188,189,190,191],[79,128,145,146,190],[79,128,145,146,188,189],[79,128,145,146,178,188],[79,125,126,128,145,146],[79,127,128,145,146],[128,145,146],[79,128,133,145,146,163],[79,128,129,134,139,145,146,148,160,171],[79,128,129,130,139,145,146,148],[79,128,145,146],[74,75,76,79,128,145,146],[79,128,131,145,146,172],[79,128,132,133,140,145,146,149],[79,128,133,145,146,160,168],[79,128,134,136,139,145,146,148],[79,127,128,135,145,146],[79,128,136,137,145,146],[79,128,138,139,145,146],[79,127,128,139,145,146],[79,128,139,140,141,145,146,160,171],[79,128,139,140,141,145,146,155,160,163],[79,121,128,136,139,142,145,146,148,160,171],[79,128,139,140,142,143,145,146,148,160,168,171],[79,128,142,144,145,146,160,168,171],[77,78,79,80,81,82,83,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[79,128,139,145,146],[79,128,145,146,147,171],[79,128,136,139,145,146,148,160],[79,128,145,146,149],[79,128,145,146,150],[79,127,128,145,146,151],[79,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[79,128,145,146,153],[79,128,145,146,154],[79,128,139,145,146,155,156],[79,128,145,146,155,157,172,174],[79,128,140,145,146],[79,128,139,145,146,160,161,163],[79,128,145,146,162,163],[79,128,145,146,160,161],[79,128,145,146,163],[79,128,145,146,164],[79,125,128,145,146,160,165,171],[79,128,139,145,146,166,167],[79,128,145,146,166,167],[79,128,133,145,146,148,160,168],[79,128,145,146,169],[79,128,145,146,148,170],[79,128,142,145,146,154,171],[79,128,133,145,146,172],[79,128,145,146,160,173],[79,128,145,146,147,174],[79,128,145,146,175],[79,121,128,145,146],[79,121,128,139,141,145,146,151,160,163,171,173,174,176],[79,128,145,146,160,177],[79,128,145,146,178,195,196,197],[79,128,145,146,195,196],[79,128,145,146,195],[79,128,145,146,178,194],[79,93,97,128,145,146,171],[79,93,128,145,146,160,171],[79,88,128,145,146],[79,90,93,128,145,146,168,171],[79,128,145,146,148,168],[79,128,145,146,178],[79,88,128,145,146,178],[79,90,93,128,145,146,148,171],[79,85,86,89,92,128,139,145,146,160,171],[79,93,100,128,145,146],[79,85,91,128,145,146],[79,93,114,115,128,145,146],[79,89,93,128,145,146,163,171,178],[79,114,128,145,146,178],[79,87,88,128,145,146,178],[79,93,128,145,146],[79,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,128,145,146],[79,93,108,128,145,146],[79,93,100,101,128,145,146],[79,91,93,101,102,128,145,146],[79,92,128,145,146],[79,85,88,93,128,145,146],[79,93,97,101,102,128,145,146],[79,97,128,145,146],[79,91,93,96,128,145,146,171],[79,85,90,93,100,128,145,146],[79,128,145,146,160],[79,88,93,114,128,145,146,176,178],[58,79,128,145,146,203],[79,128,145,146,202],[79,128,140,145,146,150,171,198],[63,64,65,66,67,68,69,70,71,72,73,79,128,145,146,199],[62,79,128,145,146,201],[59,79,128,145,146],[60,61,79,128,145,146,201],[62,79,128,145,146,200],[59,60,62,79,127,128,145,146,201]],"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":"34c39644bc43c735750a55486ec121b40d90dfd828e3b76e613d241d1fa009c2","signature":"749f6ba167ea7162ca524ee698f3a4b82e0a7bb737d1cec4283824e68fdfc5e0"},"17be926233fbcdc26fafc190963670783b6fd0d6599514e6da7dafa36a9f303c","c6578a2cfbf3805f6fa3678a2c4ba87531de73b21b44ebf9b28363f7443ab9b7","6b2576b1abe55752930c6bd60816269ae86cc98926c40dd275cc92b5cc6cb144","f2d12830e127ca729fda42a8cf802501c76d1edf75034cefa1e3404c2d3d2d04","472816436c6db76434485c6257583dc150a2017733cd2e9aca9d91904584c040","fa5a1bbd7930a3aa8dbbd8ce19e89603df3daca14f080e1b7ad815d3f42408d3","e4542756b59d74ff2c036478942546e5937d35808eae08b6ae934164a7f2b97e","f369191ac0c4224b491791d2b711e0d8a29eaae730578a13c63016ee71feddb0","6fc71745fb086db4de247f9f62c7e1932d5c7c6f9d6a593feee7d76f0f2a5010","1f083bc5e8f2791b54ae5ebf69380dace5da834ecb9d37864dbe046aff3796cd","af392737db53a482cfda4c6ad3c013a62a806fe7be9e31c3b00ba3977ac39f75","565b2d44f499b7041ab79933ac8a041bdad5629dd4aec003bea4ba02a5ca1098","a527c423aeb061ecf2d971a6e3bf624880c0408bcf72a97dacf82013235e6731","ade68182d7a12c48e460596b96462aa18372bd505e8c21577445b0dc2343b6ee","04a4003ab34c3db124058179940c00f366f871d87ff1d318f13720c0b6269499",{"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":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","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":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","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":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"f949f7f6c7802a338039cfc2156d1fe285cdd1e092c64437ebe15ae8edc854e0","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2bc7425ef40526650d6db7e072c1ff4a51101c3ac2cc4b666623b19496a6e27","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":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"0dba70b3fb0dcd713fda33c2df64fa6751fff6460e536971cee917260fb17882","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":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"46324183533e34fad2461b51174132e8e0e4b3ac1ceb5032e4952992739d1eab","impliedFormat":1},{"version":"d3fa0530dfb1df408f0abd76486de39def69ca47683d4a3529b2d22fce27c693","impliedFormat":1},{"version":"d9be977c415df16e4defe4995caeca96e637eeef9d216d0d90cdba6fc617e97e","impliedFormat":1},{"version":"98e0c2b48d855a844099123e8ec20fe383ecd1c5877f3895b048656befe268d0","impliedFormat":1},{"version":"ff53802a97b7d11ab3c4395aa052baa14cd12d2b1ed236b520a833fdd2a15003","impliedFormat":1},{"version":"fce9262f840a74118112caf685b725e1cc86cd2b0927311511113d90d87cc61e","impliedFormat":1},{"version":"d7a7cac49af2a3bfc208fe68831fbfa569864f74a7f31cc3a607f641e6c583fd","impliedFormat":1},{"version":"9a80e3322d08274f0e41b77923c91fe67b2c8a5134a5278c2cb60a330441554e","impliedFormat":1},{"version":"2460af41191009298d931c592fb6d4151beea320f1f25b73605e2211e53e4e88","impliedFormat":1},{"version":"2f87ea988d84d1c617afdeba9d151435473ab24cd5fc456510c8db26d8bd1581","impliedFormat":1},{"version":"b7336c1c536e3deaedbda956739c6250ac2d0dd171730c42cb57b10368f38a14","impliedFormat":1},{"version":"6fb67d664aaab2f1d1ad4613b58548aecb4b4703b9e4c5dba6b865b31bd14722","impliedFormat":1},{"version":"4414644199b1a047b4234965e07d189781a92b578707c79c3933918d67cd9d85","impliedFormat":1},{"version":"04a4b38c6a1682059eac00e7d0948d99c46642b57003d61d0fe9ccc9df442887","impliedFormat":1},{"version":"f12ea658b060da1752c65ae4f1e4c248587f6cd4cb4acabbf79a110b6b02ff75","impliedFormat":1},{"version":"011b2857871a878d5eae463bedc4b3dd14755dc3a67d5d10f8fbb7823d119294","impliedFormat":1},{"version":"d406b797d7b2aff9f8bd6c023acfaa5a5fc415bfbf01975e23d415d3f54857af","impliedFormat":1},{"version":"7d71b2d1a537fe41760a16441cd95d98fcb59ddf9c714aba2fecba961ab253b6","impliedFormat":1},{"version":"a9bd8a2bbd03a72054cbdf0cd2a77fabea4e3ae591dd02b8f58bda0c34e50c1c","impliedFormat":1},{"version":"386cc88a3bdee8bc651ead59f8afc9dc5729fc933549bbd217409eabad05ba3e","impliedFormat":1},"3db191719d15341432d04b4bec0767f2e52c3bf7a3b10c1869604b312ec167b3","1c558f5e6f4eeab86fff25eaa83643725ae793810f98aaf0513ed187e0157231","0f4ef1eb9f2d2e445dbc75bc2b48151006e0ece965e2443bf2da9416da5b4b2b","7d4e17170c6bcf5175fba2a917c55a7ef8c3c5ccb78edaefe65ccb679d46033c",{"version":"a32e7cb7274f61cb26ffebc5e2cf45a40a82f40648c1e25e95574df282a91ef1","signature":"4200a12dbbc5149a55239b93136e6d1442ad1964735641591ec2de092d5fe3de"},{"version":"f733274f3d5f610bed44ea1d3413f6865bb72a06c98d9c95b0d09c7668507965","signature":"709a6f551e29ba9f0cbdccdd144217cd1c235e4061f3312b63ae1834c600ca12"}],"root":[58,203,204],"options":{"allowJs":false,"checkJs":false,"composite":false,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":false,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"target":9},"referencedMap":[[185,1],[188,2],[187,3],[186,4],[184,5],[180,6],[183,7],[182,8],[181,9],[179,5],[194,10],[193,11],[192,12],[191,13],[190,14],[189,15],[125,16],[126,16],[127,17],[79,18],[128,19],[129,20],[130,21],[74,22],[77,23],[75,22],[76,22],[131,24],[132,25],[133,26],[134,27],[135,28],[136,29],[137,29],[138,30],[139,31],[140,32],[141,33],[80,22],[78,22],[142,34],[143,35],[144,36],[178,37],[145,38],[146,22],[147,39],[148,40],[149,41],[150,42],[151,43],[152,44],[153,45],[154,46],[155,47],[156,47],[157,48],[158,22],[159,49],[160,50],[162,51],[161,52],[163,53],[164,54],[165,55],[166,56],[167,57],[168,58],[169,59],[170,60],[171,61],[172,62],[173,63],[174,64],[175,65],[81,22],[82,22],[83,22],[122,66],[123,22],[124,22],[176,67],[177,68],[84,22],[198,69],[197,70],[196,71],[195,72],[56,22],[57,22],[11,22],[10,22],[2,22],[12,22],[13,22],[14,22],[15,22],[16,22],[17,22],[18,22],[19,22],[3,22],[20,22],[21,22],[4,22],[22,22],[26,22],[23,22],[24,22],[25,22],[27,22],[28,22],[29,22],[5,22],[30,22],[31,22],[32,22],[33,22],[6,22],[37,22],[34,22],[35,22],[36,22],[38,22],[7,22],[39,22],[44,22],[45,22],[40,22],[41,22],[42,22],[43,22],[8,22],[49,22],[46,22],[47,22],[48,22],[50,22],[9,22],[51,22],[52,22],[53,22],[55,22],[54,22],[1,22],[100,73],[110,74],[99,73],[120,75],[91,76],[90,77],[119,78],[113,79],[118,80],[93,81],[107,82],[92,83],[116,84],[88,85],[87,78],[117,86],[89,87],[94,88],[95,22],[98,88],[85,22],[121,89],[111,90],[102,91],[103,92],[105,93],[101,94],[104,95],[114,78],[96,96],[97,97],[106,98],[86,99],[109,90],[108,88],[112,22],[115,100],[204,101],[58,17],[203,102],[64,22],[63,22],[72,22],[73,22],[66,22],[199,103],[69,22],[200,104],[70,22],[71,22],[68,22],[67,22],[65,22],[59,105],[60,106],[62,107],[61,22],[201,108],[202,109]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204],"checkPending":true,"version":"5.9.3"}
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","../src/mockable.decorator.ts","../../../../packages/locator/src/GGLocator.ts","../../../../packages/locator/src/GGLocatorKey.ts","../../../../packages/locator/src/GGLocatorScopeDebug.ts","../../../../packages/locator/src/GGLocatorScope.ts","../../../../packages/common/src/deepFreeze.ts","../../../../packages/common/src/deepClone.ts","../../../../packages/common/src/withTimeout.ts","../../../../packages/common/src/GGError.ts","../../../../packages/common/src/UnreachableCode.ts","../../../../packages/common/src/types.ts","../../../../packages/common/src/http.ts","../../../../packages/common/src/Secret.ts","../../../../packages/common/src/sleep.ts","../../../../packages/common/src/environment.ts","../../../../packages/common/src/GGAsyncStorage.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/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","../../../../node_modules/@nodelib/fs.stat/out/types/index.d.ts","../../../../node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts","../../../../node_modules/@nodelib/fs.stat/out/settings.d.ts","../../../../node_modules/@nodelib/fs.stat/out/providers/async.d.ts","../../../../node_modules/@nodelib/fs.stat/out/index.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/types/index.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/settings.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/providers/async.d.ts","../../../../node_modules/@nodelib/fs.scandir/out/index.d.ts","../../../../node_modules/@nodelib/fs.walk/out/types/index.d.ts","../../../../node_modules/@nodelib/fs.walk/out/settings.d.ts","../../../../node_modules/@nodelib/fs.walk/out/readers/reader.d.ts","../../../../node_modules/@nodelib/fs.walk/out/readers/async.d.ts","../../../../node_modules/@nodelib/fs.walk/out/providers/async.d.ts","../../../../node_modules/@nodelib/fs.walk/out/index.d.ts","../../../../node_modules/fast-glob/out/types/index.d.ts","../../../../node_modules/fast-glob/out/settings.d.ts","../../../../node_modules/fast-glob/out/managers/tasks.d.ts","../../../../node_modules/fast-glob/out/index.d.ts","../../../../packages/common/src/GGExtensionDiscovery.ts","../../../../packages/common/src/index-node.ts","../../../../packages/locator/src/GGLocatorStorage.ts","../../../../packages/locator/src/index-node.ts","../src/testable.decorator.ts","../src/index.ts"],"fileIdsList":[[79,128,145,146,183,184],[79,128,145,146,184,185,186,187],[79,128,145,146,178,184,186],[79,128,145,146,183,185],[79,128,140,145,146,178],[79,128,140,145,146,178,179],[79,128,145,146,179,180,181,182],[79,128,145,146,179,181],[79,128,145,146,180],[79,128,145,146,160,178,188,189,190,193],[79,128,145,146,189,190,192],[79,128,139,145,146,178,188,189,190,191],[79,128,145,146,190],[79,128,145,146,188,189],[79,128,145,146,178,188],[79,125,126,128,145,146],[79,127,128,145,146],[128,145,146],[79,128,133,145,146,163],[79,128,129,134,139,145,146,148,160,171],[79,128,129,130,139,145,146,148],[79,128,145,146],[74,75,76,79,128,145,146],[79,128,131,145,146,172],[79,128,132,133,140,145,146,149],[79,128,133,145,146,160,168],[79,128,134,136,139,145,146,148],[79,127,128,135,145,146],[79,128,136,137,145,146],[79,128,138,139,145,146],[79,127,128,139,145,146],[79,128,139,140,141,145,146,160,171],[79,128,139,140,141,145,146,155,160,163],[79,121,128,136,139,142,145,146,148,160,171],[79,128,139,140,142,143,145,146,148,160,168,171],[79,128,142,144,145,146,160,168,171],[77,78,79,80,81,82,83,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[79,128,139,145,146],[79,128,145,146,147,171],[79,128,136,139,145,146,148,160],[79,128,145,146,149],[79,128,145,146,150],[79,127,128,145,146,151],[79,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],[79,128,145,146,153],[79,128,145,146,154],[79,128,139,145,146,155,156],[79,128,145,146,155,157,172,174],[79,128,140,145,146],[79,128,139,145,146,160,161,163],[79,128,145,146,162,163],[79,128,145,146,160,161],[79,128,145,146,163],[79,128,145,146,164],[79,125,128,145,146,160,165,171],[79,128,139,145,146,166,167],[79,128,145,146,166,167],[79,128,133,145,146,148,160,168],[79,128,145,146,169],[79,128,145,146,148,170],[79,128,142,145,146,154,171],[79,128,133,145,146,172],[79,128,145,146,160,173],[79,128,145,146,147,174],[79,128,145,146,175],[79,121,128,145,146],[79,121,128,139,141,145,146,151,160,163,171,173,174,176],[79,128,145,146,160,177],[79,128,145,146,178,195,196,197],[79,128,145,146,195,196],[79,128,145,146,195],[79,128,145,146,178,194],[79,93,97,128,145,146,171],[79,93,128,145,146,160,171],[79,88,128,145,146],[79,90,93,128,145,146,168,171],[79,128,145,146,148,168],[79,128,145,146,178],[79,88,128,145,146,178],[79,90,93,128,145,146,148,171],[79,85,86,89,92,128,139,145,146,160,171],[79,93,100,128,145,146],[79,85,91,128,145,146],[79,93,114,115,128,145,146],[79,89,93,128,145,146,163,171,178],[79,114,128,145,146,178],[79,87,88,128,145,146,178],[79,93,128,145,146],[79,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,128,145,146],[79,93,108,128,145,146],[79,93,100,101,128,145,146],[79,91,93,101,102,128,145,146],[79,92,128,145,146],[79,85,88,93,128,145,146],[79,93,97,101,102,128,145,146],[79,97,128,145,146],[79,91,93,96,128,145,146,171],[79,85,90,93,100,128,145,146],[79,128,145,146,160],[79,88,93,114,128,145,146,176,178],[58,79,128,145,146,203],[79,128,145,146,202],[79,128,140,145,146,150,171,198],[63,64,65,66,67,68,69,70,71,72,73,79,128,145,146,199],[62,79,128,145,146,201],[59,79,128,145,146],[60,61,79,128,145,146,201],[62,79,128,145,146,200],[59,60,62,79,127,128,145,146,201]],"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":"51a355954f49520ffe2759984b0701d731d2e954ebb5c08704d2c8e711aa7a20","signature":"749f6ba167ea7162ca524ee698f3a4b82e0a7bb737d1cec4283824e68fdfc5e0"},"4b9f50c91c30bab24c9aabe5698b451b642a63da83f0858bda1af4e1b4676573","bfa83a54b6e1aaacb3b9f74cde8acbc1799578a1294b70eee95f6a31790e5c02","26e6482c3c04b3c9697cca31fa74dfbc491391a8f84e92fae651817655e1c0ad","28b0d6267afd6d97b0b5ad26189a19585535a8ab5df3f134ba1793c14cc41585","ebc9e41e8b0f1877e108359607af3007654cbe6a68b010387d714e782c4c8e10","b30b7fd7a575d5984362bb0afa0688a532082c6dba312febe93590181ee27209","a4c0aba159373b9d4ae7b5fcc1df0452d355dae89caeb8a55c23a5ac51164bad","167c66181f0e1bec730481c9c424333ecfebcac4e85fd1531c1b2f51a17a18eb","b3c158342b9a5388e54e6334fb6b851a49f9a425e16f832d4136d93574dbe838","ae01f79f46a5bb60d1b60da0d9e6619a978bf24a3db7f37d26b42d85ba4726c8","ff9b51d173d382bd028ea76d69646fafed2cc558d771acb9aadcc5cb50ed2154","4ef871ffaee0c35955e2f2253d1c97872013510b5962f2a4a021df2a1c35f2e2","ddc8ff17b3cb2d7e45fd70f8cefa26d1c6b8db91c2b4e1d93c15f819a4a7106f","8c4b94857ca62dca9f2ce7e2ab0d933282905dac970541a91c6e07546f0b8ba1","1fb8e98536077b3d702e8343ecef42542710d8b8177ee051ee072284843d5f5e",{"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":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","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":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","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":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"f949f7f6c7802a338039cfc2156d1fe285cdd1e092c64437ebe15ae8edc854e0","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2bc7425ef40526650d6db7e072c1ff4a51101c3ac2cc4b666623b19496a6e27","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":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"0dba70b3fb0dcd713fda33c2df64fa6751fff6460e536971cee917260fb17882","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":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"46324183533e34fad2461b51174132e8e0e4b3ac1ceb5032e4952992739d1eab","impliedFormat":1},{"version":"d3fa0530dfb1df408f0abd76486de39def69ca47683d4a3529b2d22fce27c693","impliedFormat":1},{"version":"d9be977c415df16e4defe4995caeca96e637eeef9d216d0d90cdba6fc617e97e","impliedFormat":1},{"version":"98e0c2b48d855a844099123e8ec20fe383ecd1c5877f3895b048656befe268d0","impliedFormat":1},{"version":"ff53802a97b7d11ab3c4395aa052baa14cd12d2b1ed236b520a833fdd2a15003","impliedFormat":1},{"version":"fce9262f840a74118112caf685b725e1cc86cd2b0927311511113d90d87cc61e","impliedFormat":1},{"version":"d7a7cac49af2a3bfc208fe68831fbfa569864f74a7f31cc3a607f641e6c583fd","impliedFormat":1},{"version":"9a80e3322d08274f0e41b77923c91fe67b2c8a5134a5278c2cb60a330441554e","impliedFormat":1},{"version":"2460af41191009298d931c592fb6d4151beea320f1f25b73605e2211e53e4e88","impliedFormat":1},{"version":"2f87ea988d84d1c617afdeba9d151435473ab24cd5fc456510c8db26d8bd1581","impliedFormat":1},{"version":"b7336c1c536e3deaedbda956739c6250ac2d0dd171730c42cb57b10368f38a14","impliedFormat":1},{"version":"6fb67d664aaab2f1d1ad4613b58548aecb4b4703b9e4c5dba6b865b31bd14722","impliedFormat":1},{"version":"4414644199b1a047b4234965e07d189781a92b578707c79c3933918d67cd9d85","impliedFormat":1},{"version":"04a4b38c6a1682059eac00e7d0948d99c46642b57003d61d0fe9ccc9df442887","impliedFormat":1},{"version":"f12ea658b060da1752c65ae4f1e4c248587f6cd4cb4acabbf79a110b6b02ff75","impliedFormat":1},{"version":"011b2857871a878d5eae463bedc4b3dd14755dc3a67d5d10f8fbb7823d119294","impliedFormat":1},{"version":"d406b797d7b2aff9f8bd6c023acfaa5a5fc415bfbf01975e23d415d3f54857af","impliedFormat":1},{"version":"7d71b2d1a537fe41760a16441cd95d98fcb59ddf9c714aba2fecba961ab253b6","impliedFormat":1},{"version":"a9bd8a2bbd03a72054cbdf0cd2a77fabea4e3ae591dd02b8f58bda0c34e50c1c","impliedFormat":1},{"version":"386cc88a3bdee8bc651ead59f8afc9dc5729fc933549bbd217409eabad05ba3e","impliedFormat":1},"12c3eebbf1564faa43bf1b21dc787de41f20bb9a932c9eb7cbf7c3c99916f331","37388852752cf98f5ef58d214de5277a709c273a4ae17ac1882b65671e70a169","f2fa43f90a965f7f5664cc7c6caee0e351bd3c7f8d6337808522e283c83abc66","307e671cc1485413dad2df60747a3629c8961fd6e26dbd553bd879da0b015937",{"version":"74a8d4f96326d3c4d509e0a868c071a00ee2a11e7eeef8ec1dbfe96aa3000a13","signature":"4200a12dbbc5149a55239b93136e6d1442ad1964735641591ec2de092d5fe3de"},{"version":"caf82d2a3b2e3708143c32219e544991d8f26910a045b69b2a573c2add80ffe1","signature":"709a6f551e29ba9f0cbdccdd144217cd1c235e4061f3312b63ae1834c600ca12"}],"root":[58,203,204],"options":{"allowJs":false,"checkJs":false,"composite":false,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":false,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"target":9},"referencedMap":[[185,1],[188,2],[187,3],[186,4],[184,5],[180,6],[183,7],[182,8],[181,9],[179,5],[194,10],[193,11],[192,12],[191,13],[190,14],[189,15],[125,16],[126,16],[127,17],[79,18],[128,19],[129,20],[130,21],[74,22],[77,23],[75,22],[76,22],[131,24],[132,25],[133,26],[134,27],[135,28],[136,29],[137,29],[138,30],[139,31],[140,32],[141,33],[80,22],[78,22],[142,34],[143,35],[144,36],[178,37],[145,38],[146,22],[147,39],[148,40],[149,41],[150,42],[151,43],[152,44],[153,45],[154,46],[155,47],[156,47],[157,48],[158,22],[159,49],[160,50],[162,51],[161,52],[163,53],[164,54],[165,55],[166,56],[167,57],[168,58],[169,59],[170,60],[171,61],[172,62],[173,63],[174,64],[175,65],[81,22],[82,22],[83,22],[122,66],[123,22],[124,22],[176,67],[177,68],[84,22],[198,69],[197,70],[196,71],[195,72],[56,22],[57,22],[11,22],[10,22],[2,22],[12,22],[13,22],[14,22],[15,22],[16,22],[17,22],[18,22],[19,22],[3,22],[20,22],[21,22],[4,22],[22,22],[26,22],[23,22],[24,22],[25,22],[27,22],[28,22],[29,22],[5,22],[30,22],[31,22],[32,22],[33,22],[6,22],[37,22],[34,22],[35,22],[36,22],[38,22],[7,22],[39,22],[44,22],[45,22],[40,22],[41,22],[42,22],[43,22],[8,22],[49,22],[46,22],[47,22],[48,22],[50,22],[9,22],[51,22],[52,22],[53,22],[55,22],[54,22],[1,22],[100,73],[110,74],[99,73],[120,75],[91,76],[90,77],[119,78],[113,79],[118,80],[93,81],[107,82],[92,83],[116,84],[88,85],[87,78],[117,86],[89,87],[94,88],[95,22],[98,88],[85,22],[121,89],[111,90],[102,91],[103,92],[105,93],[101,94],[104,95],[114,78],[96,96],[97,97],[106,98],[86,99],[109,90],[108,88],[112,22],[115,100],[204,101],[58,17],[203,102],[73,22],[66,22],[199,103],[70,22],[67,22],[64,22],[63,22],[72,22],[69,22],[200,104],[71,22],[68,22],[65,22],[59,105],[60,106],[62,107],[61,22],[201,108],[202,109]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204],"checkPending":true,"version":"5.9.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grest-ts/testkit-runtime",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Component testing library runtime code. ",
@@ -43,9 +43,9 @@
43
43
  "node": ">=22"
44
44
  },
45
45
  "dependencies": {
46
- "@grest-ts/locator": "0.0.5"
46
+ "@grest-ts/locator": "0.0.7"
47
47
  },
48
48
  "devDependencies": {
49
- "@grest-ts/x-packager": "0.0.5"
49
+ "@grest-ts/x-packager": "0.0.7"
50
50
  }
51
51
  }
package/src/index.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from "./mockable.decorator"
1
+ export * from "./mockable.decorator"
2
2
  export * from "./testable.decorator"
@@ -1,193 +1,193 @@
1
- /**
2
- * Minimal runtime for @mockable decorator.
3
- * This file has NO dependencies on testkit internals and is safe for production bundles.
4
- *
5
- * The decorator wraps methods but only activates mock/spy behavior when running in test mode.
6
- * In production, methods are called directly with zero overhead beyond the wrapper.
7
- */
8
-
9
- import {AsyncLocalStorage} from "async_hooks";
10
-
11
- // ============================================================================
12
- // Test context interface - implemented by testkit's GGTestRuntimeWorker
13
- // ============================================================================
14
-
15
- export interface MockableTestContext {
16
- /**
17
- * Send a mockable call to the test runner.
18
- * Returns mock data, or CALL_THROUGH symbol for spy mode.
19
- */
20
- sendCall(className: string, methodName: string, callArgs: Record<string, any>): Promise<any>;
21
-
22
- /**
23
- * Report the result of a spy call back to the test runner.
24
- */
25
- sendSpyResult(className: string, methodName: string, callResult: any): Promise<void>;
26
-
27
- /**
28
- * Sentinel value indicating spy mode (call the real method).
29
- */
30
- readonly CALL_THROUGH: string;
31
- }
32
-
33
- // ============================================================================
34
- // Context storage - set by testkit when running tests
35
- // ============================================================================
36
-
37
- const mockableContextStorage = new AsyncLocalStorage<MockableTestContext>();
38
-
39
- /**
40
- * Run code within a mockable test context.
41
- * Called by testkit's GGTestRuntimeWorker to enable mock/spy behavior.
42
- * @internal
43
- */
44
- export function runWithMockableContext<T>(ctx: MockableTestContext, fn: () => T): T {
45
- return mockableContextStorage.run(ctx, fn);
46
- }
47
-
48
- // ============================================================================
49
- // Helper functions
50
- // ============================================================================
51
-
52
- const MOCKABLE_WRAPPED = Symbol('GGMockableWrapped');
53
-
54
- /**
55
- * Extract parameter names from a function.
56
- * Falls back to arg0, arg1, etc. if parsing fails.
57
- */
58
- function getParamNames(fn: Function): string[] {
59
- const fnStr = fn.toString();
60
- // Match function parameters: function(a, b, c) or (a, b, c) =>
61
- const match = fnStr.match(/(?:function\s*\w*\s*\(|\()\s*([^)]*)\)/);
62
- if (!match || !match[1]) return [];
63
-
64
- return match[1]
65
- .split(',')
66
- .map(p => p.trim())
67
- .filter(p => p.length > 0)
68
- .map(p => {
69
- // Handle destructuring, default values, type annotations
70
- // Take just the parameter name before : or =
71
- const name = p.split(/[=:]/)[0].trim();
72
- // Remove ... for rest params
73
- return name.replace(/^\.\.\./, '');
74
- });
75
- }
76
-
77
- /**
78
- * Convert positional arguments to a named object.
79
- */
80
- function argsToObject(args: any[], paramNames: string[]): Record<string, any> {
81
- const result: Record<string, any> = {};
82
- for (let i = 0; i < args.length; i++) {
83
- result[paramNames[i] || `arg${i}`] = args[i];
84
- }
85
- return result;
86
- }
87
-
88
- /**
89
- * Check if a function is async (returns a Promise).
90
- * @deprected - having this is bad, we should not check it like this!
91
- * @TODO Existance of this is bad!
92
- */
93
- function isAsyncFunction(fn: Function): boolean {
94
- return fn.constructor.name === 'AsyncFunction' ||
95
- fn.toString().includes('__awaiter') || // Compiled TypeScript async
96
- fn.toString().trimStart().startsWith('async ');
97
- }
98
-
99
- /**
100
- * Wrap a method to intercept calls in test mode.
101
- * Only wraps async methods - sync methods are not mockable to preserve calling semantics.
102
- */
103
- function wrapMethod(cls: any, methodName: string): void {
104
- // Skip if already wrapped
105
- if (cls.prototype[methodName]?.[MOCKABLE_WRAPPED]) {
106
- return;
107
- }
108
-
109
- const originalMethod = cls.prototype[methodName];
110
-
111
- // Only wrap async methods - sync helper methods shouldn't be intercepted
112
- // because making them async would break calling code that doesn't await them
113
- // @TODO XXAsyncMethodIssue
114
- // @TODO Having this is literally bad, we need to change how mock logic works.
115
- // @TODO Right now mocks go back to test to see "whats up", but we should actually sync mocks info to the service before the call, so even for sync methods we can resolve the mock data.
116
- // @TODO This has a drawback of losing "central brain" control though, as each mock is no instance bound.
117
- // @TODO This whole idea needs thinking
118
- if (!isAsyncFunction(originalMethod)) {
119
- return;
120
- }
121
-
122
- const paramNames = getParamNames(originalMethod);
123
-
124
- const wrappedMethod = async function (this: any, ...args: any[]) {
125
- const ctx = mockableContextStorage.getStore();
126
-
127
- // Not in test mode - call original method directly (zero overhead path)
128
- if (!ctx) {
129
- return originalMethod.apply(this, args);
130
- }
131
-
132
- // In test mode - go through mock/spy system
133
- const callArgs = argsToObject(args, paramNames);
134
- const result = await ctx.sendCall(cls.name, methodName, callArgs);
135
-
136
- if (result === ctx.CALL_THROUGH) {
137
- // Spy mode - call the real method
138
- const realResult = await originalMethod.apply(this, args);
139
-
140
- // Report result back for validation
141
- await ctx.sendSpyResult(cls.name, methodName, realResult);
142
-
143
- return realResult;
144
- } else {
145
- // Mock mode - return the mock data
146
- return result;
147
- }
148
- };
149
-
150
- // Mark as wrapped and assign to prototype
151
- (wrappedMethod as any)[MOCKABLE_WRAPPED] = true;
152
- cls.prototype[methodName] = wrappedMethod;
153
- }
154
-
155
- // ============================================================================
156
- // The @mockable decorator
157
- // ============================================================================
158
-
159
- /**
160
- * Decorator to mark a class as mockable in tests.
161
- * All public async methods will be interceptable via mockBy() or spyOn().
162
- *
163
- * In production (when not running tests), this decorator has minimal overhead -
164
- * methods are wrapped but the wrapper immediately calls through to the original.
165
- *
166
- * @example
167
- * ```typescript
168
- * import {mockable} from "@grest-ts/testkit/mockable";
169
- *
170
- * @mockable
171
- * export class AddressResolverService {
172
- * async resolveAddress(address: string): Promise<LatLng> { ... }
173
- * }
174
- *
175
- * // In tests:
176
- * .with(mockBy(AddressResolverService).resolveAddress
177
- * .toEqual({address: "123 Main St"})
178
- * .andReturn({lat: 40.7, lng: -74.0}))
179
- * ```
180
- */
181
- export function mockable<T extends { new(...args: any[]): {} }>(target: T): T {
182
- // Get all methods from prototype
183
- for (const key of Object.getOwnPropertyNames(target.prototype)) {
184
- if (key === 'constructor') continue;
185
-
186
- const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);
187
- if (descriptor && typeof descriptor.value === 'function') {
188
- wrapMethod(target, key);
189
- }
190
- }
191
-
192
- return target;
193
- }
1
+ /**
2
+ * Minimal runtime for @mockable decorator.
3
+ * This file has NO dependencies on testkit internals and is safe for production bundles.
4
+ *
5
+ * The decorator wraps methods but only activates mock/spy behavior when running in test mode.
6
+ * In production, methods are called directly with zero overhead beyond the wrapper.
7
+ */
8
+
9
+ import {AsyncLocalStorage} from "async_hooks";
10
+
11
+ // ============================================================================
12
+ // Test context interface - implemented by testkit's GGTestRuntimeWorker
13
+ // ============================================================================
14
+
15
+ export interface MockableTestContext {
16
+ /**
17
+ * Send a mockable call to the test runner.
18
+ * Returns mock data, or CALL_THROUGH symbol for spy mode.
19
+ */
20
+ sendCall(className: string, methodName: string, callArgs: Record<string, any>): Promise<any>;
21
+
22
+ /**
23
+ * Report the result of a spy call back to the test runner.
24
+ */
25
+ sendSpyResult(className: string, methodName: string, callResult: any): Promise<void>;
26
+
27
+ /**
28
+ * Sentinel value indicating spy mode (call the real method).
29
+ */
30
+ readonly CALL_THROUGH: string;
31
+ }
32
+
33
+ // ============================================================================
34
+ // Context storage - set by testkit when running tests
35
+ // ============================================================================
36
+
37
+ const mockableContextStorage = new AsyncLocalStorage<MockableTestContext>();
38
+
39
+ /**
40
+ * Run code within a mockable test context.
41
+ * Called by testkit's GGTestRuntimeWorker to enable mock/spy behavior.
42
+ * @internal
43
+ */
44
+ export function runWithMockableContext<T>(ctx: MockableTestContext, fn: () => T): T {
45
+ return mockableContextStorage.run(ctx, fn);
46
+ }
47
+
48
+ // ============================================================================
49
+ // Helper functions
50
+ // ============================================================================
51
+
52
+ const MOCKABLE_WRAPPED = Symbol('GGMockableWrapped');
53
+
54
+ /**
55
+ * Extract parameter names from a function.
56
+ * Falls back to arg0, arg1, etc. if parsing fails.
57
+ */
58
+ function getParamNames(fn: Function): string[] {
59
+ const fnStr = fn.toString();
60
+ // Match function parameters: function(a, b, c) or (a, b, c) =>
61
+ const match = fnStr.match(/(?:function\s*\w*\s*\(|\()\s*([^)]*)\)/);
62
+ if (!match || !match[1]) return [];
63
+
64
+ return match[1]
65
+ .split(',')
66
+ .map(p => p.trim())
67
+ .filter(p => p.length > 0)
68
+ .map(p => {
69
+ // Handle destructuring, default values, type annotations
70
+ // Take just the parameter name before : or =
71
+ const name = p.split(/[=:]/)[0].trim();
72
+ // Remove ... for rest params
73
+ return name.replace(/^\.\.\./, '');
74
+ });
75
+ }
76
+
77
+ /**
78
+ * Convert positional arguments to a named object.
79
+ */
80
+ function argsToObject(args: any[], paramNames: string[]): Record<string, any> {
81
+ const result: Record<string, any> = {};
82
+ for (let i = 0; i < args.length; i++) {
83
+ result[paramNames[i] || `arg${i}`] = args[i];
84
+ }
85
+ return result;
86
+ }
87
+
88
+ /**
89
+ * Check if a function is async (returns a Promise).
90
+ * @deprected - having this is bad, we should not check it like this!
91
+ * @TODO Existance of this is bad!
92
+ */
93
+ function isAsyncFunction(fn: Function): boolean {
94
+ return fn.constructor.name === 'AsyncFunction' ||
95
+ fn.toString().includes('__awaiter') || // Compiled TypeScript async
96
+ fn.toString().trimStart().startsWith('async ');
97
+ }
98
+
99
+ /**
100
+ * Wrap a method to intercept calls in test mode.
101
+ * Only wraps async methods - sync methods are not mockable to preserve calling semantics.
102
+ */
103
+ function wrapMethod(cls: any, methodName: string): void {
104
+ // Skip if already wrapped
105
+ if (cls.prototype[methodName]?.[MOCKABLE_WRAPPED]) {
106
+ return;
107
+ }
108
+
109
+ const originalMethod = cls.prototype[methodName];
110
+
111
+ // Only wrap async methods - sync helper methods shouldn't be intercepted
112
+ // because making them async would break calling code that doesn't await them
113
+ // @TODO XXAsyncMethodIssue
114
+ // @TODO Having this is literally bad, we need to change how mock logic works.
115
+ // @TODO Right now mocks go back to test to see "whats up", but we should actually sync mocks info to the service before the call, so even for sync methods we can resolve the mock data.
116
+ // @TODO This has a drawback of losing "central brain" control though, as each mock is no instance bound.
117
+ // @TODO This whole idea needs thinking
118
+ if (!isAsyncFunction(originalMethod)) {
119
+ return;
120
+ }
121
+
122
+ const paramNames = getParamNames(originalMethod);
123
+
124
+ const wrappedMethod = async function (this: any, ...args: any[]) {
125
+ const ctx = mockableContextStorage.getStore();
126
+
127
+ // Not in test mode - call original method directly (zero overhead path)
128
+ if (!ctx) {
129
+ return originalMethod.apply(this, args);
130
+ }
131
+
132
+ // In test mode - go through mock/spy system
133
+ const callArgs = argsToObject(args, paramNames);
134
+ const result = await ctx.sendCall(cls.name, methodName, callArgs);
135
+
136
+ if (result === ctx.CALL_THROUGH) {
137
+ // Spy mode - call the real method
138
+ const realResult = await originalMethod.apply(this, args);
139
+
140
+ // Report result back for validation
141
+ await ctx.sendSpyResult(cls.name, methodName, realResult);
142
+
143
+ return realResult;
144
+ } else {
145
+ // Mock mode - return the mock data
146
+ return result;
147
+ }
148
+ };
149
+
150
+ // Mark as wrapped and assign to prototype
151
+ (wrappedMethod as any)[MOCKABLE_WRAPPED] = true;
152
+ cls.prototype[methodName] = wrappedMethod;
153
+ }
154
+
155
+ // ============================================================================
156
+ // The @mockable decorator
157
+ // ============================================================================
158
+
159
+ /**
160
+ * Decorator to mark a class as mockable in tests.
161
+ * All public async methods will be interceptable via mockBy() or spyOn().
162
+ *
163
+ * In production (when not running tests), this decorator has minimal overhead -
164
+ * methods are wrapped but the wrapper immediately calls through to the original.
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * import {mockable} from "@grest-ts/testkit/mockable";
169
+ *
170
+ * @mockable
171
+ * export class AddressResolverService {
172
+ * async resolveAddress(address: string): Promise<LatLng> { ... }
173
+ * }
174
+ *
175
+ * // In tests:
176
+ * .with(mockBy(AddressResolverService).resolveAddress
177
+ * .toEqual({address: "123 Main St"})
178
+ * .andReturn({lat: 40.7, lng: -74.0}))
179
+ * ```
180
+ */
181
+ export function mockable<T extends { new(...args: any[]): {} }>(target: T): T {
182
+ // Get all methods from prototype
183
+ for (const key of Object.getOwnPropertyNames(target.prototype)) {
184
+ if (key === 'constructor') continue;
185
+
186
+ const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);
187
+ if (descriptor && typeof descriptor.value === 'function') {
188
+ wrapMethod(target, key);
189
+ }
190
+ }
191
+
192
+ return target;
193
+ }
@@ -1,80 +1,80 @@
1
- /**
2
- * Minimal runtime for @testable decorator.
3
- * This file has NO dependencies on testkit internals and is safe for production bundles.
4
- *
5
- * The @testable decorator registers class instances in GGLocator, enabling
6
- * direct method invocation from tests via the testable() function.
7
- */
8
-
9
- import {GGLocator, GGLocatorKey} from "@grest-ts/locator";
10
-
11
- export const LOCATOR_KEY_PREFIX_FOR_TESTABLE = "@testable:";
12
-
13
- /**
14
- * Decorator to mark a class as testable - enabling direct method invocation from tests.
15
- *
16
- * When a @testable class is instantiated during runtime composition, the instance
17
- * is automatically registered in GGLocator. Tests can then invoke methods directly
18
- * on this instance via the testable() function.
19
- *
20
- * For single instances (the common case), just use the decorator:
21
- * ```typescript
22
- * @testable
23
- * export class MyService { ... }
24
- *
25
- * // In tests:
26
- * await testable(MyService).doSomething()
27
- * ```
28
- *
29
- * For multiple instances, register with custom keys:
30
- * ```typescript
31
- * const primaryKey = new GGLocatorKey<MyService>("MyService:primary");
32
- * const secondaryKey = new GGLocatorKey<MyService>("MyService:secondary");
33
- *
34
- * // In compose:
35
- * primaryKey.set(new MyService(...));
36
- * secondaryKey.set(new MyService(...));
37
- *
38
- * // In tests:
39
- * await testable(primaryKey).doSomething()
40
- * await testable(secondaryKey).doSomething()
41
- * ```
42
- */
43
- export function testable<T extends { new(...args: any[]): {} }>(target: T): T {
44
- const key = new GGLocatorKey<InstanceType<T>>(LOCATOR_KEY_PREFIX_FOR_TESTABLE + target.name);
45
-
46
- // Create a new class that extends the target and registers on construction
47
- const wrappedClass = class extends (target as any) {
48
- constructor(...args: any[]) {
49
- super(...args);
50
- const scope = GGLocator.tryGetScope();
51
- if (scope) {
52
- if (scope.has(key)) {
53
- // First registration wins - log warning and skip
54
- // Using console.warn as GGLog may not be available in all contexts
55
- console.warn(
56
- `[@testable] Instance already registered for '${key.name}'. ` +
57
- `First registration wins. If you need multiple instances, register them manually with custom keys.`
58
- );
59
- } else {
60
- scope.set(key, this as InstanceType<T>);
61
- }
62
- }
63
- }
64
- };
65
-
66
- // Preserve class name for debugging and key generation
67
- Object.defineProperty(wrappedClass, 'name', {value: target.name});
68
-
69
- // Copy static properties
70
- for (const prop of Object.getOwnPropertyNames(target)) {
71
- if (prop !== 'prototype' && prop !== 'name' && prop !== 'length') {
72
- const descriptor = Object.getOwnPropertyDescriptor(target, prop);
73
- if (descriptor) {
74
- Object.defineProperty(wrappedClass, prop, descriptor);
75
- }
76
- }
77
- }
78
-
79
- return wrappedClass as T;
80
- }
1
+ /**
2
+ * Minimal runtime for @testable decorator.
3
+ * This file has NO dependencies on testkit internals and is safe for production bundles.
4
+ *
5
+ * The @testable decorator registers class instances in GGLocator, enabling
6
+ * direct method invocation from tests via the testable() function.
7
+ */
8
+
9
+ import {GGLocator, GGLocatorKey} from "@grest-ts/locator";
10
+
11
+ export const LOCATOR_KEY_PREFIX_FOR_TESTABLE = "@testable:";
12
+
13
+ /**
14
+ * Decorator to mark a class as testable - enabling direct method invocation from tests.
15
+ *
16
+ * When a @testable class is instantiated during runtime composition, the instance
17
+ * is automatically registered in GGLocator. Tests can then invoke methods directly
18
+ * on this instance via the testable() function.
19
+ *
20
+ * For single instances (the common case), just use the decorator:
21
+ * ```typescript
22
+ * @testable
23
+ * export class MyService { ... }
24
+ *
25
+ * // In tests:
26
+ * await testable(MyService).doSomething()
27
+ * ```
28
+ *
29
+ * For multiple instances, register with custom keys:
30
+ * ```typescript
31
+ * const primaryKey = new GGLocatorKey<MyService>("MyService:primary");
32
+ * const secondaryKey = new GGLocatorKey<MyService>("MyService:secondary");
33
+ *
34
+ * // In compose:
35
+ * primaryKey.set(new MyService(...));
36
+ * secondaryKey.set(new MyService(...));
37
+ *
38
+ * // In tests:
39
+ * await testable(primaryKey).doSomething()
40
+ * await testable(secondaryKey).doSomething()
41
+ * ```
42
+ */
43
+ export function testable<T extends { new(...args: any[]): {} }>(target: T): T {
44
+ const key = new GGLocatorKey<InstanceType<T>>(LOCATOR_KEY_PREFIX_FOR_TESTABLE + target.name);
45
+
46
+ // Create a new class that extends the target and registers on construction
47
+ const wrappedClass = class extends (target as any) {
48
+ constructor(...args: any[]) {
49
+ super(...args);
50
+ const scope = GGLocator.tryGetScope();
51
+ if (scope) {
52
+ if (scope.has(key)) {
53
+ // First registration wins - log warning and skip
54
+ // Using console.warn as GGLog may not be available in all contexts
55
+ console.warn(
56
+ `[@testable] Instance already registered for '${key.name}'. ` +
57
+ `First registration wins. If you need multiple instances, register them manually with custom keys.`
58
+ );
59
+ } else {
60
+ scope.set(key, this as InstanceType<T>);
61
+ }
62
+ }
63
+ }
64
+ };
65
+
66
+ // Preserve class name for debugging and key generation
67
+ Object.defineProperty(wrappedClass, 'name', {value: target.name});
68
+
69
+ // Copy static properties
70
+ for (const prop of Object.getOwnPropertyNames(target)) {
71
+ if (prop !== 'prototype' && prop !== 'name' && prop !== 'length') {
72
+ const descriptor = Object.getOwnPropertyDescriptor(target, prop);
73
+ if (descriptor) {
74
+ Object.defineProperty(wrappedClass, prop, descriptor);
75
+ }
76
+ }
77
+ }
78
+
79
+ return wrappedClass as T;
80
+ }