@smitejs/jobs 2.0.0-SNAPSHOT
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/dist/.tsbuildinfo +1 -0
- package/dist/collector.d.ts +33 -0
- package/dist/collector.d.ts.map +1 -0
- package/dist/collector.js +29 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/job.d.ts +89 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +47 -0
- package/dist/schedule.d.ts +67 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/schedule.js +141 -0
- package/dist/scheduler.d.ts +53 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +79 -0
- package/package.json +34 -0
- package/src/collector.ts +44 -0
- package/src/docs.test.ts +65 -0
- package/src/index.test.ts +176 -0
- package/src/index.ts +36 -0
- package/src/job.ts +108 -0
- package/src/schedule.ts +196 -0
- package/src/scheduler.ts +127 -0
- package/tsconfig.json +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.es2022.full.d.ts","../../core/dist/descriptor.d.ts","../../core/dist/app.d.ts","../../core/dist/constants.d.ts","../../core/dist/scope.d.ts","../../core/dist/registry.d.ts","../../core/dist/index.d.ts","../../handlers/dist/index.d.ts","../src/schedule.ts","../src/collector.ts","../src/job.ts","../src/scheduler.ts","../src/index.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/ssh2/index.d.ts","../../../node_modules/@types/docker-modem/index.d.ts","../../../node_modules/@types/dockerode/index.d.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/unist/index.d.ts","../../../node_modules/@types/hast/index.d.ts","../../../node_modules/@types/linkify-it/build/index.cjs.d.ts","../../../node_modules/@types/linkify-it/index.d.ts","../../../node_modules/mdurl/lib/index.d.ts","../../../node_modules/@types/markdown-it/dist/index.cjs.d.ts","../../../node_modules/@types/markdown-it/index.d.ts","../../../node_modules/@types/mdast/index.d.ts","../../../node_modules/@types/mdurl/build/index.cjs.d.ts","../../../node_modules/@types/mdurl/index.d.ts","../../../node_modules/@types/ssh2-streams/index.d.ts"],"fileIdsList":[[81,131,145,148,149,151,163,181,182],[81,131,142,148,149,163,181,182,183],[81,131,148,149],[81,131,148,149,186],[81,131,148,149,188],[81,131,148,149,188,190],[81,131,148,149,191],[81,131,148,149,194],[81,128,129,131,148,149],[81,130,131,148,149],[131,148,149],[81,131,136,148,149,166],[81,131,132,137,142,148,149,151,163,174],[81,131,132,133,142,148,149,151],[76,77,78,81,131,148,149],[81,131,134,148,149,175],[81,131,135,136,143,148,149,152],[81,131,136,148,149,163,171],[81,131,137,139,142,148,149,151],[81,130,131,138,148,149],[81,131,139,140,148,149],[81,131,141,142,148,149],[81,130,131,142,148,149],[81,131,142,143,144,148,149,163,174],[81,131,142,143,144,148,149,158,163,166],[81,123,131,139,142,145,148,149,151,163,174],[81,131,142,143,145,146,148,149,151,163,171,174],[81,131,145,147,148,149,163,171,174],[79,80,81,82,83,84,85,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],[81,131,142,148,149],[81,131,148,149,150,174],[81,131,139,142,148,149,151,163],[81,131,148,149,152],[81,131,148,149,153],[81,130,131,148,149,154],[81,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],[81,131,148,149,156],[81,131,148,149,157],[81,131,142,148,149,158,159],[81,131,148,149,158,160,175,177],[81,131,143,148,149],[81,131,142,148,149,163,164,166],[81,131,148,149,165,166],[81,131,148,149,163,164],[81,131,148,149,166],[81,131,148,149,167],[81,128,131,148,149,163,168,174],[81,131,142,148,149,169,170],[81,131,148,149,169,170],[81,131,136,148,149,151,163,171],[81,131,148,149,172],[81,131,148,149,151,173],[81,131,145,148,149,157,174],[81,131,136,148,149,175],[81,131,148,149,163,176],[81,131,148,149,150,177],[81,131,148,149,178],[81,123,131,148,149],[81,123,131,142,144,148,149,154,163,166,174,176,177,179],[81,131,148,149,163,180],[81,131,148,149,163,181],[81,131,142,145,147,148,149,151,163,181],[81,95,99,131,148,149,174],[81,95,131,148,149,163,174],[81,90,131,148,149],[81,92,95,131,148,149,171,174],[81,131,148,149,151,171],[81,131,148,149,181],[81,90,131,148,149,181],[81,92,95,131,148,149,151,174],[81,87,88,91,94,131,142,148,149,163,174],[81,95,102,131,148,149],[81,87,93,131,148,149],[81,95,116,117,131,148,149],[81,91,95,131,148,149,166,174,181],[81,116,131,148,149,181],[81,89,90,131,148,149,181],[81,95,131,148,149],[81,89,90,91,92,93,94,95,96,97,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,131,148,149],[81,95,110,131,148,149],[81,95,102,103,131,148,149],[81,93,95,103,104,131,148,149],[81,94,131,148,149],[81,87,90,95,131,148,149],[81,95,99,103,104,131,148,149],[81,99,131,148,149],[81,93,95,98,131,148,149,174],[81,87,92,95,102,131,148,149],[81,131,148,149,163],[81,90,95,116,131,148,149,179,181],[64,81,131,148,149],[64,65,66,67,68,81,131,148,149],[69,70,71,81,131,148,149],[71,72,73,74,81,131,148,149],[69,70,71,72,81,131,148,149]],"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":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"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":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"ef07fb22b1b3ad89bc5c9ebd252ff68e81bca1507eb2852b396f10c07d43829c","impliedFormat":99},{"version":"05231a76ecb4853c3b515e27d873556403b9b13edbd4a4163762ef9485b3fd86","impliedFormat":99},{"version":"35eb03cfedd8efacead37f1b3d6eee65dd846cda1f3f0eb7890899beead8842c","impliedFormat":99},{"version":"ed90b73c3541b92f452f9b2fadc25f25fbbfdd1b772dc11a4b6cf780cc75975a","impliedFormat":99},{"version":"61f44bd2cf47909041497e551ebd8227b144224a4f0951000f91017ac72f2834","impliedFormat":99},{"version":"c4bc20ce6023d9f6a6532a99bcbd75b32763bc700ce96cc922d456b73dbcacb1","impliedFormat":99},{"version":"73035e5635b83a538e20e2f46d3f2498489d1c8487f2a30ab4b21a5a5ef6fb39","impliedFormat":99},{"version":"73ac1b34db21914c3398b3511d11df5932a5124704d6a7c639bf30b62548bacd","signature":"e8c77e6c6578f39d9cf385071dc738617751c1b673b8367b25a39f0d0c466c25","impliedFormat":99},{"version":"ca15a3efe3bdeb30d2dde2834cacfcc46e66587d2a717e733f103b72facb1f8b","signature":"e047ca64f0076d33699849494771db322836bb3c9334a5008b1e6693a0cd43b0","impliedFormat":99},{"version":"ef57b028c9ed789845e5185678c081b365ec9279976bcb8dbeea69bd0ff292c4","signature":"979aeff1a162a30efbead77a868715c326150c7f8b97545635c9aa16fcc987b1","impliedFormat":99},{"version":"41f4e4ff3c65ebe10bfaf2c1ffda353e33dddcabd40ebd321d8654fb4019c325","signature":"b3dcb5de48f60772fa00f259315c89cb5d1a07fea78f9c71c260d92fb13bbc79","impliedFormat":99},{"version":"7e0a50f2c7ec70da7fbef064fb29e40c34b60094eac47f5583bd54335cb6051e","signature":"d4150a1446540b9743120ec835f35137b976fd249598a852e79a403ef9c8cae6","impliedFormat":99},{"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":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","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":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"d61e0a64cd175208ac0b83670151a9a6b5916f0d1ffcdc5c29c90b1cebfc5045","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"4371055bb001f40596e2e236b27583e13bf11e75d937962f8947d56519237fb8","impliedFormat":1},{"version":"89189df027e8910200a4b65af1e29a996225cf25975f5c438fbe9361c008fc6b","impliedFormat":1},{"version":"4555baaea5dfc93e0c0ba3fc326b0ba3ad50bb2ab887fa2dff49c7da7bd3bcaa","impliedFormat":1},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"347a238c5800881e93ca9d17bece9f7eaf61b000dd1575b67264cb4ececc10b6","impliedFormat":1},{"version":"742f21debb3937c3839a63245648238555bdab1ea095d43fd10c88a64029bf76","impliedFormat":1},{"version":"7cfdf3b9a5ba934a058bfc9390c074104dc7223b7e3c16fd5335206d789bc3d3","impliedFormat":1},{"version":"74b19240ade8cf0b56f8c7c3fe2d1981811156deb4457c1b38737aa9b6bfca1b","impliedFormat":1},{"version":"8a7219b41d3c1c93f3f3b779146f313efade2404eeece88dcd366df7e2364977","impliedFormat":1},{"version":"a109c4289d59d9019cfe1eeab506fe57817ee549499b02a83a7e9d3bdf662d63","impliedFormat":1},{"version":"d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","impliedFormat":1},{"version":"0944f27ebff4b20646b71e7e3faaaae50a6debd40bc63e225de1320dd15c5795","impliedFormat":1},{"version":"5d30565583300c9256072a013ac0318cc603ff769b4c5cafc222394ea93963e1","impliedFormat":1},{"version":"2e23be37a190953f60cdc4a62f89e5dfe4d6c64f38c71564bc0fb63c7810c9a1","impliedFormat":1}],"root":[[71,75]],"options":{"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":199,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[183,1],[184,2],[185,3],[187,4],[188,3],[189,5],[191,6],[192,7],[193,4],[194,3],[195,8],[128,9],[129,9],[130,10],[81,11],[131,12],[132,13],[133,14],[76,3],[79,15],[77,3],[78,3],[134,16],[135,17],[136,18],[137,19],[138,20],[139,21],[140,21],[141,22],[142,23],[143,24],[144,25],[82,3],[80,3],[145,26],[146,27],[147,28],[181,29],[148,30],[149,3],[150,31],[151,32],[152,33],[153,34],[154,35],[155,36],[156,37],[157,38],[158,39],[159,39],[160,40],[161,3],[162,41],[163,42],[165,43],[164,44],[166,45],[167,46],[168,47],[169,48],[170,49],[171,50],[172,51],[173,52],[174,53],[175,54],[176,55],[177,56],[178,57],[83,3],[84,3],[85,3],[124,58],[125,3],[126,3],[127,45],[179,59],[180,60],[196,61],[182,62],[186,3],[86,3],[190,3],[61,3],[62,3],[12,3],[10,3],[11,3],[16,3],[15,3],[2,3],[17,3],[18,3],[19,3],[20,3],[21,3],[22,3],[23,3],[24,3],[3,3],[25,3],[26,3],[4,3],[27,3],[31,3],[28,3],[29,3],[30,3],[32,3],[33,3],[34,3],[5,3],[35,3],[36,3],[37,3],[38,3],[6,3],[42,3],[39,3],[40,3],[41,3],[43,3],[7,3],[44,3],[49,3],[50,3],[45,3],[46,3],[47,3],[48,3],[8,3],[54,3],[51,3],[52,3],[53,3],[55,3],[9,3],[56,3],[63,3],[57,3],[58,3],[60,3],[59,3],[1,3],[14,3],[13,3],[102,63],[112,64],[101,63],[122,65],[93,66],[92,67],[121,68],[115,69],[120,70],[95,71],[109,72],[94,73],[118,74],[90,75],[89,68],[119,76],[91,77],[96,78],[97,3],[100,78],[87,3],[123,79],[113,80],[104,81],[105,82],[107,83],[103,84],[106,85],[116,68],[98,86],[99,87],[108,88],[88,89],[111,80],[110,78],[114,3],[117,90],[65,91],[66,3],[64,3],[69,92],[68,91],[67,3],[70,3],[72,93],[75,94],[73,93],[71,3],[74,95]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.3"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AppDescriptor } from "@smitejs/core";
|
|
2
|
+
import type { EmptySignal } from "@smitejs/handlers";
|
|
3
|
+
import type { JobSchedule } from "./schedule.js";
|
|
4
|
+
/**
|
|
5
|
+
* A job as seen by artifact generators: its id, schedule, and the run function
|
|
6
|
+
* the scheduler invokes. `run` takes a zero-input signal.
|
|
7
|
+
*
|
|
8
|
+
* @group Collector
|
|
9
|
+
*/
|
|
10
|
+
export interface CollectedJob {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly schedule: JobSchedule;
|
|
13
|
+
readonly run: (signal: EmptySignal) => void | Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Walks an app's `jobs.job` children and returns the collected jobs with their
|
|
17
|
+
* schedules and run functions. Shared by artifact generators and the scheduler
|
|
18
|
+
* executor.
|
|
19
|
+
*
|
|
20
|
+
* @group Collector
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* job(app, "cleanup")
|
|
24
|
+
* .every(60_000)
|
|
25
|
+
* .run(() => undefined);
|
|
26
|
+
* job(app, "report")
|
|
27
|
+
* .cron("0 2 * * 1")
|
|
28
|
+
* .run(() => undefined);
|
|
29
|
+
* const collected = jobsOf(app);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function jobsOf(app: AppDescriptor): readonly CollectedJob[];
|
|
33
|
+
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../src/collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAQD;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,YAAY,EAAE,CAYlE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { childrenOf } from "@smitejs/core";
|
|
2
|
+
/**
|
|
3
|
+
* Walks an app's `jobs.job` children and returns the collected jobs with their
|
|
4
|
+
* schedules and run functions. Shared by artifact generators and the scheduler
|
|
5
|
+
* executor.
|
|
6
|
+
*
|
|
7
|
+
* @group Collector
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* job(app, "cleanup")
|
|
11
|
+
* .every(60_000)
|
|
12
|
+
* .run(() => undefined);
|
|
13
|
+
* job(app, "report")
|
|
14
|
+
* .cron("0 2 * * 1")
|
|
15
|
+
* .run(() => undefined);
|
|
16
|
+
* const collected = jobsOf(app);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function jobsOf(app) {
|
|
20
|
+
return childrenOf(app, "jobs.job").map((node) => {
|
|
21
|
+
const jobNode = node;
|
|
22
|
+
const handler = childrenOf(node, "jobs.handler")[0];
|
|
23
|
+
return {
|
|
24
|
+
id: jobNode.data.id,
|
|
25
|
+
schedule: jobNode.data.schedule,
|
|
26
|
+
run: handler?.data.fn ?? (() => undefined),
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { cron, interval, nextFire } from "./schedule.js";
|
|
2
|
+
export type { CompiledCron, FieldMatcher, JobSchedule } from "./schedule.js";
|
|
3
|
+
export { job, runJob } from "./job.js";
|
|
4
|
+
export type { JobBuilder, JobDescriptor, JobHandler, JobHandlerDescriptor, JobRun, } from "./job.js";
|
|
5
|
+
export { scheduler } from "./scheduler.js";
|
|
6
|
+
export type { JobScheduler, SchedulerOptions } from "./scheduler.js";
|
|
7
|
+
export { jobsOf } from "./collector.js";
|
|
8
|
+
export type { CollectedJob } from "./collector.js";
|
|
9
|
+
import { jobsOf } from "./collector.js";
|
|
10
|
+
import { job } from "./job.js";
|
|
11
|
+
import { scheduler } from "./scheduler.js";
|
|
12
|
+
/**
|
|
13
|
+
* The jobs namespace: one import for the whole scheduled-jobs app extensor.
|
|
14
|
+
*
|
|
15
|
+
* @group Surface
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const jobsBundle = jobs;
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare const jobs: {
|
|
22
|
+
cron: (expression: string) => import("./schedule.js").JobSchedule;
|
|
23
|
+
interval: (milliseconds: number) => import("./schedule.js").JobSchedule;
|
|
24
|
+
job: typeof job;
|
|
25
|
+
jobsOf: typeof jobsOf;
|
|
26
|
+
scheduler: typeof scheduler;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,MAAM,GACP,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;CAMhB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { cron, interval, nextFire } from "./schedule.js";
|
|
2
|
+
export { job, runJob } from "./job.js";
|
|
3
|
+
export { scheduler } from "./scheduler.js";
|
|
4
|
+
export { jobsOf } from "./collector.js";
|
|
5
|
+
import { jobsOf } from "./collector.js";
|
|
6
|
+
import { job } from "./job.js";
|
|
7
|
+
import { cron, interval } from "./schedule.js";
|
|
8
|
+
import { scheduler } from "./scheduler.js";
|
|
9
|
+
/**
|
|
10
|
+
* The jobs namespace: one import for the whole scheduled-jobs app extensor.
|
|
11
|
+
*
|
|
12
|
+
* @group Surface
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const jobsBundle = jobs;
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export const jobs = {
|
|
19
|
+
cron,
|
|
20
|
+
interval,
|
|
21
|
+
job,
|
|
22
|
+
jobsOf,
|
|
23
|
+
scheduler,
|
|
24
|
+
};
|
package/dist/job.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { AppDescriptor, Descriptor } from "@smitejs/core";
|
|
2
|
+
import type { EmptyHandler, EmptySignal } from "@smitejs/handlers";
|
|
3
|
+
import type { JobSchedule } from "./schedule.js";
|
|
4
|
+
/**
|
|
5
|
+
* The zero-input function a job runs each time it fires.
|
|
6
|
+
*
|
|
7
|
+
* @group Types
|
|
8
|
+
*/
|
|
9
|
+
export type JobHandler = EmptyHandler;
|
|
10
|
+
/**
|
|
11
|
+
* A `jobs.job` IR node: a named schedule and the handler edge that runs it.
|
|
12
|
+
*
|
|
13
|
+
* @group Internals
|
|
14
|
+
*/
|
|
15
|
+
export interface JobDescriptor extends Descriptor<"jobs.job", {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly schedule: JobSchedule;
|
|
18
|
+
}> {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A node wrapping the function a job runs.
|
|
22
|
+
*
|
|
23
|
+
* @group Internals
|
|
24
|
+
*/
|
|
25
|
+
export interface JobHandlerDescriptor extends Descriptor<"jobs.handler", {
|
|
26
|
+
readonly fn: JobHandler;
|
|
27
|
+
}> {
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The terminal step of a {@link JobBuilder}: binds the run function to the
|
|
31
|
+
* schedule chosen and registers the job node under the app.
|
|
32
|
+
*
|
|
33
|
+
* @group Builders
|
|
34
|
+
*/
|
|
35
|
+
export interface JobRun {
|
|
36
|
+
/** Attaches the run function, relates the IR nodes, and returns the job. */
|
|
37
|
+
readonly run: (fn: JobHandler) => JobDescriptor;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A job builder: choose a cron or interval schedule from one shared
|
|
41
|
+
* `job(app, id)` piece, then bind a run function. Always a builder; returns the
|
|
42
|
+
* `jobs.job` descriptor after `run()`.
|
|
43
|
+
*
|
|
44
|
+
* @group Builders
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* const app = createApp();
|
|
48
|
+
* const descriptor = job(app, "nightly")
|
|
49
|
+
* .cron("0 0 * * *")
|
|
50
|
+
* .run(() => undefined);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export interface JobBuilder {
|
|
54
|
+
/** Cron schedule from a 5-field POSIX expression. */
|
|
55
|
+
readonly cron: (expression: string) => JobRun;
|
|
56
|
+
/** Fixed-interval schedule in milliseconds. */
|
|
57
|
+
readonly every: (milliseconds: number) => JobRun;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Creates a job builder for an app. The common piece — `(app, id)` — yields two
|
|
61
|
+
* schedule builders (`cron()` / `every()`); pick one and `.run(fn)` attaches the
|
|
62
|
+
* `jobs.handler` child and relates the `jobs.job` node under the app.
|
|
63
|
+
*
|
|
64
|
+
* @group Builders
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const everyFive = cron("5 * * * *");
|
|
68
|
+
* ```
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* const app = createApp();
|
|
72
|
+
* const heartbeat = job(app, "heartbeat")
|
|
73
|
+
* .every(5_000)
|
|
74
|
+
* .run(() => undefined);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function job(app: AppDescriptor, id: string): JobBuilder;
|
|
78
|
+
/**
|
|
79
|
+
* Fires a job's run function with a zero-input signal at the given (or
|
|
80
|
+
* current) instant.
|
|
81
|
+
*
|
|
82
|
+
* @group Executor
|
|
83
|
+
*/
|
|
84
|
+
export declare const runJob: (descriptor: {
|
|
85
|
+
readonly data: {
|
|
86
|
+
readonly id: string;
|
|
87
|
+
};
|
|
88
|
+
}, fn: (signal: EmptySignal) => void | Promise<void>, at?: number | Date) => Promise<void>;
|
|
89
|
+
//# sourceMappingURL=job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC;AAEtC;;;;GAIG;AACH,MAAM,WAAW,aACf,SAAQ,UAAU,CAChB,UAAU,EACV;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CACxD;CAAG;AAEN;;;;GAIG;AACH,MAAM,WAAW,oBACf,SAAQ,UAAU,CAAC,cAAc,EAAE;IAAE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;CAAE,CAAC;CAAG;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,aAAa,CAAC;CACjD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CAClD;AAED;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CA2B9D;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GACjB,YAAY;IAAE,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACtD,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACjD,KAAI,MAAM,GAAG,IAAiB,KAC7B,OAAO,CAAC,IAAI,CAAsD,CAAC"}
|
package/dist/job.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { defineDescriptor, relate } from "@smitejs/core";
|
|
2
|
+
import { emptyHandler, fire } from "@smitejs/handlers";
|
|
3
|
+
import { cron, interval } from "./schedule.js";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a job builder for an app. The common piece — `(app, id)` — yields two
|
|
6
|
+
* schedule builders (`cron()` / `every()`); pick one and `.run(fn)` attaches the
|
|
7
|
+
* `jobs.handler` child and relates the `jobs.job` node under the app.
|
|
8
|
+
*
|
|
9
|
+
* @group Builders
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const everyFive = cron("5 * * * *");
|
|
13
|
+
* ```
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const app = createApp();
|
|
17
|
+
* const heartbeat = job(app, "heartbeat")
|
|
18
|
+
* .every(5_000)
|
|
19
|
+
* .run(() => undefined);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function job(app, id) {
|
|
23
|
+
const declare = (schedule) => ({
|
|
24
|
+
run: (fn) => {
|
|
25
|
+
const descriptor = defineDescriptor("jobs.job", `${app.__key}:job:${id}`, {
|
|
26
|
+
id,
|
|
27
|
+
schedule,
|
|
28
|
+
});
|
|
29
|
+
const handlerDescriptor = defineDescriptor("jobs.handler", `${descriptor.__key}:handler`, { fn: emptyHandler({ name: id }, fn) });
|
|
30
|
+
relate(descriptor, "jobs.handler", handlerDescriptor);
|
|
31
|
+
relate(app, "jobs.job", descriptor);
|
|
32
|
+
return descriptor;
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
const builder = {
|
|
36
|
+
cron: (expression) => declare(cron(expression)),
|
|
37
|
+
every: (milliseconds) => declare(interval(milliseconds)),
|
|
38
|
+
};
|
|
39
|
+
return builder;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fires a job's run function with a zero-input signal at the given (or
|
|
43
|
+
* current) instant.
|
|
44
|
+
*
|
|
45
|
+
* @group Executor
|
|
46
|
+
*/
|
|
47
|
+
export const runJob = (descriptor, fn, at = Date.now()) => Promise.resolve(fn(fire(descriptor.data.id, at)));
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A job run schedule: either a POSIX cron expression (minute hour day-of-month
|
|
3
|
+
* month day-of-week; `0` and `7` both mean Sunday) or a fixed interval in
|
|
4
|
+
* milliseconds.
|
|
5
|
+
*
|
|
6
|
+
* @group Types
|
|
7
|
+
*/
|
|
8
|
+
export type JobSchedule = {
|
|
9
|
+
readonly kind: "cron";
|
|
10
|
+
readonly expression: string;
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: "interval";
|
|
13
|
+
readonly milliseconds: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Builds a cron schedule from a 5-field POSIX expression. Every field accepts
|
|
17
|
+
* a bare value (`*`, `n`), a range (`a-b`), a range with a step (`a-b/n`), a
|
|
18
|
+
* wildcard with a step (for example `*` followed by `/n`), or a
|
|
19
|
+
* comma-separated list of any of those.
|
|
20
|
+
*
|
|
21
|
+
* @group Builders
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const everyFive = cron("5 * * * *");
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const cron: (expression: string) => JobSchedule;
|
|
28
|
+
/**
|
|
29
|
+
* Builds a fixed-interval schedule from a duration in milliseconds.
|
|
30
|
+
*
|
|
31
|
+
* @group Builders
|
|
32
|
+
*/
|
|
33
|
+
export declare const interval: (milliseconds: number) => JobSchedule;
|
|
34
|
+
/** Predicate deciding whether a single field value is allowed. */
|
|
35
|
+
export type FieldMatcher = (value: number) => boolean;
|
|
36
|
+
/** A compiled cron expression: five field matchers plus wildcard flags. */
|
|
37
|
+
export interface CompiledCron {
|
|
38
|
+
readonly minute: FieldMatcher;
|
|
39
|
+
readonly hour: FieldMatcher;
|
|
40
|
+
readonly dayOfMonth: FieldMatcher;
|
|
41
|
+
readonly month: FieldMatcher;
|
|
42
|
+
readonly dayOfWeek: FieldMatcher;
|
|
43
|
+
readonly dayOfMonthIsStar: boolean;
|
|
44
|
+
readonly dayOfWeekIsStar: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parses a 5-field POSIX cron expression into {@link CompiledCron}.
|
|
48
|
+
*
|
|
49
|
+
* @group Internals
|
|
50
|
+
*/
|
|
51
|
+
export declare function compileCron(expr: string): CompiledCron;
|
|
52
|
+
/**
|
|
53
|
+
* Computes the next moment `schedule` fires at or after `from`. Cron fires on
|
|
54
|
+
* the first matching minute boundary; interval schedules fire `milliseconds`
|
|
55
|
+
* after `from`. Returns `null` when no cron fire is within the look-ahead
|
|
56
|
+
* horizon (one year).
|
|
57
|
+
*
|
|
58
|
+
* @group Executor
|
|
59
|
+
* @example
|
|
60
|
+
* ```ts
|
|
61
|
+
* const workdayNine = cron("0 9-17 * * 1-5");
|
|
62
|
+
* const monday = new Date("2026-01-05T00:00:00Z"); // 2026-01-05 is a Monday
|
|
63
|
+
* const next = nextFire(workdayNine, monday);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function nextFire(schedule: JobSchedule, from: Date): Date | null;
|
|
67
|
+
//# sourceMappingURL=schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,GAAI,YAAY,MAAM,KAAG,WAGzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,cAAc,MAAM,KAAG,WAG9C,CAAC;AAIH,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtD,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAwCD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAkCtD;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAmCvE"}
|
package/dist/schedule.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
const MINUTE_MS = 60_000;
|
|
2
|
+
const CRON_FIELDS = 5;
|
|
3
|
+
const LOOK_AHEAD_MS = 366 * 24 * 60 * MINUTE_MS;
|
|
4
|
+
/**
|
|
5
|
+
* Builds a cron schedule from a 5-field POSIX expression. Every field accepts
|
|
6
|
+
* a bare value (`*`, `n`), a range (`a-b`), a range with a step (`a-b/n`), a
|
|
7
|
+
* wildcard with a step (for example `*` followed by `/n`), or a
|
|
8
|
+
* comma-separated list of any of those.
|
|
9
|
+
*
|
|
10
|
+
* @group Builders
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const everyFive = cron("5 * * * *");
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export const cron = (expression) => {
|
|
17
|
+
compileCron(expression);
|
|
18
|
+
return { kind: "cron", expression };
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Builds a fixed-interval schedule from a duration in milliseconds.
|
|
22
|
+
*
|
|
23
|
+
* @group Builders
|
|
24
|
+
*/
|
|
25
|
+
export const interval = (milliseconds) => ({
|
|
26
|
+
kind: "interval",
|
|
27
|
+
milliseconds,
|
|
28
|
+
});
|
|
29
|
+
const compileToken = (token, { min, max }) => {
|
|
30
|
+
const stepMatch = /^(.+?)\/(\d+)$/u.exec(token);
|
|
31
|
+
const step = stepMatch === null ? 1 : Number(stepMatch[2]);
|
|
32
|
+
const base = stepMatch === null ? token : (stepMatch[1] ?? "*");
|
|
33
|
+
let low;
|
|
34
|
+
let high;
|
|
35
|
+
if (base === "*") {
|
|
36
|
+
low = min;
|
|
37
|
+
high = max;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const range = /^(\d+)(?:-(\d+))?$/u.exec(base);
|
|
41
|
+
if (range === null) {
|
|
42
|
+
throw new Error(`Invalid cron token '${token}'.`);
|
|
43
|
+
}
|
|
44
|
+
low = Number(range[1]);
|
|
45
|
+
high = range[2] === undefined ? low : Number(range[2]);
|
|
46
|
+
if (low < min || high > max || low > high) {
|
|
47
|
+
throw new Error(`Cron token '${token}' is out of range [${min}–${max}].`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return (value) => value >= low && value <= high && (value - low) % step === 0;
|
|
51
|
+
};
|
|
52
|
+
const compileField = (field, range) => {
|
|
53
|
+
const tokens = field.split(",").map((token) => token.trim());
|
|
54
|
+
if (tokens.length === 0 || tokens.some((token) => token.length === 0)) {
|
|
55
|
+
throw new Error(`Empty cron field '${field}'.`);
|
|
56
|
+
}
|
|
57
|
+
const matchers = tokens.map((token) => compileToken(token, range));
|
|
58
|
+
return [
|
|
59
|
+
(value) => matchers.some((matcher) => matcher(value)),
|
|
60
|
+
tokens.every((token) => token === "*"),
|
|
61
|
+
];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Parses a 5-field POSIX cron expression into {@link CompiledCron}.
|
|
65
|
+
*
|
|
66
|
+
* @group Internals
|
|
67
|
+
*/
|
|
68
|
+
export function compileCron(expr) {
|
|
69
|
+
const fields = expr.trim().split(/\s+/u);
|
|
70
|
+
if (fields.length !== CRON_FIELDS) {
|
|
71
|
+
throw new Error(`Cron expression '${expr}' must have exactly ${CRON_FIELDS} fields.`);
|
|
72
|
+
}
|
|
73
|
+
const [min, hour, dayOfMonth, month, dayOfWeek] = fields;
|
|
74
|
+
if (min === undefined ||
|
|
75
|
+
hour === undefined ||
|
|
76
|
+
dayOfMonth === undefined ||
|
|
77
|
+
month === undefined ||
|
|
78
|
+
dayOfWeek === undefined) {
|
|
79
|
+
throw new Error(`Invalid cron expression '${expr}'.`);
|
|
80
|
+
}
|
|
81
|
+
const [minute] = compileField(min, { min: 0, max: 59 });
|
|
82
|
+
const [hourMatcher] = compileField(hour, { min: 0, max: 23 });
|
|
83
|
+
const [domMatcher, domStar] = compileField(dayOfMonth, { min: 1, max: 31 });
|
|
84
|
+
const [monthMatcher] = compileField(month, { min: 1, max: 12 });
|
|
85
|
+
const [dowMatcher, dowStar] = compileField(dayOfWeek, { min: 0, max: 7 });
|
|
86
|
+
return {
|
|
87
|
+
minute,
|
|
88
|
+
hour: hourMatcher,
|
|
89
|
+
dayOfMonth: domMatcher,
|
|
90
|
+
month: monthMatcher,
|
|
91
|
+
dayOfWeek: (value) => dowMatcher(value) || (value === 0 && dowMatcher(7)),
|
|
92
|
+
dayOfMonthIsStar: domStar,
|
|
93
|
+
dayOfWeekIsStar: dowStar,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const dayAllows = (dom, dow, domStar, dowStar, date, weekday) => {
|
|
97
|
+
if (!domStar && !dowStar) {
|
|
98
|
+
return dom(date) || dow(weekday);
|
|
99
|
+
}
|
|
100
|
+
if (dowStar) {
|
|
101
|
+
return dom(date);
|
|
102
|
+
}
|
|
103
|
+
return dow(weekday);
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Computes the next moment `schedule` fires at or after `from`. Cron fires on
|
|
107
|
+
* the first matching minute boundary; interval schedules fire `milliseconds`
|
|
108
|
+
* after `from`. Returns `null` when no cron fire is within the look-ahead
|
|
109
|
+
* horizon (one year).
|
|
110
|
+
*
|
|
111
|
+
* @group Executor
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* const workdayNine = cron("0 9-17 * * 1-5");
|
|
115
|
+
* const monday = new Date("2026-01-05T00:00:00Z"); // 2026-01-05 is a Monday
|
|
116
|
+
* const next = nextFire(workdayNine, monday);
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export function nextFire(schedule, from) {
|
|
120
|
+
if (schedule.kind === "interval") {
|
|
121
|
+
return new Date(from.getTime() + schedule.milliseconds);
|
|
122
|
+
}
|
|
123
|
+
const compiled = compileCron(schedule.expression);
|
|
124
|
+
const start = new Date(from);
|
|
125
|
+
start.setUTCSeconds(0, 0);
|
|
126
|
+
start.setUTCMinutes(start.getUTCMinutes() + 1);
|
|
127
|
+
const deadline = start.getTime() + LOOK_AHEAD_MS;
|
|
128
|
+
for (let cursor = start; cursor.getTime() <= deadline; cursor = new Date(cursor.getTime() + MINUTE_MS)) {
|
|
129
|
+
const minuteMatch = compiled.minute(cursor.getUTCMinutes());
|
|
130
|
+
const hourMatch = compiled.hour(cursor.getUTCHours());
|
|
131
|
+
const monthMatch = compiled.month(cursor.getUTCMonth() + 1);
|
|
132
|
+
if (!minuteMatch || !hourMatch || !monthMatch) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const dayMatch = dayAllows(compiled.dayOfMonth, compiled.dayOfWeek, compiled.dayOfMonthIsStar, compiled.dayOfWeekIsStar, cursor.getUTCDate(), cursor.getUTCDay());
|
|
136
|
+
if (dayMatch) {
|
|
137
|
+
return cursor;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { AppDescriptor } from "@smitejs/core";
|
|
2
|
+
import type { CollectedJob } from "./collector.js";
|
|
3
|
+
/**
|
|
4
|
+
* Options for {@link scheduler}.
|
|
5
|
+
*
|
|
6
|
+
* @group Executor
|
|
7
|
+
*/
|
|
8
|
+
export interface SchedulerOptions {
|
|
9
|
+
/** Invoked before each job runs, with the job id and fire time. */
|
|
10
|
+
readonly onRun?: (entry: {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly at: number;
|
|
13
|
+
}) => void;
|
|
14
|
+
/** Invoked when a job's run function throws or rejects. */
|
|
15
|
+
readonly onError?: (entry: {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly error: unknown;
|
|
18
|
+
}) => void;
|
|
19
|
+
/** Also arms the schedule clock when `start()` runs. */
|
|
20
|
+
readonly start?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A runtime handle returned by {@link scheduler}: the collected jobs, plus
|
|
24
|
+
* `start` (fire everything once) and `tick`/`stop` to drive the fire clock.
|
|
25
|
+
*
|
|
26
|
+
* @group Executor
|
|
27
|
+
*/
|
|
28
|
+
export interface JobScheduler {
|
|
29
|
+
readonly jobs: readonly CollectedJob[];
|
|
30
|
+
/** Runs every job once immediately; with `{ start: true }` arms the clock. */
|
|
31
|
+
readonly start: () => Promise<void>;
|
|
32
|
+
/** Arms each job's cron/interval timer and returns a one-shot `stop`. */
|
|
33
|
+
readonly tick: () => () => void;
|
|
34
|
+
/** Clears every armed timer. */
|
|
35
|
+
readonly stop: () => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Turns an app into a runtime job scheduler. Walks the app's `jobs.job` IR
|
|
39
|
+
* tree via child refs — never the global registry — so it keeps working in
|
|
40
|
+
* production bundles where collect mode is folded out. `start()` fires every
|
|
41
|
+
* job once; `tick()` arms the cron/interval timers and returns a `stop` for
|
|
42
|
+
* shutdown; `{ start: true }` arms automatically. `onRun`/`onError` observe
|
|
43
|
+
* each fire.
|
|
44
|
+
*
|
|
45
|
+
* @group Executor
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const handle = scheduler(app);
|
|
49
|
+
* const stop = handle.tick();
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function scheduler(app: AppDescriptor, options?: SchedulerOptions): JobScheduler;
|
|
53
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACrB,KAAK,IAAI,CAAC;IACX,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;KACzB,KAAK,IAAI,CAAC;IACX,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,IAAI,CAAC;IAChC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAC3B;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,gBAAqB,GAC7B,YAAY,CA6Dd"}
|